use clap::{Parser, Subcommand, ValueEnum};
use oxidized_agentic_audit::output::OutputFormat;
use std::path::PathBuf;
#[derive(Parser)]
#[command(
name = "oxidized-agentic-audit",
version,
about = "Security scanning for AI agent skills and agents"
)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
pub enum ScanType {
Skill,
Agent,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
pub enum RuleMode {
Skill,
Agent,
All,
}
#[derive(Subcommand)]
pub enum Commands {
Scan {
path: PathBuf,
#[arg(long = "type", default_value = "skill", value_enum)]
scan_type: ScanType,
#[arg(long, short, default_value = "pretty", value_enum)]
format: OutputFormat,
#[arg(long, short)]
output: Option<PathBuf>,
#[arg(long)]
strict: bool,
#[arg(long)]
config: Option<PathBuf>,
#[arg(long, value_name = "N")]
min_score: Option<u8>,
},
#[command(name = "scan-all")]
ScanAll {
path: PathBuf,
#[arg(long = "type", default_value = "skill", value_enum)]
scan_type: ScanType,
#[arg(long, short, default_value = "pretty", value_enum)]
format: OutputFormat,
#[arg(long)]
strict: bool,
#[arg(long)]
config: Option<PathBuf>,
#[arg(long, value_name = "N")]
min_score: Option<u8>,
},
CheckTools,
ListRules {
#[arg(long, default_value = "all", value_enum)]
mode: RuleMode,
},
Explain {
rule_id: String,
#[arg(long, default_value = "all", value_enum)]
mode: RuleMode,
},
}