Best for
- Use when writing, drafting, authoring, or updating a runbook for an alert, incident, on-call procedure, scheduled maintenance, or operational SOP.
testdouble/han/han-documentation/skills/runbook/SKILL.md
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-documentat
Decision brief
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. Applies a YAGNI preflight requiring the scenario to be real before producing the runbook.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/testdouble/han --skill "han-documentation/skills/runbook"Inspect the Agent Skill "runbook" from https://github.com/testdouble/han/blob/a86259a348dd0ec8a04b0357dd33753a36f38c2d/han-documentation/skills/runbook/SKILL.md at commit a86259a348dd0ec8a04b0357dd33753a36f38c2d. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Determine which mode to operate in based on the user's request:
Before discovering structure or gathering context, gate the work. Ask the user (or confirm from their request) which of the following describes the scenario:
1. 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.
From the arguments, conversation, and YAGNI preflight in Step 2, capture:
1. Copy the template from runbook-template.md.
Permission review
The documentation asks the agent to create, modify, or delete local files.
**If updating an existing runbook:** edit the existing file in place. Append a new change-history entry on top withThe documentation asks the agent to read local files, directories, or repositories.
Read back the runbook file and confirm:Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 95/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 245 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
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.
Frequently asked questions
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. Applies a YAGNI preflight requiring the scenario to be real before producing the runbook.
The source record exposes this install command: npx skills add https://github.com/testdouble/han --skill "han-documentation/skills/runbook". Inspect the command and pinned source before running it.
Static rules flagged write-files, read-files in the source; the page lists the matching lines and excerpts.
Alternatives
oaustegard/claude-skills
Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre
dancingteeth/unified-code-review
Risk-first code review for PRs and branch audits: blast-radius triage, agent-authored discipline (tests first, intent evidence), call-graph pincer for integration defects between modules, then structural code-judo bar. Use when reviewing PRs, auditing agent-written diffs, catching rubber-stamp green CI, or wiring bugs single-file review misses. Prefer over structure-only thermo-nuclear review alone. Do not use for unrelated coding tasks or as an always-on rule.
Postpartum-genushyacinthus29/dotnet-skills
Build long-running .NET background services with `BackgroundService`, Generic Host, graceful shutdown, configuration, logging, and deployment patterns suited to workers and daemons.
PaulRBerg/agent-skills
Create/scaffold/init a project-local agent skill under `.agents/skills` in an ordinary repository; defer to repository instructions that define a source catalog and lifecycle.