Back
Personal Project

Git Ciel

An interactive Git CLI with AI-generated commit messages and PR descriptions, all from one clean stepper UI — invoked as git ciel.

BunJavaScriptGemini APIGitHub CLI
Git Ciel cover

Overview

Git Ciel is an interactive Git workflow CLI I built for myself and now reach for every single day. It wraps the whole routine — stage, commit, push, cherry-pick to staging, and open a pull request — into one clean stepper, and it writes the commit message and PR description for me with AI. I run it as git ciel from inside any repository.

Why I Built It

The mechanical parts of Git aren't hard, they're just repetitive — and the small frictions add up. Writing a tidy Conventional Commit, remembering to prefix the ticket number, cherry-picking onto staging, then opening a PR with a half-decent description: each one is a tiny tax I paid dozens of times a day.

So I built the tool I wanted to use. One command, a guided flow, and the boring decisions made for me — without hiding what's actually happening underneath.

How It Works

Everything runs through a single stepper. Each step states exactly what it did — staged files, the generated message, a short commit hash, the push target — with none of the raw git/gh stderr noise. If a branch is named like POR-934-test, it detects the ticket and prefixes commits and PRs with POR-934 | … automatically.

The commit message itself is generated from the staged diff through the Gemini API, tagged with the right Conventional-Commit type.

Git Ciel turns the staged diff into a tagged Conventional Commit message
Git Ciel turns the staged diff into a tagged Conventional Commit message

Three Modes

The same flow adapts to how much I want it to ask. Most of the day I live in auto; when a PR needs a careful target branch I drop to semi-auto; and manual is there for the rare commit I want to shepherd by hand.

Auto, semi-auto, and manual — the same flow with different amounts of prompting
Auto, semi-auto, and manual — the same flow with different amounts of prompting

Key Features

  • AI commit messages — generated from the staged diff, using Conventional-Commit tags (feat, fix, chore, …).
  • AI PR titles & descriptions — complexity-aware, created or updated through the GitHub CLI.
  • Ticket prefix detection — a branch like POR-934-test auto-prefixes commits and PRs.
  • Cherry-pick to staging — with interactive conflict resolution: resume, stop, or abort.
  • Compare link — prints a compare/main...<branch> URL after every commit.
  • Clean output — staged-file listing, one short hash, and no raw git noise.

The Stack

Git Ciel is deliberately small — a single executable file with just two runtime dependencies: @clack/prompts for the stepper UI and picocolors for output. It runs on Bun, which auto-loads the .env, and leans on the GitHub CLI for anything PR-related.

A couple of details I cared about: lock files and node_modules are stripped from the diff before it's sent to the AI, and every commit and PR is run via argv rather than a shell — so messages with quotes, backticks, or $() pass through safely.

Daily Driver

This isn't a demo project. It's the tool I actually use to ship my own work, and it's shaped by every rough edge I hit while using it. That feedback loop — build it, drive it, fix the thing that annoyed me today — is exactly why it stays simple.

More projects