mirror of
https://github.com/openai/codex.git
synced 2026-05-05 20:07:02 +00:00
This changes how instantiating `Config` works and also adds `approval_policy` and `sandbox_policy` as fields. The idea is: * All fields of `Config` have appropriate default values. * `Config` is initially loaded from `~/.codex/config.toml`, so values in `config.toml` will override those defaults. * Clients must instantiate `Config` via `Config::load_with_overrides(ConfigOverrides)` where `ConfigOverrides` has optional overrides that are expected to be settable based on CLI flags. The `Config` should be defined early in the program and then passed down. Now functions like `init_codex()` take fewer individual parameters because they can just take a `Config`. Also, `Config::load()` used to fail silently if `~/.codex/config.toml` had a parse error and fell back to the default config. This seemed really bad because it wasn't clear why the values in my `config.toml` weren't getting picked up. I changed things so that `load_with_overrides()` returns `Result<Config>` and verified that the various CLIs print a reasonable error if `config.toml` is malformed. Finally, I also updated the TUI to show which **sandbox** value is being used, as we do for other key values like **model** and **approval**. This was also a reminder that the various values of `--sandbox` are honored on Linux but not macOS today, so I added some TODOs about fixing that.
65 lines
2.2 KiB
Rust
65 lines
2.2 KiB
Rust
use clap::ArgAction;
|
||
use clap::Parser;
|
||
use codex_core::ApprovalModeCliArg;
|
||
use codex_core::SandboxModeCliArg;
|
||
use std::path::PathBuf;
|
||
|
||
/// Command‑line arguments.
|
||
#[derive(Debug, Parser)]
|
||
#[command(
|
||
author,
|
||
version,
|
||
about = "Interactive Codex CLI that streams all agent actions."
|
||
)]
|
||
pub struct Cli {
|
||
/// User prompt to start the session.
|
||
pub prompt: Option<String>,
|
||
|
||
/// Override the default model from ~/.codex/config.toml.
|
||
#[arg(short, long)]
|
||
pub model: Option<String>,
|
||
|
||
/// Optional images to attach to the prompt.
|
||
#[arg(long, value_name = "FILE")]
|
||
pub images: Vec<PathBuf>,
|
||
|
||
/// Increase verbosity (-v info, -vv debug, -vvv trace).
|
||
///
|
||
/// The flag may be passed up to three times. Without any -v the CLI only prints warnings and errors.
|
||
#[arg(short, long, action = ArgAction::Count)]
|
||
pub verbose: u8,
|
||
|
||
/// Don't use colored ansi output for verbose logging
|
||
#[arg(long)]
|
||
pub no_ansi: bool,
|
||
|
||
/// Configure when the model requires human approval before executing a command.
|
||
#[arg(long = "ask-for-approval", short = 'a')]
|
||
pub approval_policy: Option<ApprovalModeCliArg>,
|
||
|
||
/// Configure the process restrictions when a command is executed.
|
||
///
|
||
/// Uses OS-specific sandboxing tools; Seatbelt on OSX, landlock+seccomp on Linux.
|
||
#[arg(long = "sandbox", short = 's')]
|
||
pub sandbox_policy: Option<SandboxModeCliArg>,
|
||
|
||
/// Allow running Codex outside a Git repository. By default the CLI
|
||
/// aborts early when the current working directory is **not** inside a
|
||
/// Git repo because most agents rely on `git` for interacting with the
|
||
/// code‑base. Pass this flag if you really know what you are doing.
|
||
#[arg(long, action = ArgAction::SetTrue, default_value_t = false)]
|
||
pub allow_no_git_exec: bool,
|
||
|
||
/// Disable server‑side response storage (sends the full conversation context with every request)
|
||
#[arg(long = "disable-response-storage", default_value_t = false)]
|
||
pub disable_response_storage: bool,
|
||
|
||
/// Record submissions into file as JSON
|
||
#[arg(short = 'S', long)]
|
||
pub record_submissions: Option<PathBuf>,
|
||
|
||
/// Record events into file as JSON
|
||
#[arg(short = 'E', long)]
|
||
pub record_events: Option<PathBuf>,
|
||
}
|