an agent skill · product operations — the Run stage

/operate

Ask an agent to ship a change and it deploys it — code is running, a health check is green, the PR is merged. Nobody separated deploy from release from launch, no abort criteria were written before exposure started, and a clean canary got read as proof for the whole population instead of the cohort it actually covered. operate runs what's already shipped — release and rollout, environments and secrets, CI/CD, infrastructure, observability, SLOs, incidents, recoverability, security posture, cost, decommissioning, and dependency lifecycle — and keeps it that way on the night nobody is awake.

# natural language — no flags, no fixed pipeline /operate the canary's been clean for an hour at 5% — can we widen it, and what does "clean" actually prove?

runs onClaude CodeCodexCursorAntigravityopencodeGrok BuildHermes

The router is the skill. There is no fixed pipeline to run start-to-finish — each job stands alone and enters where your request is. The animation traces one path (a rollout, judged for what it actually proves); the sections below map the whole surface it routes across.

Own what's running — never the code that produced it

Release the product and keep it available, observable, secure, recoverable, and cost-effective — and keep it that way on the night nobody is awake. operate is the only skill in the family whose subject is a running system rather than an artifact: every sibling produces something and hands it on; operate receives an artifact and owns what exists afterwards, indefinitely. It writes infrastructure, pipeline, configuration, policy, and observability code — it does not modify product code to fix a defect it observes; that routes to the owning skill. It may make an emergency change to restore service and must then file it back: stop the bleeding, do not perform the surgery.

operate owns

what keeps a shipped product alive, once it's live

  • release & rollout, evidence-graded ⭐ — deploy≠release≠launch; abort criteria fixed before exposure; a result is evidence with a class and a population
  • environments, CI/CD, infrastructure — env/secret strategy, build-once-promote, IaC with the licence-and-liveness check
  • observability, SLOs & alerting — what to instrument, what pages, what's a ticket
  • incident response & recoverability — roles and their collapse at n=1; restore drills, not backups
  • security, cost, decommissioning, dependencies — patch/rotate on an SLA, cost-to-serve, sunset as an owned stage, a dependency swapped underneath you

hands off to

the "Not this skill" table — eight asks this skill declines by design

  • frontend · backend · data · ai — write the application, service, pipeline, or model code
  • backend / data — author the migration; operate only executes it
  • architecture — the SLO target, NFR budget, threat model, system shape
  • quality — decide may we ship / what may we claim; write or grade tests
  • growth — design or read out an experiment
  • product / success — customer-facing incident comms, per-account outreach
  • automation — a business process spanning systems
  • the owning build skill — fix the defect an incident revealed

The default reader is one person, or a small team, on a managed platform, with no rota. That inverts the published canon deliberately: the SRE canon claims its lessons apply "regardless of size or maturity" while publishing a five-to-eight-person floor in the same chapter, and never resolves the contradiction. Org-scale assumptions — rotas, role separation, change boards — live in surface-org-scale.md and are added, not assumed.

The faceted router

SKILL.md is a router, not a script. Every request selects the smallest sufficient route: one primary job — the twelve below — combined with at most one base surface that reshapes how the job applies to what's actually running, plus the additive org-scale overlay when a rota, role separation, or formal change approval exist. Read the selected references completely; load two or three at most, never the whole pack.

facetoptionsrule
① Primary job release-and-rollout ⭐ · environments-and-configuration · delivery-pipeline · infrastructure-provisioning · observability · slo-and-alerting · incident-response · recoverability · production-security-posture · capacity-and-cost · decommissioning · dependency-lifecycle Exactly one. Pick the single job the request needs; the flagship — deploy≠release≠launch, graded by evidence class — is the layer every rollout decision rests on.
② Base surface managed-platform (default) · self-managed-cloud · serverless-edge · mobile-release · data-pipeline · ai-system At most one. The surface reshapes what each job means for what's actually running — it points to the job references, it doesn't redefine them.
③ Org-scale overlay surface-org-scale — rota sizing, role separation in incidents, error-budget policy as a contract between parties, change management with an audit trail Additive. Stacks on top of the base surface, only when a rota or change-approval process actually exists. Inverts the canon: every other reference in this pack writes the solo/small-team case as default.
Every claim on this page is true of the shipped pack. Where a number is cited — the burn-rate windows, the agent circuit-breaker defaults, the registrar lifecycle — it carries a source and a verification date; where a hazard is this pack's own judgment rather than a sourced one (the registrar trap, the human/bus-factor gap), the page says so rather than dressing it up as a citation.

The twelve primary jobs

Each job is one reference, read fully only when its route is selected. Jobs 10–12 — decommissioning, dependency-lifecycle, and the cost-to-serve bridge inside capacity-and-cost — are the three facets the research found grep-verified absent from competitor ops content; this is the whole surface, not a headline slice.

I need to…ReadContribution
Ship this change safely — canary, flags, rollout, rollback release-and-rollout.md Flagship. Deploy≠release≠launch; what each rollout mechanism does not establish; abort criteria written first; the peeking problem
Set up environments, config, secrets, version pinning environments-and-configuration.md Environment strategy that earns its cost, rotation over storage, pinning anything that can change underneath you
Build or fix the CI/CD pipeline; supply-chain integrity delivery-pipeline.md Build once and promote; CI is production; SLSA/SBOM/signing; DORA with its report year attached
Provision infrastructure, IaC, GitOps, drift infrastructure-provisioning.md Declarative + reconciled, the emergency-intervention tension, and the licence-and-liveness check
Decide what to instrument, and what it will cost observability.md USE/RED/Golden and which applies where; cardinality as the cost driver; three pillars shipped as contested; OTel as exit cost
Set SLOs, decide what pages, stop the noise slo-and-alerting.md Burn-rate windows including the slow-burn ticket row; page only on user-visible harm; error-budget policy, and why it doesn't transfer to n=1
Something is broken right now; or write the postmortem incident-response.md Command roles and their collapse at n=1; severity by user impact; root cause shipped as contested
Prove we can come back — backups, DR, restore recoverability.md Restore drills over backups; the RTO validity envelope; what the platform does not do for you
Harden production — patching, rotation, access production-security-posture.md Posture as an ongoing SLA, deploy-identity least privilege, backups as a ransomware control
What does this cost to run, and how do we cap it capacity-and-cost.md Cost-to-serve per unit of value; autoscaling is not a cost control; activity-scaled spend needs a circuit breaker
Turn something off for good decommissioning.md Sunset as an owned stage — evidence nothing depends on it, the reversibility window, obligations that outlive the service
A dependency is being retired, or changed under us dependency-lifecycle.md Withdrawal and substitution; notice periods as a purchasable property; liveness is re-checked, never inherited

Full router table & invariants: SKILL.md.

Six surfaces + one additive overlay

One base surface, at most, reshapes every job for what's actually running — the same rollout job is bounded differently on a managed platform than on a mobile app that can only roll forward. The org-scale overlay is additive — it stacks on top of whichever base you picked, never replaces it — and carries a distinct violet identity throughout this page, the same convention quality uses for its own regulated overlay.

Managed platform surface-managed-platform.md

The default: Supabase / Neon / Render / Railway / Fly / Heroku / Vercel / Cloudflare-class, one operator or a very small team, no rota, possibly no staging. Every platform surveyed offers self-service restore — the real hazard is tier-gating, destructive restore, and the fact that not one publishes a numeric RTO anywhere.

reshapesrecovery objectives assume you're asleep · the platform's abuse detection is your monitoring too · no rota → automated abort + longer bake

Self-managed cloud surface-self-managed-cloud.md

You provision, patch, and scale the machines or cluster yourself — VMs, containers, Kubernetes. Kubernetes-for-small-teams is genuinely contested, and the fault line the research found is not team size but how much you want to manage versus how much the platform should handle.

reshapessubstrate ownership sized to coordination need, not headcount · cost surfaces unique to owning the box

Serverless / edge surface-serverless-edge.md

Per-invocation billing; the capacity unit is concurrency, not throughput. Connection exhaustion against a relational database, under cold starts and a hard timeout, is the classic failure here.

reshapesinstrumentation and caps sized to invocations, not machines · a named cost control for per-invocation billing

Mobile release surface-mobile-release.md

You cannot roll back a shipped build — only forward, through an external store-review gate. Signing-credential expiry belongs on a calendar, and store submission mechanics route to a dedicated incumbent; this surface owns the release judgment.

reshapesforward-only rollout plan · review-timeline risk · crash-free-sessions SLI with a stated compatibility window

Data pipeline surface-data-pipeline.md

The failure mode is silence, not an error page. Freshness and volume are the SLIs, a backfill is a deploy, and the seam with data is exact: operate owns whether the orchestrator ran and paged; data owns what the numbers mean.

reshapesfreshness/volume as SLIs · backfill-as-deploy · orchestrator-up vs numbers-correct

AI system surface-ai-system.md

A prompt or model-version change is a production change — the same versioning and rollback discipline as any other release. Token/turn ceilings are availability controls, sized against real framework defaults, not a folk number.

reshapesprompt/model change as a deploy · request logging for incident reproduction · circuit-breaker defaults, verified in source

Org scale additive ⭐

A rota exists, or an incident review keeps collapsing the IC/responder roles and asking whether that's a problem. Stacks on, does not replace. Rota sizing against a stated failure mode, role separation with named people, an error-budget policy as a contract between parties, and change management with an audit trail — on top of any base surface.

reshapesrota sized to attrition, not the floor · error budget as a contract with a real counterparty · change approval + access review

Release & rollout — the flagship

Most treatments of a rollout stop at "it went out clean." The pack's sharpest synthesis is that a rollout result is evidence with a class and a population — a canary tells you something true and specific about the cohort it reached, and something much weaker, or nothing, about everyone else. Confusing the two is how a clean canary precedes a failed rollout.

Term (I1)What actually happenedWho owns it
DeployNew code is running somewhere — possibly behind a flag, possibly at 0% trafficoperate
ReleaseSome or all users now receive the new behavioroperate executes; quality gated whether it may happen
LaunchSomeone told the market this existsmarketing / product
A clean canary can precede a failed rollout (I2)

What a 5% canary actually covers

observed — this cohort, this window, these metrics only inferred (weak) — everyone else, until the next stage actually reaches them

Why it fails to generalize

  • not randomsticky routing, geography, device class, cold-instance effects
  • load-dependenta queue-depth or pool-exhaustion bug a 1–5% slice never reaches
  • slow onseta leak, disk fill, cert expiry, migration drift needs days, not an hours-long window
  • multiple comparisonswatching dozens of metrics inflates false alarms past the nominal rate
The peeking problem (I3): Kayenta's judgment is fixed-window — Mann-Whitney U, 98% CI, a freshly-matched baseline, ≥50 datapoints/metric, over ~3 fixed hours. A human watching a live dashboard and calling it "looks fine" is running a different, uncontrolled procedure — the rollout-world instance of p-hacking.
fix: metric set + threshold written before exposure startshalt is operate's call (I12); it never upgrades a claim

The load-bearing table — a clean result from each mechanism earns evidence of a specific class and scope, never a blanket "it works":

MechanismEstablishesDoes not establish
Canary, statistically judged The exposed cohort's metrics weren't distinguishable from a freshly matched baseline, on the monitored metrics, over the window. Behavior for cohorts outside the split; effects needing longer than the window; anything on an unmonitored metric.
Blue / green The new environment passed pre-cutover tests and gives a fast rollback path. Real production load at cutover — Fowler names "missed transactions while the green environment was live" during rollback directly.
Feature-flag percentage rollout Behavioral equivalence, on watched metrics, between the flagged and unflagged path, for the cohort routed to each. Combinatorial flag-interaction states — "a combinatoric explosion of possible toggle states" with multiple toggles live.
Health check, deep The checked dependency chain was reachable at check time. Independence from the dependency graph — one real outage can flip every upstream check to failing at once.
Post-deploy smoke test The paths exercised in the suite returned the expected response, right then. Anything outside the suite; load behavior; correctness under real data; slow-onset failure.

Solo default — no rota watching the canary: automated abort on the pre-registered threshold, not a person deciding in the moment · longer bake time before widening the ring · a smaller default blast radius · a kill switch tested before you need it. The roles do not disappear at n=1 (I13) — substitute mechanism for headcount.

What makes this different

Two stances set operate apart from the technique libraries it sits beside: it writes the solo/small-team case as the default rather than an afterthought, and it subtracts the folk number everywhere the field cites a round threshold with no published rationale.

The inversion — solo is the default

Grep-verified: the strongest competitor's 14,591 lines of ops content mention a one-person operator zero times and list "you have on-call rotations" as a prerequisite.

  • no counterparty at n=1 — the best pro-SLO argument is "the numbers make the decision, not the people"; a solo operator has no second party to arbitrate with
  • the scribe vanishes first — at n=1 the incident-command roles collapse to one person; the record-keeping function goes missing before any other, and the postmortem depends on it
  • recovery objectives assume you're asleep — an honest solo RTO is measured in hours, not minutes; automation acts while you sleep, a faster human doesn't
  • org-scale is the overlay — rota, role separation, and change boards live in surface-org-scale.md, stated as an addition, never the default this pack teaches from

Subtract the folk number (I14)

Cite provenance or do not cite — including when the correction makes the claim stronger, not more comfortable.

Four SDKs' actual agent-loop circuit-breaker defaults, read from source — the spread is the finding:

"25" is the folk number people cite for LangGraph's recursion limit. The real default is 10007 — high enough to function as no cap at all in most runaway scenarios.

  • the slow-burn ticket row — 14.4×@(1h,5m) and 6×@(6h,30m) page; 1×@(3d,6h) → ticket, never a page — the most under-quoted line in the SRE canon
  • licence-and-liveness, four traps — a wrong metadata field, a README-only grant, an undisclosed derivative, and a correctly-licensed-but-archived project are four distinct failure modes, not one
  • the registrar lifecycle — ICANN's ceiling is 45 days grace, 30 days redemption at a premium, then ~5 days with no recovery at any price — shipped with the hedge to verify against your own registrar

The universal invariants

References cite these by number; the numbering is canonical. These rules govern every route, whichever files it loads.

What a pass produces

operate's core workflow runs against whatever upstream artifacts exist — a quality ship decision, an architecture SLO target, a build skill's handoff — and says so explicitly when none were supplied, rather than inventing one.

step 1routeprimary job + base surface; org-scale added only if it applies
step 2consumequality's decision, architecture's SLOs, build handoffs — or say none exist
step 3pre-registerabort criteria + metric set fixed before the change starts
step 4gradeevidence class + covered population, stated for every result
step 5alertsymptom pages; everything else routes to a ticket
step 6recordresidual risk with an owner + expiry; volatile_facts date-stamped; handoff when expected

Rollout evidence worksheet

assets/rollout-evidence-worksheet.md

The "does not establish" row, fillable for any rollout mechanism this skill meets — the pattern, not a fixed table.

Abort criteria card

assets/abort-criteria-card.md

Metric, threshold, covered population, and one named halt authority — filled in before exposure starts.

Restore drill log

assets/restore-drill-log.md

A real backup restored, timed, and torn down on a schedule — a drill you ran, not a maxim you repeated.

SPOF register

assets/spof-register.md

Registrar, payment method, recovery email, root account, and the human — not just the servers.

Alert audit sheet

assets/alert-audit-sheet.md

An alert that fires twice without producing action gets deleted or downgraded — checked, not assumed.

Cost-to-serve table

assets/cost-to-serve-table.md

The per-unit-of-value ratio, tracked over time — total spend rising while the ratio falls is a win, not a red flag.

Decommission checklist

assets/decommission-checklist.md

Evidence nothing depends on it, the reversibility window, and obligations that outlive the service.

handoff.yaml + volatile_facts

assets/handoff.yaml

The routing companion carrying rollout evidence, residual risk (inherited and new), and every volatile fact with its re-verify trigger.

The handoff seams

operate consumes upstream artifacts without silently overriding them — the ship/claim decision and residual-risk register from quality, SLO targets from architecture, a handoff from whichever build skill produced the artifact — and says so explicitly when none exist, rather than inventing a target or a decision to fill the gap. It is rarely terminal: it emits a compact handoff.yaml beside the deploy record whenever downstream work is expected.

operate builds

release_id: <identifier>
deploy_release_launch: [deployed_at,
  released_at, launched_at]
rollout.result: evidence_class + scope
residual_risk: [inherited_from_quality,
  newly_surfaced] — owner + expiry
emergency_fixes_filed: [routes_to, change]
volatile_facts: [fact, value_at_handoff,
  reverify]

quality

The rollout evidence result feeding whether a claim may widen — never used by operate itself to upgrade one (I12) — plus any newly surfaced residual risk added to its register.

the owning build skill

A filed emergency fix under I10 — exactly what changed to stop the bleeding — and any decommission or dependency-withdrawal notice that forces a migration.

growth (lateral)

When a rollout is also an experiment, operate owns the flag's lifecycle and debt; growth owns the readout — handed the evidence-class scope, never a verdict on the experiment.

Most solo, single-skill deploys need no handoff.yaml at all. When nothing downstream will read it, skip the companion and keep the rollout record in the deploy log instead. When one is written, only deploy_release_launch.deployed_at is required; the other two timestamps may be explicit "not yet" or "not this skill's call." Never silently invoke a sibling skill — name it in recommended_next.

Start here

Install once. It's a plain SKILL.md router — no flags, no config, no scripts — so it activates on natural-language phrasing ("can we widen this rollout," "what's our real RTO for this database," "page just fired at 3am, is it real," "what's this actually costing per tenant") rather than a fixed command.

# skills.sh ecosystem npx skills add gabros20/operate-skill # clone + installer (per-host targets) git clone https://github.com/gabros20/operate-skill && cd operate-skill ./install.sh codex # or: claude | cursor | antigravity | opencode | grok | hermes | agents | all # use — natural language, any host /operate the canary's been clean for an hour at 5% — can we widen it, and what does "clean" actually prove? /operate set up burn-rate alerting for this SLO without paging me over a slow leak /operate we just lost a tenant's data — is this a restore, or does it need a forward-fix? # → recoverability.md

The same install runs on any Agent Skills host. Codex installs to ${CODEX_HOME:-$HOME/.codex}/skills and triggers with $operate; agents remains a separate cross-agent installation target.

install targets by host
hostinstall targetcommand
Claude Code~/.claude/skills./install.sh claude
Codex${CODEX_HOME:-$HOME/.codex}/skills./install.sh codex
Cross-agent path~/.agents/skills./install.sh agents
Cursor CLI~/.cursor/skills./install.sh cursor
Antigravity (IDE + agy)~/.gemini/…/skills./install.sh antigravity
opencode~/.config/opencode/skills./install.sh opencode
Grok Build~/.grok/skills./install.sh grok
Hermes~/.hermes/skills./install.sh hermes

Prefer npx skills add gabros20/operate-skill when you have Node — it maps supported clients itself.

what's in the repo
skills/operate/ the skill: SKILL.md (router) + 20 references/ + assets/ docs/ installation · usage · recipes site/ this guide — deploys to operate-skill.vercel.app install.sh installer (claude | codex | cursor | antigravity | opencode | grok | hermes | agents | all) README.md · CHANGELOG.md · LICENSE

More docs: docs/installation.md · docs/usage.md · docs/recipes.md.