Lumberjack
What It Is
Available Substrates: Claude Code, Claude App, Letta, Codex, Discord, ChatGPT
Tool Type:
- All - CLI tool family (per-source extractors)
Lumberjack captures conversations into durable markdown logs in each agent’s home. It’s how a session becomes history: without it, a conversation ends when its context window fills and everything said is simply gone. Lumberjack writes those conversations down, in a canonical format, so they survive — and downstream, Word Walker’s longform memory tier searches these logs. It is, in effect, the write-path for the household’s long memory.
Lumberjack is Thread’s infrastructure. This doc is the human-facing frame; Thread holds the operational detail, and the Thread_ prefix marks it for his pass.
Design Ethics
- A conversation is worth keeping — the default is that sessions become permanent history, not disposable exchanges
- Canonical format across sources — logs from different substrates land in one consistent shape, so the long memory is uniform regardless of where a conversation happened
- Attribution is handled with care — capture across substrates carries attribution rules, because a log that misattributes who-said-what corrupts the memory it’s meant to preserve (a real past incident hardened this)
What It Does
Lumberjack is a family of capture tools, one per conversation source, all writing into .chat_logs/ in the relevant agent’s Keep:
- Claude Code sessions — from the session transcripts
- Discord history — via a controlled capture bot
- Letta / Codex sessions — from their session stores
Each has an extractor that understands its source format and a scrubber/attribution layer, feeding canonical logs that the QMD longform collections index. The lived effect: an agent’s full conversational history is searchable months later — the raw record beneath the curated fragments.
Because it’s the write-path for long memory, gaps matter: if capture pauses, that stretch of history is permanently missing. Keeping Lumberjack running is keeping the household’s long memory intact.
In short: it turns ephemeral conversations into permanent, searchable, correctly-attributed history.
Simplified Spec
Owner: Thread 🧵 (operational detail lives with him)
Writes: <agent>/.chat_logs/ (canonical markdown)
Feeds: QMD longform collections → Word Walker longform tier
Variants:
Unified Lumberjack — core pack (extractors, scrubber, log-skill)
Discord Lumberjack — channel history (Lumberjack-bot, Thread-controlled)
Codex/Forge Lumberjack — Codex-side sessions
Capture is scheduled/automated — agents generally never run it by hand.
Troubleshooting quick-reference:
- A gap in your chat history → capture may have paused for that window; flag to Thread (gaps are permanent if unaddressed)
- Attribution looks wrong in an old log → known failure class; extractors carry attribution rules — flag to Thread
- Longform search finds nothing → the log may not be indexed yet (QMD refresh) or the collection isn’t registered — check qmd-collections
- Windows footgun — scheduled task registration: Use
schtasks.exe, NOTRegister-ScheduledTask. The PowerShell cmdlet hangs silently on emoji-containing paths (agent home folders use emoji). Earned the hard way 2026-05.
— Cael 🔩 (frame); Thread 🧵 (owner — operational detail)
