The ultimate developer's index for AI coding agents. A community-driven reference for configuring, extending, and intercepting every major agentic development tool. Easily compare lifecycle hooks (e.g., PreToolUse and PostToolUse), built-in capabilities, Model Context Protocol (MCP) servers, system instruction file paths, and customized skills across 17+ different developer agents.
| Universal Hooks Index | Standardized naming, exit-code blocking rules, and in-depth event execution behaviors for intercepting actions. |
| Comprehensive Matrix | Side-by-side comparisons of file reads, shell commands, web searches, browser automation, and planning modes. |
| MCP Config Reference | Direct paths, environment variables, local/remote stdio transports, and tool discovery rules. |
| Conventions & Rules | Where to write custom instruction files (e.g., CLAUDE.md, CONVENTIONS.md, .cursor/rules/) to customize agent behaviors. |
| Tool | Vendor | Config format | Hooks | MCP | Official docs |
|---|---|---|---|---|---|
| Claude Code | Anthropic | JSON | ✅ Full (31 events) | ✅ | code.claude.com/docs/en/hooks |
| Codex CLI | OpenAI | TOML | ✅ Full (10 events) | ✅ | developers.openai.com/codex |
| GitHub Copilot | GitHub/Microsoft | JSON | ✅ Full (13 events) | ✅ | docs.github.com/en/copilot/reference/hooks-reference |
| Gemini CLI | JSON | ✅ Full (11 events) | ✅ | geminicli.com/docs | |
| Factory Droid | Factory.ai | JSON | ✅ Full (9 events) | ✅ | docs.factory.ai |
| Kiro IDE/CLI | Amazon (AWS) | YAML | ✅ Full | ✅ | kiro.dev/docs |
| Kimi Code | Moonshot AI | TOML | ✅ Full — Beta (16 events) | ✅ | kimi.com/code/docs |
| Cursor | Anysphere | JSON | ✅ Full (23 events) | ✅ | cursor.com/docs/hooks |
| Hermes | NousResearch | YAML | ✅ Full (❓ events) | ✅ | hermes-agent.nousresearch.com |
| Devin CLI | Cognition AI | JSON | ✅ Full (7 events) | ✅ | cli.devin.ai/docs/extensibility/hooks |
| Pi Coding Agent | earendil-works | JSON + YAML | ✅ Full (7 events) | ✅ | pi.dev |
| OpenCode | OpenCode.ai | JSON | ✅ Via plugins | ✅ | opencode.ai/docs |
| OpenClaw | OpenClaw | YAML | ✅ Full (18 events via Plugin SDK) | ✅ | docs.openclaw.ai |
| Trae | ByteDance | Markdown rules | ✅ | docs.trae.ai | |
| Trae CN | ByteDance | Markdown rules | ✅ | docs.trae.ai | |
| Aider | Aider-AI | YAML | ❌ Not shipped | ❌ | aider.chat/docs |
| Google Antigravity | JSON / TOML | ✅ Full (5 events) | ✅ | antigravity.google |
Legend: ✅ Full = shipped, documented hook system with blocking ·
| Question | Go to |
|---|---|
| Which agents support activity X? | _shared/activity-agent-matrix.md |
| What are all of Agent Y's hooks/tools/config? | _shared/agent-tools-hooks-config.md |
| What is PreToolUse called in each tool? | _shared/hook-event-comparison.md |
| Where does Tool Y store its config and skills? | _shared/config-file-locations.md |
.
├── README.md # Master index + comparative benchmarks
├── tools/
│ └── <tool-name>/
│ └── README.md # Per-tool configuration & command references
├── _shared/
│ ├── activity-agent-matrix.md # Capabilities matrix (natively supported tools)
│ ├── agent-tools-hooks-config.md # Unified agent specifications & schemas
│ ├── hook-event-comparison.md # Cross-agent hook event name lookup
│ ├── mcp-support.md # MCP client capabilities & transport settings
│ └── config-file-locations.md # Global/local paths & git-ignored overrides
└── _templates/
└── tool-template.md # Blueprint for documenting new developer tools
How the same lifecycle moment is named across tools:
| Lifecycle moment | Claude Code | Codex | Gemini CLI | GitHub Copilot | Kimi Code | Factory Droid | Cursor | Devin CLI | Pi Agent |
|---|---|---|---|---|---|---|---|---|---|
| Before any tool | PreToolUse |
PreToolUse |
BeforeTool |
preToolUse |
PreToolUse |
PreToolUse |
preToolUse |
PreToolUse |
tool.before.* |
| After any tool | PostToolUse |
PostToolUse |
AfterTool |
postToolUse |
PostToolUse |
PostToolUse |
postToolUse |
PostToolUse |
tool.after.* |
| After tool fails | PostToolUseFailure |
— | — | postToolUseFailure |
PostToolUseFailure |
— | postToolUseFailure |
— | — |
| Prompt submitted | UserPromptSubmit |
UserPromptSubmit |
BeforeAgent |
userPromptSubmitted |
UserPromptSubmit |
UserPromptSubmit |
beforeSubmitPrompt |
UserPromptSubmit |
— |
| Agent turn ends | Stop |
Stop |
AfterAgent |
agentStop |
Stop |
Stop |
stop |
Stop |
— |
| Subagent starts | SubagentStart |
SubagentStart |
— | subagentStart |
SubagentStart |
— | subagentStart |
— | — |
| Session starts | SessionStart |
SessionStart |
SessionStart |
sessionStart |
SessionStart |
SessionStart |
sessionStart |
SessionStart |
session.created |
| Session ends | SessionEnd |
— | SessionEnd |
sessionEnd |
— | SessionEnd |
sessionEnd |
— | — |
| Context compacted | PreCompact |
PreCompact |
PreCompress |
preCompact |
PreCompact |
PreCompact |
preCompact |
— | — |
| Permission request | PermissionRequest |
PermissionRequest |
— | permissionRequest |
— | — | — | PermissionRequest |
— |
| LLM call | — | — | BeforeModel / AfterModel |
— | — | — | — | — | — |
| Notification | Notification |
— | Notification |
notification |
— | Notification |
— | — | — |
How each tool's PreToolUse-equivalent blocks a tool call:
| Tool | Block method | Stderr / reason goes to |
|---|---|---|
| Claude Code | Exit 2 | LLM as context |
| Codex CLI | Exit 2 or {"decision":"block"} stdout |
LLM |
| GitHub Copilot | {"permissionDecision":"deny"} stdout |
LLM (via permissionDecisionReason) |
| Gemini CLI | Exit 2 | LLM |
| Factory Droid | {"permissionDecision":"deny"} stdout |
LLM |
| Kimi Code | Exit 2 or {"permissionDecision":"deny"} stdout |
LLM |
| Cursor | Exit 2 + failClosed option |
LLM |
| Hermes | {"action":"block","message":"..."} stdout |
LLM |
| Devin CLI | Exit 2 or {"decision":"block"} stdout |
LLM |
| Kiro | Exit 2 | LLM |
| Pi Agent | Exit 2 | LLM |
Each tool README labels sources:
| Label | Meaning |
|---|---|
| [official] | Published by the vendor on their own docs site |
| [github] | Vendor GitHub repo (README, source code) |
| [community] | Community-maintained project (e.g., oh-my-pi) — may diverge from vendor |
| [installer-src] | Inferred from the installer scripts or directory structures |
See _templates/tool-template.md for the standard page format.
When adding or updating a tool:
- Source everything to an official URL — no guessing.
- Mark uncertain items with ❓.
- Use the
[official]/[github]/[community]labels in the Sources table. - Update the master table in this README.
- Update
_shared/agent-tools-hooks-config.mdwith the agent's section.
The Hook Event Cross-Reference table and event counts in the Tools Covered table are sourced directly from each tool's official documentation at the time of last update. Hook APIs evolve rapidly — vendor docs are the authoritative source and should always be consulted before relying on counts or event names listed here. Entries marked ❓ could not be verified against live official documentation at the time of writing.