| Crates.io | claude-agent |
| lib.rs | claude-agent |
| version | 0.2.23 |
| created_at | 2025-12-31 13:59:01.509047+00 |
| updated_at | 2026-01-24 14:41:00.535428+00 |
| description | Rust SDK for building AI agents with Anthropic's Claude - Direct API, no CLI dependency |
| homepage | |
| repository | https://github.com/junyeong-ai/claude-agent-rs |
| max_upload_size | |
| id | 2014760 |
| size | 2,395,171 |
Production-Ready Rust SDK for Claude API
English | 한국어
| Feature | claude-agent-rs | Other SDKs |
|---|---|---|
| Pure Rust, No Runtime Dependencies | Native | Node.js/Python required |
| Claude Code CLI Auth Reuse | OAuth token sharing | Manual API key setup |
| Automatic Prompt Caching | System + Message caching | Manual implementation |
| TOCTOU-Safe File Operations | openat() + O_NOFOLLOW |
Standard file I/O |
| Multi-Cloud Support | Bedrock, Vertex, Foundry | Limited or none |
| OS-Level Sandboxing | Landlock, Seatbelt | None |
| 1100+ Tests | Production-proven | Varies |
[dependencies]
claude-agent = "0.2"
tokio = { version = "1", features = ["full"] }
use claude_agent::query;
#[tokio::main]
async fn main() -> claude_agent::Result<()> {
let response = query("Explain the benefits of Rust").await?;
println!("{response}");
Ok(())
}
use claude_agent::stream;
use futures::StreamExt;
use std::pin::pin;
#[tokio::main]
async fn main() -> claude_agent::Result<()> {
let stream = stream("What is quantum computing?").await?;
let mut stream = pin!(stream);
while let Some(chunk) = stream.next().await {
print!("{}", chunk?);
}
Ok(())
}
use claude_agent::{Agent, AgentEvent, ToolAccess};
use futures::StreamExt;
use std::pin::pin;
#[tokio::main]
async fn main() -> claude_agent::Result<()> {
let agent = Agent::builder()
.from_claude_code("./my-project").await? // Auth + working_dir
.tools(ToolAccess::all()) // 12 built-in tools
.with_web_search() // + Server tools
.build()
.await?;
let stream = agent.execute_stream("Find and fix the bug in main.rs").await?;
let mut stream = pin!(stream);
while let Some(event) = stream.next().await {
match event? {
AgentEvent::Text(text) => print!("{text}"),
AgentEvent::ToolComplete { name, .. } => eprintln!("\n[{name}]"),
AgentEvent::Complete(result) => {
eprintln!("\nTokens: {}", result.total_tokens());
}
_ => {}
}
}
Ok(())
}
Agent::builder()
.from_claude_code(".").await? // Uses ~/.claude/credentials.json
.build()
.await?
use claude_agent::Auth;
Agent::builder()
.auth(Auth::api_key("sk-ant-...")).await?
.build()
.await?
use claude_agent::Auth;
// AWS Bedrock
Agent::builder()
.auth(Auth::bedrock("us-east-1")).await?
.build().await?
// Google Vertex AI
Agent::builder()
.auth(Auth::vertex("project-id", "us-central1")).await?
.build().await?
// Azure AI Foundry
Agent::builder()
.auth(Auth::foundry("resource-name")).await?
.build().await?
// Use Bedrock auth with .claude/ project resources
Agent::builder()
.auth(Auth::bedrock("us-east-1")).await?
.working_dir("./my-project")
.with_project_resources() // Load .claude/ without OAuth
.build().await?
See: Authentication Guide | Cloud Providers
| Category | Tools |
|---|---|
| File | Read, Write, Edit, Glob, Grep |
| Shell | Bash, KillShell |
| Agent | Task, TaskOutput, TodoWrite, Skill |
| Planning | Plan |
| Tool | Description |
|---|---|
| WebFetch | Fetch and process URL content |
| WebSearch | Web search with citations |
| ToolSearch | Search tools by regex or BM25 |
Agent::builder()
.with_web_fetch()
.with_web_search()
.with_tool_search()
ToolAccess::all() // All 12 tools
ToolAccess::only(["Read", "Grep", "Glob"]) // Specific tools
ToolAccess::except(["Bash", "Write"]) // Exclude tools
See: Tools Guide
Automatic caching based on Anthropic best practices:
use claude_agent::{CacheConfig, CacheStrategy};
Agent::builder()
.cache(CacheConfig::default()) // Full caching (recommended)
// .cache(CacheConfig::system_only()) // System prompt only (1h TTL)
// .cache(CacheConfig::messages_only()) // Messages only (5m TTL)
// .cache(CacheConfig::disabled()) // No caching
| Type | Model | Purpose |
|---|---|---|
explore |
Haiku | Fast codebase search |
plan |
Primary | Implementation planning |
general |
Primary | Complex multi-step tasks |
See: Subagents Guide
Define reusable skills via markdown:
.claude/skills/deploy.md:
---
description: Production deployment
allowed-tools: [Bash, Read]
---
Deploy to $ARGUMENTS environment.
See: Skills Guide
Auto-loads CLAUDE.md for project context:
# Project Guide
@import ./docs/architecture.md
## Rules
- Use Rust 2024 Edition
See: Memory System Guide
| Backend | Feature | Use Case |
|---|---|---|
| Memory | (default) | Development |
| JSONL | jsonl |
CLI-compatible |
| PostgreSQL | postgres |
Production |
| Redis | redis-backend |
High-throughput |
See: Session Guide
10 lifecycle events for execution control:
| Blockable | Non-Blockable |
|---|---|
| PreToolUse | PostToolUse, PostToolUseFailure |
| UserPromptSubmit | Stop, SubagentStart, SubagentStop |
| PreCompact, SessionStart, SessionEnd |
See: Hooks Guide
use claude_agent::{McpManager, McpServerConfig};
use std::collections::HashMap;
let mut mcp = McpManager::new();
mcp.add_server("filesystem", McpServerConfig::Stdio {
command: "npx".into(),
args: vec!["-y".into(), "@anthropic-ai/mcp-server-filesystem".into()],
env: HashMap::new(),
}).await?;
Agent::builder().mcp_manager(mcp).build().await?
See: MCP Guide
| Feature | Description |
|---|---|
| OS Sandbox | Landlock (Linux 5.13+), Seatbelt (macOS) |
| TOCTOU-Safe | openat() + O_NOFOLLOW atomic operations |
| Bash AST | tree-sitter based dangerous command detection |
| Resource Limits | setrlimit() process isolation |
| Network Filter | Domain whitelist/blacklist |
See: Security Guide | Sandbox Guide
| Document | Description |
|---|---|
| Architecture | System structure and data flow |
| Authentication | OAuth, API Key, cloud integration |
| Tools | 12 built-in + 3 server tools |
| Skills | Slash commands and skill definitions |
| Subagents | Subagent spawning and management |
| Memory | CLAUDE.md and @import |
| Hooks | 10 lifecycle events |
| MCP | External MCP servers |
| Session | Persistence and prompt caching |
| Permissions | Permission modes and policies |
| Security | TOCTOU-safe operations |
| Sandbox | Landlock and Seatbelt |
| Models | Model registry and pricing tiers |
| Tokens | Context window tracking |
| Budget | Cost limits (USD) |
| Observability | OpenTelemetry integration |
| Output Styles | Response formatting |
| Cloud Providers | Bedrock, Vertex, Foundry |
[dependencies]
claude-agent = { version = "0.2", features = ["mcp", "postgres"] }
| Feature | Description |
|---|---|
cli-integration |
Claude Code CLI support (default) |
mcp |
MCP protocol support |
multimedia |
PDF reading support |
aws |
AWS Bedrock |
gcp |
Google Vertex AI |
azure |
Azure AI Foundry |
jsonl |
JSONL persistence (CLI-compatible) |
postgres |
PostgreSQL persistence |
redis-backend |
Redis persistence |
otel |
OpenTelemetry |
full |
All features |
cargo run --example advanced_test # Skills, subagents, hooks
cargo run --example all_tools_test # All 12 tools
cargo run --example server_tools # WebFetch, WebSearch
| Variable | Description |
|---|---|
ANTHROPIC_API_KEY |
API key |
ANTHROPIC_MODEL |
Default model |
CLAUDE_CODE_USE_BEDROCK |
Enable Bedrock |
CLAUDE_CODE_USE_VERTEX |
Enable Vertex AI |
CLAUDE_CODE_USE_FOUNDRY |
Enable Foundry |
cargo test # 1100+ tests
cargo test -- --ignored # + live API tests
cargo clippy --all-features # Lint
MIT