"commit my work" / git commit | Bash git commit -m … | Commit (Conventional Commits validation + hard Co-Authored-By block + pre_commit rules gate. Pass files, optional auto_stage_all, optional push) |
| Long-running script / build | Bash sync + cancel ctrl-C | Bash with background=true → BashOutput polls → BashKill |
| Tail a running task | re-running Bash | BashOutput |
| Read a PDF / docx / xlsx | Bash pdftotext … | Read (auto-dispatches by format) |
| Read source w/ line refs | native Read | Read (deterministic line cursors + SHA-256 hash) |
| Edit existing file | native Edit | Edit (atomic + line-ending preserve + ambiguity guard + unified diff) |
| Create / overwrite file | native Write | Write (Read-before-Write enforcement + atomic temp+rename) |
| Find files matching glob | Bash find … | Glob (gitignore-aware + doublestar) |
| Search file contents | Bash grep -r | Grep (rg + .gitignore + multi-pattern + context lines) |
| Concept search ("where do we …") | Grep with regex guesses | SemanticSearch (vector + RAG) |
| Fetch a URL / read article | Bash curl … | WebFetch (Readability + SSRF guard + 10MB cap) |
| Render JS-heavy / SPA page | WebFetch | BrowserFetch (chromedp / CDP) |
| Login-protected web target | WebFetch | PortalAsk (saved cookies + selectors) |
| Web search | (no native) | WebSearch (Brave/Tavily/SearXNG, secrets-managed) |
| Run repo's tests / lints | Bash make test | Verify (auto-detects pnpm/go/cargo/pytest/just/Make) |
| Dispatch to another agent | (no native) | SendMessage (claude/codex/opencode/gemini); poll via TaskGet / TaskWait |
| Push a structured chunk back to your dispatcher (peer-side) | (no native) | TaskReply — read CLAWTOOL_TASK_ID + CLAWTOOL_FROM_INSTANCE from env when running as a dispatched peer; emit kind="progress" for chunks and kind="result" for the final answer |
| Reply or fan-out from a non-claude host | hand-route via stdio bridge | SendMessage with from_instance: "<your-family>" — codex / gemini / opencode pass their family name so the BIAM envelope's from reflects the actual sender. Without this, every cross-host dispatch looks like it originated from the daemon. |
| Discover a tool by intent | scan tools/list | ToolSearch (BM25; cheap before loading every schema) |
| "Which clawtool am I talking to?" / version probe | shell out to clawtool version | Version (name + semver + Go runtime + GOOS/GOARCH + VCS commit + modified flag; same shape as clawtool version --json and /v1/health build) |
| "Is this host's claude-code / codex / etc. installed AND claimed by clawtool?" — installer / bootstrap probe | shell out to clawtool agents detect <name> | AgentDetect (returns {adapter, detected, claimed, exit_code}; exit_code mirrors the CLI's stable 0/1/2 contract) |
| "Are GitHub / Slack / Postgres credentials configured?" — installer / bootstrap probe BEFORE issuing a sourced-tool dispatch | shell out to clawtool source check [<instance>] --json | SourceCheck (returns {entries: [{name, ready, missing[]}], ready}. Pass instance to filter to one source; omit to probe all. Read-only; emits env-var NAMES only, never values.) |
"What MCP servers exist in the upstream ecosystem?" / discover ecosystem-published servers before source add | shell out to clawtool source registry --json | SourceRegistry (probes registry.modelcontextprotocol.io, returns {url, count, servers: [{name, description, version}]}. Pass limit for page size, url for private mirrors. Read-only; anonymous, no auth needed.) |
| Set up a repo / "init me" | Bash clawtool init | RecipeList → RecipeStatus → RecipeApply (conversational) |
| Scaffold a new Claude subagent | hand-edit ~/.claude/agents/*.md | AgentNew (kebab-case name + description + allowed-tools + optional default instance) |
| Scaffold a new Claude skill | hand-edit ~/.claude/skills/*/SKILL.md | SkillNew (agentskills.io standard template) |
| Check operator invariants before committing / ending session | shell out to git diff and guess | RulesCheck (event=pre_commit / session_end / pre_send + structured Context — returns Verdict with passed/warned/blocked) |
| Add a new operator rule (e.g. "README must update when X changes") | hand-edit .clawtool/rules.toml | RulesAdd (validates predicate syntax + scope=local default; ASK operator about local vs user before writing) |
| Run agents without permission prompts (operator absent) | silently set --dangerously-skip-permissions | clawtool send --unattended (one-time per-repo disclosure + audit log + hard kill switch). --yolo is a deliberate alias. |
| Inspect this instance's A2A Agent Card (peer discovery contract) | hand-write JSON | clawtool a2a card (Schema v0.2.x, Linux Foundation A2A. Phase 1: card-only mode — no HTTP/mDNS yet) |
| See BIAM dispatch progress as inline chat events | poll TaskGet repeatedly | clawtool task watch --all paired with Monitor tool (persistent: true). Each stdout line = one state transition. Use task watch <id> for a single task. |
| Live overhead view of every dispatch + agent + stats | repeated task list + agents polling | clawtool dashboard (alias clawtool tui) — Bubble Tea three-pane TUI, 1s refresh + push-mode tasks pane. q quits. |
| Watch every active dispatch in a split-pane TUI | tmux split + per-pane task watch <id> | clawtool orchestrator (alias orch) — auto-spawns one stdout-tail pane per active BIAM task; fades panes 5s after terminal so the layout reflows around live ones. r reconnects to the daemon. |
| "Add this to my todo / queue it for later" — operator surfaces a follow-up the SAME agent should pick up after the current task | shell out to a TODO file or invent a scratchpad list | AutopilotAdd (TOML-backed self-direction backlog at ~/.config/clawtool/autopilot/queue.toml). Distinct from SendMessage: AutopilotAdd queues SELF-work; SendMessage dispatches to a peer agent (codex/gemini/opencode). |
| "What should I work on next?" — agent has finished a task and wants to keep working without re-prompting the operator | stop and ask the operator | AutopilotNext (atomically claims the highest-priority pending item; returns empty=true when the queue is drained — the agent's signal to end the loop). Pair: AutopilotNext → do the work → AutopilotDone <id> → AutopilotNext again. |
| "Mark that task done / drop that one" — close out a backlog item | hand-edit the TOML | AutopilotDone <id> (completed) / AutopilotSkip <id> (abandoned). |
| "Show me the backlog" — inspect what's queued without claiming anything | Bash cat ~/.config/clawtool/autopilot/queue.toml | AutopilotList (read-only, optional status filter) or AutopilotStatus (histogram only). |
| "Keep working until I tell you to stop" / "don't stop, keep going" — operator wants every Claude turn-end to auto-continue with a fresh autodev prompt instead of returning control | leave the conversation idle and hope the operator re-prompts | AutodevStart arms the loop (Stop hook returns {decision:block, reason:...}); AutodevStop disarms. AutodevStatus reads counter + cap. NOT the same as AutonomousRun — AutonomousRun dispatches a goal to a peer agent; AutodevStart keeps THIS Claude session continuing across turns. |