Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Agent details

Disclaimer: These documents reflect our current understanding of each agent’s hook system and extensibility surface. They are maintained as working references for symposium development, not as a substitute for each project’s official documentation. Details may be outdated or incomplete — always consult the primary sources linked in each agent’s page.

For each agent it supports, symposium needs to know:

  1. Hook registration — where and how to write config so the agent calls cargo-agents hook
  2. Hook I/O protocol — event names, input/output field names, exit code semantics
  3. Extension installation — where skill files go (project and global)
  4. Custom instructions — where the agent reads project-level instructions

The tables below summarize the answers for each agent. Individual agent pages contain the full reference. A ? indicates information we have not yet documented.

Hook registration

AgentProject config pathGlobal config pathFormat
Claude Code.claude/settings.json~/.claude/settings.jsonJSON, hooks key with matcher groups
GitHub Copilot.github/hooks/*.json~/.copilot/config.jsonJSON, version: 1 with hooks key
Gemini CLI.gemini/settings.json~/.gemini/settings.jsonJSON, hooks key with matcher groups
Codex CLI.codex/hooks.json~/.codex/hooks.jsonJSON, hooks key with matcher groups
Kiro.kiro/agents/*.json~/.kiro/agents/*.jsonJSON, hooks key in agent config
OpenCode.opencode/plugins/~/.config/opencode/plugins/JS/TS plugins (not shell hooks)
Goose(no hooks)(no hooks)N/A

Command field

AgentCommand fieldPlatform-specific?
Claude CodecommandNo
GitHub Copilotbash / powershellYes
Gemini CLIcommandNo
Codex CLIcommandNo
KirocommandNo
OpenCodeN/A (JS function)N/A
GooseN/AN/A

Timeout defaults

AgentDefault timeoutUnit
Claude Code600seconds
GitHub Copilot30seconds (timeoutSec)
Gemini CLI60,000milliseconds (timeout)
Codex CLI600seconds (timeout or timeoutSec)
Kiro30,000milliseconds (timeout_ms)
OpenCode60,000milliseconds (community hooks plugin)
GooseN/AN/A

Event names

Symposium registers hooks for four events. Each agent uses different names and casing conventions.

Symposium eventClaude CodeCopilotGemini CLICodex CLIKiro CLIOpenCodeGoose
pre-tool-usePreToolUsepreToolUseBeforeToolPreToolUsepreToolUsetool.execute.beforeN/A
post-tool-usePostToolUsepostToolUseAfterToolPostToolUsepostToolUsetool.execute.afterN/A
user-prompt-submitUserPromptSubmituserPromptSubmittedBeforeAgentUserPromptSubmituserPromptSubmitmessage.updated (filter by role)N/A
session-startSessionStartsessionStartSessionStartSessionStartagentSpawnsession.createdN/A

Blocking support

Not all events can block the action in all agents.

AgentPre-tool-use can block?Post-tool-use can block?User-prompt can block?Session-start can block?
Claude CodeYesNoYes (exit 2)No
GitHub CopilotYesNoNoNo
Gemini CLIYesYes (block result)Yes (deny discards message)No
Codex CLIYesYes (continue: false)Yes (continue: false)Yes (continue: false)
KiroYes (exit 2)NoNoNo
OpenCodeYes (throw Error)NoNo (observe only)No (observe only)
GooseN/AN/AN/AN/A

Hook I/O protocol

Input fields (pre-tool-use)

AgentTool name fieldTool args fieldSession/context fields
Claude Codetool_nametool_input (object)session_id, cwd, hook_event_name
GitHub CopilottoolNametoolArgs (JSON string)timestamp, cwd
Gemini CLItool_nametool_input (object)session_id, cwd, hook_event_name, timestamp
Codex CLItool_nametool_input (object)session_id, cwd, hook_event_name, model
Kirotool_nametool_input (object)hook_event_name, cwd
OpenCodetoolargs (mutable output object)sessionID, callID
GooseN/AN/AN/A

Output structure (pre-tool-use)

AgentPermission decision fieldDecision valuesModified input fieldNesting
Claude CodepermissionDecisionallow, deny, ask, deferupdatedInputnested in hookSpecificOutput
GitHub CopilotpermissionDecisionallow, deny, askmodifiedArgsflat
Gemini CLIdecisionallow, denytool_inputnested in hookSpecificOutput
Codex CLIdecision or permissionDecisionblock/deny(not yet implemented)flat or nested hookSpecificOutput
Kiro(exit code only)exit 0 = allow, exit 2 = block(not supported)N/A
OpenCode(throw to block)allow (return) / deny (throw)mutate output.argsJS mutation
GooseN/AN/AN/AN/A

Exit codes

All shell-based agents use the same convention (where applicable):

CodeMeaning
0Success; stdout parsed as JSON
2Block/deny; stderr used as reason
OtherNon-blocking warning, action proceeds

Exceptions: Copilot uses exit 0 = allow, non-zero = deny (no special meaning for exit 2). OpenCode uses JS exceptions, not exit codes.

Extension installation

Skill file paths

AgentProject skills pathGlobal skills path
Claude Code.claude/skills/<name>/SKILL.md~/.claude/skills/<name>/SKILL.md
GitHub Copilot.agents/skills/<name>/SKILL.md(none)
Gemini CLI.agents/skills/<name>/SKILL.md~/.gemini/skills/<name>/SKILL.md
Codex CLI.agents/skills/<name>/SKILL.md~/.agents/skills/<name>/SKILL.md
Kiro.kiro/skills/<name>/SKILL.md~/.kiro/skills/<name>/SKILL.md
OpenCode.agents/skills/<name>/SKILL.md~/.agents/skills/<name>/SKILL.md
Goose(N/A — uses MCP extensions)(N/A)

Symposium uses the vendor-neutral .agents/skills/ path whenever the agent supports it, falling back to agent-specific paths (e.g., .claude/skills/, .kiro/skills/) when required. Codex CLI and OpenCode also support .agents/skills/ natively.

Custom instructions

AgentProject instructionsGlobal instructions
Claude CodeCLAUDE.md, .claude/CLAUDE.md~/.claude/CLAUDE.md
GitHub Copilot.github/copilot-instructions.md, AGENTS.md~/.copilot/copilot-instructions.md
Gemini CLIGEMINI.md (walks up to .git)~/.gemini/GEMINI.md
Codex CLIAGENTS.md (each dir level)~/.codex/AGENTS.md
Kiro.kiro/steering/*.md, AGENTS.md~/.kiro/steering/*.md
OpenCodeAGENTS.md, CLAUDE.md~/.config/opencode/AGENTS.md
Goose.goosehints, AGENTS.md~/.config/goose/.goosehints

MCP server configuration

Relevant if symposium exposes functionality via MCP.

AgentMCP config locationFormat
Claude Code.claude/settings.json (mcpServers key)JSON
GitHub Copilot.vscode/mcp.json (VS Code), ~/.copilot/mcp-config.json (CLI)JSON
Gemini CLI.gemini/settings.json (mcpServers key)JSON
Codex CLI.codex/config.toml / ~/.codex/config.toml (mcp_servers key)TOML
Kiro.kiro/settings/mcp.json, ~/.kiro/settings/mcp.jsonJSON
OpenCodeopencode.json (mcp key)JSON
Goose~/.config/goose/config.yaml (extensions key)YAML