AI Agent SDK (Claude Code SDK in Rust)

English | 中文
Idiomatic Rust SDK — 1:1 translation of Claude Code. Runs the full agent loop in-process with 50 built-in tools. Deploy anywhere: cloud, serverless, Docker, CI/CD.
AI Coding CLI: ai-code
Quick Start
cargo add ai-agent
export AI_AUTH_TOKEN=your-api-key
export AI_MODEL=MiniMaxAI/MiniMax-M2.5
use ai_agent::Agent;
let answer = Agent::prompt("claude-sonnet-4-6", "List 10 files").await?;
let agent = Agent::new("claude-sonnet-4-6")
.max_turns(10);
let result = agent.query("List 10 files").await?;
See Usage Examples for more.
Core Features
| Feature |
Description |
| Agent |
Create agents with custom models, tools, and prompts |
| Subagent |
Spawn subagents for parallel or specialized tasks |
| Session |
Persist, resume, fork conversations on disk |
| Context Compact |
Automatic conversation summarization when approaching context limits |
| Skills |
Load external skills or use 15+ bundled skills |
| Hooks |
29 lifecycle events with 4 hook types (shell, HTTP, prompt, agent), parallel execution, if conditions |
| Tools |
50 built-in tools across 15 categories (File Ops, Discovery, Shell, Web, LSP, Multi-agent, Tasks, Planning, User Interaction, Scheduling, Git, Skills, MCP, Remote, Communication) |
| Memory |
File-based persistent context via MEMORY.md |
| Permissions |
Tool access control with allow/deny rules |
| Plugins |
Load plugins with commands, skills, MCP servers |
| MCP |
Connect to Model Context Protocol servers |
| Cost Tracking |
Real-time token usage and cost estimation |
Built-in Tools
The SDK ships with 50 built-in tools organized into 15 categories. All tools are available out of the box with full parameter validation and type-safe schemas.
File Operations (4)
| # |
Tool |
Description |
| 1 |
Read |
Read files from filesystem — supports text files, images (PNG, JPG, GIF, WebP), PDFs, and Jupyter notebooks. Use offset and limit for large files |
| 2 |
Write |
Write content to files with exact path control |
| 3 |
FileEdit |
Edit files by performing exact string replacements (single or all occurrences) |
| 4 |
NotebookEdit |
Edit Jupyter notebook (.ipynb) cells — replace, insert, or delete cell content |
File Discovery (2)
| # |
Tool |
Description |
| 5 |
Glob |
Find files by glob pattern (e.g. **/*.ts) for file discovery |
| 6 |
Grep |
Search file contents using regex patterns — uses ripgrep (rg) if available, falls back to grep |
Shell Execution (3)
| # |
Tool |
Description |
| 7 |
Bash |
Execute shell commands with sandboxing, timeouts, and destructive command safety checks |
| 8 |
PowerShell |
Execute PowerShell commands — Windows-only tool for cmdlets and native executable execution |
| 9 |
Sleep |
Wait for a specified duration — user-interruptible, doesn't hold a shell process |
Web (3)
| # |
Tool |
Description |
| 10 |
WebFetch |
Fetch content from a URL and return as text — supports HTML (strips tags), JSON APIs, and plain text |
| 11 |
WebSearch |
Search the web for information — returns titles, URLs, and snippets |
| 12 |
WebBrowser |
Control a web browser for automation (navigate, screenshot, click, fill, evaluate JS) |
Code Intelligence (1)
| # |
Tool |
Description |
| 13 |
LSP |
Language Server Protocol operations — go-to-definition, find references, hover docs, document/workspace symbols, call hierarchy, implementations |
Multi-agent Orchestration (4)
| # |
Tool |
Description |
| 14 |
Agent |
Launch a subagent to handle complex, multi-step tasks autonomously (Explore, Plan, code-reviewer, general-purpose types) |
| 15 |
TeamCreate |
Create a team of agents that can work in parallel |
| 16 |
TeamDelete |
Delete a previously created agent team |
| 17 |
SendMessage |
Send a message to another agent within a team |
Task Management (6)
| # |
Tool |
Description |
| 18 |
TaskCreate |
Create a new structured task with subject, description, and active form |
| 19 |
TaskList |
List all tasks with statuses, owners, and dependencies |
| 20 |
TaskUpdate |
Update task status, details, or dependencies (pending → in_progress → completed) |
| 21 |
TaskGet |
Get full details of a specific task by ID |
| 22 |
TaskStop |
Stop a running background task by ID (also accepts shell_id for KillShell compatibility) |
| 23 |
TaskOutput |
Retrieve output from a running or completed background task with configurable timeout |
Planning Mode (2)
| # |
Tool |
Description |
| 24 |
EnterPlanMode |
Enter structured planning mode to explore codebase and design implementation |
| 25 |
ExitPlanMode |
Exit planning mode and present the plan for user approval |
User Interaction (2)
| # |
Tool |
Description |
| 26 |
AskUserQuestion |
Ask the user a question with multiple-choice options, previews, and multi-select support |
| 27 |
SendUserMessage |
Send a message to the user that they will actually read — brief, digest-style output |
Scheduling (3)
| # |
Tool |
Description |
| 28 |
CronCreate |
Schedule a task using standard 5-field cron expressions — supports recurring (7-day max) and one-shot modes |
| 29 |
CronDelete |
Cancel a previously scheduled cron task |
| 30 |
CronList |
List all scheduled cron tasks (both durable and session-only) |
Git Worktrees (2)
| # |
Tool |
Description |
| 31 |
EnterWorktree |
Create and enter an isolated git worktree for feature development |
| 32 |
ExitWorktree |
Exit a worktree session — option to keep or remove the worktree directory |
Skills & Configuration (4)
| # |
Tool |
Description |
| 33 |
Skill |
Invoke a skill by name — pre-built workflows like brainstorming, TDD, debugging, security-review |
| 34 |
Config |
Read or update dynamic harness configuration (permissions, hooks, env vars) |
| 35 |
ToolSearch |
Search for available tools by name or description |
| 36 |
TodoWrite |
Update the session todo list — track progress and organize multi-step work |
MCP (Model Context Protocol) (4)
| # |
Tool |
Description |
| 37 |
MCPTool |
Execute a tool on an MCP server — dynamically registered with mcp__serverName_toolName dispatch |
| 38 |
McpAuth |
Authenticate an MCP server requiring OAuth — returns an authorization URL for the user |
| 39 |
ListMcpResourcesTool |
List available resources from configured MCP servers |
| 40 |
ReadMcpResourceTool |
Read a specific resource from an MCP server by URI |
Remote / Cloud (1)
| # |
Tool |
Description |
| 41 |
RemoteTrigger |
Manage scheduled remote Claude Code agents (triggers) via the claude.ai CCR API — list, create, update, run |
Communication & Data (3)
| # |
Tool |
Description |
| 42 |
StructuredOutput |
Return structured output in a requested format — called exactly once at end of response |
| 43 |
send_user_file |
Send a file from the user to the agent |
| 44 |
Monitor |
Monitor system resources and performance |
Internal / Not Implemented (6)
These tools are defined in the schema but not actively registered. They are placeholders for future features.
| # |
Tool |
Description |
| 45 |
DiscoverSkills |
On-demand skill discovery (not yet implemented) |
| 46 |
OverflowTest |
Test overflow behavior (internal test tool) |
| 47 |
ReviewArtifact |
Review artifacts (not yet implemented) |
| 48 |
Snip |
Model-callable compaction tool (not yet implemented) |
| 49 |
TerminalCapture |
Terminal screen capture (not yet implemented) |
| 50 |
Workflow |
Manage workflows (not yet implemented) |
Usage Examples
The agent automatically uses 50 built-in tools across 15 categories to accomplish tasks.
Multi-turn Conversation
let agent = Agent::new("claude-sonnet-4-6")
.max_turns(10);
agent.query("Create /tmp/hello.txt with 'Hello'").await?;
agent.query("Read that file back").await?;
println!("Messages: {}", agent.get_messages().len());
Custom Tools
use ai_agent::{Agent, ToolDefinition, ToolInputSchema};
let agent = Agent::new("claude-sonnet-4-6")
.max_turns(5)
.tools(vec![
ToolDefinition {
name: "calculator".into(),
description: "Evaluate a math expression. Returns the result".into(),
input_schema: ToolInputSchema {
schema_type: "object".into(),
properties: serde_json::json!({
"expression": {
"description": "The expression to evaluate",
"type": "string"
}
}),
required: Some(vec!["expression".into()]),
},
..Default::default()
},
]);
MCP Servers
let config = McpServerConfig::Stdio(McpStdioConfig {
command: "npx".into(),
args: Some(vec!["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]),
..Default::default()
});
Hooks
registry.register("PreToolUse", HookDefinition {
command: Some("echo pre-tool".into()),
timeout: Some(5000),
matcher: Some("Read.*".into()),
});
Event Callback API (CLI/TUI Integration)
Register an on_event callback to receive incremental events during query execution — ideal for real-time chat UIs and TUIs.
use ai_agent::{Agent, AgentEvent, ContentDelta};
let agent = Agent::new("claude-sonnet-4-6")
.max_turns(10)
.on_event(|event| match &event {
AgentEvent::ContentBlockDelta {
delta: ContentDelta::Text { text },
..
} => print!("{}", text),
AgentEvent::Thinking { turn } => {
eprintln!("[Turn {} thinking...]", turn);
}
AgentEvent::Done { result } => {
println!("\nDone! Turns: {}", result.num_turns);
}
_ => {}
});
let result = agent.query("write hello world").await?;
Pub/Sub Event Subscription
For decoupled architectures, use subscribe() to listen to events independently:
let (mut sub, _guard) = agent.subscribe();
Interrupting Agent Execution
Call agent.interrupt() from another task to cancel a running query().
The operation returns AgentError::UserAborted.
use ai_agent::Agent;
use std::sync::Arc;
use std::time::Duration;
use tokio::sync::Mutex;
let agent = Arc::new(Mutex::new(Agent::new("claude-sonnet-4-6").max_turns(10)));
let interrupt_agent = Arc::clone(&agent);
let interrupt_task = tokio::spawn(async move {
tokio::time::sleep(Duration::from_secs(5)).await;
interrupt_agent.lock().await.interrupt();
});
let result = {
let mut ag = agent.lock().await;
ag.query("Process a large codebase").await
};
let _ = tokio::time::timeout(Duration::from_secs(10), interrupt_task).await;
See examples/27_interrupt.rs for a full runnable example.
Configuration
Agent Options
| Option |
Default |
Description |
model |
MiniMaxAI/MiniMax-M2.5 |
LLM model ID |
max_turns |
10 |
Max agentic turns |
max_tokens |
16384 |
Max response tokens |
max_budget_usd |
— |
Spending cap |
system_prompt |
— |
Custom system prompt |
cwd |
process.cwd() |
Working directory |
allowed_tools |
all |
Tool allow-list |
disallowed_tools |
— |
Tool deny-list |
Environment Variables
| Variable |
Default |
Description |
AI_AUTH_TOKEN |
— |
API key (required) |
AI_MODEL |
MiniMaxAI/MiniMax-M2.5 |
Model name |
AI_BASE_URL |
— |
Custom API endpoint |
AI_CONTEXT_WINDOW |
200000 |
Context window size |
AI_DISABLE_AUTO_MEMORY |
false |
Disable auto memory |
AI_MEMORY_PATH_OVERRIDE |
~/.ai |
Memory directory |
AI_AUTO_COMPACT_WINDOW |
model-based |
Compact trigger window |
AI_AUTOCOMPACT_PCT_OVERRIDE |
— |
Threshold % (0-100) |
AI_DISABLE_COMPACT |
false |
Disable compaction |
AI_CODE_DISABLE_BACKGROUND_TASKS |
false |
Disable background tasks |
API Compatibility
SDK uses OpenAI format, compatible with:
- MiniMax
- Anthropic (via compatible endpoint)
- OpenAI (compatible mode)
- Any provider with
/v1/chat/completions endpoint
Architecture
┌─────────────────────────────────────┐
│ Your Application │
│ use ai_agent::Agent │
└──────────────┬──────────────────────┘
│
┌──────────▼──────────┐
│ Agent │ Session, tools, MCP
│ query() │
└──────────┬──────────┘
│
┌──────────▼──────────┐
│ QueryEngine │ Agent loop: API → tools → repeat
└──────────┬──────────┘
│
┌──────────┼──────────┐
│ │ │
┌───▼───┐ ┌───▼────┐ ┌──▼────┐
│ LLM │ │ 50 │ │ MCP │
│ API │ │Tools │ │Server │
└───────┘ └───────┘ └───────┘
Examples
cargo run --example 01_simple_query
cargo run --example 18_plugin
cargo run --example 19_hooks
License
MIT