--steer on a Gemini CLI session is derived from the source (google-gemini/gemini-cli: docs/hooks/reference.md, packages/core/src/core/client.ts, hooks/types.ts) and validated against a fixture. Nobody has run it against a real Gemini CLI yet, and the README says so. This issue is that run — no code unless something disagrees.
What agit claims (src/steer.ts header, README "--steer")
AfterAgent: a blocking decision whose reason is sent to the agent as the next prompt, history kept — the "agent just finished" case.
BeforeAgent: hookSpecificOutput.additionalContext appended to the prompt for that turn — the idle case.
- The hook's
session_id is the recording's own session id, which is what the adapter reports and what the steer inbox is keyed by.
Steps
npm install -g agitsh; in one terminal agit relay.
- In a project,
agit hook --config gemini-cli and add the fragment to Gemini CLI's settings (agit must be on PATH).
- Start a Gemini CLI session; find its recording under
~/.gemini/tmp/<project>/chats/session-*.jsonl.
agit share <that file> --steer — copy the link and the steer key.
- From another terminal,
agit steer <link> "<message>" --steer-key <key> (or type it on the share page with the key), once while the agent is idle and once while it is mid-turn.
Report
- Gemini CLI version.
- Idle case: did the message ride along with your next prompt? Finished case: did the agent continue with the message as its next prompt, with history kept?
- What the agent said it did (it is asked to say), and whether the delivered text matched what
agit hook prints for the same event.
- Anything surprising: an escaped character, a message delivered twice, a hook timeout.
If reality disagrees, the fix goes in src/steer.ts (and the README paragraph), with a test in test/steer.test.ts. Sanitize anything you paste — a recording holds whatever the agent saw — and never attach a raw one.
--steeron a Gemini CLI session is derived from the source (google-gemini/gemini-cli:docs/hooks/reference.md,packages/core/src/core/client.ts,hooks/types.ts) and validated against a fixture. Nobody has run it against a real Gemini CLI yet, and the README says so. This issue is that run — no code unless something disagrees.What agit claims (src/steer.ts header, README "--steer")
AfterAgent: a blockingdecisionwhosereasonis sent to the agent as the next prompt, history kept — the "agent just finished" case.BeforeAgent:hookSpecificOutput.additionalContextappended to the prompt for that turn — the idle case.session_idis the recording's own session id, which is what the adapter reports and what the steer inbox is keyed by.Steps
npm install -g agitsh; in one terminalagit relay.agit hook --config gemini-cliand add the fragment to Gemini CLI's settings (agit must be on PATH).~/.gemini/tmp/<project>/chats/session-*.jsonl.agit share <that file> --steer— copy the link and the steer key.agit steer <link> "<message>" --steer-key <key>(or type it on the share page with the key), once while the agent is idle and once while it is mid-turn.Report
agit hookprints for the same event.If reality disagrees, the fix goes in
src/steer.ts(and the README paragraph), with a test intest/steer.test.ts. Sanitize anything you paste — a recording holds whatever the agent saw — and never attach a raw one.