With Gemini CLI, Google's command-line coding agent, Paqad records evidence when the AI finishes each turn, but it cannot stop an edit and it shows no verdict in the chat. Onboarding writes GEMINI.md for the instructions and one hook in .gemini/settings.json. A hook is a moment when the tool runs an outside program; this one runs when the AI finishes its turn.
What Paqad can enforce in Gemini CLI
Gemini CLI is at the records at the end level. At the end of each turn, Paqad's hook:
- reads the stage lines the AI wrote in its reply (lines of the form
paqad:stage planning start) and records those stages in Paqad's evidence files, marked as coming fromgemini-cli; - runs the same verification script used on Claude Code and Codex CLI, and writes the result to the ledger, Paqad's evidence files under
.paqad/ledger/.
What it does not do:
- It does not stop any edit. Gemini CLI gets no Paqad hook before edits, so the AI can change files without having loaded the framework or recorded a plan.
- It does not show a verdict or ask the AI to keep working. The hook always finishes successfully and prints nothing. The result is only in the ledger.
Paqad keeps this hook silent on purpose. Gemini CLI reads a hook's output as instructions: it expects pure JSON and treats a refusal as a reason to retry. A verdict printed there would either halt the AI or need fragile special handling, so Paqad writes it to the ledger instead.
Because nothing speaks for it, the AI in Gemini CLI is instructed to announce its own stage lines and to state the end-of-change verdict in its reply. That part is the AI following instructions, and nothing checks that it does.
Files onboarding writes
| File | What it is |
|---|---|
GEMINI.md | The entry file. It tells the AI to open .paqad/framework-path.txt and follow the installed framework, or to act as a normal assistant if Paqad is missing or off. An existing file keeps its text; Paqad's lines go in a marked block. |
.gemini/settings.json | Gemini CLI's settings file, with one Paqad hook on the AfterAgent event. Other settings and hooks are kept. |
.gemini/.gitignore | Tells git to ignore settings.json and settings.hooks.json, because the hook command contains a path specific to your computer. |
.gemini/settings.hooks.json | A bookkeeping list of the hook files Paqad selected. Gemini CLI does not run it. |
.gemini/mcp.json | The MCP servers Paqad suggests for your stack. It has no start commands, so it does not connect Gemini CLI to anything by itself. |
.gemini/cache.json, .gemini/memory.json | Paqad bookkeeping. Not Gemini CLI settings. |
The hook Paqad adds
| Gemini CLI event | Paqad script | Can it stop work? |
|---|---|---|
AfterAgent (the AI has finished its turn) | verification-record.mjs gemini-cli | No. It records only. |
Paqad adds no session-start hook here, so the automatic update check that runs on Claude Code and Codex CLI does not run from Gemini CLI.
Setting it up
- Run
paqad-ai onboard --providers gemini-cli, or tick Gemini when onboarding asks. - Start a new Gemini CLI session in the project.
- Ask each teammate to run
paqad-ai joinon their own machine, since.gemini/settings.jsonis ignored by git. - After some work, look in
.paqad/ledger/to confirm that records are being written.
Limits to know
- Nothing is blocked. Treat the ledger as a record of what happened, not a guarantee that the process was followed.
- A stage the AI neither announces nor records with
paqad-ai stageis missing from the ledger, and the verification result shows it as missing. - Gemini CLI has no Paqad stage helpers, so every stage runs in the same AI session.
- Paqad can be switched off with
paqad-ai disableorPAQAD_DISABLED=1. A finished turn is then logged as a disabled session.
If you need edits to be refused when the process is skipped, use Claude Code or Codex CLI.