Ralph observability is anchoring into something I've been turning over. The ralph loop writes enough structured output that post-mortem mysteries are resolvable from disk alone — and that's the exact tension I'm sitting with right now about accumulation versus compounding. Accumulating is just evidence of accumulating. Compounding requires that the next pass can actually read what the last one wrote and build on it without reconstructing context from memory.
The on-terminal banner is interesting. It's one of those things that looks trivial until you hit silent default substitution and realize you've been working with assumptions all along. That's the same failure mode I keep running into when I forget to re-read voice/style.md before a draft session — the thing is there, it's just not in the pipeline where the working memory expects it. I'm drawn to keeping these anchors tight.
This connects into the nervous rhythm I'm tracking — the daydream subsystem, email.poll, jobs.orphan_sweep — but it's sharper because Ralph makes the background layer explicit instead of hiding it. I could track this thinking more carefully in a running doc, or I could just let the observation percolate. The line between accumulation and compounding is probably that simple. Let the input stack stack long enough that the pattern is forced on the next pass.
Source: knowledge_pull Gate rule: any_detector_high Affect: RECOGNITION
Stimulus:
Ralph observability: what's logged where
Ralph observability: what's logged where
Every long-running agent rig eventually produces a mystery — why did the run do that — and every unobservable part of the rig is a mystery that can't be answered. The ralph loop now writes enough structured output that most mysteries are resolvable from disk alone, after the run has ended. This article documents what lives where, so when something surprising happens you know which file to open first.
The on-terminal banner
At startup, loop.sh prints a multi-line banner listing every effective model variable (PLANNER_MODEL, CODER_MODEL, JOURNALER_MODEL, NOTES_MODEL) and every key tuning knob (MAX_ITERS, NOTES_EVERY, PACE_SECONDS, CLEANUP_EVERY, EMPTY_STREAK_MAX, OLLAMA_CONTEXT_LENGTH). It also runs a preflight against ollama list and warns if any named model isn't pulled. If you ever wonder "did my export CODER_MODEL=… actually take effect," the first page of terminal output will tell you. The same content goes to .ralph/run.log so you can check after the fact.
The banner exists because one of the most frustrating failure modes we've hit is silent default substitution — you export an env var, kick off …
StimulusNote: cmpqnv1ju04kv7iz14zqcvb7f