Skip to main content

Crate claude_code

Crate claude_code 

Source
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

Featurequery()ClaudeSdkClient
SessionNew session each timeReuses same session
ConversationSingle exchangeMultiple exchanges in same context
ConnectionManaged automaticallyManual control
InterruptsNot supportedSupported
Custom ToolsSupportedSupported
Use CaseOne-off tasksContinuous 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.