sota-cli-ux — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sota-cli-ux (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Expert-level rules for building and auditing command-line tools: the grammar of commands/flags/args, config layering, human-vs-machine output, TTY-aware interaction, exit codes, signal handling, lifecycle behavior, and distribution. The core thesis: a CLI has two users — a human at a TTY and a script in CI — and every design decision must serve both without flags-gymnastics. Rules are imperative with rationale and good/bad terminal examples; every rules file ends with an audit checklist. Load only the files relevant to the task via the index below.
When designing or implementing a CLI:
--help textfirst: subcommand tree, every flag (short + long), args, examples. If the help is hard to write, the grammar is wrong (rules/01).
zero flags. Anything required for the 80% case is a design bug (rules/01 §3).
(logs, progress, prompts, errors) → stderr. Retrofitting this breaks users' pipes (rules/02 §1).
when piped; honor NO_COLOR; ship --json with every listing/reading command from v0.1, because output format is API (rules/02).
document them, version them, deprecate — never repurpose or remove without a cycle (rules/02 §3, rules/03 §7).
--dry-runon mutating commands, re-runnable/resumable operations, stdin-closed CI behavior, offline behavior (rules/03).
checksums + signatures, completions and man page generated from the same source as --help (rules/03 §8, rules/04).
own tool, including the brutal smoke test: tool cmd | cat, tool cmd > out.txt 2> err.txt, tool cmd < /dev/null, echo $?.
When reviewing an existing CLI:
point, output and error paths, signal handlers, config loading, install/ release scripts. Load the matching rules files.
tool --help, tool <sub> -h, tool --version, tool definitelynotacmdtool list | cat and tool list | head -1 (color codes? broken pipe panic?)tool list > /dev/null — does anything still reach the human? (it should, on stderr)tool mutate < /dev/null — hang waiting for a prompt = CI killerecho $? after success, after a usage error, after a real failurehandling, temp/state file locations, update/telemetry behavior.
confirmation/--force and no dry-run; non-zero work reported as exit 0 (or vice versa) so CI lies; prompt hangs forever with stdin closed; secrets echoed to terminal/logs/argv; auto-update or telemetry without disclosure.
ANSI codes/log lines on stdout; no --json on listing commands; SIGINT leaves corrupt partial state; undocumented/colliding exit codes; config precedence nondeterministic; breaking flag removal without deprecation.
path; no progress on >2s ops; errors without remediation; $HOME dotfile litter instead of XDG; no completions; no -q/-v; >500ms --help.
subcommand naming, missing man page, table borders in output.
[SEVERITY] <one-line title>
Where: <file:line | command invocation that reproduces it>
Rule: <rules-file §section>
Issue: <what is wrong, with observed evidence (transcript or code)>
Impact: <who breaks: the human at the TTY, the script in CI, or both>
Fix: <specific change; exact flag/stream/exit-code where load-bearing>Order findings by severity; one finding per root cause; include the reproducing command line whenever the issue was observed by running the tool.
| File | Read this when... |
|---|---|
rules/01-commands-flags-config.md | Designing/auditing the command surface: subcommand grammar (noun-verb consistency), POSIX/GNU flag conventions, short/long forms, -- separator, args vs flags vs stdin, defaults, dangerous-op flags, config precedence chain, env var naming, help text quality, suggest-on-typo. |
rules/02-output-interaction.md | Anything the tool prints or asks: stdout vs stderr contract, --json/--plain, TTY detection, color and NO_COLOR/TERM, exit codes as API, streaming vs buffering, progress indication, prompts and --yes/CI behavior, quiet/verbose levels, error message anatomy, --debug vs stack traces. |
rules/03-behavior-lifecycle.md | Runtime behavior and tool lifecycle: startup latency, idempotent re-runnable commands, --dry-run, SIGINT/SIGTERM handling, crash-only resumable design, network-op responsiveness and offline behavior, self-update caution, telemetry consent, XDG base directories, shell completions, semantic versioning of the CLI surface. |
rules/04-distribution-docs.md | Shipping and documenting: single-binary packaging, install channels (brew/curl-script/registry) with checksums + signatures, docs generated from the --help source of truth, man pages, README quickstart, version pinning for CI. |
prompts, warnings, errors. tool x | next must receive only data. (rules/02 §1)
piped; honor NO_COLOR (set and non-empty) and TERM=dumb; --json on every command that lists or reads data. (rules/02 §2, §4)
error vs operational failure; never exit 0 after printing an error. (rules/02 §3)
GNU/POSIX syntax (-f, --flag, --flag=value, -- ends flags). (rules/01 §2)
destructive operations require explicit --force/typed confirmation on a TTY and refuse (don't hang) without one. (rules/01 §3, §5)
--yes/--no-input equivalent exists; stdinclosed or non-TTY ⇒ use default or fail fast with the flag to pass — never block CI. (rules/02 §6)
exact command to run; stack traces only under --debug. (rules/02 §7)
130, second SIGINT force-quits; terminal state always restored; interrupted work is resumable or rolled back. (rules/03 §3)
the real code path. (rules/03 §2)
vars. Deprecate with warnings for a full cycle; never silently change meaning. Config precedence is exactly flags > env > project config > user config > defaults, documented. (rules/01 §6, rules/03 §7)
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.