A Complete Chronological Record
Every event that fires in Wolffish is logged to a daily markdown file. This gives you a complete chronological record of everything that happened — inputs, classifications, LLM calls, tool executions, safety decisions, memory operations, and more.Location
How It Works
Thecorpus event bus wraps every emit() call with logging. Events are buffered for 2 seconds before flushing to disk — not quite real-time, but close enough for debugging.
The daily logs are also indexed by cortex (as the corpus source), so within the retention window you don’t have to grep by hand — Wolffish itself can find events via memory_search, and so can you by just asking it.
Raw event logs are purged after 7 days by design — they are the forensic layer, not the memory layer. What matters longer than a week persists elsewhere: episodes and weekly summaries are kept forever, and automation runs are recorded durably in
brain/brainstem/run-history.md (also indexed), which outlives the purge. If you need raw logs longer, copy them out of the corpus/ directory.Event Types
The system emits dozens of event types. Here are the most useful for debugging:Log Format
Each entry is a timestamp heading followed by the event name and its full payload as one JSON line:Tracing a Task
Tool and task events share ataskId. To follow one task through the log, grep for its ID:
brain/motor/tasks/TASK-1747.md.
Common Debugging Scenarios
- Why wasn't the tool called?
- Why was it blocked?
- Did memory save?
Read the events around the message’s timestamp:
message.received— did the message arrive at all?context.built— did context assembly succeed (sectionsIncludedshould listcapabilities)?tool.called— did the model request the tool?
<capabilities> index?). If it did but nothing happened next, check for a safety.blocked event.