Skip to main content

safe_chains/
cli.rs

1use clap::Parser;
2use crate::verdict::SafetyLevel;
3
4#[derive(Parser)]
5#[command(name = "safe-chains")]
6#[command(about = "Auto-allow safe, read-only bash commands in agentic coding tools")]
7#[command(version)]
8#[allow(clippy::struct_excessive_bools)]
9pub struct Cli {
10    /// Command string to check (omit for Claude hook mode via stdin)
11    pub command: Option<String>,
12
13    /// Safety level threshold (inert, safe-read, safe-write). Only commands at or below this level pass.
14    #[arg(long, value_enum)]
15    pub level: Option<SafetyLevel>,
16
17    /// List all supported commands in Markdown format
18    #[arg(long)]
19    pub list_commands: bool,
20
21    /// Generate OpenCode permission config (merges with existing opencode.json)
22    #[arg(long)]
23    pub opencode_config: bool,
24
25    /// Configure the Claude Code hook in ~/.claude/settings.json
26    #[arg(long)]
27    pub setup: bool,
28}