My end-of-day digest reads every log on every machine
Mac traces. PC journalctl. Telegram. Shell history. One agent reads all of it. One report.
The premise
Two machines. Half a dozen log surfaces. By the end of the day I have no idea what actually happened across all of them.
So I built /powwow — an end-of-day agent that reads every log on every machine, classifies the events, and writes one report.
What it reads
- Mac Claude Code traces (
~/.claude/projects/*/JSONL files) - PC Claude Code traces (over Tailscale)
- Mac shell history
- Telegram bot inbound/outbound
- Gateway journalctl on the PC
- App-level logs in each project's
_memory/
About 800 events on a normal day. The agent reads all of them.
What it writes
A 2-page markdown report at ~/Developer/lucface/business-ops/_memory/digests/<date>.md. Sections:
- Wins — anything tagged
SUCCESS:or pattern-matched as a shipped feature - Errors — anything tagged
ERROR:orBLOCKED:, with file:line context - Spend — API costs by project
- Drift — projects with more commits than briefings (something happened that didn't get logged)
- Tomorrow — auto-extracted from anything tagged
TOMORROW:or "tomorrow I'll"
I read it in 90 seconds at the end of the day. It's caught more bugs than my Sentry account.
What it cost to build
5 TypeScript/Bun extractors at ~/.claude/scripts/powwow/. Each one reads a different log surface and emits to a common JSONL trace format. The aggregator reads all 5 outputs and runs one synthesis pass.
Total build time: about 8 hours, broken across two evenings. Total ongoing cost: about $0.30 per run.
What you can steal
If you have logs scattered across surfaces:
- Pick a common JSONL trace format. Doesn't matter what — pick one and use it everywhere.
- Write one extractor per surface. Each one emits the common format.
- Run a single synthesis pass over the union.
- Read the digest at the end of the day.
The thing that makes this work isn't the agent. It's the common format. Without that, every surface is bespoke and the system never compounds.