About verify-commands
verify-commands is a skill for developers writing and reviewing command-line acceptance checks. It focuses on observable failure signals, verified paths, and avoiding checks that pass without measuring anything.
Key features
- 01Define explicit failure signals
- 02Ground command paths in repository evidence
- 03Detect checks that measure nothing
- 04Review commands without guessing replacement paths
Use cases
- 01Write acceptance checks before shipping
- 02Review a command that may pass without testing
- 03Verify repository paths and manifests
- 04Identify fragile shell pipelines or filters
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ mdsmithaustin/ pstack --skill verify-commandsAfter installing, type/verify-commandsin Claude Code to confirm it loaded.
Details
From the project READMEVerify commands
A verify command is an acceptance test. Before shipping one, answer: if this command were silently doing nothing, what in its output would tell me? If you cannot answer, you have a command, not a check. Fix the command; do not invent a statement for it.
Name the failing direction
Next to every runnable check, write one line naming the observable signal that means failure: non-zero exit, "0 passed" in the summary line, the coverage line is absent, stderr contains "ECONNREFUSED". "The command fails" and "an error occurs" are restatements, not signals. TBD, N/A, and none are refusals. Short is fine; non-zero exit is complete. Prefer the signal the tool actually emits over one you imagine: for a command that already ran, state what you saw; for a new one, take the signal from the tool's documented output. N commands need N statements.
Ground every path
Inherit the command that already worked in this repo, verbatim, before deriving a new one. A cd target or --prefix target must exist, or be created by an earlier step, and must hold the matching manifest (package.json, Makefile, pyproject.toml). Prefer npm --prefix <dir> run <script> over cd <dir> && npm run <script>; it does not depend on the caller's working directory. Do not hand-reason the filesystem: list it. If you cannot ground a path, say so instead of guessing.
Shapes that pass while measuring nothing
| Trap | Why it passes | Instead |
|---|---|---|
pnpm ls vite | grep -E '^vite@7' | tree output starts each line with └──, so ^ never matches | drop the anchor, or match (└|├)── vite@7 |
npm test | grep '714 passed' | a count recalled from memory, stale from training | grep -E '[0-9]+ passed', or run the count first |
X=$(cmd 2>/dev/null || echo 0) feeding [ "$X" = "$Y" ] | both sides default to 0 when inputs are missing, so parity passes on nothing | let the failure propagate, or guard with test -f and exit |
grep -c 'LITERAL' file == 0 while an instruction or comment quotes LITERAL | the gate trips on comment text, not on code | describe the forbidden thing by concept, not by literal |
! grep -q PATTERN file when a sibling change legitimately adds PATTERN elsewhere in the file | a file-wide negative is unsatisfiable across regions | scope it: awk '/^def f/,/^def /' file | grep, or an AST check, or a unit test |
| a test-name filter that matches zero tests | exit 0 with nothing asserted | list tests first (--collect-only, --list), then run the one named test |
npm test | tail -20 whose exit status is read as the verdict | a pipeline exits with its last command's status, so tail reports 0 while npm test failed | start the same command line with set -o pipefail; npm test | tail -20 (bash, zsh). A set from an earlier tool call is gone |
The anchor trap has a family: npm ls, yarn list, docker ps, and kubectl get all print column or tree prefixes. || echo default is acceptable only when absence is the default and the value is not used in a comparison meant to detect absence.
Reviewing someone else's command
Report; never prescribe a replacement path you did not verify. A prescribed path is copied verbatim and carries zero information. A missing directory or manifest is a blocker: quote the raw target. A dynamic path, glob, ~, or variable is a warning, not a licence to guess the literal.