use codex_cli_sdk::config::{SandboxPolicy, WebSearchMode};
use codex_cli_sdk::{Codex, CodexConfig, ThreadOptions};
use std::path::PathBuf;
#[tokio::main]
async fn main() -> codex_cli_sdk::Result<()> {
let codex = Codex::new(CodexConfig::default())?;
println!("=== Restricted sandbox ===");
let options = ThreadOptions::builder()
.sandbox(SandboxPolicy::Restricted)
.build();
let mut thread = codex.start_thread(options);
let turn = thread
.run(
"List all Rust source files in src/ and count the lines in each",
Default::default(),
)
.await?;
println!("{}", turn.final_response);
println!("\n=== WorkspaceWrite + extra dir ===");
let options = ThreadOptions::builder()
.sandbox(SandboxPolicy::WorkspaceWrite)
.additional_directories(vec![PathBuf::from("/tmp/my-output")])
.build();
let mut thread = codex.start_thread(options);
let turn = thread
.run(
"Write a summary of the project to /tmp/my-output/summary.txt",
Default::default(),
)
.await?;
println!("{}", turn.final_response);
println!("\n=== WorkspaceWrite + network + web search ===");
let options = ThreadOptions::builder()
.sandbox(SandboxPolicy::WorkspaceWrite)
.network_access(true)
.web_search(WebSearchMode::Live)
.build();
let mut thread = codex.start_thread(options);
let turn = thread
.run(
"Search for the latest stable version of the tokio crate",
Default::default(),
)
.await?;
println!("{}", turn.final_response);
Ok(())
}