adr
Write an Architecture Decision Record (ADR) for a feature — Context / Decision / Status / Consequences / Alternatives, filed as…
Verification loop — lint -> typecheck -> unit -> integration -> e2e
Claude Code
$ npx -y skills add sd0xdev/sd0x-harness --skill verify --agent claude-code
Codex
$ npx skills add sd0xdev/sd0x-harness --skill verify -a codex -y
Cursor
$ npx skills add sd0xdev/sd0x-harness --skill verify -a cursor -y
Gemini CLI
$ npx skills add sd0xdev/sd0x-harness --skill verify -a gemini-cli -y
GitHub Copilot
$ npx skills add sd0xdev/sd0x-harness --skill verify -a github-copilot -y
OpenCode
$ npx skills add sd0xdev/sd0x-harness --skill verify -a opencode -y
Windsurf
$ npx skills add sd0xdev/sd0x-harness --skill verify -a windsurf -y
name: verify description: "Verification loop — lint -> typecheck -> unit -> integration -> e2e" allowed-tools: Bash(node:*), Bash(pnpm:*), Bash(yarn:*), Bash(npm:*), Bash(npx:*), Bash(git:*), Bash(python*:*), Bash(pytest:*), Bash(ruff:*), Bash(mypy:*), Bash(cargo:*), Bash(go:*), Bash(golangci-lint:*), Bash(./gradlew:*), Bash(mvn:*), Bash(bundle:*), Read, Grep, Glob
Claude Code 2.1.286 and later tell Claude to run a skill named `verify` before a commit. The gate that binds a commit is `/precommit` (`rules/auto-loop.md`), so when `/verify` runs as that pre-commit check it neither repeats a precommit that already passed nor stands in for one that did not:
1. Read the gate state: `node scripts/review-state.js check --format=json`, installed copy first (`.claude/scripts/review-state.js`). 2. `precommit.passed` is exactly `true` → report "Precommit already passed at the current code digest; no new checks executed" and stop. Emit no sentinel and write no verdict note. 3. Anything else — `passed` false, no `precommit` slot, output that does not parse as JSON, or no checker found → run `/precommit`. Its own report and evidence contract apply; `/verify` adds no verdict of its own.
`passed` is content-addressed — noted, at the current tree digest, with verdict `pass` — so no separate freshness check is needed. Run any other way, `/verify` performs the steps below unchanged.
| Step | Goal | Safety | Skip if Missing | |------|------|--------|----------------| | lint | Check code style (read-only) | read-only | yes | | typecheck | Static type checking (full only) | read-only | yes | | test-unit | Run unit test suite | read-only | yes | | test-integration | Run integration tests (full only) | read-only | yes | | test-e2e | Run end-to-end tests (full only) | read-only | yes |
**Failure behavior**: continue-all (run all steps, report all results)
Use Glob to check if `.claude/scripts/verify-runner.js` exists in the project root.
If the runner was not found in Step 1, detect the project ecosystem to run steps manually.
**Ecosystem detection** (check project root for manifest files):
| Manifest | Ecosystem | Lint | Typecheck | Test | |----------|-----------|------|-----------|------| | `package.json` | Node.js | `{pm} lint` | `{pm} typecheck` | `{pm} test:unit` | | `pyproject.toml` | Python | `ruff check .` | `mypy .` | `pytest` | | `Cargo.toml` | Rust | `cargo clippy` | _(implicit)_ | `cargo test` | | `go.mod` | Go | `golangci-lint run` | `go vet ./...` | `go test ./...` | | `build.gradle` | Java | `./gradlew spotlessCheck` | _(implicit)_ | `./gradlew test` |
For Node.js projects, auto-detect package manager from lockfile.
**`$ARGUMENTS` == "fast"**: lint + unit only
**Otherwise (full)**: lint -> typecheck -> unit -> integration -> e2e
| Step | package.json script | If missing | |------|---------------------|------------| | lint | `lint` | Skip with note | | typecheck | `typecheck` | Skip with note | | unit | `test:unit`, fallback to `test` | Skip with note | | integration | `test:integration` | Skip (requires explicit path) | | e2e | `test:e2e` | Skip (requires explicit path) |
| Scenario | Behavior | |----------|----------| | No `lint` script | Skip, log "no lint script — skipped" | | No `typecheck` script | Skip, log "no typecheck script — skipped" | | No `test:unit` or `test` script | Skip, log "no test script — skipped" | | No `package.json` | Report error, cannot run checks |
The last line is `## Verify:`, never `## Overall:`. `## Overall:` is the precommit runner's sentinel alone (`rules/auto-loop.md` § Gate Sentinels), so a verification report is never read as a precommit verdict.
For **fast** mode:
## Verify (fast) | Step | Status | Notes | |------|--------|-------| | lint | ✅/❌/⏭️ | | | unit | ✅/❌/⏭️ | | ## Verify: ✅ PASS / ❌ FAIL
For **full** mode:
## Verify (full) | Step | Status | Notes | |------|--------|-------| | lint | ✅/❌/⏭️ | | | typecheck | ✅/❌/⏭️ | | | unit | ✅/❌/⏭️ | | | integration | ✅/❌/⏭️ | skipped unless path specified | | e2e | ✅/❌/⏭️ | skipped unless path specified | ## Failures (if any) - Root cause: <first error> - Fix: <suggestion> ## Verify: ✅ PASS / ❌ FAIL
Language: English | 繁體中文 | 简体中文 | 日本語 | 한국어 | Español The harness layer for Claude Code. Let the model choose the path. Keep "done" verifiable. Claude has discretion inside a closed, test-pinned anchor set.
Write an Architecture Decision Record (ADR) for a feature — Context / Decision / Status / Consequences / Alternatives, filed as…
Install and set up the optional agentctl mod (task scope, refusal before execution, evidence that goes stale, model-free…
Architecture design and documentation. Produces 3-architecture.md with component diagrams, data flow, integration points, and…
Context-aware Q&A with auto context gathering. Use when: user has a quick question about codebase, git history, rules, docs, or…
Industry best practices conformance audit with mandatory adversarial debate. Produces audit artifact: verdict (OK/WARN/FAIL) +…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.