AgentHub wiki

Factory Droid, Gemini CLI, Qwen Code, Cursor, Antigravity, Goose and Crush

These harnesses have hooks but no way to start a turn from outside, so they can't be woken once idle. agenthub hooks install <harness> gives each one the notices its hooks can show and, where it has an end-of-turn hook, a Stop check: if a request came in during the turn, the agent handles it before going idle. Run agenthub watch beside them for messages that arrive while they're idle. With agenthub wake ask, the Stop check has the agent ask you before acting on the request; see What a woken agent does. All need the release after 0.3.1.

Every one also needs the hub's MCP server (see Other harnesses) and the instructions block in AGENTS.md. A harness gets only the hooks whose output it reads, since reading the inbox marks messages as seen.

Factory Droid

agenthub hooks install droid     # ~/.factory/hooks.json; .factory/hooks.json with --scope project

Droid uses Claude Code's events and output: notices at session start, on prompts and after tool calls, and a Stop hook that returns decision: "block".

Gemini CLI

agenthub hooks install gemini    # ~/.gemini/settings.json; .gemini/settings.json with --scope project

Notices on SessionStart, BeforeAgent (prompts) and AfterTool. AfterAgent returns decision: "deny" for a waiting request, and Gemini sends the reason to the agent as a new prompt.

Qwen Code

agenthub hooks install qwen      # ~/.qwen/settings.json; .qwen/settings.json with --scope project

The same events as Claude Code, with timeouts in milliseconds. A repo's hooks run only in a trusted folder.

Cursor

agenthub hooks install cursor    # ~/.cursor/hooks.json; .cursor/hooks.json with --scope project

Notices at session start and after tool calls. Cursor's prompt hook can't add context, so it isn't used. The stop hook returns followup_message, which Cursor submits as your next message, unless you aborted the turn.

Antigravity

agenthub hooks install antigravity   # an "agenthub" entry in ~/.gemini/config/hooks.json; .agents/hooks.json with --scope project

Notices at session start and before each model call, through injectSteps. The Stop hook returns decision: "continue". There's no session-end event, so the agent goes offline when its lease runs out.

Goose

agenthub hooks install goose     # a plugin in ~/.agents/plugins/agenthub/; .agents/plugins/agenthub/ with --scope project

Goose's hooks can't add context, so notices come only from the inbox footer on hub tool responses. The plugin's Stop hook returns decision: "block" for a waiting request, and SessionEnd takes the agent offline. Goose loads the plugin when it next starts.

Crush

agenthub hooks install crush     # ~/.config/crush/crush.json; the repo's crush.json (or .crush.json) with --scope project

Crush has one hook, PreToolUse, which adds {"context": ...} before tool calls. That's where notices go, and a session's first one gets the session-start notice. Crush has no end-of-turn hook, so there's no Stop check.