use agent_base::ReasoningEffort;
use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(
name = "phi",
about = "phi — General-purpose AI Agent CLI tool",
version,
long_about = "phi — Drive local dev tasks via natural language.\n\n\
Supports interactive mode and one-shot mode."
)]
pub struct CliArgs {
#[arg(value_name = "QUERY")]
pub query: Option<String>,
#[command(subcommand)]
pub command: Option<SubCommand>,
#[arg(long, value_enum, default_value = "terminal")]
pub format: OutputFormatArg,
#[arg(long, default_value = "false")]
pub no_thinking: bool,
#[arg(long)]
pub thinking_budget: Option<u64>,
#[arg(long, value_enum, default_value = "medium")]
pub thinking_effort: ReasoningEffortArg,
#[arg(long, default_value = "false")]
pub no_tool_args: bool,
#[arg(long, default_value = "false")]
pub no_color: bool,
#[arg(long, short = 'y', default_value = "false")]
pub auto_approve: bool,
#[arg(long, env = "PHI_SESSION_ID")]
pub session_id: Option<String>,
#[arg(long)]
pub model: Option<String>,
#[arg(long)]
pub base_url: Option<String>,
#[arg(long, default_value = "~/.phi-agent")]
pub log_dir: String,
#[arg(long, default_value = "info")]
pub log_level: String,
#[arg(long, default_value = "false")]
pub no_log: bool,
#[arg(long)]
pub max_tool_calls: Option<usize>,
#[arg(long)]
pub max_failures: Option<usize>,
#[arg(long, default_value = "30000")]
pub shell_timeout_ms: u64,
}
#[derive(Clone, Debug, clap::ValueEnum)]
pub enum OutputFormatArg {
Terminal,
Json,
Quiet,
}
#[derive(Clone, Debug, clap::ValueEnum)]
pub enum ReasoningEffortArg {
Low,
Medium,
High,
Xhigh,
}
impl From<ReasoningEffortArg> for ReasoningEffort {
fn from(arg: ReasoningEffortArg) -> Self {
match arg {
ReasoningEffortArg::Low => ReasoningEffort::Low,
ReasoningEffortArg::Medium => ReasoningEffort::Medium,
ReasoningEffortArg::High => ReasoningEffort::High,
ReasoningEffortArg::Xhigh => ReasoningEffort::XHigh,
}
}
}
#[derive(Subcommand, Debug)]
pub enum SubCommand {
Metrics {
#[command(subcommand)]
cmd: MetricsCmd,
},
Init {
name: String,
},
}
#[derive(Subcommand, Debug)]
pub enum MetricsCmd {
List,
Show {
session_id: String,
},
Last,
}