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 sessions::get_session_messages;
pub use sessions::list_sessions;
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::McpServerConnectionStatus;
pub use types::McpServerInfo;
pub use types::McpServerStatus;
pub use types::McpServerStatusConfig;
pub use types::McpServersOption;
pub use types::McpStatusResponse;
pub use types::McpStdioServerConfig;
pub use types::McpToolAnnotations;
pub use types::McpToolInfo;
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::SDKSessionInfo;
pub use types::SandboxIgnoreViolations;
pub use types::SandboxNetworkConfig;
pub use types::SandboxSettings;
pub use types::SdkPluginConfig;
pub use types::SessionMessage;
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::TaskNotificationMessage;
pub use types::TaskNotificationStatus;
pub use types::TaskProgressMessage;
pub use types::TaskStartedMessage;
pub use types::TaskUsage;
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.
sessions
Session history helpers aligned with the Python SDK.
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.