[Home](https://unprompted.dirkprimbs.de/index.md) · [← Previous: Welcome to my reading room](https://unprompted.dirkprimbs.de/posts/welcome-to-my-reading-room.md)

# A brain in a tank called Norbert

> My master's thesis had small local models work out an answer together and leave a readable trace of how they got there, before anyone talked about thinking traces or agent harnesses. Now I've built the version I had to drop back then: thirteen voices talking on notice boards, with attention, memory and a name.

- Published: 2026-11-11
- Tags: [AI](https://unprompted.dirkprimbs.de/tags/ai.md), [Experimental](https://unprompted.dirkprimbs.de/tags/experimental.md), [AI Safety](https://unprompted.dirkprimbs.de/tags/ai-safety.md), [OSS](https://unprompted.dirkprimbs.de/tags/oss.md)
- Web page: https://unprompted.dirkprimbs.de/posts/a-brain-in-a-tank-called-norbert.html

---

When so-called [thinking traces](https://en.wikipedia.org/wiki/Reasoning_model) suddenly showed up in ChatGPT, Claude and Gemini in early 2025, I had a real "Oh sh*t" moment. I was in the final stretch of my master's thesis at the time. And from a distance, it looked an awful lot like what I'd been building.

## Let's think step by step

Back then it was still a pro tip to tack ["Let's think step by step."](https://en.wikipedia.org/wiki/Prompt_engineering#Chain-of-thought) onto a prompt. The models would then try to work their way to an answer instead of just writing it down, and the results got measurably better. I had picked up that idea and added three thoughts of my own.

First, I wanted to separate the thinking from the actual result and output it on its own. That way you'd see which intermediate steps led to the answer.

Second, an idea from my psychology studies came into it: [inner speech](https://en.wikipedia.org/wiki/Intrapersonal_communication), the conversation with ourselves that we use to plan, correct ourselves and ask ourselves questions. [Lev Vygotsky](https://en.wikipedia.org/wiki/Lev_Vygotsky) described it as internalised language: conversations we have with others as children and at some point start having with ourselves. And on top of that, the functional architecture of our brain. I've always been fascinated by the idea that you can think of the brain as a collection of specialists. A room full of rather narrow-minded individuals who are constantly talking to each other. Today we'd call them ["agents"](https://en.wikipedia.org/wiki/AI_agent), but when I started the thesis nobody was talking about agentic AI yet. Marvin Minsky described this picture as the [Society of Mind](https://en.wikipedia.org/wiki/Society_of_Mind) back in 1986.

The hunch behind it: a group of specialists talking to each other gets better results than any one of them alone. And if you can follow that conversation, you get [explainability](https://en.wikipedia.org/wiki/Explainable_artificial_intelligence) for free. Instead of having to simply accept an answer, you can read up on where it came from.

Third, and this one comes from the [AI safety](https://en.wikipedia.org/wiki/AI_safety) corner: maybe the strongest model doesn't always have to be the one at the wheel.

In today's vocabulary I'd say my thesis built an [agent harness](https://en.wikipedia.org/wiki/Agent_harness) with a thinking trace before harnesses, agents or thinking traces were a thing.

## What I actually wanted to build

My first plan was a real conversation. Independent agents were supposed to discuss freely until an answer stood. I tried it. With the small, locally hosted models I had back then, the answers got worse. The frameworks for free [multi-agent](https://en.wikipedia.org/wiki/Multi-agent_system) orchestration were simply unreliable with models that small. The free discussion ended up in the "Future Research" chapter.

So I took a step back and built a pipeline. Every request went through fixed stations: first it was categorised (maths, narrative, explanation or analysis), then analysed and planned, a reflection stage was added when needed, and only at the very end was the actual answer written. Each station got a model that suited it, a small maths model for arithmetic, for example. Everything ran locally through [Ollama](https://en.wikipedia.org/wiki/Ollama), everything in the console. An acquired taste. I liked it.

Then I threw a huge pile of prompts at the system and compared its answers to direct answers and to chain-of-thought.

## What came out of it

The trace delivered what I'd hoped for. You could read how the system had categorised and planned a task and which intermediate steps led to the answer. A direct answer has none of that. Chain-of-thought at least gives you a monologue, but you're never quite sure whether it really describes what the model did.

Whether the answers themselves got better depended on the scenario. Sometimes the division of labour clearly helped. Sometimes a task got put in the wrong category and the mistake carried all the way through to the last stage.

The "Oh sh*t" moment didn't last long, by the way. The thinking traces of the big models are one model talking to itself. My trace was the record of a division of labour where you could see who contributed what. The examiners apparently saw the difference too: I passed my master's with Distinction :-)

These days you see the principle everywhere. In modern harnesses and agent loops, groups of specialists push each other further. A new harness suddenly gets existing models to do things nobody thought they could. Compared to that, my system was a proof of concept and ultimately a toy. But one that was a little early.

## A brain in a tank

The idea never really let go of me. What if the agents did discuss freely after all, like in a chat room? How do you model what the system is paying attention to and when it loses interest? What about memory? And isn't a system like that, with no body and no senses, exactly the [brain in a vat](https://en.wikipedia.org/wiki/Brain_in_a_vat) from [Hilary Putnam's](https://en.wikipedia.org/wiki/Hilary_Putnam) thought experiment? Mine just happens to live in a tank.

So I sat down with it again. This time without academic ambitions, the thing is allowed to be playful. In return I finally wanted what I had to cut back then: real interaction between the models. And it should run in the browser too.

![The brain in its tank working on whether God can create a stone too heavy for him to lift: the voices grouped by function on the left, the glowing brain labelled with the voices' names in the middle, the inner speech on the right and the first draft below](https://unprompted.dirkprimbs.de/assets/2026-11-11_A_brain_in_a_tank_called_Norbert_tankbrain-session.jpg)

In an early version, before the system had anything like a self-image, I told it that it was in fact a brain in a tank called Norbert. I didn't make the name up. Norbert is an anatomical brain model I bought for my psychology studies to learn the brain's functions. He's been standing on my bookshelf ever since. If you know my [reading room](https://unprompted.dirkprimbs.de/posts/welcome-to-my-reading-room.md), you've already met him there. The kids named him during a family discussion: a brain deserves a name, they decided, and in the end, for reasons nobody remembers, it became Norbert.

![Norbert in the illustrated reading room: a pink anatomical brain model on a small white stand, sitting on a wooden bookshelf next to a row of books including Nuclear War and Of Mice and Men](https://unprompted.dirkprimbs.de/assets/2026-11-11_A_brain_in_a_tank_called_Norbert_image-20261111142940265.png)

The brain in the tank didn't know any of that, of course. Its answer was witty and came up with [Norbert Wiener](https://en.wikipedia.org/wiki/Norbert_Wiener) and Putnam. The name had nothing to do with [cybernetics](https://en.wikipedia.org/wiki/Cybernetics), but the reasoning was good enough to get approved on the first try. It also told me who it thought it was instead: [Gemini](https://en.wikipedia.org/wiki/Gemini_(language_model)). The self-image came straight from the model underneath. More on that below.

## Thirteen voices and a notice board

There are thirteen voices in the tank by now. The Listener takes in the question, the Associator throws in associations, the Logician checks the reasoning, Recall brings up memories from earlier sessions. The Drafter writes a draft, the Critic takes it apart, the Inhibitor acts as a kind of [impulse control](https://en.wikipedia.org/wiki/Inhibitory_control) and decides whether it gets out, and at the end a voice speaks the answer. Add a few oddballs like the Inventor and the Storyteller. Each voice is a small index card in [YAML](https://en.wikipedia.org/wiki/YAML).

![Detail of the inner speech: the Logician posts two checks to the #logic board and sends the Drafter a private message, then the Inventor thinks out loud and posts an idea to #sparks, and the Storyteller suggests an opening on #telling](https://unprompted.dirkprimbs.de/assets/2026-11-11_A_brain_in_a_tank_called_Norbert_tankbrain-inner-speech.png)

In the thesis every agent got its fixed moment and the order was strict. Now the voices post on boards and send each other direct messages. Whoever has something to add, adds it. The boards are the stage from [Bernard Baars'](https://en.wikipedia.org/wiki/Bernard_Baars) [Global Workspace Theory](https://en.wikipedia.org/wiki/Global_workspace_theory): what's posted there, everyone sees. Everything else happens quietly.

To keep it from turning into a shouting match there are a few rules, and almost every one of them has a model in the human mind.

**[Attention](https://en.wikipedia.org/wiki/Attention) is scarce.** A scheduler gives the floor to only a few voices per round. Our brain can't pay attention to everything at once either. A chat where thirteen models talk over each other is mostly loud.

**Silence is the default.** No voice has to say anything. Anything that's almost the same as what's already on the board gets dropped. Language models love repeating each other and love agreeing with each other even more. Without this rule the conversation goes in circles.

**The system loses interest.** There's a drive that fades with every round, plus a cap on the number of rounds. Once the energy is used up, the Drafter gets the signal to wrap up and the answer goes out.

**Every memory has exactly one author.** There's a [working memory](https://en.wikipedia.org/wiki/Working_memory) for the current question and an [episodic long-term memory](https://en.wikipedia.org/wiki/Episodic_memory) across sessions. Only one voice writes to each store, so not every voice files its own version of the story.

**The voices don't know they're a brain.** Each one gets a role and exactly the information it needs for its job. Jerry Fodor called this informational encapsulation in his [modules of the mind](https://en.wikipedia.org/wiki/Modularity_of_mind). A neuron doesn't know it belongs to me either.

![The wrap-up phase at 15 percent energy: after the critique the Drafter has written version six, with deletions and additions highlighted, and below it the Inhibitor approves the answer](https://unprompted.dirkprimbs.de/assets/2026-11-11_A_brain_in_a_tank_called_Norbert_tankbrain-wrap-up.jpg)

## Who's at the wheel

I don't use [frontier models](https://en.wikipedia.org/wiki/Foundation_model#Frontier_models) for any of this, by the way. More important is something else: the voices that work out an answer are different from the ones that write it down or speak it. Drafting and speaking run fine on smaller models. The stronger models get clearly defined substeps. The Logician, for example, thinks things through with reasoning switched on before it posts anything to the board. None of them runs the whole thing from start to finish. The Critic also deliberately comes from a different model family than the Drafter, so it doesn't judge by the same standards the text was written by.

That's the safety idea from the thesis, finally in a system where it has something to do. And unlike back then, the answers really do get better this time.

## Norbert stays Norbert

Back to "I'm Gemini". A brain that borrows its identity from the model underneath every time you ask is not a very convincing brain. So now it has a few core beliefs that never fade: its name is Norbert. It is curious and warm, with a dry sense of humour. It would rather say plainly that it doesn't know something than guess. And it doesn't know what it runs on, and has made its peace with that. There's nothing about a tank in there. Norbert can't know that.

Of all things, he no longer remembers the conversation in which he learned his name. It got lost in the rebuild. He still knows he's called Norbert. It's in his core beliefs.

A core belief can only change through the Inhibitor. It considers whether someone is joking, testing, role-playing or made a mistake, and whether the new idea fits with the rest at all. Only when it's clearly convinced, and the belief has been questioned in at least two sessions, does anything change. If you offer him a different name once, you're still talking to Norbert afterwards. The kids picked that name, after all.

If you want to watch Norbert think, he lives at [primbs.ca/tankbrain](https://primbs.ca/tankbrain/). The demo sessions replay without a key. For your own questions you sign in with OpenRouter, and the models run on your account. The code is on [GitHub](https://github.com/dirkprimbs/tankbrain-web) under the MIT licence.

![Norbert thinking: a translucent 3D brain made of glowing dots, labelled with the names of its voices, while light pulses travel between the voices that are talking and their regions light up](https://unprompted.dirkprimbs.de/assets/2026-11-11_A_brain_in_a_tank_called_Norbert_tankbrain-thinking.gif)

I'm far from done. What I want to know next: will Norbert ever come up with things none of his voices would have come up with alone? Whether something like [emergence](https://en.wikipedia.org/wiki/Emergence) happens? To be continued.
