atomic-cli-contriblisted
Install: claude install-skill damusix/atomic-claude
# atomic-cli-contrib
Project-local skill for working *on* the `atomic` CLI in this repo. Captures conventions that emerged from the doctor, validate, and config work, plus the prompt-layer extraction. Read this before adding subcommands, flags, prompts, or new internal packages.
This skill is contributor-scope only. It lives under `.claude/skills/` and is auto-loaded for sessions in this repo. It is not bundled (see `atomic/internal/bundlemirror/mirror.go` — only `skills/atomic-*/` at the repo root ships).
## 1. Interactive prompts go through `internal/prompt/`
- **Single surface.** Every interactive prompt — install flows, doctor `--fix`, future `atomic config`, anything new — calls `internal/prompt.Confirm` or `internal/prompt.Select[T]`. No direct `huh.*` calls outside the prompt package. No `bufio.Scanner` prompters.
- **Why.** One swap point when `huh` changes API. Consistent TTY detection. Consistent abort handling.
- **Sentinels.** Callers branch on `errors.Is(err, prompt.ErrNonInteractive)` (no TTY → skip path) and `errors.Is(err, prompt.ErrAborted)` (Ctrl+C → distinct from "No"). Never collapse abort into decline.
- **Doctor adapter.** The doctor's `Prompter` interface lives separately so the `--fix` loop can have its own decision shape (`DecisionYes`/`DecisionNo`/`DecisionSkip`/`DecisionAbort`). The adapter (`doctor/stdin_prompter.go`) translates from `internal/prompt` errors. Mirror the adapter pattern if you build a new prompt-consuming subsystem.
## 2.