Crate claude_code_acp

Crate claude_code_acp 

Source
Expand description

Claude Code ACP Agent

A Rust implementation of the ACP (Agent Client Protocol) Agent for Claude Code, enabling editors like Zed to use Claude Code capabilities.

§Features

  • ACP protocol support over stdio
  • Session management with token usage tracking
  • Streaming responses
  • Permission mode handling

§Quick Start

use claude_code_acp::run_acp;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    run_acp().await?;
    Ok(())
}

§Environment Variables

  • ANTHROPIC_BASE_URL: Custom API base URL
  • ANTHROPIC_API_KEY: API key (preferred)
  • ANTHROPIC_AUTH_TOKEN: Auth token (legacy, fallback)
  • ANTHROPIC_MODEL: Model to use (default: claude-sonnet-4-20250514)
  • ANTHROPIC_SMALL_FAST_MODEL: Model for fast operations
  • MAX_THINKING_TOKENS: Maximum tokens for extended thinking mode

§Configuration Loading Priority

The agent loads configuration from multiple sources with the following priority (highest to lowest):

  1. Environment Variables - Override all other sources
  2. Settings Files - Top-level fields - Used when environment variables are not set
  3. Settings Files - env object - Fallback compatible with Claude Code CLI format
  4. Defaults - Fallback values

Settings files are loaded from:

  • ~/.claude/settings.json (user settings)
  • .claude/settings.json (project settings)
  • .claude/settings.local.json (local settings, highest priority among settings files)

§Example settings.json

Using top-level fields:

{
  "model": "claude-opus-4-20250514",
  "smallFastModel": "claude-haiku-4-20250514",
  "apiBaseUrl": "https://api.anthropic.com"
}

Using env object (compatible with Claude Code CLI):

{
  "env": {
    "ANTHROPIC_MODEL": "claude-opus-4-20250514",
    "ANTHROPIC_SMALL_FAST_MODEL": "claude-haiku-4-20250514",
    "ANTHROPIC_BASE_URL": "https://api.anthropic.com"
  }
}

Re-exports§

pub use agent::run_acp;
pub use agent::run_acp_with_cli;
pub use agent::shutdown_otel;
pub use cli::Cli;
pub use hooks::HookCallbackRegistry;
pub use hooks::create_post_tool_use_hook;
pub use hooks::create_pre_tool_use_hook;
pub use mcp::AcpMcpServer;
pub use mcp::McpServer;
pub use mcp::ToolContext;
pub use mcp::ToolRegistry;
pub use mcp::ToolResult;
pub use mcp::get_disallowed_tools;
pub use settings::Settings;
pub use settings::SettingsManager;
pub use terminal::TerminalClient;
pub use terminal::TerminalHandle;
pub use types::AgentConfig;
pub use types::AgentError;
pub use types::NewSessionMeta;
pub use types::Result;

Modules§

agent
ACP Agent implementation
cli
Command-line interface definitions
converter
Message conversion utilities for ACP ↔ Claude SDK
hooks
Hooks system for tool execution lifecycle
mcp
MCP (Model Context Protocol) Server integration
permissions
Permission handling for can_use_tool callback
session
Session management for ACP Agent
settings
Settings management
terminal
Terminal API module
tracing
Tracing and observability utilities
types
Public types for Claude Code ACP Agent