codex-cli-sdk 0.0.1

Rust SDK for the OpenAI Codex CLI
Documentation
//! Multi-turn conversation using thread resumption.
//!
//! Shows how to capture the `thread_id` after the first turn and pass it to
//! `resume_thread()` to continue the same session in a later run.
//!
//! ```bash
//! cargo run --example 03_multi_turn
//! ```

use codex_cli_sdk::{Codex, CodexConfig, ThreadOptions};

#[tokio::main]
async fn main() -> codex_cli_sdk::Result<()> {
    let codex = Codex::new(CodexConfig::default())?;

    // Turn 1 — start a new thread
    println!("=== Turn 1 ===");
    let mut thread = codex.start_thread(ThreadOptions::default());
    let turn = thread
        .run(
            "Create a file called hello.py with a hello world program",
            Default::default(),
        )
        .await?;
    println!("{}", turn.final_response);

    let thread_id = thread
        .id()
        .expect("thread ID should be set after the first turn");
    println!("\nThread ID: {thread_id}");

    // Turn 2 — resume the same thread
    println!("\n=== Turn 2 ===");
    let mut thread = codex.resume_thread(&thread_id, ThreadOptions::default());
    let turn = thread
        .run("Now add argument parsing to hello.py", Default::default())
        .await?;
    println!("{}", turn.final_response);

    // Turn 3 — resume again
    println!("\n=== Turn 3 ===");
    let mut thread = codex.resume_thread(&thread_id, ThreadOptions::default());
    let turn = thread
        .run("Add a --version flag that prints 1.0.0", Default::default())
        .await?;
    println!("{}", turn.final_response);

    Ok(())
}