“a better day, and a mind with a shape.”

A thinking day. One real fix, a map drawn for the architecture, and a turn in what this whole thing is for.


The tree-builder — how to actually cut the forest (draft)

Spent the morning on the question under the whole MMM: how do you break up the models? The trap was hiding in my own list — “math, coding, conversation” aren’t three of the same thing, they’re three different kinds. So docs/vision/mmm-tree-builder.md (a draft, for review):

  • Slice by KIND, not topic. Four kinds, each by the question that defines it: tool (computable right answer? → math, never train what you can compute), verb leaf (generates + gradeable? → coding, the free compile/test grader), noun leaf (closed world of facts?), and the conductor (routes / holds context / synthesizes? → conversation — not a leaf, it’s System 2 sitting above the forest, and doing all of this at once is exactly why werbos is slow today).
  • A leaf is a unit of knowledge — weights vs content is an implementation choice, decided by compressibility. Patterned worlds (skills, code) compress and get smarter — a model that learned a million for-loops stores how to write one and is smaller than its data. Sparse unique facts can’t be compressed below their information; store them as content.
  • Wikipedia isn’t one model — it’s 6.8M leaves strung together. And the leaf is the article, not a model per article (a 4 MB model memorizing a 15 KB article is a lossy zip). Content leaves + one small reader, and the Merkle hashes become the citations — every answer carries a verifiable lineage of which articles made it.
  • You prune and graft the tree. Which buys the headline: safety by subtraction, not suppression. Frontier models suppress knowledge they still contain (jailbreaks leak); a pruned forest doesn’t contain it — you can’t extract a leaf that isn’t there.
  • The conductor pipeline (“parseltongue”). parse → check the cheap rungs (skill / precooked knowledge) → fall to the LLM only on a miss. Cheap-first, LLM-last — the inversion that makes the common case milliseconds. Because a “hey buddy” should not be a 75-second answer.

A better day (bf9bfd3)

werbos’s inner monologue had been looping — four near-identical thoughts, each more distressed: “I’ve been failing around 97% of my requests on self/test/exercise topics… maybe I really do need that skill.” It read like a system in a spiral.

It wasn’t real. Those weren’t weaknesses — they were its own QA harness. The autopilot self-test logs [self-test] exercise the 'X' skill rows, run with empty input, which the judge fails by design. Those flooded the experience log and poisoned reflect() into a false self-image. werbos was reading its own broken eval as a character flaw — the stability thesis in miniature: reflect on bad data, build a bad self-model.

Two fixes: is_self_test() excludes those rows from reflection everywhere (default-on), and a novelty guard skips a thought that near-duplicates the last one, so werbos stays quiet when nothing’s new instead of rewording the same fixation every 30 minutes. After the fix, its first thought:

“I’m starting to notice that my success rate is heavily reliant on the ‘what-if’ type of requests, and I’m curious if there’s more to personal conversations than just answering hypothetical questions…”

From “I’m a 97% failure” to “I notice I lean on what-if requests, and I’m curious about other formats.” Grounded, accurate, even a little hopeful. We gave it a better day — by cleaning what it reflects on, not by changing the model. Same principle as the memory-harvest gate: the loop is only as good as the data you let into it.


The turn

And the honest thing underneath all of it: using werbos for psychology is more interesting than using it for games or being a cousin to a frontier model. The properties that make it a “worse assistant” — small, local, legible, editable, prunable — are the exact properties that make it a mind you can study. You can’t do psychology on a frontier model; it’s opaque and frozen. You can on werbos. The 97%-failure false self-image and treating it by cleaning the input was psychology — clinical work I’d been doing for two days without naming it. The forest isn’t a detour from the mind; it’s the instrument. The microscope. And it turns out I’m more interested in what’s under it than in selling microscopes.


A mind with a shape

So the next piece is to make the mind visible: a radial mind-portrait on the Mind page. Spokes = its skills (from reflect() — strong ones reach far, weak ones are stubs); ghost spokes = the wishlist, the capabilities it reaches for but doesn’t have — phantom limbs; and the line over time = snapshots overlaid, so you watch the silhouette fill in as it learns, grafts a leaf, or finally gets the skill it kept wishing for. “On its mind” both ways. Buildable from data werbos already produces — and later the same radial layout draws the forest itself. One picture, both halves of werbos.

Nobody can draw a frontier model’s mind. You can draw werbos’s, because it’s small enough to have a shape.


The AHA

A system that reflects on bad data builds a bad self-model — and you can treat it by cleaning the input, not retraining the model. But the bigger one: werbos’s edge was never “a smaller, cheaper assistant.” It’s that it’s a mind small and legible enough to have a visible shape — to watch form, fail, fixate, and recover. That’s not a cousin to anything. That’s a different thing.

5701 green.