write-runbook
Skill32 starsChanged 17 days agoMITView on GitHub
Write or rewrite an operational runbook in roost's recordable, gated format, with literal commands for each environment, a run record, pass/fail gates and a rollback, and keep it one to one with the rollout ticket's sub-tasks (one sub-task per stage, same number and name, checked both ways). Use when the user asks for a runbook, a rollout or migration procedure, or says an existing runbook doesn't follow our runbook practices.
5 other projects use a version of this.
Adopted by
Most recently taken up by
- pahlevikun/levistacktheir own version, first seen Nov 1, 2026
- rpraharaj/ai-sdlctheir own version, first seen Nov 1, 2026
- Ionate-Technologies/indium-agentkittheir own version, first seen Oct 20, 2026
- Indium-AI-Labs/indium-agentkittheir own version, first seen Oct 11, 2026
- MaheshAwasare/claude-skills-protheir own version, first seen May 4, 2026
Used with
Projects with it also use incident-triage and review-change.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
testified-ossSkillincident-triage
Triage production incidents with severity assessment, root cause hypothesis, impact analysis, and escalation recommendations. Use when analyzing outages, errors, or production issues.
Also in 3 projects that use this
thlaureSkillreview-change
Use this skill when the user asks for a code review, a correctness pass, a check before PR, or asks whether a Signalist change follows project conventions.
Also in 3 projects that use this
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- Indium-AI-Labs/indium-agentkit★ 18same name
- Ionate-Technologies/indium-agentkit★ 17same name
- MaheshAwasare/claude-skills-pro★ 1same name
- pahlevikun/levistack★ 0same name
- rpraharaj/ai-sdlc★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository22 other files it gives its agents.
- automate-testsSkill
- automate-xray-testsSkill
- bug-bashSkill
- build-epicSkill
- close-out-epicSkill
- create-xray-testSkill
- cross-repo-handoffSkill
- live-verified-bddSkill
- pair-runbookSkill
- release-notesSkill
- release-qaSkill
- retroSkill
- review-epicSkill
- roost-configSkill
- run-bugSkill
- run-sliceSkill
- setupSkill
- shape-epicSkill
- slice-handoffSkill
- stacked-prsSkill
- triage-ticketSkill
- verify-slice-testsSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 3 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 5 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 30
Secrets are never pasted: Read them from the deployed secret (deploy.secret_read), or use a clear placeholder for the secret value only.
- Distinctive: line 32
Match the rollout: If an epic has a rollout runbook, line the stages up with its steps and say which flag state each stage runs under and …
- Distinctive: line 37
Expected values come from the real config, not memory: Read the deployed secret or settings file for hosts, ports and URLs (a pooler port …
- Distinctive: line 41
Say what a gap between steps costs: When steps should run close together (for example within an outside service's event retention window), …
“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Write Runbook
First, load the team config with roost-config. Runbooks live in deploy.runbooks.dir in the deploy.runbooks.repo repo. If the config names a model runbook (deploy.runbooks.model), read it before writing and follow its shape. Follow every rule in deploy.runbooks.house_rules as well as the rules below.
What every runbook has
- Header: title with the ticket key, the ticket and epic, the audience ("whoever flips X in production"), and the namespace, workload and secret names the commands use.
- Preconditions: what must be merged, deployed and verified first, each checkable.
- How to record this run:
- Copy the runbook to a working file so the template stays blank:
cp docs/runbooks/<file>.md ~/<key>-run-$(date +%Y%m%d).md - Capture a transcript:
script -a ~/<key>-run-$(date +%Y%m%d).log - A run header table (date and operator, environments touched, image tag, transcript path, outcome checkboxes).
- A status roll-up table: every step, what it proves, done, result, evidence. Gate rows in bold. A
failin any gate stops the run.
- Copy the runbook to a working file so the template stays blank:
- Stages, each a series of numbered steps (P1, A1, B1 …) ending in a gate. Each step has:
- what it proves, in one line
- the exact command, single-line and pasteable
- the expected output, literally
- a Record block to fill in (done, result, the named values to copy from the output)
- Rollback: the exact commands to undo each stage, and how to tell it worked.
- Afterwards: what to check later, and where the filled-in record goes.
Rules
- Literal values, not instructions for building them. Real hosts, client IDs, redirect URIs, namespaces and flag names, taken from
deploy.runbooks.config_sources. Production gets its own commands; never "same as staging". - Secrets are never pasted. Read them from the deployed secret (
deploy.secret_read), or use a clear placeholder for the secret value only. - No helper scripts for things the operator can do directly. One plain command per step.
- Match the rollout. If an epic has a rollout runbook, line the stages up with its steps and say which flag state each stage runs under and whether it emails users or writes data.
- Check every command against the code: CLI arguments, exit codes, config keys. Say in the report that you checked them but didn't run them, unless you did.
- Read what starts each deploy before ordering anything. Read the workflow files'
on:triggers (the image build, the staging and production deploys, the release tool, any tracker sync) and any hosting platform's production branch (deploy.frontend_host), and state in the runbook what starts each deploy, naming the file. Don't assume a merge deploys anything. - Merge the release PR before building, when
deploy.release_toolopens one (Release Please does). Merging a repo's stack opens or updates its release PR. Merge it right after the stack, then build and deploy the release commit, so production runs the released version. Say what merging it starts by itself (a build, a tracker sync), and which of those to cancel. - Every command runs from a clean checkout. No untracked local scripts, and no secret on the command line: read secrets at run time from a config file in the repo or the deployed secret, and pass them to containers with a bare
-e NAME. If a step needs a script, commit it without secrets first. - Expected values come from the real config, not memory. Read the deployed secret or settings file for hosts, ports and URLs (a pooler port and a direct port can differ), and give the value the operator will actually see.
- Commands work in
team.shell(zsh by default). Keep!out of double quotes (set such values first in single quotes), and check each command pastes and runs as one line. - Merging a stack: name the exact PRs the stage merges, and only those. Use
gh stack merge <top PR> --<vcs.merge_method>(atomic); first checkgh stack view --shortlists exactly those PRs, since the merge takes every PR in the stack. When a release PR follows (deploy.release_tool), after it updates rungit fetch origin, then checkgit diff --name-only origin/main origin/<release branch>shows only the release files (manifest, changelog, version) before merging it. Before it, check the stack's base is currentmain; ifmainhas moved, the owning session rebases the stack and CI goes green first. - Alerts need data first. Many metric tools only show a metric after its first data point, so an alert can miss the first failure on a fresh deployment. Put the alerts stage after production has run the new code and had traffic, and test every alert end to end, with a real event that reaches the notification channel.
- Say what a gap between steps costs. When steps should run close together (for example within an outside service's event retention window), say what is lost if they don't and what still covers it, so the operator can decide whether to pause.
- Plain language, no em dashes. Rewrite an existing runbook as one coherent document; don't append a changelog.
Every stage is a sub-task
The runbook and the rollout ticket's sub-tasks list the same work, in the same order, one to one. Whoever runs the rollout can work from either and miss nothing.
- Number the stages 1, 2, 3 … in the order they run, across environments (for example "3. Staging: apply the database migrations", "7. Production: deploy"). Steps inside a stage keep their own numbers (3.1, 3.2 …).
- One sub-task per stage, titled exactly like the stage, number included. The stage's heading in the runbook ends with the sub-task's key:
## 3. Staging: apply the database migrations (PROJ-1234). - The sub-task's description says what the stage proves, names the runbook section (path and heading), and gives the stage's gate as its "Done when". For a check that must pass before a deploy (a SQL query, a setting in an outside service, a secret), also put the exact command and the result that means "safe to proceed". Otherwise leave the commands in the runbook only, so there's one copy to keep right.
- Nothing lives in only one place. Work the rollout needs (merging the stacks, setting up alerts, turning on a flag, cleaning one up) is a stage, not just a sub-task. A stage the release doesn't need is cut from both.
- Existing sub-tasks: reuse them. Retitle and renumber one that covers a stage rather than adding a duplicate. A sub-task that matches no stage either becomes a stage, or comes off the ticket with the user's decision.
- Set Components on each sub-task.
Check both ways before you finish: list the stages and the sub-tasks side by side. Every stage has its sub-task with the same number and title, and every open sub-task on the ticket is a stage. Put that table in the report.
Point the rollout ticket at the runbook
Comment on the rollout ticket with the runbook's path and branch (for example docs/runbooks/workos-user-migration.md on PROJ-2729-…, PR #543) and a one-line summary of its stages. Whoever runs the rollout starts from the ticket. When the runbook changes later, add a new comment saying what changed, rather than editing the old one.
Report
Lead with what changed and whether any command was run. Then the stage-and-sub-task table, then anything the operator must decide or supply.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

