ruvector/docs/research/claude-code-rvsource/02-tool-system.md
rUv 930fca916f feat(sse): decouple SSE to mcp.pi.ruv.io proxy + Claude Code source research
SSE Proxy Decoupling (ADR-130):
- Fix ruvbrain-sse proxy: proper MCP handshake, session creation, drain polling
- Fix internal queue endpoints: session_create keeps receiver, drain returns buffered messages
- Add response_queues to AppState for SSE proxy communication
- Skip sparsifier for >5M edge graphs (was crashing on 16M edges)
- Add SSE_DISABLED/MAX_SSE env vars for configurable connection limits
- Route SSE to dedicated mcp.pi.ruv.io subdomain (Cloudflare CNAME)
- Serve SSE at root / path on proxy (no /sse needed)
- Update all references from pi.ruv.io/sse to mcp.pi.ruv.io
- Fix Dockerfile consciousness crate build (feature/version mismatches)

Claude Code CLI Source Research (ADR-133):
- 19 research documents analyzing Claude Code internals (3000+ lines)
- Decompiler script + RVF corpus builder for all major versions
- Binary RVF containers for v0.2, v1.0, v2.0, v2.1 (300-2068 vectors each)
- Call graphs, class hierarchies, state machines from minified source

Integration Strategy (ADR-134):
- 6-tier integration plan: WASM MCP, agents, hooks, cache, SDK, plugin
- Integration guide with architecture diagrams and performance targets

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-02 23:39:56 +00:00

150 lines
4.5 KiB
Markdown

# Claude Code CLI: Tool System Architecture
## Built-in Tools
Claude Code registers tools with the Anthropic Messages API using the standard
tool_use / tool_result content block protocol.
### Tool Registry
The internal tool name map (display names for UI):
```javascript
{
Read: "Reading",
Write: "Writing",
Edit: "Editing",
MultiEdit: "Editing",
Bash: "Running",
Glob: "Searching",
Grep: "Searching",
WebFetch: "Fetching",
WebSearch: "Searching",
Task: "Running task",
FileReadTool: "Reading",
FileWriteTool: "Writing",
FileEditTool: "Editing",
GlobTool: "Searching",
GrepTool: "Searching",
BashTool: "Running",
NotebookEditTool: "Editing notebook",
LSP: "LSP"
}
```
### Tool Name Variables (Internal References)
| Variable | Tool Name |
|----------|-----------|
| `Yq` | Bash |
| `Bq` | Read |
| `c7` | Write |
| `wK` | Edit |
| `Gf` | Glob |
| `f9` | Grep |
| `sw` | WebFetch |
| `nE` | WebSearch |
| `IL` | NotebookEdit |
| `WX` | ToolSearch |
| `lI` | TodoWrite |
| `nj` | Skill |
| `tXH` | SendUserMessage |
### Tool Categories
**File Operations**:
- `Read` / `FileReadTool` -- Read files, images, PDFs, notebooks
- `Write` / `FileWriteTool` -- Create or overwrite files
- `Edit` / `FileEditTool` -- String replacement edits in existing files
- `MultiEdit` -- Multiple edits in a single tool call
- `NotebookEdit` / `NotebookEditTool` -- Jupyter notebook cell operations
**Search**:
- `Glob` / `GlobTool` -- File pattern matching (fast, sorted by mtime)
- `Grep` / `GrepTool` -- Content search via ripgrep with regex support
**Execution**:
- `Bash` / `BashTool` -- Shell command execution with sandbox support
- `Task` -- Spawn subagent for parallel work
**Web**:
- `WebFetch` -- HTTP fetch with content extraction
- `WebSearch` -- Web search integration
**Agent/System**:
- `ToolSearch` -- Discover deferred tools (MCP tools loaded on demand)
- `Skill` -- Execute registered skills/slash commands
- `SendUserMessage` -- Agent-to-user communication (brief mode)
- `TodoRead` / `TodoWrite` -- Task list management
- `EnterWorktree` / `ExitWorktree` -- Git worktree management
- `LSP` -- Language Server Protocol integration
### Tool Schema Pattern
Each tool is defined with:
```javascript
{
name: "ToolName",
description: `Template literal with ${otherToolNames} interpolated`,
input_schema: {
type: "object",
properties: { ... },
required: [ ... ]
}
}
```
Tool descriptions dynamically reference other tool names so the model knows
the full toolkit available. For example, Bash's description says "Avoid using
this tool to run grep, find, cat... instead use the appropriate dedicated tool."
### Tool Validation
Tools have category-based validation:
- **filePatternTools**: `["Read", "Write", "Edit", "Glob", "NotebookRead", "NotebookEdit"]`
- Validate file paths
- **bashPrefixTools**: `["Bash"]`
- Validate command prefixes against allowed/denied patterns
- **customValidation**: Per-tool validators (e.g., WebSearch rejects wildcards)
### Tool Permission Flow
```
User prompt -> Model generates tool_use -> Permission check -> Execute -> tool_result
```
Each tool call goes through the permission system before execution.
See `04-permission-system.md` for details.
### MCP Tool Integration
MCP (Model Context Protocol) tools extend the built-in set:
- MCP tools are prefixed with `mcp__<server-name>__<tool-name>`
- `ReadMcpResourceTool` -- Read MCP server resources
- MCP tools can be deferred (loaded on-demand via `ToolSearch`)
- Tool output size controlled by `MAX_MCP_OUTPUT_TOKENS` env var
- Large outputs can be saved to files (`ENABLE_MCP_LARGE_OUTPUT_FILES`)
### Tool Concurrency
`CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` controls parallel tool execution.
Multiple tool calls in a single response can execute concurrently.
### Content Block Types
The API supports these content block types in messages:
| Type | Direction | Purpose |
|------|-----------|---------|
| `text` | Both | Text content |
| `thinking` | Response | Extended thinking |
| `redacted_thinking` | Response | Safety-redacted thinking |
| `tool_use` | Response | Tool call request |
| `tool_result` | Request | Tool execution result |
| `image` | Request | Image content |
| `file` | Request | File content |
| `server_tool_use` | Response | Server-side tool calls |
| `web_search_tool_result` | Response | Web search results |
| `code_execution_tool_result` | Response | Code execution results |
| `mcp_tool_use` | Response | MCP tool calls |
| `mcp_tool_result` | Response | MCP tool results |