> 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 record architectural decisions — use architectural-decision-record. Does not create coding standards — use coding-standard.
npx skills add https://github.com/testdouble/han --skill runbook
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 fDetermine 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.
## 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.{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..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).unset in the project context above, ask the user for their name and email.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.
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.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).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.10. Change history has at least one entry — the creation entry citing Origin.
Fix any issues found before presenting the runbook to the user.
Run the standardized readability self-check from ../../references/readability-rule.md 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; criterion 6 is not optional. Confirm each criterion and fix any failure before presenting:
Fidelity wins: the standard governs how the content is said, never whether a required fact appears.
Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.
Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.
Use when implementing any feature or bugfix, before writing implementation code
Use when you have a spec or requirements for a multi-step task, before touching code
Use when creating new skills, editing existing skills, or verifying skills work before deployment
Use when writing or improving README files. Not all READMEs are the same — provides templates and guidance matched to your audience and project type.
| Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.
Official Opentrons Protocol API for OT-2 and Flex robots. Use when writing protocols specifically for Opentrons hardware with full access to Protocol API v2 features. Best for production Opentrons protocols, official API compatibility. For multi-vendor automation or broader equipment control use pylabrobot.
Take testdouble/runbook from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.