302 lines
10 KiB
Markdown
302 lines
10 KiB
Markdown
# Agent CLI Reference: 5-Tool Comparison
|
|
|
|
A side-by-side reference for Claude Code, Pi Coding Agent, OpenCode, Hermes Agent, and OpenClaw.
|
|
|
|
---
|
|
|
|
## 1. Claude Code (Anthropic)
|
|
|
|
**Role**: Primary generalist coding agent. Best all-around tool.
|
|
**License**: Proprietary (free tier + Pro subscription)
|
|
**Runtime**: Node.js
|
|
**Config**: `CLAUDE.md` in project root
|
|
|
|
### Key Capabilities
|
|
|
|
| Feature | How To | Course Reference |
|
|
|---------|--------|-----------------|
|
|
| Multi-agent teams | `claude --teammate-mode tmux` | M4 — teammate-mode spawns agents in split panes |
|
|
| Headless execution | `claude -p "prompt" --print` | M5 CI/CD pipeline |
|
|
| Constrained tools | `--allowedTools "Read Write Edit"` | M3 security (L4 whitelist pattern) |
|
|
| Hooks system | `.claude/hooks/*.py` | M3 hook architecture (13 lifecycle events) |
|
|
| Subdirectory rules | `frontend/CLAUDE.md`, `backend/CLAUDE.md` | M2 skills deep dive |
|
|
| Stop hook self-improve | PostToolUse → headless claude session | M3, also ClaudeFAST pattern |
|
|
|
|
### Boilerplate Setup
|
|
|
|
```bash
|
|
# Project initialization
|
|
claude --init
|
|
|
|
# Launch with teammate mode
|
|
claude --teammate-mode tmux
|
|
|
|
# Headless CI mode
|
|
claude -p "Implement the feature described in spec.md" --allowedTools "Read Write Edit Bash" --print
|
|
|
|
# With custom hooks directory
|
|
claude --hooks .claude/hooks/
|
|
```
|
|
|
|
### Hook Lifecycle (13 events)
|
|
|
|
| Phase | Events |
|
|
|-------|--------|
|
|
| Session | Setup, SessionStart, SessionEnd |
|
|
| Main Loop | UserPromptSubmit, PreToolUse, PermissionRequest, PostToolUse, PostToolUseFailure, Stop, Notification |
|
|
| Subagents | SubagentStart, SubagentStop |
|
|
| Maintenance | PreCompact |
|
|
|
|
---
|
|
|
|
## 2. Pi Coding Agent (pi.dev)
|
|
|
|
**Role**: Customizable agent harness. Full control over every aspect.
|
|
**License**: Open source (MIT)
|
|
**Runtime**: Node.js (TypeScript SDK)
|
|
**Config**: `.pi/settings.json`, `.pi/agents/*.md`
|
|
|
|
### Key Capabilities
|
|
|
|
| Feature | How To | Course Reference |
|
|
|---------|--------|-----------------|
|
|
| Extensions | `pi -e extensions/<name>.ts` | M3 — damage-control, tilldone |
|
|
| RPC mode | `pi --mode rpc` | M5 — programmatic control (26+ commands) |
|
|
| Agent teams | `agent-team` extension + `teams.yaml` | M4 dispatcher pattern |
|
|
| Agent chains | `agent-chain` extension + `agent-chain.yaml` | M4 pipeline pattern ($INPUT/$ORIGINAL) |
|
|
| P2P communication | `coms` (Unix sockets) / `coms-net` (HTTP/SSE) | M4 flat P2P pattern |
|
|
| Mental models | `.pi/multi-team/expertise/*.yaml` | M4 agent memory, self-improve commands |
|
|
| Damage control | `damage-control.ts` + `damage-control-rules.yaml` | M3 three access levels |
|
|
| Skills system | `.pi/skills/*/SKILL.md` | M2 composable skills |
|
|
|
|
### Boilerplate Setup
|
|
|
|
```bash
|
|
# Launch with extensions
|
|
pi -e extensions/damage-control.ts -e extensions/tilldone.ts -e extensions/minimal.ts
|
|
|
|
# Launch with multiple extensions (stackable)
|
|
pi -e extensions/purpose-gate.ts -e extensions/tool-counter.ts
|
|
|
|
# RPC mode (programmatic control from any language)
|
|
pi --mode rpc
|
|
|
|
# Pi-to-Pi peer communication (same machine)
|
|
just local-coms --name planner --purpose "Plans the work"
|
|
just local-coms --name coder --purpose "Writes the code"
|
|
|
|
# Pi-to-Pi networked (across machines)
|
|
just coms-net-server # hub
|
|
just coms --name dev # client 1
|
|
just coms2 --name prod # client 2
|
|
```
|
|
|
|
### Extension Catalog (16 total)
|
|
|
|
| Category | Extensions |
|
|
|----------|------------|
|
|
| **UI** | pure-focus, minimal, theme-cycler, session-replay |
|
|
| **Monitoring** | tool-counter, tool-counter-widget |
|
|
| **Task** | tilldone, purpose-gate |
|
|
| **Multi-Agent** | subagent-widget, agent-team, agent-chain |
|
|
| **Safety** | damage-control, damage-control-continue |
|
|
| **P2P** | coms, coms-net |
|
|
| **Cross-Tool** | cross-agent, system-select |
|
|
| **Meta** | pi-pi |
|
|
|
|
### Pi Agent Rust Port (Jeff Emanuel, 1,024★)
|
|
|
|
A Rust reimplementation of the Pi agent with zero unsafe code.
|
|
|
|
| Feature | Pi (TypeScript) | Pi Agent Rust |
|
|
|---------|----------------|---------------|
|
|
| Extensions | Full (16+) | Compatible |
|
|
| RPC mode | Yes | Yes |
|
|
| Performance | Baseline | ~2x faster |
|
|
| Binary size | ~35MB | ~8MB |
|
|
| Memory safety | Node.js GC | Zero unsafe Rust |
|
|
|
|
### The 4 Dimensions of Control (Pi's strength)
|
|
|
|
| Dimension | Pi's Advantage |
|
|
|-----------|----------------|
|
|
| **Context** | Full control over what the agent sees via extensions |
|
|
| **Model** | Any provider, any model — pluggable |
|
|
| **Prompt** | Skills, system prompts, agent .md files — fully customizable |
|
|
| **Tools** | Extensions can add, remove, or override any tool |
|
|
|
|
---
|
|
|
|
## 3. OpenCode (opencode.ai)
|
|
|
|
**Role**: Open-source Claude Code alternative. MIT license.
|
|
**License**: MIT (open source)
|
|
**Runtime**: Node.js (npm global package)
|
|
**Config**: Shares `~/.grok/config.toml` with Claude Code
|
|
|
|
### Key Capabilities
|
|
|
|
| Feature | How To | Course Reference |
|
|
|---------|--------|-----------------|
|
|
| Headless commands | `opencode run "prompt"` | M5 CI/CD alternative to Claude Code CLI |
|
|
| Model selection | `opencode --model opencode-go/deepseek-v4-flash` | M6 cascade routing |
|
|
| Proxy support | Routes through `localhost:18901/v1` | M6 cost optimization |
|
|
| Shared config | Uses same `~/.grok/config.toml` | M5 production stack — dual tool setup |
|
|
| Go models | 12 Go-optimized models available | M6 economics (Go models are cheaper per token) |
|
|
|
|
### Available Go Models (through proxy)
|
|
|
|
| Model ID | Cost Tier | Best For |
|
|
|----------|-----------|----------|
|
|
| `opencode-go/deepseek-v4-flash` | Budget | General agentic tasks ($10/mo flat) |
|
|
| `opencode-go/deepseek-v4-pro` | Mid | Complex reasoning |
|
|
| `opencode-go/kimi-k2.6` | Mid | Long context |
|
|
| `opencode-go/qwen3.6-plus` | Budget | Structured tasks |
|
|
| `opencode-go/minimax-m2.7` | Budget | Fast responses |
|
|
|
|
### Boilerplate Setup
|
|
|
|
```bash
|
|
# Headless task execution
|
|
opencode run "Refactor the auth module to use JWT tokens"
|
|
|
|
# With specific model
|
|
opencode --model opencode-go/deepseek-v4-flash run "Write unit tests for the API"
|
|
|
|
# With custom config
|
|
opencode --config ~/.grok/config.toml run "Deploy to staging"
|
|
|
|
# List available models
|
|
opencode models
|
|
```
|
|
|
|
### When to Use OpenCode Instead of Claude Code
|
|
|
|
| Scenario | Choose |
|
|
|----------|--------|
|
|
| Need open-source license | OpenCode |
|
|
| Budget-constrained | OpenCode (Go models at $10/mo flat) |
|
|
| CI/CD pipelines | OpenCode `run` command |
|
|
| Primary development | Claude Code (better tool calling) |
|
|
| Need hooks system | Claude Code (13 events vs OpenCode's limited hooks) |
|
|
| Heterogeneous stack | Both (OpenCode as backup/alternative model) |
|
|
|
|
---
|
|
|
|
## 4. Hermes Agent (Some Engineering Inc.)
|
|
|
|
**Role**: TypeScript-native, MCP-first agent for structured workflows.
|
|
**License**: Open source
|
|
**Runtime**: Node.js (TypeScript)
|
|
**Design philosophy**: MCP-native architecture, structured output first
|
|
|
|
### Key Capabilities
|
|
|
|
| Feature | How To | Course Reference |
|
|
|---------|--------|-----------------|
|
|
| MCP-native tools | Built-in MCP client | M2 Beyond MCP channels |
|
|
| Structured output | TypeScript types enforced | M2 context management |
|
|
| Tool-use workflows | Designed for function-calling chains | M2 agent loop variants |
|
|
| OpenClaw ecosystem | Integrates with OpenClaw agents | M4 multi-agent orchestration |
|
|
|
|
### Boilerplate Setup
|
|
|
|
```bash
|
|
# Run with MCP server
|
|
hermes --mcp-servers ./mcp-config.json
|
|
|
|
# Execute workflow
|
|
hermes run workflow.ts
|
|
|
|
# With custom tools
|
|
hermes --tools-dir ./tools/
|
|
```
|
|
|
|
### When to Use Hermes
|
|
|
|
- Building TypeScript-native agent pipelines
|
|
- MCP-first architecture (tools as MCP servers)
|
|
- Tight integration with OpenClaw ecosystem
|
|
- Structured output enforcement (TypeScript types)
|
|
|
|
---
|
|
|
|
## 5. OpenClaw
|
|
|
|
**Role**: Always-on agent employee. Heartbeat-driven, autonomous execution.
|
|
**License**: Open source
|
|
**Runtime**: Node.js daemon
|
|
**Design philosophy**: "If it can receive a heartbeat, it's hired."
|
|
|
|
### Key Capabilities
|
|
|
|
| Feature | How To | Course Reference |
|
|
|---------|--------|-----------------|
|
|
| Heartbeat model | Wakes on schedule, works, sleeps | M7 always-on agents |
|
|
| One-shot execution | `claw do "task"` | M5 production task dispatch |
|
|
| Device-key pairing | Auth via device key + invite | M5 deployment modes |
|
|
| Paperclip-native | Primary agent for Paperclip orchestration | M7 framework comparison |
|
|
| tmux integration | Can run inside tmux sessions | M5 production stack |
|
|
|
|
### Boilerplate Setup
|
|
|
|
```bash
|
|
# Start as daemon (always-on employee)
|
|
claw start --daemon
|
|
|
|
# One-shot task
|
|
claw do "Review the latest PR and leave comments"
|
|
|
|
# Schedule recurring task
|
|
claw schedule --cron "0 6 * * 1" --task "Generate weekly report"
|
|
|
|
# Check status
|
|
claw status
|
|
|
|
# Stop daemon
|
|
claw stop
|
|
```
|
|
|
|
### Heartbeat Execution Model
|
|
|
|
```
|
|
Timer fires → Check for queued work → Wake agent → Execute → Report results → Sleep
|
|
```
|
|
|
|
No continuous running. The agent wakes, works, and goes back to sleep. This is the most cost-effective model for scheduled/recurring work.
|
|
|
|
---
|
|
|
|
## Comparison Matrix
|
|
|
|
| Feature | Claude Code | Pi Agent | OpenCode | Hermes | OpenClaw |
|
|
|---------|:-----------:|:--------:|:--------:|:------:|:--------:|
|
|
| **License** | Proprietary | MIT | MIT | Open | Open |
|
|
| **Cost** | Pro sub | Free | Free | Free | Free |
|
|
| **Hooks** | 13 events | Extension events | Limited | MCP events | None |
|
|
| **Multi-agent** | teammate-mode | Extensions | No | Chains | Heartbeats |
|
|
| **P2P coms** | No | coms/coms-net | No | No | No |
|
|
| **Headless mode** | `--print` | RPC mode | `run` | Yes | daemon |
|
|
| **MCP support** | Built-in | Via extensions | Via proxy | Native | Via Paperclip |
|
|
| **Best for** | Generalist coding | Custom harness | OSS alternative | TS pipelines | Always-on tasks |
|
|
| **Course module** | M3, M4, M5 | M3, M4, M5 | M5, M6 | M5 | M5, M7 |
|
|
|
|
---
|
|
|
|
## Quick Selection Guide
|
|
|
|
```
|
|
What are you building?
|
|
├── A feature? → Claude Code
|
|
├── A custom workflow? → Pi Agent
|
|
├── An open-source project? → OpenCode
|
|
├── A TypeScript pipeline? → Hermes
|
|
└── A recurring task? → OpenClaw
|
|
|
|
Need multiple?
|
|
├── Production system → All 5 (see REFERENCE-STACK.md)
|
|
├── Budget constrained → OpenCode + Go models
|
|
├── Maximum control → Pi Agent + extensions
|
|
└── Enterprise rollout → Claude Code + Agent Manager
|
|
```
|