Automated Test Planning
testdouble/han
Produce a standalone test plan by analyzing code for test coverage gaps and edge cases.
Test coverage review via Codex exec. An agent skill from sd0xdev/sd0x-harness.
$ npx skills add sd0xdev/sd0x-harness --skill test-review -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sd0xdev/sd0x-harness test-review --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/sd0xdev/sd0x-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/test-review .claude/skills/test-review && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "test-review" agent skill from https://github.com/sd0xdev/sd0x-harness/tree/main/skills/test-review into .claude/skills/test-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-review", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/sd0xdev/sd0x-harness/tree/main/skills/test-reviewType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add sd0xdev/sd0x-harness --skill test-review -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sd0xdev/sd0x-harness test-review --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sd0xdev/sd0x-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/test-review .agents/skills/test-review && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "test-review" agent skill from https://github.com/sd0xdev/sd0x-harness/tree/main/skills/test-review into .agents/skills/test-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-review", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sd0xdev/sd0x-harness --skill test-review -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sd0xdev/sd0x-harness test-review --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sd0xdev/sd0x-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/test-review .cursor/skills/test-review && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "test-review" agent skill from https://github.com/sd0xdev/sd0x-harness/tree/main/skills/test-review into .cursor/skills/test-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-review", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/sd0xdev/sd0x-harness.git --path skills/test-review--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add sd0xdev/sd0x-harness --skill test-review -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sd0xdev/sd0x-harness test-review --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sd0xdev/sd0x-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/test-review .gemini/skills/test-review && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "test-review" agent skill from https://github.com/sd0xdev/sd0x-harness/tree/main/skills/test-review into .gemini/skills/test-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-review", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install sd0xdev/sd0x-harness test-reviewInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add sd0xdev/sd0x-harness --skill test-review -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/sd0xdev/sd0x-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/test-review .github/skills/test-review && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "test-review" agent skill from https://github.com/sd0xdev/sd0x-harness/tree/main/skills/test-review into .github/skills/test-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-review", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sd0xdev/sd0x-harness --skill test-review -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install sd0xdev/sd0x-harness test-review --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sd0xdev/sd0x-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/test-review .opencode/skills/test-review && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "test-review" agent skill from https://github.com/sd0xdev/sd0x-harness/tree/main/skills/test-review into .opencode/skills/test-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-review", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
test-reviewTest coverage review via Codex exec. An agent skill from sd0xdev/sd0x-harness.
Test Review is an agent skill from sd0xdev/sd0x-harness. Test coverage review via Codex exec. Use when: reviewing test sufficiency, identifying coverage gaps, test quality audit. Not for: generating tests (use codex-test-gen), code review (use codex-code-review). Output: coverage analysis + gap report.
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/codex-prompt-ac-trace.md`, `references/codex-prompt-test-gen.md` and `references/codex-prompt-test-review.md`).
It sits in Testing & QA, covering Test coverage, Test generation and Code review. The repository describes itself as: The harness layer for Claude Code — a reference implementation of harness engineering with hook-enforced dual review, state-machine gates that survive context compaction, and… The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit c9a2036. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
Bash(git:*)Bash(node:*)ReadGrepGlobWriteTaskFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
nodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Test Review loads about 2.9k tokens when it runs, and up to ~6.1k if it reads all its reference files. Until then it costs about 65 tokens; SKILL.md has 1,104 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from sd0xdev/sd0x-harness at commit c9a2036, republished under its MIT licence (© sd0xdev). 1,104 words, ~2,946 tokens.
.claude/skills/test-review/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Read first: references/testing-contract.md — the evidence priority table, the exception
gates and caps, and the Adequacy Gate sentinels every workflow here judges against
(rules/testing.md is its resident core). If that Read fails, stop and report it; do not review
or judge evidence from memory.
codex-code-review)doc-review)/verify)| Command | Description | Use Case |
|---|---|---|
/codex-test-review | Review test sufficiency | Required |
/codex-test-gen | Generate unit tests | Add missing tests |
/check-coverage | Test coverage analysis | After feature dev |
/codex-test-reviewSmart detect target → Read test + source → Codex review (5 dimensions) → Coverage assessment + Gate → Loop if Needs additions| Input | Behavior |
|---|---|
| File path | Review that file directly |
| Directory | Review all tests in directory |
| Description | Auto-find related test files |
| Module name | Search related test files |
| No parameter | Auto-detect from git diff |
TEST_FILE)SOURCE_FILE, inferred from test path)First review: dispatch per @skills/codex-code-review/references/codex-transport.md § Start with the test review prompt. See references/codex-prompt-test-review.md.
Loop review: dispatch per § Resume with the re-review template. See references/codex-prompt-test-review.md. Rotation applies per the central contract (see § Review Loop below).
codex_fail → fallback carries the gate (adapter exit 1 only — @skills/codex-code-review/references/codex-transport.md § Completion state machine: a pending or unknown completion keeps the gate open with no fallback, exit 2 is a configuration error, and an alloc/cleanup failure is a lifecycle error) (@rules/auto-loop.md § Review Dispatch): decide via scripts/lib/review-dispatch.js (contract:'test:coverage'), record [REVIEWER_FALLBACK], dispatch contract-neutral-reviewer via Task with references/codex-prompt-test-review.md as the governing template (P3 = one retry, fresh instance), and validate the raw report with node scripts/validate-family-sentinel.js test:coverage before adopting the verdict. Carriers exhausted → no gate sentinel, behaviour-layer ⚠️ Need Human.
Save the returned threadId.
/codex-test-review --ac-traceAC traceability mode — maps Acceptance Criteria from request docs to test evidence.
--ac-trace input → Read request doc → Parse ACs → Filter quality-gate → Search evidence → Codex verify → Matrix + Gate| Input | Behavior |
|---|---|
--ac-trace <request-path> | Read specified request doc |
--ac-trace (no path) | Auto-detect from docs/features/*/requests/*.md via git diff context |
No --ac-trace | Existing behavior (5-dimension coverage review) |
## Acceptance Criteria section in request doc- [ ] / - [x] items/codex-review-fast, /codex-review-doc, /codex-review, /precommit, /precommit-fast, /pr-reviewFor each non-quality-gate AC:
| Evidence Type | Priority | How to Find |
|---|---|---|
| Automated test | 1 (preferred) | Search Related Files test paths; match AC text → test assertions |
| Runtime verification | 2 | Search /feature-verify results at L3+ confidence |
| Manual exception | 3 (verified only) | Check AC annotation <!-- exception: REASON, expires: DATE --> |
Fresh thread (§ Start). See references/codex-prompt-ac-trace.md.
| Rule | Detail |
|---|---|
| Cache | request-path + git diff hash key; same session reuse |
codex_fail — adapter exit 1 only (@skills/codex-code-review/references/codex-transport.md § Completion state machine: pending/unknown keeps the gate open with no fallback; exit 2 is a configuration error; alloc/cleanup failures are lifecycle errors) | Fallback carries the verification (@rules/auto-loop.md § Review Dispatch): decide via scripts/lib/review-dispatch.js (contract:'test:ac-trace'), record [REVIEWER_FALLBACK], dispatch contract-neutral-reviewer via Task with references/codex-prompt-ac-trace.md as the governing template (P3 = one retry, fresh instance); validate the raw report with node scripts/validate-family-sentinel.js test:ac-trace before deriving the public sentinel |
| Carriers exhausted | No validated raw report exists, so no raw or public AC gate sentinel is derived — mark all items ⚠️ Inconclusive in the body and surface behaviour-layer ⚠️ Need Human only (whatever the mode); note nothing |
Save the returned threadId.
Validate every manual exception against the three gates and the AC-count cap in
references/testing-contract.md § Evidence Model — the closed reason-class set, the Codex
VALID_EXCEPTION verdict and the expiry. The domains that never take an exception — security,
data-integrity and regression ACs — are the resident core's rows, rules/testing.md § Evidence Model.
The public sentinels are derived from the raw report's gate: line — gate: Adequate → ✅ Adequate, gate: Adequate_with_exceptions → ⚠️ Adequate with exceptions, gate: Need_Human → ⚠️ Need Human, gate: Inadequate → ⛔ Inadequate. Whoever produced the raw report (Codex or fallback carrier), the raw layer is what validate-family-sentinel.js test:ac-trace checks; this skill's derivation alone produces the public form. What each sentinel means is references/testing-contract.md § Adequacy Gate Sentinels. Every carrier exhausted is the one ⚠️ Need Human case that is never derived from a report — it is behaviour-layer only.
/codex-test-genRead source → Derive test path → Codex generate → Save test file → Suggest reviewsrc/service/xxx.ts → test/unit/service/xxx.test.tsFUNCTION_NAME before rendering the prompt: the function named in the invocation, or
the literal all when the caller supplied only a path — /codex-test-gen src/service/xxx.ts
is the documented file-only form, so the placeholder must resolve to something. It used to carry
its own default inside the template; nothing evaluates the template now, so the binding is the
caller's and it is stated here.references/codex-prompt-test-gen.md./codex-test-review| Dimension | Scoring Criteria | Weight |
|---|---|---|
| Happy path | All public methods, main flows | High |
| Error handling | try/catch, error callbacks | High |
| Edge cases | null/undefined, extremes, empty sets | Medium |
| Mock quality | Not excessive, not insufficient | Medium |
| Type | Directory | Mock | Focus |
|---|---|---|---|
| Unit | test/unit/ | Full | Single function |
| Integration | test/integration/ | Only external | Inter-module |
| E2E | test/e2e/ | Prohibited | Complete flow |
| Type | Cases |
|---|---|
| String | "", " ", null, undefined, very long |
| Number | 0, -1, NaN, Infinity, MAX_SAFE_INTEGER |
| Array | [], [null], very large, nested |
| Object | {}, null, circular reference |
⚠️ @CLAUDE.md auto-loop: fix → re-review → ... → ✅ PASS ⚠️
⛔ Needs additions → add tests → /codex-test-review --continue <threadId> → repeat until ✅ Sufficient.
Thread rotation — central contract (@skills/codex-code-review/references/review-common.md § Review Loop — Thread Rotation): at the R-a threshold (3 replies on this thread; @rules/auto-loop-project.md ## Review Thread Rotation overrides, 2–6) or on R-b judged context overrun, dispatch the first-review template on a new thread instead of replying — no old findings fed, reconciliation orchestration-side — and record [THREAD_ROTATED].
Sentinel alias union (no canonicalization): ✅ Tests sufficient / ✅ Sufficient carry one pass semantic, ⛔ Tests need supplementation / ⛔ Needs additions one fail semantic. Both shapes stay legal exactly as written — nothing rewrites one into the other — and every report carries exactly one terminal (validate-family-sentinel.js test:coverage rejects mixing).
Max 3 rounds. Still failing → report blocker.
## Test Coverage Review
| Dimension | Coverage | Rating |
|-----------|----------|--------|
| ... | ... | ⭐1-5 |
<findings and suggestions>
✅ Tests sufficientThe report ends with exactly one terminal, alone at column 0 on the final line, drawn from the
alias union above — pass: ✅ Tests sufficient or ✅ Sufficient; fail: ⛔ Tests need supplementation or ⛔ Needs additions. All four are legal exactly as written, which is why
this list must match the union rather than name a preferred pair: validate-family-sentinel.js test:coverage accepts all four, and the first-pass prompt emits ⛔ Tests need supplementation, so
a two-form list here would reject the template's own output. Never place two alternatives on one line.
✅ Tests sufficient / ✅ Sufficient / ⛔ Tests need supplementation / ⛔ Needs additions), alone at column 0 on the final linereferences/codex-prompt-test-review.mdreferences/codex-prompt-test-gen.mdreferences/codex-prompt-ac-trace.mdInput: /codex-test-review test/unit/service/xxx.test.ts
Action: Read test + source → Codex review → Coverage assessment + Gate
Input: /codex-test-gen src/service/xxx.ts
Action: Read source → Codex generate → Save test → Suggest review
Input: Are this service's tests sufficient?
Action: /codex-test-review → Assess coverage → Output gaps + Gate
Input: /codex-test-review --ac-trace docs/features/auth/requests/2026-03-01-login.md
Action: Parse AC → Filter quality-gate → Search evidence → Codex verify → Matrix + Gate© sd0xdev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (references) in skills/test-review of sd0xdev/sd0x-harness.
Open the folder on GitHubat commit c9a2036
Test Review next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Test Review this skillsd0xdev/sd0x-harness | 192 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Automated Test Planningtestdouble/han | 279 | — | ~6.7k | Automated safety check: Pass | MIT | |
| Manual Test Planningtestdouble/han | 279 | — | ~2.9k | Automated safety check: Pass | MIT | |
| E2E Test ThinkerUniClipboard/UniClipboard | 1.8k | — | ~1.7k | Automated safety check: Pass | AGPL-3.0 | |
| Ralph Coveragejvm-skills/jvm-skills | 140 | — | ~683 | Automated safety check: Pass | Apache-2.0 | |
| Designing TestsCloudAI-X/opencode-workflow | 275 | — | ~2.9k | Automated safety check: Pass | MIT |
testdouble/han
Produce a standalone test plan by analyzing code for test coverage gaps and edge cases.
testdouble/han
Produce a plain-language manual test plan from the context supplied to it — an executive summary, a high-level list of named tests, and a detail section per test with the steps a person follows by…
UniClipboard/UniClipboard
Analyze the current branch's diff against main and determine which changes are testable via CLI-based end-to-end tests.
jvm-skills/jvm-skills
Run Ralph in coverage mode — iteratively write tests for untested classes until coverage targets are met.
CloudAI-X/opencode-workflow
Guides test strategy, TDD/BDD approaches, test coverage planning, and testing best practices.
proffesor-for-testing/agentic-qe
Test quality validation through mutation testing, assessing test suite effectiveness by introducing code mutations and measuring kill rate.
sd0xdev/sd0x-harness
Write an Architecture Decision Record (ADR) for a feature — Context / Decision / Status / Consequences / Alternatives, filed as docs/features/<feature/adr-<NNN-<title.md with a 3-digit zero-padded…
sd0xdev/sd0x-harness
Load GitHub PR review comments into AI session — analyze, triage, plan.
sd0xdev/sd0x-harness
Change-aware next step advisor. An agent skill from sd0xdev/sd0x-harness.
sd0xdev/sd0x-harness
Obsidian vault integration via official CLI. An agent skill from sd0xdev/sd0x-harness.
sd0xdev/sd0x-harness
Agent-driven workflow orchestration (v1 report-only). An agent skill from sd0xdev/sd0x-harness.
sd0xdev/sd0x-harness
Post friendly review comments to a GitHub PR — prepare locally, preview, then submit as atomic review.
Categories
Test coverage review via Codex exec. An agent skill from sd0xdev/sd0x-harness. Test Review is an agent skill from sd0xdev/sd0x-harness. Test coverage review via Codex exec.
Test Review fits situations like: : reviewing test sufficiency; identifying coverage gaps; test quality audit.
Run `npx skills add sd0xdev/sd0x-harness --skill test-review -a claude-code`. Or copy the skill folder (skills/test-review in sd0xdev/sd0x-harness) into .claude/skills/test-review in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sd0xdev/sd0x-harness --skill test-review -a codex`. Or copy the skill folder (skills/test-review in sd0xdev/sd0x-harness) into .agents/skills/test-review in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sd0xdev/sd0x-harness --skill test-review -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/test-review, .gemini/skills/test-review, .github/skills/test-review and .opencode/skills/test-review in your project.
Going by SKILL.md and its folder, Test Review needs the command-line tools its instructions call (node). Its frontmatter pre-approves these tools: Bash(git:*), Bash(node:*), Read, Grep, Glob, Write, Task.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Test Review is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Test Review: Automated Test Planning (testdouble/han, 279 stars), Manual Test Planning (testdouble/han, 279 stars), E2E Test Thinker (UniClipboard/UniClipboard, 1.8k stars) and Ralph Coverage (jvm-skills/jvm-skills, 140 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
sd0xdev (a GitHub user) maintains it in sd0xdev/sd0x-harness, which has 192 GitHub stars. The repository holds 91 skills in this directory. The repository was last updated on October 6, 2026.
Source: sd0xdev/sd0x-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.