--- name: fathom-impact description: > Narrate fathom's measured impact in this repo, honestly — run `fathom instrument --adoption` (the flywheel's gauge) plus `fathom plans status` and the open-observation backlog, and report exactly what those instruments measured, no more. Use when asked "is fathom actually helping here", "what has fathom caught", for a periodic adoption check-in, or before claiming any fathom-driven win in a summary, standup update, or PR description. --- ## 0. First, check the pipes — before you read a single number ```sh fathom flywheel # exit 1 if any feedback loop is OPEN ``` **Run this before anything else in this skill.** Every instrument below reports what its inputs say, and none of them can tell you an input has gone silent. On 2026-08-08 that gap cost fourteen hours of measurement twice in one day: the OFF arm stopped recording entirely, and then — once fixed — recorded only inadmissible rows. Every dashboard read "fine" throughout, because each was asking *what do the numbers say?* and none was asking *is the pipe connected?* Read its three verdicts precisely: - **CLOSED** — produced, arriving **and consumed**. Trust the numbers this loop feeds. - **OPEN** — a defect. **Any figure downstream of an OPEN loop is not evidence**, and quoting it is worse than saying nothing. Fix the loop, or report the gap as the finding. - **IDLE** — nothing to measure yet. Honest, not broken. Say "unknown", never "zero". Nine loops: `continuity` (the thread bet — **experimental**, 4 of the 20 sessions its keep/retract verdict needs), `session-ledger`, `counterfactual-arm`, `call-log`, `obligations`, `verify-gate`, `exploration-ledger`, `observations`, `custodian`. The `counterfactual-arm` loop is the A/B (MI-5): a savings claim is admissible only once **≥20 arm-homogeneous units per arm** exist; the ON arm is still collecting (**experimental**), so until `flywheel` reports that count **every token-savings claim is inadmissible**: a token figure is a cost until an arm establishes the counterfactual. ## 1. Run the instruments ```sh fathom research report --since 168h [--service ] [--json] fathom instrument --adoption [--json] fathom plans status --service fathom capabilities [--service ] # what is on here, and WHY anything is off fathom config audit # are this repo's config instructions still true? fathom rate --list # session outcomes, 1–5 (optional human override — experimental) ``` `fathom capabilities` matters to an impact report because a capability that is off is a figure that will read as zero. "No rule injections" means something entirely different when obligations are switched off than when they are on and failing, and only this verb distinguishes them. `fathom research report` (docs/design/research-flywheel.md) is the flywheel's single-command aggregate: everything `instrument --adoption` covers (call log + the observations under `.fathom/observations/`) PLUS injection coverage and obligations-served counts from the hooks beat log, and context-bench token/turn deltas when a bench artifact exists — one report, written to `workspace/artifacts/research/report.{md,json}` as well as printed. Prefer it over ad-hoc log tailing or re-running `instrument --adoption` alone; fall back to `instrument --adoption` directly only if you need its exact legacy field names or don't need the beat-log/bench sections. Neither replaces `plans status` (still the only source for plan-freshness) or a direct read of `.fathom/observations/` (still the only way to list *which* frictions are open — both report only counts). `instrument --adoption` is a deterministic-given-inputs report over the MCP call log (`workspace/logs/mcp-calls.jsonl` by default) plus the observations under `.fathom/observations/` — a snapshot of one window, never a trend, unless you explicitly diff two runs. `plans status` is always **derived from the index**, never asserted — the same "done means proven" discipline the `fathom-verify` skill runs at push time, viewed as a rollup. ## 2. The honesty rules — apply these to every sentence you write These are not suggestions; they are the discipline that keeps this skill from becoming a fathom advertisement instead of a measurement: 1. **Report only what the instrument measured.** If `instrument --adoption` didn't count it, don't claim it. "Fathom made this session faster" is not a sentence this skill is allowed to write unless a benchmark (`context-bench`, `docs/design/coding-agent-excellence.md` §0.5) actually measured it for the comparison being made — and even that headline number has already been revised down once (the original "≤1/10th the discovery tokens" claim was retracted to a measured 1.38–1.79× after re-running the bench for real; the win is real but smaller than the first draft claimed). Quote measured numbers, not vibes. 2. **State the predates-instrumentation split, every time it's nonzero.** `verify_gate_catch_count` (JSON) / the "gate catches" line (table) counts only verify/review calls that carry a `verdict_outcome`. `verify_gate_predates_instrumentation` counts calls from a binary built before that field existed — their outcome is genuinely unrecoverable from the log. **Never fold the second number into the first.** Say "N catches measured this window (plus M earlier calls whose outcome predates instrumentation and can't be recovered)," not just "N catches." 3. **Never attribute an outcome the data can't support.** A high `claims_attach_hit_rate` means `brief` calls came back with claims attached more often — it does NOT mean those claims changed anyone's decision, and it is not evidence of time saved. Don't infer causation ("this caught a bug that would have shipped") the log cannot show. 4. **`call_log_read: false` means "never observed," not "measured zero."** An absent or unreadable call log is a distinct state from real, confirmed zero traffic — say so explicitly rather than reporting a flat 0 that reads as a measurement. `call_log_read_error` (IT-1) tells the two apart: "no log yet" (ENOENT) versus a log that exists but could not be read (EPERM, a permissions or OS file-access problem) — the second is a broken pipe, report it as the finding. 5. **Zero-call tools are a fact, not automatically a verdict.** A registered tool with zero calls this window may be genuinely unused, or may just not have come up yet — list it, don't editorialize past what the count shows. The list is surface-scoped: `zero_call_agent_tools` is the agent allowlist, `registered_not_on_agent` the rest of the registry — never fold the two into one "unused" number. 6. **Always end with the open frictions.** `instrument --adoption` reports only the open-observation *count* (`open_observation_count`/`observations_path`, JSON). To name them, read the `O.md` files under `.fathom/observations/` (a repository wired by an older fathom may also keep a legacy `.fathom/observations.md`) and list the `### O — ` entries whose `- **Status:**` line still starts with "open" — oldest first. **Every impact narration ends with this list as the flywheel's ask.** A report that only celebrates wins without naming what's still broken is an incomplete report, not an honest one — if `fathom observe` hasn't been run recently, say that too (see the `fathom-feedback` skill). ## 3. What to include A complete narration touches, in this order: 1. **Window covered** — the call-log path and whether it was readable at all (rule 4). 2. **Injection traffic** — per-surface `surface_traffic` totals, and the `brief` claims-attach hit rate (with `nil`/undefined stated plainly when there were zero `brief` calls in the window — never a fabricated 0%). 3. **Gate catches** — `verify_gate_catch_count` with the predates-split (rule 2). 4. **Plan freshness** — `fathom plans status`'s proven / claimed-unproven / open / deferred / other-skipped rollup, per plan. 5. **Zero-call tools** — the list, stated as a fact (rule 5). 6. **Open frictions** — the flywheel's ask (rule 6). Non-negotiable, even when everything else in the report is good news. ## The observatory and the brief For the at-a-glance version of everything above, open the daemon's observatory: `http://127.0.0.1:7575/observatory` (fleet wiring/freshness/ traffic with remedy commands; a 30-day grade distribution — today's fold only until daily snapshots persist, **experimental**), `/observatory/impact` (catches and discovery with denominators; the counterfactual pilot state machine), `/observatory/service` (per-dimension 30-day series from real call-log rows — a day with no rows renders Absent, never 0). The console's `/brief` page renders the same model as a shareable markdown value brief with an explicit "Not measured" section — read it, download it, and let a HUMAN decide where it goes.