Files
calvana/COMPARISON.md

38 KiB

Claude Code vs Pi Agent — Feature Comparison

Pi v0.52.10 vs Claude Code (Feb 2026)


Design Philosophy

Dimension Claude Code Pi Agent Winner
Core Mantra "Tool for every engineer" — batteries-included, accessible to all skill levels "If I don't need it, it won't be built" — minimal, opinionated, built for one engineer's workflow Both
Approach to Features Ship everything built-in (sub-agents, teams, MCP, plan mode, todos, web search, notebooks, 10+ tools) Ship the minimum (4 tools, ~200-token prompt). Everything else is opt-in via extensions or bash Both
Safety Philosophy Safe by default — deny-first permissions, 5 modes, filesystem sandbox, Haiku pre-screening of commands YOLO by default — no permissions, no sandbox. "Security in coding agents is mostly theater; if it can write and run code, it's game over" Both
System Prompt Trust Model Extensive guardrails (~10K tokens) — behavioral rules, formatting instructions, safety constraints, tool usage examples Trust the model (~200 tokens) — "frontier models have been RL-trained up the wazoo, they inherently understand what a coding agent is" Both
Observability Abstracted — sub-agents are black boxes, compaction happens silently, system prompt not user-visible by default Full transparency — every token visible, every tool call inspectable, no hidden orchestration, session HTML export Pi
Context Engineering Managed for you — auto-compaction, sub-agents handle overflow, system decides what enters context User-controlled — minimal prompt overhead, no hidden injections, "exactly controlling what goes into context yields better outputs" Pi
Extensibility Model Shell hooks (external processes) + MCP protocol + Skills (markdown prompts) — loosely coupled, config-driven TypeScript in-process extensions — same runtime, access full session state, block/modify/transform any event Both
Target Audience Every engineer — beginner-friendly, enterprise-ready, guided workflows, progressive disclosure Power users — engineers who want control, understand tradeoffs, willing to build their own workflows Both
Multi-Model Stance Claude-first — optimized for Claude family, gateway workaround for others Model-agnostic from day one — 324 models, 20+ providers, cross-provider context handoff, "we live in a multi-model world" Pi
Planning Approach Built-in plan mode — structured explore → plan → code phases, read-only mode, dedicated sub-agents No plan mode — "just tell the agent to think with you." Write plans to files for persistence, versioning, and cross-session reuse Both
Complexity Budget Complexity lives in the harness so you don't have to think about it — more magic, less wiring Complexity lives in your hands — minimal harness, you decide what to add and when. "Three similar lines of code is better than a premature abstraction" Both

Cost & Licensing

Feature Claude Code Pi Agent Winner
Tool License Proprietary MIT (open source, fork/embed/self-host) Pi
Subscription Cost $20-200/mo required or Dedicated Anthropic API Keys $0 (MIT, BYO API keys) Pi
Cost Tracking Available via /cost command, customizable via statusline configuration Real-time $/token/cache display in footer per session and customizable via extensions Both
Cost Optimization 3 models at 3 price tiers (Opus > Sonnet > Haiku) — single provider Mix cheap/expensive models per task across any provider, free tiers available Pi
System Prompt Overhead ~10,000+ tokens ~200 tokens (more context for actual work) Pi

Model & Provider Support

Feature Claude Code Pi Agent Winner
Official Providers 4 platforms (Anthropic API, AWS Bedrock, Google Vertex, Foundry) — all serving Claude models 20+ native (Anthropic, OpenAI, Google, Groq, xAI, OpenRouter, Azure, Bedrock, Vertex, Mistral, MiniMax, Kimi, Cerebras, ZAI, HuggingFace, custom) Pi
Non-Anthropic / Self-Hosted Models Via ANTHROPIC_BASE_URL gateway — routes to any OpenAI-compatible backend (OpenRouter, LiteLLM, local TGI, vLLM). Functional but unofficial workaround Native first-class support for all providers + local (Ollama, vLLM, LM Studio via models.json). No proxy needed Pi
Built-in Models ~6 aliases (opus, sonnet, haiku, opusplan, sonnet[1m], default) mapping to Claude family 324 (confirmed via ModelRegistry) across all providers Pi
Model Switching Mid-Session Yes — /model <alias|name> command, --model flag at startup, ANTHROPIC_MODEL env var Yes — Ctrl+P cycle, Ctrl+L fuzzy selector, session.setModel() in SDK Tie
OAuth/Subscription Login Anthropic subscriptions (Pro, Max, Teams, Enterprise) Claude Pro, ChatGPT Plus, GitHub Copilot, Gemini CLI, Antigravity — all via /login and API keys Pi
Thinking/Effort Levels 3 effort levels (low/medium/high) on Opus 4.6 via /model slider, env var, or settings 5 unified levels (off/minimal/low/medium/high) across ALL thinking capable models, Shift+Tab to cycle Pi

Agent Harness

Feature Claude Code Pi Agent Winner
Source Code Closed source (proprietary) Open source (MIT license) Pi
System Prompt Size ~10,000+ tokens (extensive tool descriptions, behavioral rules, safety guardrails) ~200 tokens (minimal — trusts frontier models to code without hand-holding) Pi
Default Tools 10+ (Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch, NotebookEdit, Task) 4 (read, write, edit, bash) + 3 optional (grep, find, ls) Both
Agent Architecture Monorepo TypeScript CLI — single package with built-in tool execution, sub-agents, and team coordination 4-package monorepo (pi-ai, pi-agent-core, pi-tui, pi-coding-agent) — modular separation of LLM abstraction, agent loop, TUI, and CLI Both
Sub-Agent Support Native Task tool — 7 parallel sub-agents, permission inheritance, typed agent roles (Explore, Plan, Bash, general-purpose) None built-in, but available through extension that spawns separate pi processes in single/parallel/chain modes with different models per sub-agent Claude Code
Agent Teams Native team coordination (lead + workers, shared task lists, message passing, broadcast) None built-in, but achievable through SDK orchestration scripts or RPC mode driving multiple pi processes Claude Code
Default Permission Model 5 modes (default, plan, acceptEdits, bypassPermissions, dontAsk) — deny-first with filesystem/network sandbox None by default ("YOLO mode") — runs everything without asking. Permission-gate extension available but opt-in Claude Code
Memory File CLAUDE.md (project root, nested dirs, user-level) — auto-loaded, hierarchical AGENTS.md — similar convention, compatible with ~/.claude/skills cross-tool standard Tie
Cost Visibility Available via /cost command, customizable via statusline configuration Immediately visible in footer by default, further customizable via extensions and getSessionStats() API Tie
Hooks System Shell-command hooks (PreToolUse, PostToolUse, Stop, Notification) — external scripts, pass/fail TypeScript extension events (20+ types) — in-process async handlers that block, modify, transform, access session state, render UI Pi
Session Format Linear conversation JSONL tree with id/parentId (branching, forking, labels via /tree and /fork) Pi
Extension State No built-in state persistence for extensions pi.appendEntry() persists custom data to session, survives restart Pi

Tools & Capabilities

Built-in Tools (Tool-by-Tool)

Tool Claude Code Pi Agent Winner
Read Built-in — reads files with optional offset/limit, images, PDFs, notebooks Built-in (read) — reads files with optional range, auto-resizes images Tie
Write Built-in — creates or overwrites files Built-in (write) — creates or overwrites files Tie
Edit Built-in — exact string replacement with replace_all option Built-in (edit) — surgical find-and-replace, returns unified diff Tie
Bash Built-in — shell execution with timeout, background mode, description Built-in (bash) — shell execution with streaming output and abort Tie
Glob Built-in — fast file pattern matching, sorted by modification time Not built-in. Optional find tool available via --tools flag Claude Code
Grep Built-in — ripgrep-powered search with regex, context lines, output modes Not built-in by default. Optional grep tool available via --tools flag Tie
WebSearch Built-in — web search with domain filtering, returns formatted results Not built-in, customizable via extensions Claude Code
WebFetch Built-in — fetches URL content, converts HTML to markdown, AI processing Not built-in, customizable via extensions Claude Code
NotebookEdit Built-in — Jupyter notebook cell editing (replace, insert, delete) Not built-in, customizable via extensions Claude Code
Task (Sub-agents) Built-in — spawns typed sub-agents (Explore, Plan, Bash, general-purpose) with parallel execution Not built-in, customizable via extensions. Subagent extension spawns separate pi processes Claude Code
ls Not a dedicated tool (use Bash or Glob) Optional built-in (ls) via --tools flag Tie

Tool System Capabilities

Feature Claude Code Pi Agent Winner
Tool Observability Sub-agent tool calls opaque Every tool call, token, and dollar visible Pi
Custom Tools Via MCP servers (external process, JSON-RPC) pi.registerTool() in-process TypeScript, streaming results, custom rendering Pi
Tool Override Not possible Register tool with same name to replace built-in (e.g., audited read) Pi
MCP Support Native first-class, lazy loading (95% context reduction), OAuth Not built-in (by design, argues 7-14k token overhead); available via extensions Claude Code
Tool Count Philosophy More tools = more capable out of the box (10+) Fewer tools = smaller system prompt (~1000 tokens), trusts frontier models Both

Hooks & Event System

Claude Code: 14 hook events, 3 handler types (command, prompt, agent) — shell-based, JSON stdin/stdout Pi: 25 extension events across 7 categories — in-process TypeScript with full API access

Architecture

Feature Claude Code Pi Agent Winner
Hook Language Shell commands (any language), LLM prompts, or agent subprocesses TypeScript (in-process, zero-build via jiti) Pi
Handler Types 3: command (shell), prompt (LLM eval), agent (multi-turn subagent) 1: async TypeScript handler with full session/UI access Both
Hook Configuration JSON in settings files (.claude/settings.json, managed policy, plugin hooks.json, skill/agent frontmatter) TypeScript code in extension files Both
Can Modify Tool Input Yes — updatedInput in PreToolUse/PermissionRequest Yes — return modified args from tool_call handler Tie
Async/Background Hooks Yes — async: true on command hooks (non-blocking, results delivered next turn) Yes — handlers are async by default, can fire-and-forget Tie
Inter-Hook Communication No built-in Yes — pi.events shared event bus between extensions Pi

Hook-by-Hook Mapping

Lifecycle Point Claude Code Hook Pi Extension Event(s) Notes
Session starts SessionStart (matcher: startup/resume/clear/compact) session_start CC can persist env vars via CLAUDE_ENV_FILE. Both can inject context
User submits prompt UserPromptSubmit — can block prompt, add context input — can block, transform text, or handle entirely Pi also distinguishes source: interactive/rpc/extension
Before tool executes PreToolUse — allow/deny/ask, modify input tool_call — block with reason, modify args, typed per-tool Both can intercept and modify. Pi has typed narrowing via isToolCallEventType
Permission dialog shown PermissionRequest — auto-allow/deny on behalf of user N/A (Pi has no permission system by default) CC-only — Pi runs YOLO by default, permission-gate is an extension
After tool succeeds PostToolUse — feedback to Claude, modify MCP output tool_result — modify results, log, transform output Comparable
After tool fails PostToolUseFailure — add context about the failure tool_result (isError flag) CC has a dedicated event; Pi uses same event with error flag
Tool execution streaming N/A tool_execution_start, tool_execution_update, tool_execution_end Pi-only — real-time streaming of tool execution progress
Bash spawn intercept N/A BashSpawnHook — modify command, cwd, env before bash executes Pi-only — intercepts at process spawn level
User runs bash directly N/A user_bash — fired when user types shell commands (!! prefix) Pi-only
Notification sent Notification (matcher: permission_prompt/idle_prompt/auth_success/elicitation_dialog) N/A (use ctx.ui.notify in any handler) CC-only as a hook event
Subagent spawned SubagentStart (matcher: agent type) N/A (Pi has no built-in subagents) CC-only
Subagent finished SubagentStop — can prevent subagent from stopping N/A CC-only
Agent stops responding Stop — can force Claude to continue N/A (use turn_end or agent_end to react) CC can block stopping; Pi can't but can queue follow-ups
Teammate goes idle TeammateIdle — can force teammate to continue N/A (Pi has no built-in teams) CC-only
Task marked complete TaskCompleted — can block completion N/A (Pi has no built-in task system) CC-only
Before compaction PreCompact (matcher: manual/auto) session_before_compact — can provide custom compaction entirely Pi can fully replace compaction logic
After compaction N/A session_compact Pi-only
Before session branching N/A session_before_fork, session_before_switch, session_before_tree Pi-only — session tree architecture
After session branching N/A session_fork, session_switch, session_tree Pi-only
Session ends SessionEnd (matcher: clear/logout/exit/other) — no decision control session_shutdown Both fire on exit; neither can block
Before agent processes prompt N/A before_agent_start — can modify system prompt, images, prompt text Pi-only — dynamic system prompt per-turn
Agent turn lifecycle N/A agent_start, agent_end, turn_start, turn_end Pi-only — granular agent lifecycle
Message streaming N/A message_start, message_update, message_end Pi-only — token-by-token streaming access
Model changed N/A model_select (source: set/cycle/restore) Pi-only — react to model switches
Context window access N/A context — deep copy of messages, can filter/prune Pi-only — direct context manipulation

Extensions & Customization

Feature Claude Code Pi Agent Winner
Extension Language Shell scripts (hooks), Markdown (commands) TypeScript (zero-build via jiti) Pi
Slash Commands .claude/commands/*.md prompt templates Prompt templates + /skill:name + extension-registered commands Tie
Package Distribution Plugin marketplace — /plugin commands, git-based sharing pi install npm:/git:/local, pi config TUI, npm gallery Both
Skills (Agent Skills Standard) Yes (auto-invocation) Yes (progressive disclosure, cross-tool compat with ~/.claude/skills) Tie
Themes Minimally customizable 51 color tokens, hot-reload, dark/light built-in, community themes via packages Pi
Custom Keyboard Shortcuts ~/.claude/keybindings.json pi.registerShortcut() in extensions Tie
Custom CLI Flags Not possible pi.registerFlag() adds custom flags to CLI Pi
Custom Providers Not possible pi.registerProvider() with OAuth support Pi
Custom Editors Not possible Modal editor (vim), emacs bindings, rainbow editor via extensions Pi

UI & Terminal

Feature Claude Code Pi Agent Winner
Custom Header No ctx.ui.setHeader() replaces logo/keybinding hints with custom component Pi
Custom Footer Configurable statusline (tokens, cost, model) ctx.ui.setFooter() with git branch, token stats, cost tracking, anything Pi
Status Line Configurable statusline (tokens, cost, model) ctx.ui.setStatus() with themed colors, turn tracking, custom data Pi
Widgets No ctx.ui.setWidget() above/below editor with custom content Pi
Overlays No Full overlay applications (Doom, Space Invaders, QA test overlays) Pi
Dialogs Basic permission prompts ctx.ui.select(), confirm(), input(), editor() + custom rendering Pi
Rendering Standard terminal with known issues Standard terminal with known issues Both
Message Queuing Supported — queue messages while agent works Enter = steer (interrupt), Alt+Enter = follow-up (queue after completion) Both

Programmatic & SDK

Feature Claude Code Pi Agent Winner
Non-Interactive Mode claude --print pi -p (+ stdin auto-activates) Tie
JSON Streaming --output-format stream-json --mode json (JSONL events with full lifecycle) Tie
RPC Mode None --mode rpc (26+ commands, bidirectional JSON protocol, any language) Pi
Node.js SDK @anthropic-ai/claude-agent-sdk @mariozechner/pi-coding-agent (createAgentSession, full internal API) Tie
Mid-Stream Control ClaudeSDKClient.interrupt() — stop and redirect steer() interrupts, followUp() queues messages while agent works Pi
Session Stats API Limited getSessionStats() returns tokens (in/out/cache), cost, tool calls per session Pi
HTML Export /export — session to HTML --export, /export, session.exportToHtml() Both
SDK Examples Docs-based 12 official examples from minimal to full-control in package Pi

Multi-Agent & Orchestration

Feature Claude Code Pi Agent Winner
Sub-Agents Native Task tool, 7 parallel, permission inheritance Subagent extension (single/parallel/chain modes), spawns separate pi processes Claude Code
Agent Teams Native team coordination (lead + workers) No built-in equivalent; use orchestration scripts Claude Code
Multi-Model Orchestration Not possible (single provider) Different models per sub-agent (scout on flash, worker on opus) Pi

Enterprise & Platform

Feature Claude Code Pi Agent Winner
IDE Integration VS Code, JetBrains, Cursor (inline diffs, @mentions) Terminal-only (could integrate via RPC) Claude Code
Web/Mobile/Desktop claude.ai/code, iOS app, desktop app Terminal only Claude Code
Enterprise SSO/Audit Yes (SSO, MFA, audit logs, admin dashboard) No Claude Code
Permissions/Sandboxing 5 modes, deny-first rules, filesystem/network sandbox None by default ("YOLO mode"); permission-gate extension available Claude Code
Git Integration Deep (commits, PRs, merge conflicts, GitHub Actions, GitLab CI) Via bash; git-checkpoint extension available Claude Code
Slack/Chat Integration Native @Claude mentions to PRs pi-mom Slack bot package Claude Code

Sharing & Distribution

Feature Claude Code Pi Agent Winner
Package System Plugin marketplace — /plugin commands, .claude-plugin/plugin.json manifest pi install npm:/git:/localpackage.json with pi key, pi-package npm keyword Both
What's Bundled Skills, agents, hooks, MCP servers, LSP servers Extensions, skills, prompt templates, themes Both
Distribution Sources Marketplace (GitHub repo, git URL, npm, pip, direct URL, local path) npm registry, git (GitHub/GitLab/SSH), local paths — no intermediate marketplace needed Both
Discovery Official claude-plugins-official marketplace + team/community marketplaces via extraKnownMarketplaces npm search (pi-package keyword) + gallery at shittycodingagent.ai/packages with video/image previews Both
Scope User, project, local, managed (enterprise) — namespaced as plugin-name:skill-name Global (~/.pi/) or project (.pi/, -l flag) — project settings auto-install missing packages on startup Tie
Config UI /plugin slash commands for install/browse/manage pi config interactive TUI for enable/disable per-resource Tie
Try Without Installing No equivalent pi -e npm:@foo/bar — ephemeral install for current session only Pi
Cross-Tool Portability Agent Skills standard (agentskills.io) — shared with VS Code, Codex, Cursor, GitHub No cross-tool standard — Pi-specific extensions Claude Code
Enterprise Controls strictKnownMarketplaces, allowlists by repo/URL/host regex, managed plugin deployment No enterprise controls — trust-based, review source before installing Claude Code
Git-Based Sharing .claude/ directory (settings, skills, agents, rules, hooks) committed to repo — team gets config on clone .pi/settings.json with packages — team gets packages auto-installed on startup Tie
Update Mechanism Marketplace auto-updates at startup (configurable) pi update for non-pinned packages, version pinning with @version Tie
Package Filtering Plugin resources loaded as-is (namespaced to prevent conflicts) Glob patterns + !exclusions per resource type, force-include/exclude exact paths Pi

Community & Ecosystem

Feature Claude Code Pi Agent
Creator Anthropic — $1B+ ARR, enterprise AI company Mario Zechner — libGDX creator (24.8K stars), solo maintainer
Traction Enterprise adoption, deep IDE integrations, massive user base 11.5K stars, 3.17M monthly npm downloads, 208 versions
Endorsements Enterprise customers, Anthropic ecosystem Armin Ronacher (Flask/Ruff) uses + contributes, powers OpenClaw (145K stars)
Release Velocity Regular releases 10+ releases in 8 days, new model support within hours