A deep technical comparison across architecture, capabilities, security, hooks, memory, extensibility, and telemetry for every major AI coding agent.
Four runtime families: Bun standalone, Rust native, Node.js interpreted, and Codex's hybrid Rust+Electron.
Every tool from all 8 agents, semantically grouped. All share the same core loop, but differ in breadth and depth.
| Function | Claude Code | Codex | Factory | Amp | Gemini CLI | Pi TS | Pi Rust | OpenCode |
|---|---|---|---|---|---|---|---|---|
| Run shell | Bash | exec_command | execute-cli | BashTool | ShellTool | bash | bash | bash |
| Read file | Read | read_file | via shell | ReadTool | ReadFileTool | read | read | via shell |
| Batch read | — | — | — | — | ReadManyFiles | — | — | — |
| Write file | Write | apply_patch | ApplyPatch | WriteTool | WriteFileTool | write | write | write |
| Edit file | Edit | apply_patch | ApplyPatch | EditTool | EditTool | edit | edit | edit |
| Grep | Grep | file_search | via shell | SearchTool | GrepTool | grep | grep | grep |
| Find files | Glob | file_search | via shell | ListTool | GlobTool | find | find | glob |
| List dir | via Glob | list_dir | via shell | ListTool | LSTool | ls | ls | list |
| Web search | WebSearch | web_search | — | — | WebSearchTool | — | — | websearch |
| Web fetch | WebFetch | — | — | — | WebFetchTool | — | — | — |
| Ask user | AskUser | request_user_input | prompt | prompt | AskUserTool | ctx.ui | TUI | question |
| Memory | auto MEMORY.md | memory_tool | — | — | MemoryTool | — | — | — |
| Sub-agents | Task | spawn_agent | orchestrator | dtw-create | agents/*.md | — | — | — |
💡 All tools use ripgrep under the hood for content search. Gemini CLI has both built-in grep and a ripgrep-backed fallback variant.
Dots: CC=Claude Code, Cx=Codex, Fa=Factory, Am=Amp, Gm=Gemini, PT=Pi TS, PR=Pi Rust, OC=OpenCode
Other tools call INTO Codex via MCP, not just the reverse
spawn_agent, send_input, resume_agent, wait, close_agent — complete lifecycle
Submit tasks to cloud, get diffs back, apply locally
Incremental updates without full message re-send
Most comprehensive event system: PreToolUse, PostToolUse, PermissionRequest, SubagentStart/Stop, and more
Hot-reload, auto-update, trust warnings, registry-based
Multi-agent collaboration with TeammateIdle/TaskCompleted hooks
Linux Foundation standard — expose agent as A2A endpoint
permissive/strict/restrictive + proxied variants for fine-grained sandbox
Pattern-based secret redaction (tokens, keys, certs) with allowlist/blocklist
Shell command → JSON FunctionDeclaration[] → auto-registered tools
Commercial tool with telemetry defaulting to OFF (opt-in only)
/rewind navigates backward AND reverts file state
ReadManyFilesTool reads multiple files in one call
registerTool(), registerCommand(), events, UI components, themes
Navigate/fork any point in conversation history
Models.dev registry integration — plug in almost any LLM
Three UIs (TUI + Tauri + server) from one codebase
Fan out work to remote execution threads via dtw-create
Swap providers server-side without client changes
From vendor-locked single providers to 75+ via registry integration. Three tools lock to one vendor; the rest offer flexibility.
| Provider | Claude Code | Codex | Factory | Amp | Gemini CLI | Pi TS | Pi Rust | OpenCode |
|---|---|---|---|---|---|---|---|---|
| Anthropic | PRIMARY | — | Proxy | ✓ | — | ✓ | ✓ | ✓ |
| OpenAI | — | PRIMARY | Proxy | ✓ | — | ✓ | ✓ | ✓ |
| Google Gemini | Vertex | — | Proxy | ✓ | PRIMARY | ✓ | ✓ | ✓ |
| Azure OpenAI | — | — | — | — | — | ✓ | ✓ | ✓ |
| AWS Bedrock | ✓ | — | — | — | — | ✓ | — | ✓ |
| Cerebras | — | — | — | ✓ | — | ✓ | — | ✓ |
| xAI (Grok) | — | — | — | ✓ | — | ✓ | — | ✓ |
| Groq | — | — | — | — | — | ✓ | — | ✓ |
| Ollama/local | — | — | — | — | — | ✓ | — | ✓ |
Best integration with own models, but no provider choice.
Provider-agnostic via api.factory.ai. Adds latency.
User picks any model directly. Maximum flexibility.
From full OS-level sandboxing to simple permission prompts — the trust spectrum across all 8 tools.
Landlock + seccomp + bwrap (Linux), sandbox-exec (macOS), restricted token (Windows). Agent truly can't escape.
All platformsmacOS Seatbelt with 4 profile levels (permissive→restrictive + proxied variants). Docker/Podman containers with volume mounts and network isolation.
macOS + Docker Env var redactionseccomp filter on Linux only. No macOS equivalent.
Linux onlyWASM Components + capability-gated hostcalls for extensions.
PlannedPermission prompts but no real isolation. Docker recommended for Pi TS and OpenCode.
| Mode | Claude Code | Codex | Factory | Gemini CLI | Others |
|---|---|---|---|---|---|
| Allow all | --dangerously-skip | danger-full-access | --auto high | YOLO | flags/configs |
| Auto-edit | — | — | — | AUTO_EDIT | — |
| Read only | permissionMode | read-only | --auto low | PLAN | — |
| Default | prompt each | workspace-write | --auto medium | DEFAULT | prompt each |
| Custom rules | hooks + wildcards | prefix rules | tool lists | --allowed-tools | --tools |
Only Claude Code (14 events) and Gemini CLI (11 events) offer shell-based hook systems. Others have zero.
✦ Gemini CLI includes BeforeModel/AfterModel hooks for intercepting and modifying LLM calls — a capability absent from the other 7 tools.
| Aspect | Claude Code | Gemini CLI |
|---|---|---|
| I/O format | JSON via stdin/stdout | JSON via stdin/stdout |
| Exit codes | 0=success, 1=error, 2=block | 0=success, 2=block, other=warning |
| Timeout | 10min (configurable) | Per-hook ms field |
| Config | hooks.json, skill frontmatter | settings.json, extension manifests |
Three tools persist learning: Claude Code (auto), Codex (two-phase pipeline), Gemini CLI (user-confirmed with hierarchy).
Agent writes to MEMORY.md automatically. Project-level storage. First 200 lines loaded into prompt. Hot-reloaded.
AutomaticExtraction (Spark model) → Consolidation (full model). Skills, rollout summaries. Feature-flagged.
Pipelinesave_memory tool with diff + confirmation. Hierarchical: global → ancestors → project → subdirs. Supports @import syntax.
Hierarchical User-confirmedNo built-in cross-session memory. Manual notes or external tools.
Branching, compaction, rewind, export, and context window strategies across all 8 tools.
| Feature | Claude Code | Codex | Factory | Amp | Gemini CLI | Pi TS | Pi Rust | OpenCode |
|---|---|---|---|---|---|---|---|---|
| Storage | Internal | SQLite+JSONL | Internal | Cloud | JSON files | JSONL tree | JSONL tree | KV store |
| Branching | — | ✓ /fork | — | Thread fork | — | ✓ /tree /fork | ✓ | — |
| Compaction | Auto 98% | /compact | — | — | /compress | /compact | Auto | — |
| Resume | ✓ | ✓ | ✓ | ✓ | ✓ browser | ✓ | ✓ | ✓ |
| Rewind | — | — | — | — | ✓ + revert | /tree nav | ✓ | — |
| Export | — | — | — | — | /chat share | ✓ HTML | — | — |
| Cleanup | — | — | — | — | ✓ auto | — | — | — |
| Model switch | /model | /model | settings | settings | /model | /model | ✓ | settings |
From dedicated collab tools to experimental A2A protocols — how agents orchestrate work.
spawn_agent → send_input → resume_agent → wait → close_agent. Cloud tasks with remote execution. WebSocket transport.
Most completeTyped subagents (Bash, Explore, Plan). Background via Ctrl+B. Agent teams with TeammateIdle hooks (research preview).
Teams previewYAML frontmatter agents in .gemini/agents/. Experimental A2A HTTP server (Linux Foundation standard). ACP for Zed integration.
A2A protocoldtw-create fans out work to remote execution threads.
Decomposes tasks into orchestrator + worker pattern.
No sub-agent support. Pi TS explicitly states "No sub-agents".
From full plugin marketplaces to "fork the code" — every level of customization.
registerTool(), registerCommand(), events, UI components, themes. Deepest programmatic customization.
Most extensibleMarketplace registry with hot-reload, auto-update, trust warnings. Skills. Shell hooks on every lifecycle event.
Marketplacegemini-extension.json manifests. Git/GitHub/local sources. Tool discovery commands. MCP + A2A. BeforeModel/AfterModel hooks.
Tool discoveryMCP client AND server. GitHub-hosted skills. AGENTS.md per repo. Feature flags system.
Add tools via MCP servers. OpenCode adds Agent Client Protocol. Factory uses YAML droid configs.
No plugin system — implement Tool trait and recompile. WASM extensions planned.
Three tiers of telemetry: phones home by default, opt-in only, and zero telemetry. A clear spectrum from commercial to open-source.
Quick decision guide — match your priority to the right tool.
Full OS sandbox on all platforms
24+ named tools out of the box
Full TS API or extension manifests + tool discovery
<15ms cold start, ~8-15 MB binary
75+ via Models.dev or 15+ direct
14 events (Claude) or 11 with model hooks (Gemini)
Full collab tools or agent teams
Telemetry OFF by default (opt-in)
No analytics, no phoning home at all
Tree-structured conversations with fork/navigate
Navigate backward AND revert file state
Global → ancestor → project → subdir memory
Submit to cloud, apply diffs locally
Expose agent as HTTP endpoint (Linux Foundation)
Beyond terminal — native apps
Read system prompt → Stream LLM → Parse tool calls → Execute → Feed back → Loop → Ask permission.
The differences: how many tools (5–24), what runtime (Bun/Rust/Node), which LLMs (1–75+), how they sandbox (none to OS-level), how extensible (MCP-only to full APIs), whether they phone home (opt-out to zero), how rich their hooks are (0–14 events), and how memory persists (none to hierarchical).