From hive
Blameless incident postmortem — gathers data from Slack, Linear, and user input to produce structured incident documentation. Three modes: extract from raw dumps, start from scratch, or refine existing drafts.
npx claudepluginhub skywalking-dev/hiveThis skill is limited to using the following tools:
Produce blameless postmortem documents from incidents (technical, operational, administrative).
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Produce blameless postmortem documents from incidents (technical, operational, administrative).
| Mode | Trigger | Input |
|---|---|---|
| A — Dump | User pastes raw Slack/email/logs | Extract + structure |
| B — Scratch | No draft, provide sources step by step | Guided elicitation |
| C — Refine | User has a rough draft | Critique + complete |
Detect mode from first user message. If ambiguous, ask one question: "Do you have raw data to paste, or should I guide you through it?"
Ask max 3-4 questions per batch via AskUserQuestion. Batches:
Batch 1 — Scope
Batch 2 — Sources 4. Linear ticket IDs involved? (e.g., SKY-241) 5. Slack thread URL(s)? 6. Any existing notes, logs, or docs?
Batch 3 — Depth (only if needed) 7. What was the root cause? (or "unknown" if still TBD) 8. What corrective actions are already in place?
Zero assumptions — if a data point is missing, mark it [TBD] not inferred.
Fetch ticket via MCP:
linear_getIssueById(id: "SKY-XXX")
linear_searchIssues(query: "incident keyword")
Extract: title, description, comments, state history, linked issues.
Fetch thread via skill:
uv run /Users/gpublica/workspace/skywalking/hive/scripts/slack_handler.py read "<thread_url>"
Extract: message timestamps (UTC), authors (roles not names), key decisions, alerts, fixes attempted.
Anonymise authors in timeline: use role (e.g., "on-call engineer") not username. Exception: named actions in corrective items.
When user pastes raw text:
# Postmortem YYYY-MM-DD — <topic>
**Status:** Draft | Final
**Severity:** P0 | P1 | P2 | P3
**Duration:** Xh Ym
**Authors:** [initials or role]
**Last updated:** YYYY-MM-DD
---
## Incident Summary
<1 paragraph. Lead with impact, end with resolution. No jargon.>
## Impact
- **Users affected:** <count or segment>
- **Duration:** <start UTC> → <end UTC> (Xh Ym)
- **Services down:** <list>
- **Operational impact:** <revenue, SLA, support tickets, etc.>
- **Data loss:** None | [describe]
## Timeline
* **YYYY-MM-DD HH:MM UTC** — <event>
* **YYYY-MM-DD HH:MM UTC** — <event>
> Timestamps without confirmed source are marked [TBD].
## Root Cause
<1-2 sentences. "X caused Y because Z." If unknown: [TBD — investigation ongoing]>
### Contributing Factors
- <factor 1>
- <factor 2>
## Lessons Learned
- <actionable one-liner — "what do we do differently?">
- <actionable one-liner>
## Corrective Actions
### Immediate (done)
- **[Done]** <action> — <owner> — <date>
### Short-term (this sprint)
- <action> — <owner> — due <date>
### Long-term (backlog)
- <action> — <owner> — Linear: <ticket or TBD>
## References
- Linear: <url>
- Slack thread: <url>
- PR/commit: <url>
- Runbook: <url>
Blameless:
Accuracy over completeness:
[TBD] beats guessing.[CONFLICT: Slack says X, Linear says Y].Actionable lessons:
Corrective actions:
[Done] = verified closed, not just claimed.linear_createIssue).| Level | Criteria |
|---|---|
| P0 | Full outage, data loss risk, >100 users blocked |
| P1 | Partial outage or degraded perf, SLA at risk |
| P2 | Feature broken, workaround exists |
| P3 | Minor bug, cosmetic, single user |
cookies() in Lambda context, use createClientFromRequest)docs/postmortems/YYYY-MM-DD-topic.md)"docs/postmortems/<date>-<slug>.md relative to current project root.1. Detect mode (A/B/C)
2. Gather data (Slack + Linear + user input)
3. Summarize raw data → confirm with user
4. Write draft
5. Iterate (user edits inline or via chat)
6. Save file → print path
7. Offer Linear tickets for open corrective actions
/postmortem
→ Mode B: guided elicitation, 3-question batches
/postmortem SKY-241
→ Mode B: pre-load Linear ticket, ask for Slack thread + timeline
/postmortem [paste Slack dump]
→ Mode A: extract structure from dump, ask only for gaps
/postmortem refine docs/postmortems/2026-03-30-micelio.md
→ Mode C: load draft, identify missing fields, iterate