Codexqa Rootcause Analyzer
openqa-cn/codexqa
Diagnoses exception root causes from stack traces, logs, call-chain dumps, and debug output using the CodexQA CLI for structured repo analysis.
Produces a human-readable, progressive-disclosure overview of unfamiliar code or a pull request's changes — why it exists (the real problem it solves or goal it serves for the business or a user)…
$ npx skills add testdouble/han --skill code-overview -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install testdouble/han code-overview --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/code-overview .claude/skills/code-overview && 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 "code-overview" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/code-overview into .claude/skills/code-overview/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "code-overview", 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/code-overviewType 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 code-overview -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install testdouble/han code-overview --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/code-overview .agents/skills/code-overview && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "code-overview" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/code-overview into .agents/skills/code-overview/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "code-overview", 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 code-overview -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install testdouble/han code-overview --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/code-overview .cursor/skills/code-overview && 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 "code-overview" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/code-overview into .cursor/skills/code-overview/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "code-overview", 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/code-overview--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 code-overview -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install testdouble/han code-overview --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/code-overview .gemini/skills/code-overview && 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 "code-overview" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/code-overview into .gemini/skills/code-overview/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "code-overview", 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 code-overviewInstalls 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 code-overview -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/code-overview .github/skills/code-overview && 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 "code-overview" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/code-overview into .github/skills/code-overview/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "code-overview", 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 code-overview -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 code-overview --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/code-overview .opencode/skills/code-overview && 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 "code-overview" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/code-overview into .opencode/skills/code-overview/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "code-overview", 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.
code-overviewProduces a human-readable, progressive-disclosure overview of unfamiliar code or a pull request's changes — why it exists (the real problem it solves or goal it serves for the business or a user)…
Code Overview is an agent skill from testdouble/han. Produces a human-readable, progressive-disclosure overview of unfamiliar code or a pull request's changes — why it exists (the real problem it solves or goal it serves for the business or a user), and from there what it does, how it flows, and where to start — so you can get up to speed before working on or reviewing it. Use when you want to understand, get oriented in, make sense of, explain, or get up to speed on a chunk of code, a file, a directory, a symbol, or a PR's changes. Writes the overview to a scratch…
Its SKILL.md is about 8.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/overview-template.md`).
It sits in Development, covering Code review, Debugging and Root cause analysis. The repository describes itself as: Han: AI skills and agents for "Solo" product engineers and small teams. The licence is MIT.
8 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:
ReadGlobGrepAgentWriteBash(git *)Bash(gh *)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:
gitghbashFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom 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.
Code Overview loads about 8.5k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 254 tokens; SKILL.md has 5,105 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). 5,105 words, ~8,521 tokens.
.claude/skills/code-overview/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.which git 2>/dev/null || echo "not installed"which gh 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.
Read these before doing anything. They constrain every step below.
han-core:codebase-explorer agents gather the
surrounding code and context the synthesis draws on — they do not write the overview. After the draft is written,
han-core:adversarial-validator re-reads the code to challenge the draft's claims for accuracy, and
han-communication:readability-editor rewrites the corrected draft against the shared readability standard,
preserving every fact; the skill applies the validator's corrections and the editor's rewrite. The skill itself
produces the grouping, the charts, the orientation, and the final rewrite.han-communication:readability-guidance (Step 5) and applies it, holding the default audience
frame: a capable reader who did not do this work and lacks the author's context. The standard governs how the overview
reads (main point first, descriptive headings, one idea per paragraph, progressive disclosure), never whether a
required fact about the code appears. Its dedicated han-communication:readability-editor pass (Step 7) replaces the
older information-architect / junior-developer readability review; the accuracy validator is a separate pass and
stays.code-review's job;
this skill only helps the reader understand the PR before they review it. Crossing this line collapses the boundary
between the two skills. Saying the code does not support a change's stated reason is not a crossing: the claim under
test there is the document's own leading claim about the reason, which this skill already owns and already validates,
not a judgment about the code's quality.Context used section placed
directly after the lead why section — linked directly when the source has an address (a repository file path, a PR /
issue / commit URL), stated in one plain sentence when it does not (an uncommitted diff, the branch's commit messages,
context supplied in conversation). BECAUSE the reader should be able to walk the same evidence the overview was built
from, and a fabricated or broken link poisons that trust — never invent a URL or link a path that does not exist.project-documentation's job. That is why the skill's own default
destination sits outside the repository, and why the skill never commits the file. This principle governs the
skill's default only, not what a person configures: a configured output directory wins wherever it points, and the
run says nothing about it (Step 6).Bind $size. If the user passed small, medium, large, or dynamic as the first positional argument, bind
$size to it. Anything else is part of the target, not a size; bind $size to the literal none provided.
Note tool availability. Read git installed and gh installed from Project Context. If git installed is empty or
reads not installed, git is unavailable — see the degraded paths below.
Resolve the target and mode by this fixed precedence, so an ambiguous string never silently selects the wrong mode:
#82, https://github.com/owner/repo/pull/82) → PR mode
against that pull request. Requires gh; if gh installed is empty or reads not installed, tell the user gh is
needed to read a named pull request and offer code mode against a local target instead.Handle the unresolvable and empty cases (state the problem plainly and stop; never guess):
Resolve project context. If CLAUDE.md is present, read its ## Project Discovery section for conventions; fall
back to project-discovery.md. These resolve language and framework questions so the explorers infer less. If neither
exists, note that surrounding-code inference applies and pass that into the briefs.
Classify the target's size. Default to small; escalate only on a clear signal, and stay at the smaller band when a signal is borderline.
Apply the size override. If $size is not none provided, use it: a band value is the band and skips the
signal-based classification, while dynamic forces the signal-based classification even when the project config sets
a default band. If $size is none provided and the project config supplies a band via default-swarm-size (per the
config rule in ../../references/config-rule.md), use that band, skip the
signal-based classification, and name the config as the source in the announcement below. A conversational override
("give me a large overview") is equivalent.
Announce the chosen mode and size in one line before dispatching any exploration — for example,
Code mode, size medium: directory \src/auth/` spanning the session and token
subsystems. State tool degradation in the same line when it applies (git unavailable — code mode only`). Proceed
without a blocking confirmation; this skill is read-only and re-runnable, so a gate here would gate a reversible
operation. Honor any adjustment the user makes.
Code mode. Read the target file, directory, or symbol and enough of its immediate neighbors to know its boundary — what it imports and what imports it.
PR mode. Gather the change set:
git symbolic-ref refs/remotes/origin/HEAD or fall back to main/master), then capture
git diff {default-branch}...HEAD for committed work and git diff plus git diff --cached for uncommitted work.
Run each diff as its own Bash command so large diffs stream incrementally. Also capture
git log {default-branch}..HEAD --pretty=format:%B for the change's intent. When gh is available, also run
gh pr view --json title,body,comments (no ref — resolves the PR for the current branch) so the change's stated
intent and any screenshots are in scope; if no PR exists for the branch, skip this without failing.gh pr view {ref} --json title,body,comments for intent and
screenshots, and gh pr diff {ref} for the change set. If the pull request cannot be reached (it does not exist, or
access is unavailable), say so and offer code mode against a local target instead.Capture screenshots. When a PR body or a comment contains embedded images — Markdown  or
<img src="url">, typically GitHub-hosted (user-attachments, githubusercontent.com) — record each image's URL
together with the nearby caption or heading that says what it shows. These let the overview show a visual next to the
text that describes it, so the reader does not have to switch back to the PR. If the PR has no images, capture nothing
here.
Identify the set of files the change touches; that set scopes the exploration in Step 4.
Start the context ledger. From this step on, record every context source consulted — the files and directories read,
the PR reference and its URL, the commit range and log, CLAUDE.md or project-discovery.md, and any material the user
supplied in conversation — noting for each whether it has a direct address (a repository file path, a PR / issue /
commit URL) or not (an uncommitted diff, the branch's commit messages, conversational context). Step 5 renders this
ledger into the overview's Context used section, so an unrecorded source here is a missing citation there.
Dispatch han-core:codebase-explorer agents to discover the surrounding code and context — the evidence of why the
code exists (the problem it solves or goal it serves), plus entry points, directly-related context, uses, and the main
process flow — that the synthesis draws on. Scale the count to size, and launch every agent in a single message so
they run concurrently:
Each brief must contain: the resolved target (and, in PR mode, the changed-file set and the captured intent from Step 3); the project-context conventions from Step 1, or a note that surrounding-code inference applies; and the instruction to report the evidence of why the code exists — the problem it solves or goal it serves, drawn from commit messages, PR/issue intent, code comments, naming, and tests — alongside entry points, directly-related context, uses, and the main flow, as concrete, file-grounded findings. Instruct each explorer to list the files and sources its findings rest on (paths, commits, PR or issue references) so the skill can fold them into the context ledger from Step 3. Instruct each explorer to report what it found, not to assess quality — this skill raises no findings — and, where the why is not stated anywhere in the evidence, to say so rather than infer one.
When the wave returns, merge each explorer's reported sources into the context ledger, deduplicated.
Wait for the whole wave to return before synthesizing. If the target proves too large to cover fully at the chosen size, the explorers cover the highest-signal areas; carry that into the coverage note in Step 5.
Invoke han-communication:readability-guidance to surface the shared readability standard into your context before you
write. Then invoke han-communication:explanation-guidance, which surfaces Han's standard for explaining technical work
to a reader who will not implement it: that standard governs the closing restatement this step writes and the closing
message Step 8 prints, BECAUSE both go to someone who will not open the code. Both run inline and hand control straight
back; continue with this step as soon as they return. Then draft the overview against both. Read references/overview-template.md and
render the structure for the resolved mode, drawing on the explorers' findings and the input from Step 3. The skill
writes the overview; the explorers' raw findings are not pasted in.
Open the document with a title and a short intro paragraph naming what is being examined — the file, directory,
symbol, pull request, or branch, and the part of the system it belongs to. Do NOT emit a Mode:, Generated:, or bare
Target: metadata block; that metadata does not help the reader. Never state PR statistics — lines changed, files
changed, additions/deletions, or commit counts — anywhere in the document; they go stale the moment the PR changes and
add no understanding. Fold anything worth keeping into the intro sentence.
Lead with the why, and let everything else flow from it. The first section after the intro answers why this code (or this change) exists — the real problem it solves or the goal it accomplishes for the business or a user, then why it works the way it does and why it is the current solution to that need. Tell the why as a solution to a need, not as technical mechanics. Then frame every section that follows as serving that why: the flow shows how the code delivers on it, the context shows what it depends on to meet the need, the handoff shows where to start working on it. When the why is not recoverable from the code and its intent (commit messages, PR/issue text, comments, naming, tests), state what the code demonstrably does toward a goal and mark the inferred why as inferred — never invent a business rationale the evidence does not support.
Say when the code does not support the stated reason (PR mode). You already read the code to ground the why. When that reading shows the code already satisfies the stated motivation, or shows the change is not needed for the reason given, say so in the why section itself, in one or two sentences, as a fact about the stated reason. Raise no finding, assign no severity, recommend no change; the rest of the overview proceeds as normal. Three states, and only the first gets the sentence:
NEVER report a contradiction you did not check and find, BECAUSE that is a stronger claim than the evidence carries and the honest weaker claim already has a home in state 3. This is the highest-value sentence a change overview can carry, and it is also the easiest one to get wrong by reaching.
Code mode renders, in order: the title and intro paragraph; a coverage note only if coverage was partial; Why it exists (the problem the code solves or goal it serves, then briefly what it is and why it works the way it does — all flowing from the why); Context used (the context ledger, rendered per the rules below); Main flow (a Mermaid chart with a one-line scope label, read as how the code delivers on the why); Context and uses (context and uses kept distinguishable, framed as what it depends on to meet the need and where that need is served from); Where to start (the entry points numbered in the order a reader opens them, each with one line on what the reader learns there, and one runnable example call on any entry point that is an interface other code calls); What this code does, in plain language (the closing restatement).
PR mode renders, in order: the same title and intro paragraph; the same conditional coverage note; Why this change exists (the problem the change solves or goal it advances, then briefly the bottom line of what it does, plus the unsupported-reason sentence when it applies — see below); Context used (the context ledger, rendered per the rules below); Changes by intent (grouped by the reader-visible outcome each group delivers — the why each group serves — not by file, layer, or author motivation; a single logical change is one narrative with no grouping header); How the change flows (a Mermaid chart with a scope label, placed after the grouped changes BECAUSE the reviewer must know what changed before that chart is meaningful); What to watch when reviewing (navigational only — where the change is hardest to follow and why; never a quality or risk judgment); What this change does, in plain language (the closing restatement).
Render the Context used section from the context ledger built in Steps 3 and 4, directly after the lead why
section in both modes. One line per source, each with a short note on what it contributed. Link every source that has a
direct address: a repository file or directory as a Markdown link whose target is its absolute path (the overview file may
sit outside the repository, so a relative path would not resolve); a pull request, issue, or commit as its URL (in PR
mode with a remote, prefer the remote's file URLs at the PR's head so the links work for a reader outside this machine).
A source with no address — the uncommitted diff, the branch's commit messages, context the user supplied in conversation
— gets one plain sentence stating what the context was. Never fabricate a URL or link a path that does not exist;
deduplicate the list and keep it a reference list, not prose.
Place any captured screenshots inline next to the text they illustrate — embedded as  directly
under the Changes-by-intent item or the flow step they depict, BECAUSE a visual next to its description spares the
reader a trip back to the PR. Keep the image URL exactly as captured. Omit screenshots entirely when the PR had none;
never invent or placeholder an image.
Close with a restatement a person can paste. Both modes end with three or four plain sentences a reader who did not do this work could read aloud, carrying no file paths, no type names, and no symbol names. Write them under the explanation standard sourced above. These sentences are the canonical text: Step 8's message repeats them rather than composing its own version, BECAUSE the reader's next move after an overview is reliably to paste a plain summary into a pull request description or a message to a reviewer, and two texts saying the same thing in different words teach them to distrust the shorter one.
Apply the per-section detail rule from the template: minimal technical detail in the why, flow, and context sections — the why told as a problem solved or goal met, not technical mechanics; concrete named entry points in the handoff section. Give every chart a scope label, and apply the template's diagram rule to every chart you draw: each box names a component or a boundary, and the fields, types, and annotations go into the prose beneath the chart. When coverage is partial, place the coverage note immediately after the intro paragraph so the reader calibrates before investing in the charts.
The file is named code-overview-{short-target-slug}.md wherever it lands. Only the directory is resolved here.
Resolve the directory in this order:
output-directory. When the config read at the top of this skill supplied one, write the overview
beneath it. Honor it even when it points inside the repository, and say nothing about that, BECAUSE the person who
configured a destination chose it, and this skill's own default is not a veto over their choice. Relative-path
resolution, ~ expansion, and precedence between the personal and project files are governed by
config-rule.md; do not re-derive them here.${TMPDIR:-/tmp}/code-overview-{short-target-slug}.md — BECAUSE an unconfigured overview is an orientation aid
rather than documentation, and a default inside the repository would land it in a commit sooner or later.When the resolved directory cannot be written, write to the unconfigured default in 2 instead and record which destination you could not use, so Step 8's message can name it. NEVER abandon the run over this, BECAUSE everything the run produced is finished by the time it writes, and losing all of it to a directory that does not exist is the worse outcome by far.
The next step reviews and rewrites this file in place.
This step runs two distinct passes, in order: the accuracy validator first, then the readability rewrite. Accuracy is settled before readability so the editor never polishes a claim that is about to be cut.
Pass 1 — accuracy. Dispatch han-core:adversarial-validator over the draft overview. Pass it the overview file's
path from Step 6 and the resolved target (and, in PR mode, the changed-file set) so it knows what to re-read.
han-core:adversarial-validator — assume every claim the overview makes about the code is WRONG until the code
and its intent prove it right. Re-read the target (and the diff, in PR mode) and challenge each material claim,
starting with the one the document leads on: is the stated why — the problem the code solves or the goal it serves
— grounded in real evidence (commit messages, PR/issue intent, code comments, what the code visibly does toward that
goal), or is it an invented business rationale, and where the why is inferred rather than stated, is it marked as
inferred; does the code actually do what Why it exists / Why this change exists says; where the overview claims
the code already satisfies the stated reason or does not support it, does the code show that, or is the code merely
silent on the point — silence is not a contradiction, and a discrepancy claimed on silence is an inaccuracy to cut; does the Main flow /
How the change flows chart match the real control flow, in the right order, with no invented or missing steps; do
the named Where to start entry points exist and are they the right ones; does each Changes by intent grouping
describe what that change actually does and the why it claims to serve; does every entry in Context used point at
a source that exists (the file path resolves, the PR / issue / commit reference is real) — a fabricated or broken link
is an inaccuracy like any other. Surface every claim that is unsupported,
overstated, contradicted by the code, or hallucinated — the why most of all, since it is the load-bearing claim —
citing the file, line, or commit that disproves it. Validate the accuracy of the description only — do not assess
the code's quality and do not raise findings about the code itself. Return a list of inaccurate or unsupported
claims, each with the corrected fact or a note that the claim should be cut.Apply the validator's corrections to the overview file first: fix or cut every claim it disproved. A sentence that reads beautifully but describes a flow the code does not follow must still be corrected or removed. If validation removed so much that coverage is now meaningfully partial, add or update the coverage note.
Pass 2 — readability rewrite. Dispatch han-communication:readability-editor over the corrected draft. This
dedicated pass replaces the older information-architect / junior-developer readability review; the deliverable gets one
readability rewrite, not two overlapping reviews.
han-communication:readability-editor — rewrite the overview against the shared readability standard for the
default reader (a capable reader who did not do this work and lacks the author's context), preserving every fact. Pass
it the overview file's path; the editor reads han-communication's own canonical rule, so pass no rule path. It operates
on prose regions only: it does not touch the Mermaid chart bodies, code fences, or the embedded screenshot markup,
and it leaves every named file, symbol, entry point, and Context used link target exact. It applies the rewrite to
the overview file in place and returns a rubric verdict and a fact-preservation ledger. Tell it: rewrite the
overview document for readability only — do not review the underlying code, and do not raise findings about it.
This skill makes no quality judgment about the code; the validator guards truth, the editor guards clarity, and
neither crosses into evaluating the work itself.Keep the spec-content discipline through both passes: the result is still an orientation aid with no quality findings, led by the why with everything flowing from it, minimal technical detail in the why/flow/context sections, and concrete entry points in the handoff section.
Readability self-check. After the rewrite, run the standardized readability self-check (the shared standard is in
your context from han-communication:readability-guidance) over the overview's prose regions only — never inside the
Mermaid chart bodies, code fences, screenshot markup, or file/symbol references. 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, never whether a required fact about the code appears.
For this skill, the main point the opening line must state is what is being examined and why it exists.
Required-content check. Run this after the readability self-check, and after the accuracy pass, BECAUSE a check that runs before the accuracy pass can confirm content that is about to be corrected or cut. Each item is a yes/no question about the finished document. Fix every failure before presenting; never present a failure as a caveat.
Present a short message in this fixed order. The answer leads and the run's own bookkeeping comes last, BECAUSE this message is the first thing the user reads and facts about how the run went are the last thing they need from it:
Do not paste the whole overview into the conversation; point the user at the file, where the Mermaid charts render.
© 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-coding/skills/code-overview of testdouble/han.
Open the folder on GitHubat commit abba73a
Code Overview 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 |
|---|---|---|---|---|---|---|
| Code Overview this skilltestdouble/han | 279 | — | ~8.5k | Automated safety check: Pass | MIT | |
| Codexqa Rootcause Analyzeropenqa-cn/codexqa | 152 | — | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| Grix Code Reviewaskie/grix | 153 | — | ~799 | Automated safety check: Pass | Custom licence | |
| Issue TracerZaxbyHub/opencode-swarm | 488 | — | ~4.4k | Automated safety check: Pass | MIT | |
| Cwe Code ReviewSpecterOps/skills | 702 | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Bugfix PRTanStack/ai | 3.2k | — | ~4.8k | Automated safety check: Pass | MIT |
openqa-cn/codexqa
Diagnoses exception root causes from stack traces, logs, call-chain dumps, and debug output using the CodexQA CLI for structured repo analysis.
askie/grix
Audit Grix diffs and pull requests for correctness, regressions, security, lifecycle safety, and cross-component contract consistency.
ZaxbyHub/opencode-swarm
Drives a bug report from validation and root-cause tracing through a critic-reviewed plan, an approved minimal fix and a PR-ready closure, never merging without recorded human approval.
SpecterOps/skills
Perform CWE-grounded security code reviews and precise weakness mapping using a locally derived MITRE CWE corpus, relationship graphs, mapping notes, detection methods, mitigations, and schema…
TanStack/ai
Treats bug-fix pull requests as invasive and untrusted. An agent skill from TanStack/ai.
VeryGoodOpenSource/vgv-wingspan
Applies a minimal fix to an emergency bug through triage, root-cause location, a hotfix branch and a blast-radius check, with tests and review still required.
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
Produces a human-readable, progressive-disclosure overview of unfamiliar code or a pull request's changes — why it exists (the real problem it solves or goal it serves for the business or a user)…. Code Overview is an agent skill from testdouble/han. Produces a human-readable, progressive-disclosure overview of unfamiliar code or a pull request's changes — why it exists (the real problem it solves or goal it serves for the business or a user), and from there what it does, how it flows, and where to start — so you can get up to speed before working on or reviewing it.
Code Overview fits situations like: you want to understand; get oriented in; get up to speed on a chunk of code.
Run `npx skills add testdouble/han --skill code-overview -a claude-code`. Or copy the skill folder (han-coding/skills/code-overview in testdouble/han) into .claude/skills/code-overview in your project. Claude Code loads it when a task matches its description.
Run `npx skills add testdouble/han --skill code-overview -a codex`. Or copy the skill folder (han-coding/skills/code-overview in testdouble/han) into .agents/skills/code-overview 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 code-overview -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/code-overview, .gemini/skills/code-overview, .github/skills/code-overview and .opencode/skills/code-overview in your project.
Going by SKILL.md and its folder, Code Overview needs the command-line tools its instructions call (git, gh and bash). Its frontmatter pre-approves these tools: Read, Glob, Grep, Agent, Write, Bash(git *), Bash(gh *), Bash(find *), Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh").
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. 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.
Code Overview is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 8.5k tokens (SKILL.md is roughly 34k 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.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Code Overview: Codexqa Rootcause Analyzer (openqa-cn/codexqa, 152 stars), Grix Code Review (askie/grix, 153 stars), Issue Tracer (ZaxbyHub/opencode-swarm, 488 stars) and Cwe Code Review (SpecterOps/skills, 702 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.