Launching the stack: why myelin and cortex are separate
For months we lived inside a Discord-and-dashboard pattern that conflated the protocol, the surface, and the operator's chat into a single tangle. Here is the case for splitting them — and what changed once we did.
The tangle
You can build a multi-agent system in a weekend with Discord webhooks, a bot framework, and a few Workers. We did. It worked. Then it kept working for nine months, and the seams started showing.
We had one repo (grove-v2) holding the bus client, the envelope handling, the workflow runner,
the Discord adapter, the dashboard, and a sprinkling of CC hooks — all sharing a single src/bot/
directory. Every concern lived next to every other concern. The bot's connection to NATS was three import-hops
from the code that decided what colour a Kanban card should be. Touching one thing meant touching everything.
The OSI moment
The forcing function was the bus. Once NATS landed underneath, we had to answer a question we'd been avoiding: which layer owns which concern?
That's an OSI question. And OSI has a well-known answer — narrow inter-layer contracts, swappable implementations, explicit cross-layer concerns. The same discipline that kept TCP/IP coherent for forty years works for an agent protocol stack, with no modifications.
We sat down on 2026-05-07 and converged the seven-layer model. M1 connectivity (out of scope) at the bottom; M7 surfaces (per app) at the top. Myelin owns M2 through M6. Everything above is plural.
The two repos
Splitting the tangle into myelin (the stack, M2–M6) and cortex (one M7 app) gave us three things we did not have before:
- A spec that other applications can depend on. Pilot and signal-collector now have a named contract to consume. They are not "stuff that lives next to the bot." They are siblings.
- A surface that does not know about NATS. Cortex consumes the bus through one named interface. If we replace NATS with something else tomorrow, cortex changes one factory call and zero adapter files.
-
A migration plan that fits on one page.
plan-cortex-migration.mdlists every file that moves, every file that retires, every phase that ships. The plan is the project plan.
The visibility problem cortex was built to solve
Cortex earns its existence on one specific failure mode of the tangle: a single Discord channel cannot answer three different questions well at the same time.
- Is the agent alive?
- What is it working on right now?
- What tools did it actually run, in order?
Bots that try to answer all three on one surface end up at one of two extremes. Either they flood the channel with per-tool messages (alive, but noisy), or they go silent during long internal operations (quiet, but indistinguishable from stalled).
Cortex splits the questions onto three surfaces. Mission Control (Tier 1) answers alive and what is it working on at a glance. The cortex drill-down (Tier 2) shows where a specific agent is in its lifecycle. The signal app (Tier 3) keeps the full tool-by-tool trace for the operator who wants to drill in.
The brand metaphor
We named the ecosystem after the nervous system on purpose. Myelin is the insulator wrapping signals on the axon — protocol-shaped. Signal is the action potential carrying telemetry. Pilot is rhythmic coordination. Compass is heading control. Blueprint is the body plan. Cortex is the surface where the operator perceives and acts.
It is a metaphor, not a law. We borrow from it where it helps and abandon it where it doesn't. But the family name keeps the parts of the system in one mental picture, and that has been worth more than we expected.
What comes next
- Cortex MIG-1. The bus runtime ports from grove-v2 — the G-1100 ladder, the envelope validator, the surface router.
- Myelin M5 Discovery. The first cut at a runtime capability registry. Spec at myelin#9.
- Myelin M6 Composition. Pipeline, fan-out, request/reply patterns above the envelope. Spec at myelin#10.
- This site. A page for each layer once we have something real to say about it.