Expand description
§Claude Code SDK for Rust
A Rust implementation of the Claude Code Agent SDK, providing programmatic access to Claude Code as a subprocess. This crate is a port of the official Python Claude Code SDK.
§Overview
The SDK provides two main ways to interact with Claude Code:
query()— Creates a new session for each interaction. Best for one-off tasks, independent operations, and simple automation scripts.ClaudeSdkClient— Maintains a conversation session across multiple exchanges. Best for continuing conversations, follow-up questions, interactive applications, and session lifecycle management.
§Quick Comparison
| Feature | query() | ClaudeSdkClient |
|---|---|---|
| Session | New session each time | Reuses same session |
| Conversation | Single exchange | Multiple exchanges in same context |
| Connection | Managed automatically | Manual control |
| Interrupts | Not supported | Supported |
| Custom Tools | Supported | Supported |
| Use Case | One-off tasks | Continuous conversations |
§Example — One-off query
use claude_code::{query, ClaudeAgentOptions, InputPrompt, Message};
let messages = query(
InputPrompt::Text("What is 2 + 2?".to_string()),
Some(ClaudeAgentOptions {
permission_mode: Some(claude_code::PermissionMode::BypassPermissions),
..Default::default()
}),
None,
).await?;
for msg in messages {
if let Message::Assistant(assistant) = msg {
println!("{:?}", assistant.content);
}
}§Example — Continuous conversation with ClaudeSdkClient
use claude_code::{ClaudeSdkClient, InputPrompt};
let mut client = ClaudeSdkClient::new(None, None);
client.connect(None).await?;
// First question
client.query(InputPrompt::Text("What's the capital of France?".into()), "default").await?;
let response = client.receive_response().await?;
// Follow-up — session retains context
client.query(InputPrompt::Text("What's the population of that city?".into()), "default").await?;
let follow_up = client.receive_response().await?;
client.disconnect().await?;Re-exports§
pub use client::ClaudeSdkClient;pub use client::InputPrompt;pub use errors::CLIConnectionError;pub use errors::CLIJSONDecodeError;pub use errors::CLINotFoundError;pub use errors::ClaudeSDKError;pub use errors::Error;pub use errors::MessageParseError;pub use errors::ProcessError;pub use errors::Result;pub use message_parser::parse_message;pub use query::Query;pub use query::handle_sdk_mcp_request;pub use query_fn::query;pub use query_fn::query_from_stream;pub use query_fn::query_stream;pub use query_fn::query_stream_from_stream;pub use sdk_mcp::McpSdkServer;pub use sdk_mcp::SdkMcpTool;pub use sdk_mcp::create_sdk_mcp_server;pub use sdk_mcp::tool;pub use transport::subprocess_cli::DEFAULT_MAX_BUFFER_SIZE;pub use transport::subprocess_cli::JsonStreamBuffer;pub use transport::subprocess_cli::Prompt;pub use transport::subprocess_cli::SubprocessCliTransport;pub use transport::SplitAdapter;pub use transport::Transport;pub use transport::TransportCloseHandle;pub use transport::TransportFactory;pub use transport::TransportReader;pub use transport::TransportSplitResult;pub use transport::TransportWriter;pub use transport::split_with_adapter;pub use types::AgentDefinition;pub use types::AssistantMessage;pub use types::ClaudeAgentOptions;pub use types::ContentBlock;pub use types::HookCallback;pub use types::HookContext;pub use types::HookInput;pub use types::HookJSONOutput;pub use types::HookMatcher;pub use types::McpHttpServerConfig;pub use types::McpSSEServerConfig;pub use types::McpSdkServerConfig;pub use types::McpServerConfig;pub use types::McpServersOption;pub use types::McpStdioServerConfig;pub use types::Message;pub use types::PermissionMode;pub use types::PermissionResult;pub use types::PermissionResultAllow;pub use types::PermissionResultDeny;pub use types::PermissionUpdate;pub use types::ResultMessage;pub use types::SandboxIgnoreViolations;pub use types::SandboxNetworkConfig;pub use types::SandboxSettings;pub use types::SdkPluginConfig;pub use types::SettingSource;pub use types::StderrCallback;pub use types::StreamEvent;pub use types::SystemMessage;pub use types::SystemPrompt;pub use types::SystemPromptPreset;pub use types::TextBlock;pub use types::ThinkingBlock;pub use types::ThinkingConfig;pub use types::ToolAnnotations;pub use types::ToolPermissionContext;pub use types::ToolResultBlock;pub use types::ToolUseBlock;pub use types::ToolsOption;pub use types::ToolsPreset;pub use types::UserContent;pub use types::UserMessage;
Modules§
- client
- Session-based client for multi-turn interactions with Claude Code.
- errors
- Error types for the Claude Code SDK.
- internal_
client - Internal client for executing single-query sessions.
- message_
parser - JSON message parser for the Claude Code CLI protocol.
- query
- Core query/session management for Claude Code communication.
- query_
fn - Convenience function for one-off Claude Code queries.
- sdk_mcp
- In-process MCP (Model Context Protocol) server support.
- transport
- Transport layer abstraction for CLI communication.
- types
- Core data types for the Claude Code SDK.
Constants§
- SDK_
VERSION - The version of the Claude Code Rust SDK, sourced from
Cargo.toml.