cross the
finish line.

Merge-ready verdicts for the AI agents that open your PRs.

Your agents do the work. gh-ghent gives them one high-fidelity signal for when a PR is actually done, so they finish the last mile instead of stopping at creation.

$ gh extension install indrasvat/gh-ghent
Paste this instructions block into your AI agent's system prompt to equip it to drive PRs to green.
$ gh ghent status --pr 1 --await-review await-review
lint
test
build
threads
review
merge
is_merge_ready: false exit 1
stage 0 / 5

the verdict, performed. each stage clears, the runner crosses the tape, the exit code flips. real gh ghent status fields.

dogfooded daily by Claude and Codex, in real autonomous PR loops.
any agent with a shell can read the verdict.

“opened a PR”
is not finished.

Coding agents are brilliant at the takeoff and prone to quitting on the last mile. They push, open the PR, and call it done. The review lands in an empty room. DNF: did not finish.

DNF
Agent without a verdict
Opens the PR, declares victory, moves on. Two threads unanswered, one check red, and no human in the loop to notice it never shipped.
DONE
Agent reading ghent
Keeps polling the verdict and acting on the single next blocker. It stops only when the status reads ready. The work it already knew how to do, actually finished.

deterministic loop. zero guesswork.

One command, run until the verdict flips. ghent always names the single next blocker, so the agent knows exactly what finishing requires.

$ gh ghent status --pr 1 --await-review --solo --logs --format json --no-tui
01 · status

read the verdict

One call: checks, threads, reviews, mergeability.

02 · triage

find the blocker

A red check, an open thread. Exit 1 says keep going.

03 · act

fix & reply

The agent pushes the fix and answers the reviewer.

04 · resolve

re-poll

Resolve the thread, run the same command again.

05 · exit 0

cross

is_merge_ready. The verdict flips. Ship it.

unified verdict. any output.

--await-review replaces the agent's gut with a reading: every check, every thread, every reviewer, plus bounded tail probes so a late comment never lands after a premature merge.

phase

won't call it early

polling, confirming, settled. It holds through the review tail before declaring ready.

confidence

how sure the call is

high, medium, low. The agent branches on certainty, not a coin flip.

exit code

one signal to trust

is_merge_ready maps straight to the exit code. No screen-scraping.

// gh ghent status --pr 1 --format json
{
  "is_merge_ready": true,
  "checks": { "overall_status": "pass", "pass_count": 10 },
  "comments": { "unresolved_count": 0 },
  "review_monitor": { "phase": "settled", "confidence": "high" }
}
// exit 0

same verdict, the format the consumer wants.

built for humans. wired for agents.

A real Bubble Tea TUI for humans in the terminal, schema-stable JSON for agents without eyes. Every frame is ghent rendering real PRs.

engineered for scripting.

exit codes

branch on exit codes, not regex

The loop reads one number. No agent ever parses a dashboard.

0 ready1 not yet2 error3 pending
schema-stable

versioned envelope

Field names don't drift. Harnesses pin to it.

bounded

tail probes

Holds for late reviews, then settles. Never hangs.

any repo

-R owner/repo, anywhere

Inherits your gh auth. Watch your PRs or a dependency's. Zero config.

from the session logs.

Not testimonials. Real lines from autonomous Codex and Claude sessions that ran the loop to a merge.

~/.codex/sessions · visarga#4await-review loop
02:01:18Z visarga#4 status: phase=confirming confidence=medium
           → 1 unresolved (vite.config.js, @chatgpt-codex-connector [P2])
"keeping the loop running a bit longer so we don't merge immediately
 and then get a late bot comment."  — codex
02:03:54Z visarga#4 reply --resolve PRRT_kwDO…  ok
02:08:14Z visarga#4 status: phase=settled confidence=high
           is_merge_ready=true  exit 0
"the PR is settled: no unresolved threads, all checks passing.
 squash-merging now."  — codex

install the verdict.

One command and your agents stop dropping the ball at PR creation. The gh extension keeps itself updated.

gh extension

recommended · updates with gh
$ gh extension install indrasvat/gh-ghent
agent skill
$ npx skills add indrasvat/gh-ghent --global --yes
installer script
$ curl -sSfL https://gh-ghent.pages.dev/install.sh | bash
from source
$ git clone https://github.com/indrasvat/gh-ghent && cd gh-ghent && make install
gh-ghent · cross the finish line $ install