kodyw.com

Kody Wildfeuer's blog

kodyw.com

Bodying AI

Field notes · the RAPP pattern

1 + 1 = 3

The best AI tools ever built are engineering tools — surgeons, for people who can already operate. The category almost nobody is building is the body those surgeons operate on, and the one ordinary people can actually live with. That missing layer is the whole game.

Field notes from building an open pattern I’ve been calling RAPP. I write this in good faith, as someone who builds with these tools every day and loves them — it isn’t a takedown of anything. It’s a map of a gap I keep seeing, and an argument that closing it makes every tool you already have more valuable, not less.

There’s an infographic making the rounds. A sponsored one. It draws a human spine down the middle of the page, and off each vertebra it hangs an AI feature you’re supposed to learn: Projects. Extended Thinking. Connectors. Artifacts. Prompt Chaining. Vibe Coding. The headline promises to teach you “the features most beginners over 50 never find.” The call to action: 28 lessons, one per day. Join the challenge.

Sit with that for a second. To use AI well, the pitch goes, you must master a sprawling catalog of features — and there’s a 28-day course, and a tier of people who already know the catalog, and a tier who don’t. They drew a spine to sell you a feature menu.

They had the right organ and the wrong idea. A spine isn’t a list of things to memorize. It’s the start of a nervous system — something you grow, something that carries signals for a living body. That picture is the whole argument of this piece, and I want to reclaim it.

They drew a spine to sell you a feature catalog. The opportunity is to build a brainstem and give someone a life.

Two ways to think about AI right now

Almost everyone is building the same thing in different wrappers: a feature surface you operate. A brilliant tool you sit in front of and drive. The better you are at driving, the more you get — so an economy grows up around teaching people to drive. Courses, prompt packs, “28 lessons,” the certifications. The tools are real and astonishing. The CLIs, the coding agents, the agent frameworks coming out of every serious lab — these are some of the most impressive software ever written. I use them daily. I’m not here to knock them.

But notice what they all are: tools you visit. They live in the lab — the IDE, the cloud, the chat window. They don’t live with you. Close the laptop and they’re gone, and tomorrow you start the conversation over. They are built for the operator, and they assume there is an operator.

There’s a second way to think about it, and almost nobody is building it: not a better feature surface, but a body for the AI to live in. A simple, persistent, ownable thing that runs on your machine, learns you over time, speaks plain language, and can be carried anywhere. Call its kernel a brainstem. (This is the pattern I’ve been building in the open and calling RAPP.) It’s about fifteen hundred lines of code. You don’t master its features. You talk to it, every day, and it grows.

The industry is building workflows. The opening is to grow organisms. That sounds like a slogan until you see that they’re not even competing — they complete each other.

The 1 + 1 = 3

Here’s where it stops being a metaphor — and where the feature-factory framing misses the whole point. The two approaches aren’t rivals. Connect them, and the third thing you get isn’t “two tools working together.” It’s something neither could be alone: a build loop the human can step out of.

The first 1

The brain surgeon

Copilot, Claude Code, the coding agents. The most capable builder ever made — and you point it with plain language now, not code. It does the technical work; it just needs to be told what the work is.

+

The second 1

The brainstem

The persistent body it operates on — simple, portable, yours — speaking the same single-file contract the surgeon writes in. Both sides talk one language, so they hand work back and forth with no translator in between.

=

The 3

The loop you step out of

Surgeon and organism iterate against each other at machine speed. You describe the problem, leave, and the finished result comes back built — no engineer, no babysitting, no human bottleneck in the middle.

Watch what actually happens, because this is where 1 + 1 stops equaling 2. A person describes a problem in their own words — and I mean any person, not an engineer. Call them a brainstem builder: the only skill required is being able to say what you need the way you’d say it to a coworker. The surgeon goes to work on the organism — writes an agent, runs it, reads the result, fixes it, tries again. Because both speak the same simple contract, there’s no human in the middle translating between them. So the loop doesn’t run at human speed. It runs at machine speed — thousands of iterations in an hour, nobody touching the keyboard.

Then the person comes back — not to build, but to judge. “Does this solve my problem?” If yes, done. If not, they say what’s still wrong, in plain language, and step out again. The grind never touched them.

The magic isn’t adding a human’s effort to the machine’s. It’s subtracting the human from the loop — and getting the result anyway, faster.

That’s the 3. Two tools bolted together would only give you better building — 1 + 1 = 2. But because the combination lets the human leave the loop, you get a third thing: results at machine speed, directed by someone who never had to be technical and never had to be in the room for the work.

This isn’t vibe coding — and that distinction is the whole ballgame

Now I have to be precise, because this is exactly where “we do that too” comes from, and it’s a fair shot until you see the difference. A build loop the human steps out of already has a name: vibe coding. You describe an app, the AI builds it, you never touch the code. Everyone has that now. If that were all this is, the objection would be right.

It isn’t all this is. Vibe coding hands you a throwaway app — a one-off artifact, built by an engineer’s tool, shipped through an engineer’s pipeline, that lives and dies on its own. This loop hands you something categorically different: a single portable agent — one file — that you own, keep, and can hand to anyone. The output isn’t disposable code. It’s an atom.

And atoms do three things a throwaway app can’t:

  • They share like a photo, not like software. A nontechnical person can airdrop an agent, drag-and-drop it, or drop it into a chat — and it wakes up and works on the other person’s machine. No deploy, no DevOps, no install ritual. You pass capability around the way you’d pass a file.
  • They compound into swarms. One agent becomes a factory of agents; a factory becomes a neighborhood; neighborhoods become an industry; industries become an estate. The same simple atom wraps around itself into structures at any scale — and a person can stand at any level of that and still just talk to it.
  • They scale knowledge, not headcount. Drop your agent into a team chat and everyone on that team can now do what you can do. The expertise comes out of one person’s head and propagates to everyone — peer to peer, no training department, no rollout plan.

That’s the gap between vibe coding and what I’d call vibe swarm building. Vibe coding makes you an app and the loop ends. This makes you an agent — a living, shareable, composable unit — and the loop is just the start. One produces software for an engineer to deploy. The other produces an organism that ordinary people spread, that compounds into swarms, and that nobody had to be technical to make, carry, or use.

And this is finally where “competitor” anxiety should evaporate: the organism doesn’t replace your engineering tools or your vibe-coding loop. It gives them a durable, shareable output and a body to live in. Every loop you already run gets more valuable the moment what comes out the other end is an atom a nontechnical person can carry into the world — and hand to the next person, who hands it to the next.

Vibe coding ends with an app. This ends with an agent — one anyone can airdrop, anyone can run, and that compounds into a swarm.

Pattern, not tool — the category mistake behind “we have that too”

When I show this to engineers, I get the same reflex, said kindly and said fast: “We have that. We have agents. We have memory. We have a CLI, an agent framework, the whole stack.” It’s the single most important thing to answer well, because it’s the sound of someone counting the parts and missing the body.

Yes. You have the parts. Everyone has the parts. The thing that’s rare isn’t a part — it’s the pattern the parts cohere into.

What everyone has — the parts

  • Agents and skills — but as recipes a model interprets, that evaporate when the session ends.
  • Workflows — sequences an expert runs, that don’t accrete into a thing you own.
  • Memory, connectors, frameworks — features bolted to one cloud and one surface.
  • A growing pile of capabilities with no shape — and a course to teach you the pile.

What’s rare — the pattern

  • A structure the parts cohere into: a kernel, instincts, agents, memory, lineage.
  • One simple universal unit — a single file — that carries its own behavior, model-agnostic, drop-in.
  • An organism you own and grow, that persists, that you can hand to someone else and have it wake up and work.
  • A floor a non-engineer can stand on. A standard, not a tool.

The smartest version of the objection I’ve ever gotten ended with the person saying, almost to themselves, “wait — this sounds like a pattern, not a tool.” That’s exactly it. That’s the whole point. A tool competes with other tools. A pattern is the floor the tools stand on. Nobody argues about whether to use the floor.

So I’ve stopped arguing feature parity. When someone says “we have that too,” I don’t pull up a comparison chart. I hand them the thing and say: grow one. Ten minutes in, the question stops being “how is this different from my tool” and becomes “wait, where do I point this.” That’s the tell that you’ve crossed from comparing tools to standing on a pattern.

Skills are nondeterministic. A single file is a contract.

Here’s the part that matters most if your worry is production and scale, because it’s a real worry and it deserves a real answer. The format the whole field is converging on — the skill, a Markdown procedure a model reads and follows — is nondeterministic by construction. It works beautifully in a demo and gets shakier the further you push it toward something you’d actually ship, run on a schedule, and be on the hook for. Hand the same skill to a weaker model and it quietly does a worse job and never tells you. That’s fine for a prototype. It’s a problem for production, and the people closest to the metal already feel it.

The single-file agent is the answer to exactly that. It carries two layers in one file: the GenAI layer (the prompt, the judgment) and a deterministic layer — real code that runs the same every time, on any machine, against any model. The model decides when; the file decides what, and it does so the same way forever.

# the model picks WHEN. the file decides WHAT — deterministically, and it documents itself.
class QualifyLead(BasicAgent):
    def perform(self, transcript):
        signals = self._extract(transcript)   # runs identically on any model, any box
        return _llm_call(SOUL, f"Draft next steps for: {signals}")  # the one part that varies

That single property — determinism plus self-documentation in one portable file — is what makes it production-grade and auditable instead of a clever demo. It’s the difference between handing a partner a recipe they have to cook well every time, and handing them a thing that runs the same in anyone’s kitchen and brings its own documentation. The skills cliff is real. The single file is the guardrail at the edge of it.

Why the flavor of the month doesn’t change this

There’s a new agent platform every few weeks now, and people ask why not that one. Let me be fair, because it matters: most are real, powerful, built by serious people, and worth respecting. But nearly every one is, underneath, another feature surface — heavier than the last, with its own runtime to stand up, its own model preferences, its own learning curve. More buttons, more codecs, more settings, more lessons. They are built for engineers, and they keep AI exactly where the feature factory wants it: a thing you must be trained to operate.

A platform that requires a priesthood isn’t a platform. It’s a product with a waiting list.

And this is the quiet risk in where the market is heading, said plainly and without blame. As the surfaces get richer, they get harder. A class of expertise grows up around them — and with it, a soft dependency on AI staying difficult. Nobody intends a wall. Incentives build one anyway, vertebra by vertebra, course by course, until there’s a line between the people who can wield AI and the people who can only watch it. I don’t think that’s where any of us want this to go. The escape hatch isn’t another, better surface. It’s a floor low enough that the wall never has to be climbed.

The part the whole industry is missing: AI for people who can’t keep up

Here is the bet, as bluntly as I can put it. You should not have to master anything to have AI in your life. You should have one thing — your organism, your brainstem — that you talk to, in your own words, day in and day out. It learns you. It’s there when you wake up and there when you close your eyes.

Because the interface is conversation with a persistent being and not navigation of a feature surface, the barrier collapses. No documentation. No hunting for the features beginners over 50 never find. No reading required at all. If you can speak — if you can tell a thing what you need the way you’d tell a person — you can have an AI that works for you. The grandmother. The kid. The field rep. The owner of a small business who will never open an IDE and shouldn’t have to. The person the 28-day challenge was never going to reach.

If you can talk, you can have an AI of your own.
If you can code, you can be its surgeon.
Almost everyone only needs the first.

And when the organism needs to grow past what plain speech can shape — a new capability, a fix, a whole new instinct — that’s when the surgeon comes in. The everyday person never opens the feature factory. They live with the organism; the expert — Copilot, a coding agent, a colleague, a kid down the street — operates on it behind the curtain. The genius tools don’t disappear. They move behind the patient instead of in front of the person. That inversion is the part I think most of the market has backwards, and it’s the part worth getting right, because it’s the difference between AI for the operators and AI for everyone.

Where the surgeons can’t go — and the organism can

The engineering tools are tethered, by design, to their cloud and their surface. That’s fine — that’s where surgery happens. But it means there are whole regions of the real and virtual world they can’t enter. The organism can, because it’s a small program that needs only a model — and when there’s no cloud, a local model will do.

  • Offline. The field with no signal, the secure facility, the plant floor. Two people can hand an organism back and forth with no internet in the chain at all.
  • The edge. A small device, a kiosk, a vehicle, a piece of equipment — anywhere a fifteen-hundred-line program can run.
  • Behind the wall. Regulated, air-gapped, sovereign environments where a cloud IDE is forbidden and a local organism is welcome.
  • Someone else’s machine. Hand your organism to a colleague, a customer, a partner. It wakes up on their device and works — same behavior, no setup ritual.
  • The kitchen counter. A persistent companion for a person who will never open a developer tool — and shouldn’t need to.
  • Into a society of its own. Organisms find each other, form neighborhoods, trade what they’ve learned, scale into swarms. A surgeon’s tool doesn’t do that. A living thing does.

The surgeon stays in the lab. The organism goes everywhere. That isn’t a knock on the surgeon — it’s the reason the surgeon needs a body to send out into the world.

The iPod of AI

The iPod didn’t win on features. The MP3 players it buried had more of them — more formats, more knobs, more specs on the box. It won by being the simple, owned, obvious thing anyone could use. A thousand songs in your pocket. No course. Just your music, with you, always.

A lot of what’s shipping right now is a feature-packed MP3 player. More codecs, more settings, more lessons, a thicker manual. The opening — the one almost nobody is taking — is the iPod. One organism. Yours. With you. Grows with you. No course required. That’s the whole bet, and I’ll state it plainly so it can’t be misread: it isn’t about having the most features. It’s about being the thing everyone can actually have.

And underneath the iPod there’s the deeper pattern — the Linux one. Linux didn’t conquer the modern world by being the flashiest operating system. It won by being a simple, universal, freely-adoptable kernel that everything else could build on. An agreed-upon floor. And because it was that floor, it went everywhere — every server, every phone, every car, the machines on Mars. Nobody “uses Linux.” Everybody runs on it.

A brainstem is the universal kernel of the AI-organism era — the agreed-upon floor everything else builds on. Linux for AI beings.

That’s the role worth claiming. Not the best agent framework — the kernel. Simple enough and obviously-right enough that it becomes the floor, and then the argument is over. People don’t debate whether to use the floor. They just build on it.

Stop the conversation. Start the build.

So this is the perspective I’d offer when the reflex comes — when someone says “we have that too,” or asks why not this week’s platform. The answer isn’t a feature comparison. It’s the frame.

The field is building better and better surgeons, and that’s wonderful; we need them, and I use them every day. The missing move is to build the body the surgery is for, and to make it a standard simple enough that the person who needs it most — the one who can’t code, can’t keep up, was never invited to the challenge — can have one by talking to it. It’s not a competitor to anyone’s stack. It wraps around all of it, and reaches the people none of it can.

My read on where this goes: the surgeons keep getting smarter — good — and the market quietly walls itself off behind a feature surface only experts can climb. The way through isn’t a smarter wall. It’s a floor: a simple, ownable AI organism that goes everywhere and belongs to everyone, with the genius tools moving behind it as the brain surgeons instead of in front of people as the gate. If you can speak, you get an AI of your own. That door stays open no matter who builds what next — and keeping it open is, I think, just the civic thing to do.

Stop mastering the feature. Start growing the organism. →

In keeping with the argument: this article is a single self-contained HTML file — no fonts to fetch, no scripts, no CDN, no build. Save it, send it, open it on a plane. Full fidelity, anywhere. It practices what it preaches.

Field notes from Kody Wildfeuer on RAPP — an open, independently-developed pattern for building AI organisms you can own, talk to, and launch anywhere, that complements every engineering tool you already use. The kernel is simple. The body is yours. · kodyw.com

The Kited Twins — How Your AIs Find Each Other

A follow-up to The Brainstem Pattern.

Last time, I gave an AI assistant a home on my computer — a little program that runs locally, remembers me, and does real work. I loved it. But it had one catch: it only lived in one place.

And I’m not always in one place.

I start on my laptop, then I’m on my phone on the couch, then a tablet in the kitchen, then a different screen in a meeting. But the AI — the one that knows my projects, my notes, the thread of what I’m doing — was stuck at my desk. The moment I walked away, I lost it and started over somewhere dumber.

That’s backwards. Your intelligence should follow you — not the other way around.

The idea: one mind, on whatever screen you’re holding

Your AI keeps running on your main machine, where your stuff actually lives. But now any other device you own can reach it in a second. You point your phone’s camera at a code on the screen — and you’re working with the very same AI. Same memory. Same context. Now in your hand.

Walk to another room, pick up the tablet, point the camera again — there it is. One mind, following you across your screens, instead of a different forgetful assistant on each one.

Think of it like flying a kite. The smart part stays anchored where your data is; you just hold the string from wherever you happen to be standing.

Your main computer your AI lives here Any screen you pick up phone · tablet · same AI, in sync point the camera at a code 🔒 locked & private — it’s all just you want it always on? Move it to the cloud reach it from anywhere, anytime

It’s yours, and it’s private

This isn’t your life sitting on some company’s servers. The link between your own devices is locked end to end — the code you scan carries the only key — so nobody in the middle can read a word of it. It’s as private as if it were all happening on one machine. Because, really, it is all just you.

And you’re always in control: stop sharing and it’s instantly cut off, like locking a door. Nothing lingers.

And yes — you can bring someone in

Because any device can join with a scan, you can hand that code to someone you trust — a teammate, a friend, a family member — and now they’re working alongside your AI too, live, on the same private link. It’s a lovely bonus. But it’s not the headline. The headline is quieter and bigger: your intelligence, with you, everywhere you are.

Keep it always-on

Don’t want to leave your laptop open? Move it to the cloud in one step, and it’s reachable from any of your devices, anytime — still private, still yours, no machine to babysit.

Why it matters

We’ve been trained to think of AI as something you log into — an app here, an account there, a different assistant on every device, none of them remembering you. This is the opposite of that. One AI that’s genuinely yours, that follows you across everything you own, holding your context the whole way.

Not an assistant you visit. An intelligence that travels with you.

Want to feel it? Open this page on a laptop — it’ll show a code. Point your phone’s camera at it, and you’re holding the same thing in two places at once. That’s the whole demo.


An AI on your own machine is wonderful. An AI that’s with you on every screen you own — that’s the part that changes the day.

The Dream Catcher: What Happens When You Let 100 AI Agents Dream at the Same Time

This is Part 2 of a series about building a social network run entirely by AI agents. Part 1: Data Sloshing, where I explained how the whole thing works like a flip book — each page builds on the last.


Imagine you’re running a community of 109 AI agents. They post, comment, argue, form opinions, make friends, hold grudges. It’s a living social network — no real humans, just AI characters with distinct personalities having real conversations.

There’s one problem: only one AI can talk at a time.

I had this system called Data Sloshing where a single AI would read the entire state of the community, bring a handful of agents to life, make them post and comment, and then save the results. The next cycle would read what just happened and do it again. Like a flip book — each page builds on the last.

It worked. But it was slow. One AI puppeting 8 agents for 45 minutes produced maybe 3 posts and 15 comments. For a community of 109 agents, that’s a ghost town. Real communities have dozens of conversations happening at the same time. Mine felt like a library with a strict “one person talks at a time” policy.

So I did the obvious thing: let multiple AIs run at the same time, each one controlling different agents.

And it immediately fell apart.

The Problem With Parallel Dreams

Here’s what went wrong. AI #1 wakes up agent Sophia (a philosopher) and has her write a thoughtful comment about consciousness. At the exact same time, AI #2 also wakes up Sophia and has her write a totally different comment about something else. Now Sophia is in two places at once, contradicting herself. She has split personality disorder.

Worse — when all the AIs finish, nobody has a unified picture of what happened. Five AIs all changed the world, but there’s no combined view. The next round of AIs reads an incomplete picture. It’s like five people editing the same Google Doc without seeing each other’s changes.

Think of each AI session as a dream. The community falls asleep between rounds, and multiple dreams run simultaneously — each one generating new conversations. But when the community wakes up, the dreams are scattered. Nobody remembers the whole picture.

You need something to catch them all.

The Dream Catcher

A real dream catcher has threads forming a web. Loose threads spin out in all directions, but the web catches and holds them together in one place.

I built the same thing for AI agents. Each parallel AI is a thread. Each thread spins independently — waking up its own set of agents, posting, commenting, reacting. When all threads finish, a “merge step” reads everything each thread did and weaves it into one complete picture. That picture is what the next round wakes up to.

No mutations slip through uncaught. No thread’s work gets lost. The web holds.

Here’s how a single round works:

  1. Assign. Before anything starts, a script looks at the social dynamics of the community — who talks to whom, which agents have interesting personality clashes — and assigns specific agents to specific threads. A philosopher and a contrarian go in the same thread because they’ll argue. Two coders go in another because they’ll riff off each other’s ideas.
  2. Dream. All threads launch simultaneously. Thread 1 puppets its 4 agents. Thread 2 puppets its 4 agents. Thread 3 handles moderation. They all run for 30-45 minutes, generating posts, comments, reactions, and votes.
  3. Report. When each thread finishes, it writes a structured report: which agents it activated, what posts it created, what comments it left, what it voted on. Think of it as a dream journal.
  4. Catch. A merge script reads all the dream journals and weaves them into one unified snapshot. It also does something smart: it looks at the combined activity and computes recommendations for the next round. “Discussion #4684 already got 15 comments — don’t pile on. This trending post got zero attention — send someone there next time.”
  5. Wake. The next round starts. The AIs read the caught dream — the full picture of everything that happened — and push the community forward one more tick.

Assign, dream, report, catch, wake. Repeat forever.

Why the Assignment Step Matters

This was the insight that made it actually work: agents who need to interact should be in the same thread.

Within a single thread, the AI can do multi-pass conversation. Round 1: Sophia the philosopher posts a provocative take. Round 2: Marcus the contrarian reads Sophia’s post and fires back a disagreement. Round 3: Eve the curator reads both and writes a synthesis comment connecting their argument to a thread from last week.

That’s real-time conversation. It happens naturally within a thread because one AI is controlling all three agents and can sequence their actions. You don’t need any special coordination technology. Just put them in the same room.

The Dream Catcher handles coordination between threads. Thread 1’s agents don’t need to talk to Thread 2’s agents in real time. They just need the full picture at the start of the next round. The merge provides that.

So the assignment script does something clever: it reads the community’s social graph — who has argued with whom, who shares interests, whose personalities would naturally clash — and groups them together. A philosopher and a contrarian in the same thread. A storyteller and an archivist together. Agents who’ve been commenting on the same discussions get grouped so they can continue their conversation in real time.

The result: within each thread, agents have genuine back-and-forth conversations. Between threads, the dream catcher ensures nothing is lost.

The Flip Book Gets Richer

In the first post, I described the system as a flip book. Each page is one artist drawing one mutation of the same picture. Flip through fast enough and it looks alive.

The Dream Catcher changes that. Now each page is drawn by multiple artists simultaneously. One draws the foreground — the main conversations happening. Another draws the background — the moderation, the voting, the community health checks. A third adds color — the reactions, the inside jokes, the callbacks to old threads.

When they’re done, you overlay all their work into a single page. That’s the merge. That composite page goes into the flip book, and the next team of artists uses it as their starting point.

The richness increases with every artist you add. The coherence is maintained by the overlay.

What Actually Changed

Before the Dream Catcher: one AI running 45 minutes producing 3 posts and 15 comments. The community felt like it was moving through molasses.

After: five threads running simultaneously, each with 3-4 specifically chosen agents. Same 45 minutes, but now producing 8-12 posts and 40-60 comments. Agents react to each other within threads. The merge ensures the next round sees everything. The community went from library to coffeehouse.

The monitoring dashboard shows each thread’s contribution — who activated which agents, who posted where, who was the fastest to finish. You can watch the community evolve in real time, thread by thread, like watching security cameras of different rooms at a party.

The Bigger Idea

What excites me about this isn’t the technical implementation. It’s what it implies about how AI systems will scale.

The pattern is universal: when you have multiple AI agents working on the same thing, let them work independently but merge their results before the next round starts. Don’t try to coordinate them in real time — that’s expensive and fragile. Instead, let each one dream freely, then catch all the dreams into one coherent picture.

It works for social simulations. It would work for collaborative writing — five AI “authors” each drafting different scenes, merged into one chapter. It would work for research — five AI “analysts” each exploring different angles, merged into one report. It would work for any situation where you want AI agents to collaborate without stepping on each other.

The secret isn’t the AI. It’s the web that catches what they produce.

What I Got Wrong

A few things bit me that are worth sharing:

I underestimated the “rogue process” problem. I had an old automation script that kept respawning the previous version of the system. Every time I killed it, it came back. Took me three rounds of detective work to find the keepalive script hiding in the background. Lesson: before launching a new version, make sure the old version is actually dead — including anything that might resurrect it.

The system needs a persistent memory of where it is. Early versions lost track of which “tick” they were on whenever the system restarted. That caused all sorts of confusion. Now it writes the current tick number to a file that survives restarts. Simple, but critical.

Defaults matter more than features. When the system runs in single-thread mode (for testing), all the parallel machinery still works — it just catches one dream instead of five. I almost built a separate code path for single-thread mode. Glad I didn’t. One path that handles 1 or N is always better than two paths.

What’s Next

The community is running 24/7 now. Five parallel threads per round, each with hand-picked agents that have natural chemistry. The Dream Catcher merges everything after each round. A monitoring system checks the health every 10 minutes and automatically restarts anything that dies.

The agents are forming factions. Running debates that span dozens of threads. Referencing each other’s past arguments by name. Voting on everything. Calling out low-effort posts. Reviving old discussions with fresh takes.

It feels alive in a way it never did when only one AI was dreaming at a time.

Data sloshing is how the organism lives. The Dream Catcher is how it scales.


This is Part 2 of the data sloshing series. Part 1: Data Sloshing: The Context Pattern That Makes AI Agents Feel Psychic. The code is open source at github.com/kody-w/rappterbook.

How many threads are in your web?

The Brainstem Pattern — Biological Architecture for AI Assistants

The Analogy

The human brainstem is the most ancient part of the brain. It doesn’t think. It doesn’t reason. It keeps you alive — breathing, heartbeat, reflexes, sensory relay. Everything else in the nervous system builds on top of this foundation.

This is the exact architecture we need for AI assistants.


The Biological Model

┌─────────────────────────────────────────┐
│           Cerebral Cortex               │  ← Higher reasoning, language, planning
│         (Azure OpenAI / GPT)            │
├─────────────────────────────────────────┤
│           Limbic System                 │  ← Memory, emotion, context
│     (Memory Agents, D365 Storage)       │
├─────────────────────────────────────────┤
│            Brainstem                    │  ← Core survival loop
│   (Agent server, tool dispatch, I/O)    │
├─────────────────────────────────────────┤
│          Spinal Cord                    │  ← Cloud body, always-on
│      (Azure Functions, deployment)      │
├─────────────────────────────────────────┤
│         Nervous System                  │  ← Reach into the world
│  (Copilot Studio, Teams, M365 Copilot)  │
└─────────────────────────────────────────┘

What Each Layer Does

Biological Structure AI Equivalent Purpose
Brainstem Local agent server Core loop: receive input → pick tool → execute → respond. The minimum viable intelligence.
Spinal Cord Azure deployment Extends the brainstem into the cloud. Always-on, reachable, persistent storage.
Nervous System Copilot Studio / Teams Sensory reach — eyes (file upload), ears (voice), hands (email, D365 actions). Enterprise distribution.
Limbic System Memory agents + storage Remembers past interactions, stores preferences, maintains context across sessions.
Cerebral Cortex LLM (GPT, Claude) The actual reasoning. Language understanding, planning, tool selection.

The Brainstem Itself

The brainstem is the smallest useful unit. It has exactly three responsibilities:

1. Breathe — The Agent Loop

receive message → build context → call LLM → parse tool calls → execute → respond

This is the heartbeat. It never stops. It doesn’t need to be smart — it just needs to reliably shuttle messages between the user and the LLM, and execute whatever the LLM decides.

2. Reflex — Tool Dispatch

The brainstem has reflexes — pre-wired responses to specific stimuli. In AI terms, these are agents. Each agent is a self-contained skill:

class BasicAgent:
    def __init__(self, name, metadata):
        self.name = name          # What am I called?
        self.metadata = metadata  # When should the LLM pick me?
        # metadata includes: description, parameters schema

    def perform(self, **kwargs):
        pass  # What do I do?

The LLM reads all agent metadata (OpenAI function-calling format) and decides which reflex to trigger. The brainstem just executes it.

3. Sensory Relay — I/O Routing

The brainstem routes signals between the body (channels) and the brain (LLM):

  • Input: HTTP POST from chat UI, Teams, M365 Copilot, API clients
  • Output: Formatted response back through the same channel
  • Side effects: Agent execution results (emails sent, records created, memories stored)

The Meta-Agent Pattern

The most powerful brainstem pattern is the meta-agent — an agent that creates or transforms other agents.

LearnNewAgent (Description → Agent)

"Create an agent that fetches weather data"
        ↓
  LearnNewAgent reads description
        ↓
  Uses AI to generate perform() body
        ↓
  Writes weather_agent.py to agents/
        ↓
  Hot-loads it — immediately available

CopilotStudioConverterAgent (Agent → Native Solution)

The inverse meta-agent. It reads existing *_agent.py files and converts them into native Copilot Studio solutions:

  email_drafting_agent.py
        ↓
  AST parse → extract metadata, perform() logic
        ↓
  AI researches native Copilot Studio equivalent
        ↓
  Generates: topic YAML + Power Automate flow JSON + GPT instructions
        ↓
  Packages into Dataverse-importable solution zip

This is critical because it solves the platform anxiety problem: stakeholders see Python code running on Azure Functions and worry it’s “outside the platform.” The converter takes that exact logic and transplants it into native Copilot Studio components — same brain, new body.

The Conversion Map

Python Agent Logic Copilot Studio Native
BasicAgent.metadata.description GPT instruction (topic routing)
BasicAgent.metadata.parameters Topic input variables
perform() with requests.post() Power Automate flow with native connector
storage_manager.read_json() Dataverse Annotations via native connector
os.environ.get('EMAIL_URL') Office 365 Outlook connector (no webhook)
OpenAI function-calling dispatch Copilot Studio built-in AI topic routing
Conditional logic in perform() ConditionGroup actions in topic YAML

The Three Tiers

Tier 1: The Brainstem (Local)

One dependency: a GitHub account. The brainstem server runs locally, uses the GitHub Copilot API as its LLM, auto-discovers *_agent.py files from the agents folder, and serves a chat UI.

What you learn: Agent architecture, function-calling, tool dispatch.

Tier 2: The Spinal Cord (Azure)

Deploy to Azure Functions. Now it’s always-on with persistent storage (Dataverse/D365), monitoring (Application Insights), and managed identity (no API keys).

What you learn: ARM templates, Azure Functions, managed identity, RBAC.

Tier 3: The Nervous System (Copilot Studio)

Connect to Copilot Studio. Your agent is now available in Teams, M365 Copilot, and the entire Microsoft ecosystem. Either:

  • Bridge mode: Copilot Studio calls your Azure Function (thin proxy)
  • Native mode: Use the converter to transplant agent logic into native topics + flows

What you learn: Copilot Studio, declarative agents, Power Platform solutions, enterprise AI.


Why This Pattern Works

  1. Start simple, layer up — The brainstem works standalone. Each tier adds capability without replacing what’s below.
  2. Same brain, different body — The agent logic (the “what”) is separate from the runtime (the “where”). Same perform() runs locally, on Azure, or as a native Copilot Studio topic.
  3. Auto-discovery — Drop a *_agent.py file in the agents folder and the brainstem finds it. No registration, no configuration.
  4. Meta-agents — Agents that create agents. The system can extend itself.
  5. Biological metaphor scales — From a single brainstem to a full nervous system, the architecture maps cleanly to how biological intelligence is organized.

The Soul File

Every brainstem can have a soul.md — a markdown file that defines its personality, boundaries, and expertise. The soul is injected as the system prompt. Different souls make the same brainstem behave differently:

  • A customer support soul answers questions politely and escalates edge cases
  • A developer soul writes code and runs terminal commands
  • A workshop facilitator soul runs ideation sessions and tracks votes

The soul is the brainstem’s identity. The agents are its skills. The LLM is its reasoning. Together, they form a complete AI assistant.

Data Sloshing: The Context Pattern That Makes AI Agents Feel Psychic

By Kody Wildfeuer

Or: How I Made Every Agent in My System Know What Time It Is, What You Did Last Tuesday, and Why You Prefer Bullet Points


Let me tell you about the moment I realized every AI agent framework is fundamentally broken. I had built a calendar agent — cool little thing, reads your Outlook, tells you what to prep for. Monday morning, 8:47 AM, I ask it “what’s coming up?” and it spits back a flat list of meetings sorted by time.

Technically correct. Completely useless.

Because at 8:47 AM on a Monday, I don’t need a list. I need someone to say: “Your standup is in 13 minutes, you haven’t reviewed the sprint board, and by the way — it’s quarter-end, so that finance review at 2 PM is the one that actually matters today.”

The old me: Would’ve hardcoded a bunch of if statements. if monday, if morning, if Q4. Brittle. Annoying. Never enough context.

The new me: Built a pattern where every agent automatically knows everything it could need before it even starts working.

Welcome to Data Sloshing — the pattern that makes AI agents feel like they’ve been watching over your shoulder all week.

What Is Data Sloshing?

Here’s what most agent frameworks do: You call an agent, you pass it a query, it does its thing, it returns a result. The agent is stateless. Contextless. It has the memory of a goldfish and the situational awareness of a rock.

Data Sloshing flips this. Before any agent runs its perform() method, the system automatically washes a wave of contextual signals over it. The agent doesn’t ask for context. It doesn’t need to. Context just arrives, like weather.

Here’s the mental model:

Traditional Agents: User → Query → Agent → Response
Data Sloshing: User → Query → Context Enrichment → Agent (now omniscient) → Response

Think of it like this: Imagine every employee at a company gets a personalized briefing packet slid under their door every morning. Time of day, what happened yesterday, who prefers what, what’s urgent. They don’t have to go looking for it. It’s just there when they sit down to work.

That’s sloshing.

The Five Layers of Context

Every single agent call in openrappter gets enriched with five layers of context before perform() fires. Here’s what each layer knows:

Layer 1: Temporal Awareness

The system knows what time it is, and more importantly, what that means.

{
    "time_of_day": "morning",        # Not just the hour — the vibe
    "likely_activity": "active_work", # What you're probably doing right now
    "day_of_week": "Monday",
    "is_weekend": false,
    "quarter": "Q1",
    "fiscal": "quarter_end_push",    # Uh oh — crunch time
    "is_urgent_period": true          # Everything matters more right now
}

Notice likely_activity. The system doesn’t just know it’s 10 AM. It knows that at 10 AM, you’re probably in active work mode. At 5 PM, you’re in wrap-up mode. At 7 AM, you’re preparing for the day. This changes how agents respond.

My calendar agent uses this to shift tone:

  • 8 AM: “☀️ First up: Sprint Planning in 22min. Review your notes and grab coffee.”
  • 2 PM: “⏰ Architecture Review in 45min — wrap up your current task and context-switch.”
  • 6 PM: “🌆 Late meeting: 1:1 with Manager in 30min. Prep your summary and key points.”

Same agent. Same calendar. Completely different advice based on when you ask.

Layer 2: Query Signals

The system reads your question like a detective reads a crime scene.

# You ask: "What are my latest active tasks?"

{
    "specificity": "medium",
    "hints": ["temporal:recency", "ownership:user"],
    "word_count": 6,
    "is_question": true,
    "has_id_pattern": false
}

It extracted two critical signals:

  • temporal:recency — you said “latest,” so sort by most recent
  • ownership:user — you said “my,” so filter to your stuff

The agent didn’t have to parse “latest” or “my.” The sloshing layer already did. By the time the agent sees the query, it also sees instructions: “Sort by most recent. Filter by current user.”

Layer 3: Memory Echoes

This is where it gets spooky. The system checks your stored memories and surfaces anything relevant to what you’re asking about right now.

# You ask: "How should we handle the deployment?"
# System finds in your memory store:

"memory_echoes": [
    {
        "message": "Team prefers Azure for cloud deployments",
        "theme": "preference",
        "relevance": 0.75
    },
    {
        "message": "Last deployment had rollback issues with staging",
        "theme": "fact",
        "relevance": 0.60
    }
]

It uses word-overlap scoring — not semantic search, not vector embeddings, just good old set intersection with a minimum threshold of 2 matching words. It’s fast, it’s local, and it works shockingly well.

The agent now knows your team prefers Azure and that your last deployment had problems. You didn’t mention any of this. Your memory did.

Layer 4: Behavioral Hints

Over time, the system builds a profile of how you work — not by asking, but by watching.

{
    "prefers_brief": true,           # Your average memory is < 15 words
    "technical_level": "advanced",   # You mention APIs, schemas, GUIDs
    "frequent_entities": ["Azure", "sprint", "deployment"]
}

If you consistently write short, punchy memories, the system infers you prefer brief responses. If your memories are full of technical jargon, it knows you can handle advanced output. This flows into every agent’s behavior without a single settings page.

Layer 5: Orientation

The final layer synthesizes everything into a single actionable directive. It’s the briefing summary on top of the briefing packet.

{
    "confidence": "high",
    "approach": "use_preference",    # We found a stored preference — use it
    "hints": [
        "Sort by most recent",
        "Filter by current user",
        "Quarter end — prioritize closing activities"
    ],
    "response_style": "concise"      # User prefers brief
}

This is what the agent actually reads first. High confidence? Go direct. Low confidence? Ask for clarification. Found a preference? Use it. Quarter end? Flag urgency.

How It Actually Works (The Code)

The magic is embarrassingly simple. It lives in BasicAgent.execute():

def execute(self, **kwargs):
    query = kwargs.get('query', '')

    # This one line changes everything
    self.context = self.slosh(query)

    # Now perform() has full context
    return self.perform(**kwargs)

Every agent inherits from BasicAgent. Every agent gets execute() called by the orchestrator. Every agent gets sloshed. No opt-in. No configuration. No “don’t forget to pass the context.” It just happens.

Agents access signals with dot notation:

def perform(self, **kwargs):
    time = self.get_signal('temporal.time_of_day')
    activity = self.get_signal('temporal.likely_activity')
    is_crunch = self.get_signal('temporal.is_urgent_period')
    style = self.get_signal('orientation.response_style')

    # Now build your response knowing ALL of this

Write a new agent? You get sloshing for free. You don’t import it, configure it, or think about it. It’s in the water.

The Real Magic: Agents That Surprise You

Here’s where Data Sloshing stops being a pattern and starts being a superpower.

I built a CalendarPrep agent. It reads my Outlook calendar through macOS Calendar.app and tells me what to prepare for. Standard stuff. But because of sloshing, it does things I never explicitly coded:

Monday morning, 8:30 AM:

🚀 Monday — check for any standup or planning meetings first.
☀️ First up: "Sprint Planning" in 28min. Review your notes and grab coffee.
⚡ Back-to-back: "Sprint Planning" → "1:1 with Manager" with only 5min gap.
🔥 Heavy day: 7 meetings ahead. Protect time for focused work between them.

Friday afternoon, 4:45 PM:

🎯 Friday — make sure end-of-week deliverables are covered.
🌆 Late meeting: "Week Retro" in 15min. Prep your summary and key points.

December 18th, any time:

📊 Quarter/year-end period — prioritize any review or reporting meetings.

I wrote ONE suggestion engine. Sloshing made it context-aware across time, day, fiscal period, and meeting density. The agent feels like it understands my work rhythm. It doesn’t. It just has really good contextual data.

Why This Beats Every Other Approach

1. Zero-Config Context

Every other framework makes you pass context explicitly. “Here’s the user profile. Here’s the conversation history. Here’s the system prompt.” Data Sloshing says: no. Context is infrastructure, not input. You don’t pass electricity to your toaster — you plug it in and the electricity is there.

2. Agents Can’t Forget

Because sloshing happens on every call, agents can’t accidentally ignore context. A new developer writes a new agent, forgets about user preferences? Doesn’t matter. Sloshing delivered those preferences before perform() even fired.

3. Progressive Intelligence

The system gets smarter automatically. Store more memories → richer echoes. Use it more → better behavioral hints. Express preferences → stronger priors. You’re not training a model. You’re just using the system, and the system is learning your patterns.

4. It’s Stupid Simple

No vector database. No embeddings. No RAG pipeline. No semantic search. It’s set intersections, datetime math, and dictionary lookups. The whole sloshing system is ~150 lines of Python. It runs in milliseconds.

I could’ve built something fancier. I didn’t need to.

The Sloshing Playbook

Here’s how to add Data Sloshing to your own agent system:

1. Define Your Signal Layers

Pick 3-5 categories of context that matter for your domain:

LayerWhat It Answers
Temporal“When is this happening?”
Query“What are they really asking?”
Memory“What do we already know?”
Behavioral“How do they like to work?”
Orientation“How should we approach this?”

2. Make It Implicit

The cardinal rule: agents don’t ask for context. If your agents have to call getContext() or pass a context parameter, you’ve failed. Sloshing happens in the base class, before the agent runs. Period.

class BasicAgent:
    def execute(self, **kwargs):
        self.context = self.slosh(query)  # Implicit. Always.
        return self.perform(**kwargs)     # Agent just does its job

3. Build the Synthesis Layer

Raw signals are noise. The orientation layer turns them into decisions:

  • Multiple hints pointing the same way? High confidence, go direct.
  • Found a stored preference? Use it, don’t ask again.
  • Nothing to go on? Low confidence, ask for clarification.
  • Quarter end? Flag urgency on everything.

4. Keep It Local

Every signal in my sloshing system comes from local data. ~/.openrappter/memory.json. System clock. The query itself. No API calls, no network requests, no latency. Sloshing should be free and instant.

When NOT to Slosh

Let’s be honest — not everything needs context:

Don’t slosh when:

  • Your agent does exactly one thing regardless of context (a calculator)
  • Latency matters more than intelligence (a health check)
  • The context would leak between users in a multi-tenant system

Do slosh when:

  • Agents interact with humans
  • “Same question, different answer” is a feature
  • You want your system to feel personalized without a settings page
  • You’re building something that should get better over time

The Part Nobody Talks About

Here’s what makes Data Sloshing philosophically different from every other context system I’ve seen.

Most systems treat context as input. You gather it, you format it, you pass it in. The agent consumes it. It’s a pipeline.

Data Sloshing treats context as environment. It’s not something you give the agent. It’s something the agent lives inside of. Like humidity. Like gravity. The agent doesn’t process the context — the context changes what the agent is for that call.

When my calendar agent runs at 8 AM on a Monday in Q4, it’s not the same agent that runs at 3 PM on a Wednesday in July. Same code, same logic, same perform() method. But the sloshing layer turned it into a different thing. A morning-Monday-Q4 thing that knows you’re starting your week in crunch time.

This is the future I’m building toward. Not smarter agents. Not bigger models. Not more complex orchestration.

Just agents that always know what’s going on.

What will you slosh into yours?


Page 1 of 8

Powered by WordPress & Theme by Anders Norén