Designing Tests
CloudAI-X/opencode-workflow
Guides test strategy, TDD/BDD approaches, test coverage planning, and testing best practices.
Produce a standalone test plan by analyzing code for test coverage gaps and edge cases.
$ npx skills add testdouble/han --skill automated-test-planning -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install testdouble/han automated-test-planning --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/testdouble/han.git skills-src && mkdir -p .claude/skills && cp -r skills-src/han-coding/skills/automated-test-planning .claude/skills/automated-test-planning && 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 "automated-test-planning" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/automated-test-planning into .claude/skills/automated-test-planning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automated-test-planning", 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/testdouble/han/tree/main/han-coding/skills/automated-test-planningType 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 testdouble/han --skill automated-test-planning -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install testdouble/han automated-test-planning --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .agents/skills && cp -r skills-src/han-coding/skills/automated-test-planning .agents/skills/automated-test-planning && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "automated-test-planning" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/automated-test-planning into .agents/skills/automated-test-planning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automated-test-planning", 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 testdouble/han --skill automated-test-planning -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install testdouble/han automated-test-planning --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/han-coding/skills/automated-test-planning .cursor/skills/automated-test-planning && 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 "automated-test-planning" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/automated-test-planning into .cursor/skills/automated-test-planning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automated-test-planning", 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/testdouble/han.git --path han-coding/skills/automated-test-planning--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 testdouble/han --skill automated-test-planning -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install testdouble/han automated-test-planning --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/han-coding/skills/automated-test-planning .gemini/skills/automated-test-planning && 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 "automated-test-planning" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/automated-test-planning into .gemini/skills/automated-test-planning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automated-test-planning", 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 testdouble/han automated-test-planningInstalls 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 testdouble/han --skill automated-test-planning -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .github/skills && cp -r skills-src/han-coding/skills/automated-test-planning .github/skills/automated-test-planning && 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 "automated-test-planning" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/automated-test-planning into .github/skills/automated-test-planning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automated-test-planning", 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 testdouble/han --skill automated-test-planning -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install testdouble/han automated-test-planning --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/han-coding/skills/automated-test-planning .opencode/skills/automated-test-planning && 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 "automated-test-planning" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/automated-test-planning into .opencode/skills/automated-test-planning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automated-test-planning", 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.
automated-test-planningProduce a standalone test plan by analyzing code for test coverage gaps and edge cases.
Automated Test Planning is an agent skill from testdouble/han. Produce a standalone test plan by analyzing code for test coverage gaps and edge cases. Use when you need to create, generate, or draft a test plan for a branch, need to analyze test coverage, or need to identify what tests to write for specific files or directories. Does not produce a plain-language plan for a person to run tests by hand — use manual-test-planning for that. Does not write test code — use tdd to implement behavior test-first. Does not refine existing plans — use iterative-plan-review. Does not…
Its SKILL.md is about 6.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including scripts and reference files (for example `references/template.md` and `scripts/detect-test-context.sh`).
It sits in Testing & QA, covering Test strategy, Test generation and Test-driven development. The repository describes itself as: Han: AI skills and agents for "Solo" product engineers and small teams. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit abba73a. 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(find *)ReadGrepGlobAgentBash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh")From allowed-tools in the SKILL.md frontmatter.
Ships 2 files in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
gitbashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
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.
Automated Test Planning loads about 6.7k tokens when it runs, and up to ~8.5k if it reads all its reference files. Until then it costs about 186 tokens; SKILL.md has 3,809 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); the scripts in this folder are not scanned.
The full file from testdouble/han at commit abba73a, republished under its MIT licence (© testdouble). 3,809 words, ~6,695 tokens.
.claude/skills/automated-test-planning/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Test behavior through the public API, never internals. Every recommended test verifies observable behavior at a public seam: the inputs a real caller supplies, the outputs and side effects they observe, and the interactions the unit has with the other objects and services it collaborates with. Do not recommend tests that reach into private methods, internal state, or implementation structure — those tests pin the how and break on every refactor. When two designs would produce the same observable behavior, the test must pass for both. If a behavior can only be observed by inspecting internals, that is a signal the behavior belongs at a different seam, not a license to test the internal; note it and move the recommendation to the public boundary that exposes it. This is the depth ceiling: cover the critical behaviors a caller depends on, and stop. Do not specify tests for every branch, every private helper, or every intermediate value.
YAGNI is a first-class operating principle for tests. Apply the evidence-based YAGNI rule from ../../references/yagni-rule.md. A test is worth recommending only when (a) the code under review commits to a behavior the test verifies and (b) the failure mode the test would catch is realistic for this codebase. Tests for code paths that don't exist yet, hypothetical adversaries the code doesn't face, hypothetical scaling problems the workload doesn't have, "completeness" with existing tests, or symmetry ("we have a test for create, so we should have one for delete") are YAGNI candidates and go to the Deferred Tests section with the trigger that would justify writing them. When many speculative low-level tests can be replaced by one durable behavioral test that catches the same realistic failure modes, recommend the single test instead. Every test is ongoing maintenance and a brittleness surface.
Dispatch in proportion to the question. The size band chosen in Step 1.5 caps the roster, and a narrow question gets one agent and a prose answer rather than a team and a full document. Never dispatch the full roster for a question a single agent can settle BECAUSE the dispatch overhead exceeds the work, and a reader who asked one question pays for a document they did not want.
which git 2>/dev/null || echo "not installed"find . -maxdepth 1 -name "CLAUDE.md" -type ffind . -maxdepth 3 -name "project-discovery.md" -type fbash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh" 2>/dev/null || echo "$HOME/.claude"cat .han/config.md 2>/dev/null || echo ""As your first action, use the Read tool on .han/config.md inside the personal config directory path above. A read
that returns no file is no personal configuration: continue silently. When that file or the project .han/config.md
probe supplies content, apply it per config-rule.md, which governs precedence
between the two files, relative-path resolution, and what to do with a file that reads but cannot be used.
Resolve project config: read CLAUDE.md's ## Project Discovery section for test command (under
### Commands and Tests, not ### Frameworks and Tooling), language, and framework; fall back to project-discovery.md.
Store found values for use in later steps.
Scope determination: Check git installed from Project Context. If empty or not installed, skip to Mode C
below.
Run ${CLAUDE_SKILL_DIR}/scripts/detect-test-context.sh and parse its output. If git-available: false, skip to Mode
C below.
Mode A: Full git context — git-available: true and the output contains a changed-files-start block with content.
Mode B: Uncommitted changes — git-available: true but output contains changed-files: none.
git diff (unstaged changes), git diff --cached (staged changes), and git status --short
(untracked files) to identify changed files; if any files are found, use those as scopeMode C: No git / no changes found — git missing, not in a repo, or no changes detected in any state.
node_modules/, .git/, vendor/,
dist/, build/, __pycache__/, lock files; present the discovered files and ask the user to confirm scopeBuild a list of source files to analyze: expand directories to find source files; identify relevant source files from branch changes or project structure for descriptions.
Default to small. Start the classification at small and only escalate to medium or large when the signals below clearly require it. When a signal is borderline, stay at the smaller band.
Classify from the user's own request first, and from Step 1's file list only when the request settles nothing. A narrow question asked on a branch with many changed files is still small BECAUSE Step 1 falls back to the whole changed-files list whenever the user named no scope, and that list describes the branch rather than the question.
Size override. If $size is non-empty (the user passed small, medium, large, or dynamic as the first
argument), use it: a band value is the size and skips the signal-based classification above, while dynamic forces the
signal-based classification even when the config sets a default band. If $size is empty and either .han/config.md
supplies a band via default-swarm-size (per ../../references/config-rule.md), use
that band and skip the signal-based classification. Anything that is not one of the four accepted values is trailing
context, not a size.
Bind $focus. Read the user's free-form argument string from the invocation (everything after the optional $size
positional). If non-empty, bind $focus to that string verbatim; if empty, bind it to none provided. This binding is
the description Step 2 passes to each agent prompt.
State the chosen band and mode in one line with the justification before dispatching anything (for example,
Small: the request names two proposed contexts on one method, so focused mode, Medium: passed via $size, or
Medium: from the project .han/config.md default-swarm-size, naming whichever file supplied it). Accept the user's
override of the band, the mode, or both.
In focused mode, dispatch only han-core:test-engineer in Step 2, skip the conditional specialists, answer in prose
per Step 4's focused-mode rules, and skip the two reviewers in Step 5. Step 3 runs in full either way. Its
behavioral, prerequisite, and YAGNI sweeps decide what may be recommended at all, so skipping them would let a focused
answer recommend a test that cannot be written without an out-of-scope production change. In full mode, run every
step as written.
In focused mode, dispatch item 1 alone and skip the conditional-dispatch section entirely.
Launch the testing agents in parallel using the Agent tool with run_in_background: true. Pass each agent the
file list from Step 1. In Mode A or Mode B, include on branch {branch} in agent prompts if a branch name was detected
by the script; in Mode C or when no branch was detected, omit the branch reference entirely. When $focus is anything
other than none provided, include it in every agent prompt so they can focus their analysis; it is what the
{any additional context from user arguments} placeholder below resolves to.
Launch han-core:test-engineer agent — prompt: "Analyze test coverage for the following files{on branch {branch} if applicable}: {file list}. Recommend tests only at the public API: the inputs a real caller supplies, the outputs and side effects they observe, and the interactions the unit has with the objects and services it collaborates with. Do not recommend tests that reach into private methods, internal state, or implementation structure — if two implementations would produce the same observable behavior, the test must pass for both. Cover the critical behaviors a caller depends on and stop; do not specify a test for every branch, private helper, or intermediate value. Apply the YAGNI rule from ../../references/yagni-rule.md — recommend a test only when the code commits to a behavior the test verifies AND the failure mode is realistic for this codebase. Symmetry, completeness, and hypothetical scaling are YAGNI; defer those to the Deferred Tests section with the trigger that would justify writing them. {any additional context from user arguments}"
Launch han-core:edge-case-explorer agent — prompt: "Explore edge cases for the following files{on branch {branch} if applicable}: {file list}. Focus on inputs, integration points, and error paths observable through the public API and through interactions with collaborating objects and services — not internal state or private implementation. Apply the YAGNI rule from ../../references/yagni-rule.md — raise an edge case only when a real caller produces the input, the failure mode has plausible production trigger, or the case is critical-path correctness regardless of caller. Hypothetical adversaries the code doesn't face and symmetry-driven boundaries go to Dropped Edge Cases with the trigger that would justify revisiting. {any additional context from user arguments}"
Skip this whole section in focused mode. Otherwise inspect the file list before launching, and skip any that do not apply.
Launch han-core:concurrency-analyst agent — only if the file list touches threads, async/await, goroutines, actors, shared mutable state across requests, timers, locks, or message queues. Prompt: "Identify concurrency test gaps for the following files{on branch {branch} if applicable}: {file list}. Focus on race conditions, lock ordering, shared-resource contention, deadlock potential, and async error handling that should be covered by tests. {any additional context from user arguments}"
Launch han-core:adversarial-security-analyst agent — only if the file list touches authentication, authorization, input validation, data isolation, session handling, crypto, file uploads, external API calls with secrets, or SQL/ORM query construction. Prompt: "Identify negative security tests that should exist for the following files{on branch {branch} if applicable}: {file list}. Focus on exploit paths that tests could catch before production — authorization bypass, injection, broken isolation, insecure defaults. Return test recommendations, not general threat modeling. {any additional context from user arguments}"
Extra agents named in the project config's ## Extra Agents list join this conditional-dispatch pool under the same
file-list-signal selection, per ../../references/config-rule.md: dispatch one only
when the file list carries a signal matching its stated specialty, and skip an entry that does not resolve to a
dispatchable agent with a one-line note.
Wait for every dispatched agent to complete and collect full output for processing in Step 3.
Combine findings from every dispatched agent into a unified, prioritized test plan:
order,
a new validation, a changed return value, a schema column, or any other edit to shipped code, is not a test to
write. It is a production change wearing a test's clothes, and folding it into the plan hands the implementer a code
change nobody authorized. Move it out of the priority tiers into Blocked by a Production Change, recording the
change it needs, the file that would carry it, and who else consumes that file, so a reader can see the blast radius
and open a separate ticket. Run this sweep before IDs are assigned, and run it over security items too: an honest
finding at CRIT is still out of scope if it cannot be tested without first changing shipped code.Reason: YAGNI — {gate failure} and the trigger that would justify writing the test (a third real customer hits the
edge case, the feature actually ships the path, a measured production failure occurs, etc.). When several recommended
low-level tests can be replaced by one durable behavioral test that catches the same realistic failure modes, replace
them with the single test and record the dropped low-level tests under Deferred with
Reason: YAGNI — single behavioral test catches the same realistic failure modes.Before generating, invoke han-communication:readability-guidance to source the shared readability standard into your
context, then apply it as you write the plan's plain-language spine (Summary, What Needs Testing and Why, What Each Test
Covers), holding the named audience: the engineer who will implement the tests. The frame governs how a fact is said,
never whether a required fact appears — keep the file:line references, test levels, and TP-IDs the plan depends on.
In focused mode, do not use the template. Answer in prose: the verdict on what was asked, the reasoning that settles it, and any test worth writing, with the file:line references and test levels the engineer needs. Write no section that the question did not ask for BECAUSE a reader who asked one question should not have to search a nine-section document for its answer. Skip the rest of this step's template rules and go to Step 5.
In full mode, use the template at template.md for the output structure. The test plan leads with plain language and defers the implementation detail.
Writing rules:
Lead with behavior. These rules make the plan a human-readable overview first and an implementation outline second:
## Technical Reference region. Describe what needs testing and what would break without it, in
functional terms a reader who has not seen the code can follow. Name files, types, and test levels only where they
aid understanding.## Technical Reference region, below the plain-language spine. A reader who only needs to know what to test and why
can stop above.Fill in all sections:
In focused mode, skip the two reviewers below and go straight to the readability editor and the self-check that follow them. The two reviewers audit a document's structure and its plain-language layer, and a focused answer has neither BECAUSE it is a few paragraphs rather than a layered document.
In full mode, dispatch two reviewers against the generated test plan, in parallel, using the Agent tool. The plan is produced
in-channel, so embed the full plan text in each agent's prompt (in place of {plan text} below). If the plan was
written to a file, pass that path instead and let the agent read it.
Launch han-core:information-architect agent — prompt: "Audit the following test plan for findability,
orientation, and comprehension. The intended audience is an engineer or technically-literate stakeholder who needs to
understand what needs testing and why before reading the implementation detail. Check: (1) Do the plain-language
Summary, What Needs Testing and Why, and What Each Test Covers sections appear before the ## Technical Reference
region? If the plain-language content is missing or sits below the reference detail, that is a finding. (2) Does the
Summary paragraph read for someone who has not seen the code — no file paths, TP-IDs, or framework jargon? (3) Does
the heading list let a scanning reader see where the plain-language overview ends and the deep Technical Reference
begins? (4) Do the What Each Test Covers lines cross-link to their TP-IDs so a reader can move from plain language to
detail? Return a list of structural edits; do not return an empty list unless the plan leads with plain language and
defers the implementation detail.\n\n{plan text}"
Launch han-core:junior-developer agent — prompt: "Review the following test plan as a generalist teammate who has not seen this code. Reading only the plain-language sections (Summary, What Needs Testing and Why, What Each Test Covers), can you understand what needs testing and why it matters without dropping into the Technical Reference? Flag any plain-language line that is unclear, leans on undefined jargon, assumes context a reader would not have, or states a test without conveying what would break if it were missing. Return a list of clarity findings with the section and line they apply to; return an empty list only if the plain-language layer stands on its own.\n\n{plan text}"
Apply every actionable edit the agents return. For findings that require author judgment (scope or audience ambiguity), surface them to the user with a recommended resolution; do not silently resolve.
Once every actionable edit is applied and the plan is final, dispatch han-communication:readability-editor (one Agent
call) to audit and rewrite the plan's prose against the readability standard. If the plan was written to a file, pass the
editor that file path; if it is in-channel, pass the plan text and apply the returned rewrite. Also pass the named
audience: the engineer who will implement the tests; the editor reads han-communication's own canonical rule, so pass no
rule path. It must preserve every fact and operate on prose regions only — never inside code fences, tables, or the
TP-NNN test identifiers, which must survive unchanged so they still resolve. Apply its rewrite to the plan.
Then run the standardized readability self-check (the shared standard is in your context from
han-communication:readability-guidance) over the plan's prose regions only — never inside code fences, tables, or the
TP-NNN identifiers. Confirm each criterion and fix any failure before presenting:
Run the readability rule's standardized self-check, which is already in your context from the readability-guidance
invocation above. Correct every failure before presenting. Its fidelity criterion is not optional: the standard governs
how the content is said, and drops a required fact only when the reader asked for less and losing it would not change
what they do next.
© testdouble, 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 3 other files (scripts, references) in han-coding/skills/automated-test-planning of testdouble/han.
Open the folder on GitHubat commit abba73a
Automated Test Planning 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 |
|---|---|---|---|---|---|---|
| Automated Test Planning this skilltestdouble/han | 279 | — | ~6.7k | Automated safety check: Pass | MIT | |
| Designing TestsCloudAI-X/opencode-workflow | 275 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Test Experteinverne/dotfiles | 121 | — | ~2.3k | Automated safety check: Pass | GPL-3.0 | |
| Prd V07 Test Planningmattgierhart/PRD-driven-context-engineering | 180 | — | ~3.5k | Automated safety check: Notes | MIT | |
| Test Reviewsd0xdev/sd0x-harness | 192 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Risk Based Testingpetrkindlmann/qa-skills | 165 | — | ~5.3k | Automated safety check: Pass | MIT |
CloudAI-X/opencode-workflow
Guides test strategy, TDD/BDD approaches, test coverage planning, and testing best practices.
einverne/dotfiles
Testing methodologies, test-driven development (TDD), unit and integration testing, and testing best practices across multiple frameworks.
mattgierhart/PRD-driven-context-engineering
Define test cases BEFORE implementation, ensuring every API, business rule, and user journey has verifiable acceptance criteria during PRD v0.7 Build Execution.
sd0xdev/sd0x-harness
Test coverage review via Codex exec. An agent skill from sd0xdev/sd0x-harness.
petrkindlmann/qa-skills
Produce a risk matrix or heatmap that quantifies what could break by business impact × probability, runs failure mode analysis on the top items, and maps test coverage to risk zones.
petrkindlmann/qa-skills
Build a single sprint or release test plan. An agent skill from petrkindlmann/qa-skills.
testdouble/han
Convert a stakeholder summary markdown file into a single self-contained HTML executive report — bottom line and decision asks up front, supporting detail later — styled with a Test Double-derived…
testdouble/han
Update Han plugin documentation so every skill, agent, guidance doc, index, and cross-reference is current and accurate.
testdouble/han
Authoritative guidance for building Claude Code skills, agents, and plugins, plus init and update steps that install and refresh the plugin-building skills in the current repository.
testdouble/han
Cut a Han release: update CHANGELOG.md with the changes since the last release, bump and tag every plugin that changed as {plugin-name}--v{version} so a version-constrained dependency can resolve…
testdouble/han
Generate a PR description from the current branch's changes against a GitHub PR, using the gh CLI.
testdouble/han
Builds a feature implementation plan from an existing feature specification (or equivalent context) through a facilitated team conversation.
Categories
Produce a standalone test plan by analyzing code for test coverage gaps and edge cases. Automated Test Planning is an agent skill from testdouble/han. Produce a standalone test plan by analyzing code for test coverage gaps and edge cases.
Automated Test Planning fits situations like: you need to create; draft a test plan for a branch; need to analyze test coverage; need to identify what tests to write for specific files.
Run `npx skills add testdouble/han --skill automated-test-planning -a claude-code`. Or copy the skill folder (han-coding/skills/automated-test-planning in testdouble/han) into .claude/skills/automated-test-planning in your project. Claude Code loads it when a task matches its description.
Run `npx skills add testdouble/han --skill automated-test-planning -a codex`. Or copy the skill folder (han-coding/skills/automated-test-planning in testdouble/han) into .agents/skills/automated-test-planning 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 testdouble/han --skill automated-test-planning -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/automated-test-planning, .gemini/skills/automated-test-planning, .github/skills/automated-test-planning and .opencode/skills/automated-test-planning in your project.
Going by SKILL.md and its folder, Automated Test Planning needs a shell for the scripts in its folder and the command-line tools its instructions call (git and bash). Our summary lists: A Bash shell. Its frontmatter pre-approves these tools: Bash(git *), Bash(find *), Read, Grep, Glob, Agent, Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh").
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Automated Test Planning is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.7k tokens (SKILL.md is roughly 27k 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 1.8k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Automated Test Planning: Designing Tests (CloudAI-X/opencode-workflow, 275 stars), Test Expert (einverne/dotfiles, 121 stars), Prd V07 Test Planning (mattgierhart/PRD-driven-context-engineering, 180 stars) and Test Review (sd0xdev/sd0x-harness, 192 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
testdouble (a GitHub organization) maintains it in testdouble/han, which has 279 GitHub stars. The repository holds 54 skills in this directory. The repository was last updated on October 1, 2026.
Source: testdouble/han on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.