4.4 KiB
claw-code Architecture
A high-level overview of how claw-code is structured. For implementation details, see source code in rust/crates/. For provider details, see SUPPORTED_PROVIDERS.md. For pinpoint navigation, see ROADMAP.md.
Overview
claw-code is a Rust-based CLI for interacting with LLM providers (Anthropic, OpenAI-compatible, xAI, DashScope, etc.). It provides:
- Streaming conversation with auto-compaction
- Tool execution (file read/write, bash, MCP)
- Multi-provider routing
- Session persistence
- Parallel agent execution
Workspace Layout
The Rust workspace is organized in rust/crates/:
Core crates
rusty-claude-cli— CLI entry point. Parses args, routes commands, manages TUI/headless modes.runtime— Conversation engine. Manages session state, message history, auto-compaction, tool dispatch, hooks, MCP, and branch/lane events.api— Provider abstraction. HostsMODEL_REGISTRY(provider/model routing), SSE streaming, request/response handling. Providers:anthropic,openai_compat.tools— Tool definitions. File I/O, bash execution, MCP integration, PDF extraction.
Support crates
commands— Parsed command dispatch layer between CLI and runtime.plugins— Plugin/hook lifecycle (hooks.rs).telemetry— Metrics and tracing instrumentation.compat-harness— Parity test harness for Rust-port validation.mock-anthropic-service— Local mock server for offline/test use.
Request Flow
- CLI parse (
rusty-claude-cli/src/main.rs) — interprets args, env vars, settings.json - Provider selection (
api/src/providers/mod.rs) — routes to provider viaMODEL_REGISTRYbased on model prefix - Conversation execution (
runtime/src/conversation.rs) — sends to provider via SSE, receives streamed response - Tool dispatch (
tools/src/lib.rs) — if response includestool_use, execute and feed backtool_result - Auto-compaction check (
runtime/src/compact.rs) — REACTIVE-AFTER-SUCCESS only (see #287 for preflight gap) - Output — JSON envelope (
--output-format json) or text (default)
Key Subsystems
Auto-compaction
Triggered post-turn when usage.input_tokens > threshold. See:
- Threshold via env-only (#283)
- Reactive-not-preflight (#287, CRITICAL)
- Manual
/compactskip-reasons (#289) - Failure envelope coverage (#288)
Provider routing
Hard-coded MODEL_REGISTRY + env-var-based auth + model-prefix heuristics. See:
- SUPPORTED_PROVIDERS.md for current providers
- #285 for declarative providers/models/websearch source-of-truth
- #245, #246 for declarative config & backend swap
- #290, #291, #292 for transport resilience (stream-init, circuit-breaker, escalation)
Parallel agents
Lane-based execution via runtime/src/lane_events.rs. Manifest-driven lifecycle. See:
- #286 for detached-thread + no-heartbeat issue (CRITICAL)
Tool lifecycle / hooks
Tools defined in tools/src/. Hook events emitted via runtime/src/hooks.rs and plugins/src/hooks.rs. See:
- #254 (MCP refresh)
- #268 (tool-rendering parity)
- #274 (hook-execution-event envelope)
- #280 (hook event tap)
Session persistence
Sessions managed in runtime/src/session.rs. See:
- #278 (version-comparison)
- #279 (unknown-field policy)
CLI dispatch
CLI parsing in rusty-claude-cli/src/main.rs. Issues:
- #262
--max-turnsspec - #267
--cwdruntime fix - #272 position-independent parsing
- #282 env-vs-config consolidation
Build & Test
See CONTRIBUTING.md for build commands. Quick reference:
cd rust && cargo build # Build all crates
cd rust && cargo test # Run all Rust tests
Tracing & Debugging
- Session state:
runtime/src/session.rs+~/.claw/sessions/<id>/ - Provider responses: Set
RUST_LOG=tracefor verbose SSE logs - Parity checks: Use
compat-harnesscrate for Rust-port validation
Related Documents
- ROADMAP.md — Pinpoints by cluster
- TROUBLESHOOTING.md — User-facing failure mitigation
- SUPPORTED_PROVIDERS.md — Provider/model details
- CONTRIBUTING.md — Pinpoint filing format
- PINPOINT_FILING_GUIDE.md — Filing workflow
- CHANGELOG.md — Recent changes