Read a spec, execute every testable step, collect real results, then generate a podcast grounded in actual data — real API responses, real errors, real costs. Investigation first, narration second. Triggers: "investigate", "investigate this spec", "run and podcast", "investigate and podcast"
Read a spec, identify every testable claim, actually run the steps, collect artifacts, then
generate a podcast where two hosts narrate a completed investigation using real data. This is
NOT /podcast — that skill comments on docs. This skill executes them.
investigate <filepath>
The argument is a path to a spec, plan, or design doc with executable steps.
This is a hard gate. Nothing proceeds until every credential is confirmed.
TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID.env files in the project directory and repo rootecho $VAR_NAMEwhich <tool> or <tool> --versionDo NOT proceed to Phase 1 until the user explicitly confirms.
Credential safety: Never log, print, or include API keys in any output, transcript, report, or dialogue. When capturing stdout/stderr, redact any strings that look like API keys or tokens.
Parse the spec and extract an ordered list of testable steps. Look for:
Each step becomes a task:
Before executing any command, check for:
rm -rf, rm -r, or any recursive deletionDROP TABLE, DELETE FROM, or destructive SQLgit push --force, git reset --hard, or destructive git operationsIf a command looks destructive, skip it, log why, and continue.
For each step, in dependency order:
Failure handling:
Surprise handling — branch and explore: When a step produces a surprising result (unexpected failure, large divergence between expected and actual, two approaches disagreeing wildly), don't just log it and move on. Investigate WHY.
Total timeout: 30 minutes for the entire investigation. If hit, stop execution, generate the report with whatever has completed so far.
Create this structure at docs/superpowers/podcasts/<name>-investigation/:
<name>-investigation/
report.md # Structured summary (generated after all steps)
cost-summary.json # Total cost breakdown by service
steps/
01-<step-slug>/
command.sh # What was run
stdout.txt # Standard output
stderr.txt # Standard error (redacted of credentials)
artifacts/ # Any generated files
02-<step-slug>/
...
The <name> is derived from the input filename (strip path and extension).
After all steps complete (or total timeout), generate report.md:
# Investigation Report: <spec name>
**Date:** <today>
**Spec:** <filepath>
**Duration:** <total wall-clock time>
## Summary
- Steps attempted: N
- Succeeded: N
- Failed: N
- Skipped: N
- Timed out: N
## Steps
### 1. <step name>
- **Status:** success | failure | skipped | timeout
- **Duration:** Xs
- **Command:** `<what was run>`
- **Result:** <what happened>
- **Key finding:** <the interesting part>
### 2. <step name>
...
## Surprises
<anything that contradicted the spec's expectations>
## Cost Breakdown
| Service | Calls | Est. Cost |
|---------|-------|-----------|
| ... | ... | ... |
| **Total** | | **$X.XX** |
## Artifacts Index
| File | Description |
|------|-------------|
| ... | ... |
Also generate cost-summary.json:
{
"total_usd": 0.00,
"by_service": {
"service_name": { "calls": 0, "cost_usd": 0.00 }
},
"duration_seconds": 0
}
Before generating narration, check for prior investigation reports and podcasts for the same spec:
docs/superpowers/podcasts/ for existing *-investigation/report.md files matching this specIf prior investigations exist:
The goal: someone receiving this ONE file gets the full story. No "part 1 of 3." No "as we discussed in the previous episode." One standalone episode with everything.
Generate podcast dialogue from ALL investigation results (current run + any prior runs).
Person A — The investigator. Ran the whole thing, has the results, walks through what happened. Practitioner energy: "when I ran this" and "look at what came back." Gets excited about surprising results. Defends the spec when it was right, roasts it when it was wrong.
Person B — The skeptic. Didn't run it but is reacting to real data. Asks the hard