pub async fn query(
prompt: impl Into<QueryInput>,
options: Option<ClaudeCodeOptions>,
) -> Result<impl Stream<Item = Result<Message>>>Expand description
Query Claude Code for one-shot or unidirectional streaming interactions.
This function is ideal for simple, stateless queries where you don’t need
bidirectional communication or conversation management. For interactive,
stateful conversations, use ClaudeSDKClient instead.
§Key differences from ClaudeSDKClient:
- Unidirectional: Send all messages upfront, receive all responses
- Stateless: Each query is independent, no conversation state
- Simple: Fire-and-forget style, no connection management
- No interrupts: Cannot interrupt or send follow-up messages
§When to use query():
- Simple one-off questions (“What is 2+2?”)
- Batch processing of independent prompts
- Code generation or analysis tasks
- Automated scripts and CI/CD pipelines
- When you know all inputs upfront
§When to use ClaudeSDKClient:
- Interactive conversations with follow-ups
- Chat applications or REPL-like interfaces
- When you need to send messages based on responses
- When you need interrupt capabilities
- Long-running sessions with state
§Arguments
prompt- The prompt to send to Claude. Can be a string for single-shot queries or a Stream of InputMessage for streaming mode.options- Optional configuration. If None, defaults toClaudeCodeOptions::default().
§Returns
A stream of messages from the conversation.
§Examples
§Simple query:
use cc_sdk::{query, Result};
use futures::StreamExt;
#[tokio::main]
async fn main() -> Result<()> {
// One-off question
let mut messages = query("What is the capital of France?", None).await?;
while let Some(msg) = messages.next().await {
println!("{:?}", msg?);
}
Ok(())
}§With options:
use cc_sdk::{query, ClaudeCodeOptions, Result};
use futures::StreamExt;
#[tokio::main]
async fn main() -> Result<()> {
// Code generation with specific settings
let options = ClaudeCodeOptions::builder()
.system_prompt("You are an expert Python developer")
.model("claude-3-opus-20240229")
.build();
let mut messages = query("Create a Python web server", Some(options)).await?;
while let Some(msg) = messages.next().await {
println!("{:?}", msg?);
}
Ok(())
}