Code Review
hardness1020/Leeway
Code quality review — identify patterns, anti-patterns, and improvements.
Creates and maintains project documentation for features, systems, and components.
$ npx skills add testdouble/han --skill project-documentation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install testdouble/han project-documentation --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-documentation/skills/project-documentation .claude/skills/project-documentation && 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 "project-documentation" agent skill from https://github.com/testdouble/han/tree/main/han-documentation/skills/project-documentation into .claude/skills/project-documentation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-documentation", 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-documentation/skills/project-documentationType 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 project-documentation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install testdouble/han project-documentation --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-documentation/skills/project-documentation .agents/skills/project-documentation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "project-documentation" agent skill from https://github.com/testdouble/han/tree/main/han-documentation/skills/project-documentation into .agents/skills/project-documentation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-documentation", 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 project-documentation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install testdouble/han project-documentation --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-documentation/skills/project-documentation .cursor/skills/project-documentation && 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 "project-documentation" agent skill from https://github.com/testdouble/han/tree/main/han-documentation/skills/project-documentation into .cursor/skills/project-documentation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-documentation", 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-documentation/skills/project-documentation--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 project-documentation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install testdouble/han project-documentation --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-documentation/skills/project-documentation .gemini/skills/project-documentation && 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 "project-documentation" agent skill from https://github.com/testdouble/han/tree/main/han-documentation/skills/project-documentation into .gemini/skills/project-documentation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-documentation", 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 project-documentationInstalls 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 project-documentation -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-documentation/skills/project-documentation .github/skills/project-documentation && 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 "project-documentation" agent skill from https://github.com/testdouble/han/tree/main/han-documentation/skills/project-documentation into .github/skills/project-documentation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-documentation", 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 project-documentation -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 project-documentation --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-documentation/skills/project-documentation .opencode/skills/project-documentation && 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 "project-documentation" agent skill from https://github.com/testdouble/han/tree/main/han-documentation/skills/project-documentation into .opencode/skills/project-documentation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-documentation", 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.
project-documentationCreates and maintains project documentation for features, systems, and components.
Project Documentation is an agent skill from testdouble/han. Creates and maintains project documentation for features, systems, and components. Use when documenting how a feature, system, or component works — including writing, updating, or organizing docs. Does not scan or detect the project's technology stack — use project-discovery for repository analysis and config detection. Does not create architectural decision records — use architectural-decision-record for ADRs. Does not create or update coding standards — use coding-standard instead. Does not generate PR…
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/template.md`).
It sits in Development, covering Code quality, Pull requests and Runbooks and postmortems. The repository describes itself as: Han: AI skills and agents for "Solo" product engineers and small teams. The licence is MIT.
10 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:
ReadWriteEditGlobGrepAgentBash(date *)Bash(mkdir *)Bash(find *)Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh")From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
bashFrom 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.
Project Documentation loads about 3.5k tokens when it runs, and up to ~6.8k if it reads all its reference files. Until then it costs about 211 tokens; SKILL.md has 1,879 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 testdouble/han at commit abba73a, republished under its MIT licence (© testdouble). 1,879 words, ~3,545 tokens.
.claude/skills/project-documentation/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.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.
Readability. As you write the documentation, source the standard by invoking
han-communication:readability-guidance and apply it. The output is a committed file, so the standard applies at
generation time. Hold a named audience above the default: a technically-literate reader who needs to understand the
feature's behavior before reading or modifying its code. Scope that frame per section so the technical specifics the
reader needs are not simplified away.
Guard check: If the request is about an architectural decision, suggest architectural-decision-record instead.
If it's about a coding convention, suggest coding-standard instead. Proceed only after confirming this is project
documentation.
Docs directory: Resolve project config: read CLAUDE.md's ## Project Discovery section for docs directory and
language; fall back to project-discovery.md; fall back to Glob default (docs/). Use the found docs directory with Glob
to enumerate existing .md files. If no docs directory was found, create docs/. The found language informs code fence
language identifiers in Step 3.
Resolve target files: Derive the filename in kebab-case: docs/{feature-name}.md. Use Glob to check if the file
already exists (docs/{feature-name}*.md). If it exists, use AskUserQuestion to ask: update the existing document, or
create with a different name? If not, it will be created.
Topic context: Use the arguments and conversation context to understand the topic and scope. If unclear, use
AskUserQuestion to clarify.
Flag content audit need: Determine whether the Content Audit (Step 6) will be needed. It is needed when updating an existing doc, migrating content from CLAUDE.md, or restructuring content from any other source. It is not needed only when creating documentation for a feature with no prior documentation of any kind.
Launch 2-3 han-core:codebase-explorer agents in parallel with the feature name, scope, and any known file paths.
Include the docs directory from Step 1 so agents can discover existing documentation. Each agent should explore from a
different angle (e.g., entry points and core logic; data models and configuration; tests and existing docs).
After all agents complete, merge their findings into a unified discovery summary — a numbered list (D1, D2, D3, ...) that combines all items, deduplicates files found by multiple agents, and resolves any conflicting findings.
Use the template at template.md as the structural guide. The template's HTML comments explain when to include each section and what to cover.
Readability. Invoke han-communication:readability-guidance to surface the shared readability standard into your
context, then draft into the template so the structure carries that standard: main point first, descriptive headings,
one idea per paragraph with the first sentence carrying it, numbered lists for steps and bullets for non-sequential
items, and progressive disclosure that reveals the core before the detail.
File location: docs/{feature-name}.md (in the directory determined in Step 1)
Writing rules:
Lead with behavior. These rules make the doc an overview first and a reference second:
## Technical Reference region, below the behavioral spine. Treat them as lookup
material, not the document's main body.Apply to every section:
src/services/auth.ts, not ./auth.ts).### Backend / ### Frontend sub-headings for cross-cutting
features; skip sub-headings for single-layer features.```mermaid fence — flowchart for structure and trees, sequenceDiagram for
actor-to-system exchanges. Label nodes with parts a reader recognizes and label edges with what passes between them.
Keep each diagram to the parts that matter; a reader should grasp the shape at a glance.Updating existing documents: Read the entire existing document first and note all content sources (existing doc, content migrated from CLAUDE.md or other files, any other inputs). Preserve the existing structure; don't reorganize unless requested. Identify sections needing changes based on Step 2 exploration. Add new sections where the template suggests them. If the existing doc has no plain-language behavioral layer (no Summary, How It Works, or Primary Flows), add those sections at the top so the updated doc leads with behavior. Flag removals as provisional for the Content Audit (Step 6). Update code examples to match current source and update cross-references in both directions.
Metadata: Fill in Last Updated (current date/time).
CLAUDE.md, AGENTS.md, or equivalent) to understand its existing structure and
patterns- See [/docs/{feature-name}.md](/docs/{feature-name}.md) for {brief description}.Check the flag set in Step 1. If the Content Audit is not needed, skip to Step 7.
Identify every source of pre-existing content that fed into this task (previous doc version, CLAUDE.md content replaced
with summary links, content migrated from other files). Re-read each source's original content from before your changes.
Launch a han-core:content-auditor agent with the path to the new/updated document and the list of all source content
(file paths and descriptions). The agent classifies each fact as Present, Correctly Removed, or Missing.
For each item classified as Missing, add the content back to the appropriate section, adapting wording to fit the new document's style while preserving factual content. Use the agent's suggested wording and placement as guidance.
Present the audit summary to the user: number of facts checked, number present, number correctly removed, and number missing (and restored).
Dispatch an han-core:information-architect agent against the written/updated doc before final verification. Pass it
the document path, the docs directory root, and the intended audience (a developer or technically-literate stakeholder
who needs to understand the feature's behavior before reading its code, and who may later modify it).
Prompt: "Audit the feature doc at {doc_path} for findability, orientation, and comprehension. The intended audience is a
developer or technically-literate stakeholder who needs to understand the feature's behavior before reading its code,
and who may later modify it. Check: (1) Does a plain-language Summary and a How It Works and Primary Flows narration
appear before any code, schema, or type reference? If the behavioral content is missing or sits below the reference
detail, that is a finding. (2) Does the heading list let a scanning reader see where the functional overview ends and
the deep ## Technical Reference begins? (3) Is the Summary a short prose paragraph plus bullets, oriented at the right
audience, and does the title + one-sentence description match what a reader scanning {docs_directory} would expect to
find here? (4) Are Configuration and Error Handling scannable and placed ahead of the raw reference detail? (5) Does the
Related Documentation section lead the reader to the next useful artifact, or dead-end them? Return a list of structural
edits. Do not return an empty list unless the document leads with behavior and defers code reference."
Apply every actionable edit the agent returns. For findings that require a judgment only the author can make (scope, audience ambiguity), surface them to the user with a recommended resolution; do not silently resolve.
Dispatch the han-communication:readability-editor agent in a single Agent call to audit and rewrite the settled doc
against the readability standard, preserving every fact. Pass it the document path and the named audience: a
technically-literate reader who needs to understand the feature's behavior before reading or modifying its code; the
editor reads han-communication's own canonical rule, so pass no rule path. The agent rewrites prose regions only —
never inside code fences, diagram bodies (for example the body of a Mermaid chart), or rendered markup. Apply its
rewrite to the document.
Run the standardized readability self-check (the shared standard is in your context from
han-communication:readability-guidance) over the document's prose regions only — never inside code fences, diagram
bodies, or rendered markup. Confirm each criterion and fix any failure before finalizing:
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.
The standard applies at generation time; a later manual edit of the committed file is not re-checked.
## Technical Reference region), no {placeholder} values remain, absolute file paths, reference
code is short snippets or file pointers rather than long source blocks, no empty CONDITIONAL sections, Mermaid
diagrams are syntactically valid (open with ```mermaid, declare a diagram type, and parse)© 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 1 other file (references) in han-documentation/skills/project-documentation of testdouble/han.
Open the folder on GitHubat commit abba73a
Project Documentation 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 |
|---|---|---|---|---|---|---|
| Project Documentation this skilltestdouble/han | 279 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Code Reviewhardness1020/Leeway | 115 | — | ~301 | Automated safety check: Pass | MIT | |
| Ak Dev Code Qualityyaalalabs/agent-kernel | 191 | — | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| Clean Codejd-solanki/slidev-theme-dracula | 161 | 1 repos | ~3.8k | Automated safety check: Pass | MIT | |
| Cap Feature Building WorkflowCapSoftware/Cap | 23k | — | ~2.5k | Automated safety check: Warn | Custom licence | |
| Qiaomu Meta Skilljoeseesun/qiaomu-meta-skill | 383 | — | ~2.8k | Automated safety check: Pass | MIT |
hardness1020/Leeway
Code quality review — identify patterns, anti-patterns, and improvements.
yaalalabs/agent-kernel
Code quality standards, formatting, Python style rules (classes over script-style functions, configuration-field rules), commit conventions, and PR workflow for Agent Kernel development.
jd-solanki/slidev-theme-dracula
Write readable, maintainable code through disciplined naming, small functions, and clean error handling.
CapSoftware/Cap
Builds a Cap feature in an isolated Git worktree with disposable dev resources, verification, a recorded demo and a neutral pull request, started with /building.
joeseesun/qiaomu-meta-skill
Research, create, improve, migrate, evaluate, package, install-check, govern, and safely publish qiaomu-flavored agent skills from workflows, prompts, transcripts, docs, SOPs, runbooks, scripts, or…
ropensci/ckanr
Write or rewrite text in plain, layman-readable English in the spirit of ASD-STE100 Simplified Technical English: short sentences, active voice, simple tenses, one word one meaning, condition before…
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
Builds a feature implementation plan from an existing feature specification (or equivalent context) through a facilitated team conversation.
testdouble/han
Restructure existing code without changing its behavior, through a test-gated refactoring loop: a named target, a green suite over that target before any edit, a planned sequence of small named…
Categories
Creates and maintains project documentation for features, systems, and components. Project Documentation is an agent skill from testdouble/han. Creates and maintains project documentation for features, systems, and components.
Project Documentation fits situations like: documenting how a feature; component works — including writing; organizing docs.
Run `npx skills add testdouble/han --skill project-documentation -a claude-code`. Or copy the skill folder (han-documentation/skills/project-documentation in testdouble/han) into .claude/skills/project-documentation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add testdouble/han --skill project-documentation -a codex`. Or copy the skill folder (han-documentation/skills/project-documentation in testdouble/han) into .agents/skills/project-documentation 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 project-documentation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/project-documentation, .gemini/skills/project-documentation, .github/skills/project-documentation and .opencode/skills/project-documentation in your project.
Going by SKILL.md and its folder, Project Documentation needs the command-line tools its instructions call (bash). Its frontmatter pre-approves these tools: Read, Write, Edit, Glob, Grep, Agent, Bash(date *), Bash(mkdir *), Bash(find *), Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh").
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.
Project Documentation is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k 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.3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Project Documentation: Code Review (hardness1020/Leeway, 115 stars), Ak Dev Code Quality (yaalalabs/agent-kernel, 191 stars), Clean Code (jd-solanki/slidev-theme-dracula, 161 stars) and Cap Feature Building Workflow (CapSoftware/Cap, 23k 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.