gitgui agent skill

SkillWeb & browsing

Visual Git app inside your terminal: commit graph, diffs, stage by file or hunk, commit, branches, stash, push and pull, all with the mouse. Works in Ghostty, cmux, kitty and WezTerm, next to any CLI coding agent. One small Rust binary, no browser engine, works over SSH.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the gitgui agent skill skill

What this skill tells your AI

The instructions your AI receives, as published by antonellof/gitgui in skill/SKILL.md and read by ahel’s review.

gitgui is a pixel-rendered git GUI that runs inside kitty-graphics terminals (Ghostty, cmux, kitty). Use this skill when a gitgui instance is open in a neighboring terminal pane and you need to inspect or drive the repository through the GUI instead of raw git commands.

Discover instances

gitgui ls

Lists running instances with pid, repo path, tty, and socket path.

Send commands

gitgui action '{"cmd":"status"}'
gitgui action --pid 12345 '{"cmd":"select","oid":"abc123"}'

One JSON object per line. Responses are JSON:

{"ok":true,"data":{...}}
{"ok":false,"error":"message"}

When run from the terminal pane that owns a gitgui instance, action connects automatically via the controlling tty. Otherwise pass --pid.

Commands

CommandJSONNotes
Status{"cmd":"status"}Branch, head oid, dirty counts, selection, busy, last_op
Select commit{"cmd":"select","oid":"abc123"}Prefix match on short or full oid; use "working-tree" for the index
Stage{"cmd":"stage","paths":["a.rs"]}Queues a stage on the worker thread
Unstage{"cmd":"unstage","paths":["a.rs"]}Queues an unstage
Commit{"cmd":"commit","message":"..."}Staged files only
Commit and push{"cmd":"commit_and_push","message":"...","amend":false}Commit then git push
Fetch{"cmd":"fetch"}Opens network log
Pull{"cmd":"pull"}Opens network log
Push{"cmd":"push"}Opens network log
Result{"cmd":"result","id":"req-7"}Outcome of a write sent with that id
Screenshot{"cmd":"screenshot","path":"/tmp/frame.png"}Saves the current frame as PNG
List{"cmd":"list"}Same as gitgui ls

Write operations return {"queued":"..."} immediately; poll status until busy is zero, then read last_op ({"label","ok","message"}) and head.

Retries: every write accepts an optional id (any string you pick). If the response is lost or you time out, send the same command with the same id: gitgui does not queue it again, it answers with what happened to the first one, {"id":..,"state":"queued"|"done","ok":..,"result":..,"duplicate":true}. {"cmd":"result","id":..} reads the same record. Without an id a retry is a new write; a second commit with nothing staged fails with "nothing to commit" rather than creating an empty commit.

gitgui action '{"cmd":"commit_and_push","message":"fix layout","id":"cp-1"}'
gitgui action '{"cmd":"result","id":"cp-1"}'

Open in a split

gitgui --split right .
gitgui --split down /path/to/repo

In cmux this uses cmux new-split and cmux send. In kitty it uses kitty @ launch. Ghostty prints a keybinding hint when no CLI split is available.

Headless frame (no running instance)

gitgui --headless-frame /tmp/frame.png --repo .

Renders one PNG without a terminal. Useful for CI and visual regression.

Signals

GitHub stars
27
Forks
2
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
skill-antonellof
Source
github.com/antonellof/gitgui