pub struct ClaudeSDKClient { /* private fields */ }Expand description
Interactive client for bidirectional communication with Claude
ClaudeSDKClient provides a stateful, interactive interface for communicating
with Claude Code CLI. Unlike the simple query function, this client supports:
- Bidirectional communication
- Multiple sessions
- Interrupt capabilities
- State management
- Follow-up messages based on responses
§Example
use cc_sdk::{ClaudeSDKClient, ClaudeCodeOptions, Message, Result};
use futures::StreamExt;
#[tokio::main]
async fn main() -> Result<()> {
let options = ClaudeCodeOptions::builder()
.system_prompt("You are a helpful assistant")
.model("claude-3-opus-20240229")
.build();
let mut client = ClaudeSDKClient::new(options);
// Connect with initial prompt
client.connect(Some("Hello!".to_string())).await?;
// Receive initial response
let mut messages = client.receive_messages().await;
while let Some(msg) = messages.next().await {
match msg? {
Message::Result { .. } => break,
msg => println!("{:?}", msg),
}
}
// Send follow-up
client.send_request("What's 2 + 2?".to_string(), None).await?;
// Receive response
let mut messages = client.receive_messages().await;
while let Some(msg) = messages.next().await {
println!("{:?}", msg?);
}
// Disconnect
client.disconnect().await?;
Ok(())
}Implementations§
Source§impl ClaudeSDKClient
impl ClaudeSDKClient
Sourcepub fn new(options: ClaudeCodeOptions) -> Self
pub fn new(options: ClaudeCodeOptions) -> Self
Create a new client with the given options
Sourcepub async fn connect(&mut self, initial_prompt: Option<String>) -> Result<()>
pub async fn connect(&mut self, initial_prompt: Option<String>) -> Result<()>
Connect to Claude CLI with an optional initial prompt
Sourcepub async fn send_user_message(&mut self, prompt: String) -> Result<()>
pub async fn send_user_message(&mut self, prompt: String) -> Result<()>
Send a user message to Claude
Sourcepub async fn send_request(
&mut self,
prompt: String,
_session_id: Option<String>,
) -> Result<()>
pub async fn send_request( &mut self, prompt: String, _session_id: Option<String>, ) -> Result<()>
Send a request to Claude (alias for send_user_message with optional session_id)
Sourcepub async fn receive_messages(
&mut self,
) -> impl Stream<Item = Result<Message>> + use<>
pub async fn receive_messages( &mut self, ) -> impl Stream<Item = Result<Message>> + use<>
Receive messages from Claude
Returns a stream of messages. The stream will end when a Result message is received or the connection is closed.
Sourcepub async fn is_connected(&self) -> bool
pub async fn is_connected(&self) -> bool
Check if the client is connected
Sourcepub async fn get_sessions(&self) -> Vec<String>
pub async fn get_sessions(&self) -> Vec<String>
Get active session IDs
Sourcepub async fn disconnect(&mut self) -> Result<()>
pub async fn disconnect(&mut self) -> Result<()>
Disconnect from Claude CLI
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ClaudeSDKClient
impl !RefUnwindSafe for ClaudeSDKClient
impl Send for ClaudeSDKClient
impl Sync for ClaudeSDKClient
impl Unpin for ClaudeSDKClient
impl !UnwindSafe for ClaudeSDKClient
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more