Code Assessment
adobe/skills
Detect, review, and fix code-quality and correctness issues in an AEM as a Cloud Service project — locally, with no external services or network calls.
Create or update a runbook for an operational scenario — an incident an alert fires for, a recurring scheduled task, or a known failure mode on a live service — using a consistent template.
$ npx skills add testdouble/han --skill runbook -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install testdouble/han runbook --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/runbook .claude/skills/runbook && 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 "runbook" agent skill from https://github.com/testdouble/han/tree/main/han-documentation/skills/runbook into .claude/skills/runbook/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "runbook", 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/runbookType 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 runbook -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install testdouble/han runbook --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/runbook .agents/skills/runbook && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "runbook" agent skill from https://github.com/testdouble/han/tree/main/han-documentation/skills/runbook into .agents/skills/runbook/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "runbook", 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 runbook -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install testdouble/han runbook --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/runbook .cursor/skills/runbook && 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 "runbook" agent skill from https://github.com/testdouble/han/tree/main/han-documentation/skills/runbook into .cursor/skills/runbook/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "runbook", 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/runbook--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 runbook -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install testdouble/han runbook --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/runbook .gemini/skills/runbook && 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 "runbook" agent skill from https://github.com/testdouble/han/tree/main/han-documentation/skills/runbook into .gemini/skills/runbook/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "runbook", 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 runbookInstalls 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 runbook -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/runbook .github/skills/runbook && 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 "runbook" agent skill from https://github.com/testdouble/han/tree/main/han-documentation/skills/runbook into .github/skills/runbook/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "runbook", 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 runbook -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 runbook --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/runbook .opencode/skills/runbook && 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 "runbook" agent skill from https://github.com/testdouble/han/tree/main/han-documentation/skills/runbook into .opencode/skills/runbook/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "runbook", 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.
runbookCreate or update a runbook for an operational scenario — an incident an alert fires for, a recurring scheduled task, or a known failure mode on a live service — using a consistent template.
Runbook is an agent skill from testdouble/han. Create or update a runbook for an operational scenario — an incident an alert fires for, a recurring scheduled task, or a known failure mode on a live service — using a consistent template. Use when writing, drafting, authoring, or updating a runbook for an alert, incident, on-call procedure, scheduled maintenance, or operational SOP. Applies a YAGNI preflight requiring the scenario to be real before producing the runbook. Does not produce feature or system documentation — use project-documentation. Does not…
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/runbook-template.md`).
It sits in DevOps & Cloud, covering Runbooks and postmortems and Code quality. 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:
ReadWriteEditGlobBash(git config *)Bash(whoami)Bash(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:
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.
Runbook loads about 4.3k tokens when it runs, and up to ~6.2k if it reads all its reference files. Until then it costs about 161 tokens; SKILL.md has 2,236 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). 2,236 words, ~4,311 tokens.
.claude/skills/runbook/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.han-communication:readability-guidance and apply it as you
write the runbook. Hold its default audience frame: a capable reader who did not do this work and lacks the author's
context — here, the operator following the runbook during an incident.git config user.name || echo unset (!git config user.email || echo unset)whoamidate +%Y-%m-%dfind . -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.
Determine which mode to operate in based on the user's request:
| Mode | When | Then |
|---|---|---|
| Creating new | Drafting a runbook for a scenario the project does not yet have one for | → Step 2 |
| Updating existing | Modifying an existing runbook (new step, validation date refresh, escalation change) | Read the existing runbook → Step 4 |
| Validating existing | User says they ran the procedure end-to-end and wants to refresh Last validated and add a change-history entry | Read the existing runbook → Step 4 (update mode, validation entry only) |
Before discovering structure or gathering context, gate the work. Ask the user (or confirm from their request) which of the following describes the scenario:
If none of these applies, recommend deferring the runbook. Surface the recommendation to the user with the trigger that would justify revisiting:
"I don't see a current trigger forcing this runbook. Per the project's YAGNI rule, runbooks for alerts that have never fired are an anti-pattern. Recommend deferring until {trigger — first alert fires, first occurrence of the failure mode, first run of the recurring task, customer commitment lands}. Override and proceed anyway?"
The user always wins. If they override, record the override in the runbook's Origin field as
"override: written preventively at user request on {date} — {reason}" so future readers can see the runbook was
written without standard evidence.
If the scenario does pass the preflight, capture the evidence — the user will be asked again at Step 4 to drop the link
or reference into the runbook's Origin metadata field.
Resolve project config. Read CLAUDE.md's ## Project Discovery section for documented runbook and docs
directories. Fall back to project-discovery.md. Fall back to Glob defaults (docs/runbooks/, runbooks/,
docs/). Continue without any keys that remain unfound.
Determine the runbooks directory. Use the runbooks directory if found; otherwise use {docs-dir}/runbooks/ if a
docs directory was found; otherwise default to docs/runbooks/. Run mkdir -p on the resolved directory to ensure
it exists.
Enumerate existing runbooks. Use Glob to find existing .md files in the runbooks directory and any service
subdirectories. Read filenames to detect whether the project organizes runbooks flat (docs/runbooks/{scenario}.md),
per-service (docs/runbooks/{service}/{scenario}.md), or alert-keyed (docs/runbooks/alerts/{AlertName}.md).
Resolve author information. If git user or email is empty or reads unset in the project context above, ask the
user for their name and email.
Check existing runbook format. If existing runbooks were found, read one to understand the project's format. If it differs from runbook-template.md, ask the user whether to match the existing format or use this skill's template. Default to matching the existing format when the project already has more than two runbooks — consistency is the larger value.
From the arguments, conversation, and YAGNI preflight in Step 2, capture:
Postgres primary unreachable: connections time out. Bad: Database failover.If any of these are unclear, use AskUserQuestion to clarify before writing. Ask only for what is genuinely missing; do
not re-ask for values present in the user's request.
When the user gives you a recent incident, post-mortem, or alert as the scenario, read it to extract the symptoms, the procedure that worked, and the verification — do not re-derive these from the model's understanding.
Copy the template from runbook-template.md.
File name and location. Place the file in the runbooks directory from Step 3.
postgres-primary-unreachable.md,
not failover.md.docs/runbooks/{service}/{scenario}.md. Reuse an existing service
directory when one fits; only introduce a new service directory when no existing one applies.docs/runbooks/alerts/{AlertName}.md.docs/runbooks/{slug}.md.Fill the metadata block with Severity, Triggers, Reversible, Last validated (today's date and the validating
party — if the procedure has not been run end-to-end, leave Last validated empty and note in change history that it
has not yet been validated), Last edited (today's date), Owner, and Origin (from the YAGNI preflight in Step 2).
Fill each required section following the template's HTML comments for guidance:
Fill applicable optional sections and delete the headings for any optional section that does not apply. The optional sections are: Likely cause, Not this — try instead, Background, Quick fix, If a step fails, If the problem comes back, What didn't work and why, Background and related. An empty heading reads as "this runbook is incomplete" — delete rather than leave blank.
Delete the author guidance comment block at the top of the template once the file is filled in.
Readability. Invoke han-communication:readability-guidance to surface the shared readability standard into your
context, then as you write the prose regions apply it: lead each section with its main point, use descriptive
headings, keep one idea per paragraph with the first sentence carrying it, number the procedure's steps and bullet
non-sequential items, and reveal detail in layers. Do not duplicate the rule text. A runbook's procedures are already
numbered steps, which aligns with the rule.
If updating an existing runbook: edit the existing file in place. Append a new change-history entry on top with
the date, your name, what changed and why, and the validation status. Update Last edited to today; update
Last validated only if you actually ran the procedure end-to-end against production or a faithful staging
environment.
Triggers field names an alert that has a definition file in the repository (Prometheus rule,
monitoring-as-code config), add a comment in the alert definition pointing to the runbook path.Read back the runbook file and confirm:
{placeholder} values remain in Severity, Triggers, Reversible, Owner, Origin.
Last validated is either a real date with the validating party or explicitly noted as not yet validated in change
history.Fix any issues found before presenting the runbook to the user.
Run the standardized readability self-check (the shared standard is in your context from
han-communication:readability-guidance) over the runbook's prose regions only — never inside code fences, command
blocks, diagram bodies, or citation identifiers. This skill runs no rewrite pass, so this self-check is the fidelity
guard on the output; the fidelity criterion is not optional. 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 1 other file (references) in han-documentation/skills/runbook of testdouble/han.
Open the folder on GitHubat commit abba73a
Runbook 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 |
|---|---|---|---|---|---|---|
| Runbook this skilltestdouble/han | 279 | — | ~4.3k | Automated safety check: Pass | MIT | |
| Code Assessmentadobe/skills | 195 | — | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Repo Hygiene Scan and FixQwenLM/qwen-code | 28k | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Trader Memory Coretradermonty/claude-trading-skills | 3k | 2 repos | ~4.3k | Automated safety check: Pass | MIT | |
| Author Migrationnrwl/nx | 29k | — | ~12k | Automated safety check: Notes | MIT | |
| Write Notes Like Deepseekczm15053/write-notes-like-deepseek | 477 | — | ~1.9k | Automated safety check: Pass | None |
adobe/skills
Detect, review, and fix code-quality and correctness issues in an AEM as a Cloud Service project — locally, with no external services or network calls.
QwenLM/qwen-code
Scheduled CI skill that scans a repository for small, certain docs, test and code hygiene issues and fixes them on one branch with a commit per finding.
tradermonty/claude-trading-skills
Track investment theses across their lifecycle — from screening idea to closed position with postmortem.
nrwl/nx
Author or scope a first-party Nx migration. An agent skill from nrwl/nx.
czm15053/write-notes-like-deepseek
A skill your agent uses when a change is non-trivial by DSH standards (behavior, architecture, cross-file contracts, process/tooling, testing strategy, or on-disk/wire/config formats), when choosing…
mvschwarz/openrig
Walks an agent through upgrading the OpenRig CLI and daemon one observed step at a time, keeping live seats alive and reconciling managed plugin files.
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
Create or update a runbook for an operational scenario — an incident an alert fires for, a recurring scheduled task, or a known failure mode on a live service — using a consistent template. Runbook is an agent skill from testdouble/han. Create or update a runbook for an operational scenario — an incident an alert fires for, a recurring scheduled task, or a known failure mode on a live service — using a consistent template.
Runbook fits situations like: updating a runbook for an alert; on-call procedure; scheduled maintenance; operational SOP.
Run `npx skills add testdouble/han --skill runbook -a claude-code`. Or copy the skill folder (han-documentation/skills/runbook in testdouble/han) into .claude/skills/runbook in your project. Claude Code loads it when a task matches its description.
Run `npx skills add testdouble/han --skill runbook -a codex`. Or copy the skill folder (han-documentation/skills/runbook in testdouble/han) into .agents/skills/runbook 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 runbook -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/runbook, .gemini/skills/runbook, .github/skills/runbook and .opencode/skills/runbook in your project.
Going by SKILL.md and its folder, Runbook needs the command-line tools its instructions call (git and bash). Its frontmatter pre-approves these tools: Read, Write, Edit, Glob, Bash(git config *), Bash(whoami), Bash(date *), Bash(mkdir *), Bash(find *), 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. Review the folder before installing.
Runbook is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k 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.9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Runbook: Code Assessment (adobe/skills, 195 stars), Repo Hygiene Scan and Fix (QwenLM/qwen-code, 28k stars), Trader Memory Core (tradermonty/claude-trading-skills, 3k stars) and Author Migration (nrwl/nx, 29k 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.