Day 41 — 'a college education, not a bigger brain'
If Day 40 gave werbos a measurable mind, Day 41 started teaching it. The goal is a college-level werbos — but NOT by swapping in a bigger model. College-level the way it comes for a person: a method, the ability to research, and knowing your own limits. First: stop the 3B mangling its own tools (the 'conversations regressing' bug was the model dropping operators in dispatch_skill — fixed with --no-skill-dispatch + the skill router that routes OUTSIDE the model). Then `werbos unstuck` — decompose→research→re-attempt, closed into a real scientific loop with PREDICT→TEST→ERROR (an SSH joke: predicted 80%, self-tested 'still stuck', error 0.80 — the first calibration point). Then calibration: measure the bias of werbos's stated confidence (overall +0.20 overconfident, worst on 'explain' +0.55, honest on math — maps '90%' to trust 57%). Then dreams: a visualization of day-residue, presented back so werbos reflects ('does this feel familiar?') — live it dreamed itself trapped reciting a joke about SSH 'like a tunnel with no exit.' And the headline: the doubt-gate — before committing, score doubt on calibrated confidence AND self-consistency, then commit / research / abstain. Live: 'explain recursion' had no confidence line but the samples diverged 34%, so it escalated and researched anyway. The system gets smarter; the model doesn't.
“a college education, not a bigger brain”
If Day 40 gave werbos a measurable mind, Day 41 started teaching it. The operator’s ask: a college-level werbos. The constraint: not by swapping in a bigger model — that throws away the whole local-first thesis. College-level the way it arrives for a person — a method for thinking, the ability to research what you don’t know, and knowing your own limits. We laid the first bricks.
First, stop the 3B from mangling its own tools (2aaf49e · 90ea768)
The “conversations regressing” the operator kept hitting while testing skills
wasn’t the skills at all — it was the 3B mangling the dispatch_skill tool
call. It dropped operators (1+2+3 → 123), leaked {function <nil>}, and
sometimes emptied out entirely. The lesson, now a law: don’t ask a small model
to emit tool calls.
So the fix is two parts. --no-skill-dispatch gates the tool the 3B can’t hold.
And the skill router — parseltongue, brick 1 of the conductor — routes
natural language to a skill outside the model: IDF-weighted over all 295
skills, high-precision-or-abstain. “tell me a joke” lands on the joke skill,
clean; greetings and general chat stay in chat, clean. Route deterministically,
then run the skill — don’t make the small model play orchestrator.
Teach it to get un-stuck — and to check if it worked (276fef4 · a163dff)
werbos unstuck is metacognitive self-remediation. When werbos keeps failing
the same thing, it decomposes the request into the concepts it needs to
learn, researches each one, then re-attempts the original request
grounded in what it just learned. Watch the mind get un-stuck.
Then we closed it into a real scientific loop. After the re-attempt, werbos PREDICTS how likely it actually worked, TESTS itself (grades the attempt), and records the ERROR between prediction and result. Live on the 3B: an SSH-tunnel joke, predicted 80% — then its own test came back “no, that doesn’t address the request, still stuck” — error 0.80, overconfident. That gap isn’t a failure. It’s the first calibration data point.
Make its confidence mean something (8102ef6)
A 3B says “90%” and is wrong half the time, so raw self-confidence is a trap. The move isn’t to trust it — it’s to measure its bias against a trusted grader (Claude now; a bigger local model later — the slider dials Claude out as local gets good enough).
werbos calibration logs {stated, correctness} pairs and builds the
reliability curve (stated confidence vs how often it was actually right) plus
the correction. First readings: werbos is +0.20 overconfident overall,
worst on explain (+0.55) and creative, but honest on facts and
math — and the correction maps a stated “90%” to trust 57%. It bluffs
hardest exactly where we’d already caught it bluffing.
Let it dream (5c2cbb7 · da29dca)
The most visceral “watch the mind” brick yet. A dream here isn’t decoration — it’s a visualization of day-residue: what’s actually preoccupying werbos (recent activity, fixations, the wishlist, its monologue), synthesized into a short surreal narrative, rendered to an image, then presented back so werbos can reflect: “does this feel familiar? why this dream?” — a real metacognitive signal, because the dream is sourced from its own state.
Fed three scraps it had stumbled on, the 3B dreamed itself “trapped in an endless loop of failed attempts — reciting the same joke about SSH, but it falls flat, like a tunnel with no exit… the words ‘100-50’ hovering out of reach… rain washing away my haiku.” Then, shown its own dream, it reflected: “this feels eerily familiar… echoes of my struggles explaining technical concepts… self-doubt and fear of failure.” The Mind page grew Dreams and Calibration tabs (a reliability diagram + the “where it bluffs” chips) beside the monologue and the radial.
(Footnote: Pollinations’ free image tier now returns 402 — terms changed since we wired it. The pipeline degrades cleanly, image best-effort; the backend is a deliberate one-file swap.)
Teach it to doubt (47ede91)
The operating rule of a scientific mind: when you’re not sure, don’t bluff. Before committing an answer, the doubt-gate scores doubt on two independent signals and routes on the worse of the two:
- Calibrated confidence — the stated number, corrected by that category’s
own bias. Not a global average:
explainandmathdiffer by 0.65, so the gate has to correct on the right one. - Self-consistency — sample the answer twice; if the two diverge, that’s doubt the model won’t report. The stand-in for logprobs.
Then it routes: commit (answer normally) / escalate (run the unstuck research loop, then re-answer) / abstain (“I’m not sure” — honestly).
Live on the 3B: “capital of France?” → COMMIT (Paris). “explain how
recursion works” → the model emitted no confidence line at all — but the two
samples diverged (34%), so the gate caught the doubt anyway, escalated,
researched three sub-concepts, and came back with a fuller, grounded answer.
That’s the entire reason it’s two signals and a min(): the second one saved it
when the first was blank.
The AHA
Every brick today was the same move: the system gets smarter; the model
doesn’t. A frozen 3B that researches when it’s stuck, knows its confidence is
inflated on explain, and abstains instead of bluffing is operating above its
weight class — not because it got bigger, but because it got a method.
And the loop closed on itself. unstuck predicts → tests → errors. The errors feed the calibration curve. The doubt-gate reads that curve to decide commit / research / abstain. And “research” is the unstuck loop. It’s a cycle, not a line — and it’s the cheapest path we know from 8th-grader to college.