Deadeye Stats
One entry point for the three reports deadeye computes from its decision
log (~/.deadeye/decisions.jsonl). Pick a view by the first argument;
with none, show the measured-impact scoreboard.
- no arg, or
impact→ the measured scoreboard (deadeye gain) savings→ the full token-savings report (deadeye audit)context [session-id]→ per-session context-byte breakdown (deadeye context [session-id])
deadeye gain's last line is a file:// link to a regenerated visual
report (deadeye report under the hood) — relay it as-is, the same as
every other figure in this skill.
Run the matching binary and present its output as-is — every figure
comes from the decision log, not an invented aggregate. If the binary
reports "command not found", it's almost certainly just not on PATH
(deadeye never adds itself to PATH; it resolves its own binary internally
for hooks). Retry the self-bootstrap path directly, e.g.
~/.deadeye/bin/deadeye gain. Only if that also fails is it genuinely not
bootstrapped yet (it self-installs on the first hook invocation).
If the log is empty, the binary prints its own explanation — relay it as-is and suggest running a task with the plugin active first.
Honesty boundaries (load-bearing — do not soften)
These carry over from the three reports this skill replaces. Keep them exactly when presenting any view:
impact (deadeye gain)
- NEVER print a per-repo savings percentage for code that was never written — the unbuilt version has no baseline to subtract from.
- Estimates and measurements are labeled differently in the output; keep that distinction.
- For per-repo reality, point at
/deadeye-debt(shortcuts actually taken) and/deadeye-review --repo(what's still cuttable, or risky).
savings (deadeye audit)
- Decisions per surface and per action are counts from the log.
- Preprocessing rewrite figures are per-rule estimates (a typical-case constant — PreToolUse runs before the command does, so the real output size isn't known yet). Present them as estimates, not measurements.
- The trailing "Real Claude Code usage" block is measured, not
estimated — read straight from this project's own Claude Code session
transcripts (the same numbers
/usagerenders), not from deadeye's decision log. Keep its scope caveat when relaying it: it's scoped to the CURRENT PROJECT, while every other figure in this report is global across every project deadeye has ever run in on this machine — a real number on a different scope, not a direct reconciliation. If it's missing (best-effort: Claude Code's transcript format/layout is undocumented), fall back to suggesting a manual/usagecheck.
context (deadeye context)
- "Injected by deadeye" figures are real byte measurements taken at injection time.
- "Observed arrivals" is a FLOOR, not a session total — only outliers are logged (built-in tool responses over 8KB, every MCP response), so the true arrival total is higher.
- "Kept out of context" keeps the estimated/measured split — never blend a per-rule estimate with a measured filtered size.
- No id shows the newest session; pass a session id for an older one (an unknown id lists the newest five to pick from).
One-shot: do NOT change the coder level or persist anything else. The one
exception is report.html, regenerated as a side effect of deadeye gain --
a disposable cache artifact rebuilt from the same decision log every time
(the same doctrine internal/codemap's cache already follows), not
persisted session state.