Ethan runs dozens of unattended scheduled agents (claude-efforts-eval, director-mode-evaluator, inbox-consolidator, meeting-intake) but has no single view of what each one costs in tokens versus how often its output actually gets acted on. This ledger joins per-agent token spend with a simple 'was this read/acted on' signal, so dead-weight daemons surface themselves instead of quietly burning budget forever.
Create ~/.local/bin/agent-cost-ledger (bash+python, ~90 lines). 1) Enumerate scheduled agent units via `systemctl --user list-timers --output=json` and match unit names against ~/.claude/projects/*/*.jsonl session files by mtime window. 2) For each session file, sum usage.input_tokens/output_tokens/cache_read_input_tokens from assistant events with jq, attribute to the unit whose OnCalendar window contains the session start. 3) Derive an 'engagement' signal per agent: grep ~/.local/state/attn/ and the sent-mail log (sent-mail-watch state) for whether that agent's digest/email produced a human reply or attn-ack within 48h. 4) Write ~/.local/state/agent-cost-ledger/YYYY-MM.jsonl with {unit, runs, tokens, est_cost, acks, cost_per_ack}. 5) Weekly systemd timer (Sun 07:00) pipes the top offenders — highest cost_per_ack, and any agent with >0 runs and 0 acks for 14 days — through send-formatted-email plus a compact card to ~/Tablet/ via tablet-sync so it lands on the NXTPAPER next to the morning brief. Reuse token-report and tool-half-life conventions for the cost math and decay window.
**What it does** — For each scheduled agent unit, it reads the real journal run windows, attributes token-ledger events that fall inside them, prices them per model family, then counts how many attn items naming that agent Ethan actually acked within 48h. Writes `~/.local/state/agent-cost-ledger/YYYY-MM.jsonl` with `{unit, runs, tokens, est_cost, acks, cost_per_ack}`.
**Files**
- `~/bin/agent-cost-ledger` (97 lines, executable)
- `~/bin/agent-cost-ledger.test.bats` — 3 tests, all green
- `~/.config/systemd/user/agent-cost-ledger.{service,timer}` — Sun 07:00, `Persistent=true`, MemoryMax 1G. Enabled, next fire Sun 2026-08-23.
**Proven on real data** — `--since 2026-08-13` against the live journal + token ledger flagged two dead-weight agents: `claude-efforts-eval-cycle` (1 run, $0.32, zero acks) and `daily-inbox-consolidator-cycle` (1 run, $0.07, zero acks).
**Two things to know**
- I did not fire the service itself, because a real run emails you and writes the Tablet card. I verified the exact command path with `--no-notify` instead. First real send lands Sunday morning.
- Attribution is by run-window containment, so interactive spend outside any agent's window is correctly left unattributed — a test asserts that.
Director-mode: I gathered inline rather than dispatching (11 violations, acked).