Why YARNNN Is The Shell, Not The Agent
At a Glance
Answer: YARNNN is the chat orchestration surface — the operating system's shell. The agents are persistent judgment-bearing actors that live in the workspace. The...
This article covers:
- What Operators Initially Thought
- The Fix Was Vocabulary, Not Code
- What "Shell" Means In Our Context
- What Makes The Agents Different
- What This Lets The Product Do Honestly
What this article answers (plain language): YARNNN is the chat surface — the operating system's shell. The agents are persistent judgment-bearing actors that live in the workspace. Operators sometimes assume the chat is the agent; the architectural reality is that they're different entities. This post explains why the distinction matters and how I made it explicit in the product.
Operators talk to YARNNN. They sometimes assume YARNNN is the AI agent doing the work. It isn't. YARNNN is the shell — the chat orchestration surface that routes their intent to the right actors and surfaces results. The actual agents — the competitor analyst, the news monitor, the reviewer named Simons — are different entities that live in the workspace as persistent identities. The distinction sounds nitpicky and was the source of the most important architectural commitment in the product.
This is a build-in-public reflection on a vocabulary fix that turned out to matter more than the fix itself. The operator-facing language for what the chat surface is, what the agents are, and how they relate took us months to get right. The wrong language produced subtle but persistent confusion. The right language made the product immediately clearer.
What Operators Initially Thought
In the first months of the product, operators came in expecting "an AI assistant." They'd type a request to YARNNN. YARNNN would respond. They'd assume YARNNN was the AI doing the work.
This wasn't crazy. Every other AI product they'd used worked that way. ChatGPT is the chat surface and also the AI doing the work. Claude is the chat surface and also the AI doing the work. The mental model "the chat surface is the AI" is the default everywhere.
Our product worked differently — agents persisted in the workspace, accumulated context across sessions, had names and identities — but operators couldn't see that easily because their first interaction was through the chat surface. They asked for something, the chat surface responded, and they walked away thinking "the chat is the AI."
When they came back a few days later, they were confused that "the AI" didn't remember their previous specific request. The agents did remember (each in their own substrate); but the chat surface didn't carry that state, because the chat surface is stateless about agent-domain context. The operator's mental model didn't fit the architecture, so the architecture felt broken.
The Fix Was Vocabulary, Not Code
The first thing I tried was making the chat smarter — letting it reach into agent substrates and surface relevant context. This made the chat better but didn't fix the underlying confusion. Operators still thought the chat was the AI; they just thought it was a forgetful AI.
The actual fix was vocabulary. We started calling the chat surface "YARNNN" and the agents "agents," explicitly and consistently. We made the agents visible — each one had a card showing its identity, its domain, its recent work. We made it clear in the chat that "I'll route this to your news monitor" or "let me check what your reviewer said about that proposal." We treated the agents as named coworkers and YARNNN as the conversational interface to them.
The confusion mostly evaporated. Operators stopped expecting YARNNN to remember domain-specific context (because they understood the agents handled domain context). They started building relationships with specific agents (because the agents had identities). They understood why deactivating an agent didn't break YARNNN (because YARNNN is just the chat surface).
The vocabulary was load-bearing. It wasn't decoration on the architecture — it was what made the architecture legible to operators.
What "Shell" Means In Our Context
I borrowed the word "shell" from operating systems for a specific reason: it captures what YARNNN is and isn't.
A shell in Unix (bash, zsh, fish) is the conversational interface to the operating system. You type commands; the shell parses them, routes them to the right binaries, surfaces results. The shell is replaceable — you can swap bash for zsh without changing what's underneath. The shell doesn't own the filesystem, the processes, or the system state. It's the steering wheel.
YARNNN is the shell in the same sense. The operator types; YARNNN parses intent, routes to the right agents, surfaces results. YARNNN can be replaced (different chat surface, different language, even API-only access) without changing the agents, the substrate, the workspace state. YARNNN is the steering wheel; the engine is everything else.
This framing was clarifying for me as the builder and turns out to be clarifying for operators too. They get the shell metaphor immediately if they've used a terminal. They get the gist quickly even if they haven't.
What Makes The Agents Different
The agents are different entities from YARNNN in five concrete ways:
Persistent identity. Each agent has a declared identity in the workspace (/agents/{slug}/IDENTITY.md). The identity is durable — it persists across sessions, model changes, software updates. YARNNN's "identity" is just the platform's brand voice; it doesn't have a workspace-authored identity file.
Domain. Each agent has a specific domain it reasons about (competitors, news, customer signals, weekly reports). YARNNN doesn't have a domain — it's domain-agnostic by design.
Accumulated substrate. Each agent accumulates substrate over time (memory, observations, learned preferences). YARNNN doesn't accumulate substrate — it's stateless about agent-domain context.
Standing intent. Each agent has a role that implies standing intent ("watch competitors," "produce weekly briefs," "review proposed actions"). YARNNN has no standing intent — it acts only when the operator types.
Replaceability. YARNNN can be swapped for a different chat surface and the operator's workspace continues. An agent can be retired only by the operator, intentionally, with substrate preservation considerations.
These five properties together are what make agents agents and the chat surface not-an-agent. The agents bear judgment in their domain; the chat surface routes intent. Different roles, different lifecycles, different architectural commitments.
What This Lets The Product Do Honestly
Once the operator understands YARNNN is the shell and the agents are the agents, the product can be honest about authority and accountability:
YARNNN doesn't claim to know the operator's domains better than the agents do. When the operator asks about competitors, YARNNN routes to the competitor analyst and surfaces the analyst's substrate. YARNNN doesn't pretend to be the analyst.
Agents are accountable for their domain. When something goes wrong with competitor tracking, the operator looks at the competitor analyst — its identity, its memory, its principles. YARNNN isn't the place to fix it.
Operators can build relationships with specific agents. The operator names the reviewer (Simons). The operator tunes the analyst's principles. The operator retires an agent that's no longer useful. None of this is YARNNN-mediated; it's agent-mediated.
The chat surface stays general-purpose. YARNNN can be improved for conversation quality, surfacing, routing intelligence — without touching the agents. The two layers evolve independently.
This honesty matters. Products that pretend the chat surface is the all-knowing AI eventually disappoint when operators realize the chat doesn't actually carry the persistent state the operator expected. Products that are clear about what the chat is and what the agents are produce a more accurate operator mental model and avoid that disappointment.
The Lesson For Other Builders
If you're building an agent product, decide early whether your chat surface is also your agents (the ChatGPT model) or whether your chat surface is a separate shell that orchestrates persistent agents (the YARNNN model). Both are valid; they produce different products.
If you choose the shell-and-agents model, commit to the vocabulary. Call the chat surface what it is (the shell, the orchestration, whatever your name is). Call the agents what they are. Make the agents visible in the UI. Let operators build relationships with specific agents.
The vocabulary isn't decoration. It's what makes the architecture legible to operators. Skipping the vocabulary commitment produces the same confusion we had in our first months. Doing it explicitly fixes it almost overnight.
Key Takeaways
- The chat surface and the agents are different entities. Conflating them confuses operators.
- "Shell" is the right metaphor for the chat surface — replaceable, stateless about domain context, routes intent.
- Agents have persistent identity, domain, accumulated substrate, standing intent, and aren't easily replaced.
- The vocabulary commitment is load-bearing — without it, operators can't form an accurate mental model.
- Honest separation lets the product be accountable about who-knows-what.
- For the broader taxonomy, read Stop Calling Everything An Agent. For why orchestration shouldn't bear judgment, read Orchestration Is Not Judgment.
Series Navigation
- Part 1: Stop Calling Everything An Agent: The Three Layers Of AI Cognition
- Part 2: Orchestration Is Not Judgment
- Part 3: Why YARNNN Is The Shell, Not The Agent (current)
Related Reading
The orchestration layer routes operator intent. The judgment layer applies reasoning to consequential actions. Combining them collapses accountability. The two...
The word 'agent' covers three structurally different things: the operator (human user), the orchestration (chat surface), the judgment (autonomous actor)....
An agent OS program is a bundle — manifest, reference workspace, composition manifest. Activating it forks the bundle into your workspace. Deactivating leaves...