toast-api 0.1.1

An unofficial CLI client and API server for Claude
Documentation
use anyhow::Result;
use clap::{Args, Parser};
use toast_api::{cli, server};

#[derive(Parser, Debug)]
#[clap(author, version, about = "Claude API client and server")]
struct CliArgs {
    /// Run as server instead of CLI
    #[clap(short, long)]
    serve: bool,

    // Server options (passed through when --serve is used)
    #[clap(flatten)]
    server_args: ServerArgs,
}

// Server-specific arguments
#[derive(Args, Debug, Clone)]
struct ServerArgs {
    /// Port to listen on (server mode only)
    #[clap(long, default_value = "3000")]
    port: u16,

    /// Default Claude model to use (server mode only)
    #[clap(long, default_value = "claude-3-7-sonnet-20250219")]
    model: String,

    /// Host address to bind to (server mode only)
    #[clap(long, default_value = "0.0.0.0")]
    host: String,

    /// Enable debug logging (server mode only)
    #[clap(long)]
    debug: bool,
}

#[tokio::main]
async fn main() -> Result<()> {
    let args = CliArgs::parse();

    if args.serve {
        // Convert our ServerArgs to server::Args
        let server_args = server::Args {
            port: args.server_args.port,
            model: args.server_args.model,
            host: args.server_args.host,
            debug: args.server_args.debug,
        };
        server::run_with_args(server_args).await
    } else {
        cli::async_main().await
    }
}