// Demos

Genesis, running.

All three views ship today in 0.1.12. These are the three moments worth watching: a component being created, that same component edited as source, and the finished brain answering through its own interface.

http://127.0.0.1:7072
Canvas - adding a Neuron from the palette: Genesis writes the module, wires it into brain.py, and the node lands on the ring around the Synapse.
Canvas - adding a Neuron from the palette: Genesis writes the module, wires it into brain.py, and the node lands on the ring around the Synapse.
http://127.0.0.1:7072
Code - the declaration as a form and the handlers as code boxes, with an edit applied through the AST and the file re-read from disk.
Code - the declaration as a form and the handlers as code boxes, with an edit applied through the AST and the file re-read from disk.
http://127.0.0.1:7072
Test - Run starts brain.py, the liveness pill goes green, and Connect opens the Receptor's own surface to drive it.
Test - Run starts brain.py, the liveness pill goes green, and Connect opens the Receptor's own surface to drive it.
// What a brain is made of

Four primitives. Four silhouettes.

A project grows from four parts, and each one keeps a single shape across the whole product. You place it in Genesis and then watch that exact shape light up in Prism.

Neuron thinks
an async function behind an Axon
silhouette: circle
Engram remembers
a memory backend
silhouette: diamond
Effector acts
a tool family
silhouette: triangle
Receptor listens
the edge a turn arrives at
silhouette: cup
Four participants on one synapse bus. A Receptor, drawn as a cup, sits above the bus; a Neuron drawn as a circle, an Engram drawn as a diamond and an Effector drawn as a triangle hang below it.ReceptorlistensSynapse · one bus, one envelopeNeuronthinksEngramremembersEffectoracts
Neurons think · Engrams remember · Effectors act · Receptors listen. One silhouette per kind, kept the same in Genesis, in Prism and here.
// Why a designer at all

The hard part was never the model call.

Wiring a model into a script takes an afternoon. Deciding what the components are, where memory lives, which tool a given step is allowed to reach, and how a person gets pulled in - that is the work, and it is where almost every team stalls. Genesis makes that structure something you can see and move around without turning it into a format you can never leave.

Not a code generator

A generator writes a wall of code once and then fights you every time you edit it. Genesis parses the module you already own, changes the one declaration or handler you touched, and leaves your comments, imports and hand-written logic exactly where they were.

Not a graph builder

The canvas is a picture of what exists, not a control-flow diagram you have to keep accurate. There are no edges encoding “then” - components sit around the Synapse they share, because that is genuinely how the system runs.

Your repo is the artifact

Genesis scaffolds the same standard skeleton as cosmo init and writes into it. brain.py is the single entry point, and the project runs under python, in Docker, or in CI with Genesis nowhere in the picture.

It says what it can’t do

Open a project someone else laid out and Genesis tells you where its assumptions don’t hold - no brain.py to wire into, components outside the folders it reads, a module that builds its component in a factory. None of that blocks you. All of it is said out loud, because the alternative is a button that appears to work and doesn’t.

// Three views

Canvas, Code, Test.

Three ways of looking at one project - the shape, the source, and the running thing. No build step and no export between them.

On the left, the Genesis canvas showing a synapse with three component nodes and an add-a-Neuron control. An arrow labelled writes real modules points right to a file tree containing brain.py, neurons slash planner.py, engram, effector and receptors. A second arrow returns from the files to the canvas, labelled re-reads from disk.Genesis canvas+ Neuronwrites real modulesre-reads from diskyour projectbrain.pyattaches, then run()neurons/planner.pywritten on addengram/store.pyeffector/tools.pyreceptors/cli.pythe file on disk is the only artifact - hand-edit it and reopen, there is no resync step
A node you place is a module Genesis writes into your project and wires into brain.py. Every structured edit goes through the AST, and the file on disk is re-read afterwards - so Genesis never holds a guess about what your code now says.
A source file, neurons slash planner dot py, split into three horizontal bands: declaration, behaviours, and everything else. Each band points right to what Genesis does with it - a form, editable code boxes, and content shown verbatim.neurons/planner.pydeclarationbehaviourseverything elserendered as a formone field per constructor keywordrendered as code boxesgrouped by the protocol they serveshown verbatimnothing is silently droppedevery structured edit posts to the server and gets the re-read model back
Genesis reads a component module as three parts and edits only the two it models. Anything it does not understand is handed back exactly as written rather than reformatted or dropped.
01 · Canvas

Place a primitive. Genesis writes the module.

  • One Synapse at the centre of the canvas with everything it hosts in orbit around it. Each node wears the same silhouette Prism gives it - Neurons are circles, Engrams diamonds, Effectors triangles, Receptors cups - so the thing you laid out and the thing you later watch run are visibly the same system.
  • Pick a primitive from the palette, name it, and Genesis writes neurons/<name>.py (or engram/, effector/, receptors/) and wires it into brain.py. The name you type is used verbatim as the component's id on the bus, so the file, the node and the Signal all say the same thing.
  • A Receptor asks one extra question - CLI, API or chat - because that choice is not switchable afterwards. The three take different constructor keywords and expose different decorators, so turning one into another is a rewrite, and Genesis would rather ask once than offer a toggle that lies.
  • Nodes you drag keep their position per project, and a newly added component walks the ring in 15-degree steps to find a free slot rather than landing on top of something you already placed.
02 · Code

Declarations as forms. Handlers as code. Everything else, verbatim.

  • Genesis reads a component module into three parts: the declaration (rendered as a form, one field per constructor keyword, with its blurb, suggestions and placeholder - credentials masked with a reveal toggle), the behaviours you have written (rendered as editable code boxes, grouped into the protocols this component can serve), and everything Genesis does not model, shown verbatim so nothing is silently dropped.
  • Every structured edit posts to the server and gets the re-read model back. Genesis never guesses what the file now looks like - the file on disk is the only source of truth, which is why you can hand-edit a module in your own editor and reopen it here without a resync step.
  • An Engram's shape is switchable in place: served over a working backend (the default), served-only if you want to decide where the data lives, or a prebuilt backend where recall() and imprint() are real methods and there are no hooks to add. InMemory, SQLite and Postgres are one dropdown, and the backend's own keywords - Postgres's dsn= and so on - get their own form.
  • An Axon carries two axes, source and form. Source is which provider builds the Neuron - Ollama, HuggingFace, OpenAI, Anthropic, Groq, OpenRouter, Together, Mistral, MCP, or a plain custom function. Form is how the pairing was written, which matters because only the from_source path attaches a recogniser and teaches the model the cosmo intent convention. Genesis knows which providers have a sugar classmethod and which can only be written the long way, instead of offering a button that cannot work.
  • Behaviour bodies that cannot be safely dedented are round-tripped exactly as they were. Genesis would rather hand a block back untouched than reformat code it did not fully understand.
03 · Test

Run the brain. Drive it through its own front door.

  • The Receptor list is read off your source, not off a running process - which is why it is populated before you press Run, and why a CLI Receptor is drivable at all. Its surface is a set of decorated functions with signatures; a browser could never discover that over HTTP.
  • Run starts brain.py as a real process, one per project, with its pid, uptime and exit code on screen. Connect then opens whatever that Receptor actually is: a terminal wired to the process's stdin and stdout over a WebSocket, a request builder for an HTTP one, or a chat panel.
  • For a CLI Receptor, Genesis has already parsed each command's parameters into what they become on the command line - a positional, a --flag or a switch - along with which commands are answered locally without ever dispatching a TASK.
  • HTTP calls are relayed through the Genesis server rather than fired from the tab. An ApiReceptor sends no CORS header, so a direct call would be blocked before it left the browser; going through the server that served the page also turns transport failures into readable errors instead of an opaque TypeError.
  • Because Receptors funnel into the same dispatch trio as every internal component, what you exercise here is the production path rather than a mock of it.
// The bus underneath

Genesis never hosts the Synapse.

It probes one, spawns one when you ask, and points Prism at it. Every status you see is a fresh probe rather than remembered state - so a Synapse you started from a terminal reads exactly the same as one started from this UI, and closing Genesis never takes your bus down with it.

A liveness pill, not a guess

The header shows whether a Synapse is actually serving your namespace right now, with its transport, uptime and Signal count - and, when it isn’t, the reason in words. Starting one resolves only once the namespace is genuinely registered, so the indicator never has to walk back a green light it showed too early.

Prism is one click away

Open Prism from the same menu and Genesis starts a Prism server if none is running, then hands you a tab already pointed at that Synapse and namespace. Design, run and observe end up being three windows onto one process, not three setups.

Open a canvas in about a minute.

Genesis ships inside the same package as the runtime. pip install cosmonapse, then cosmo genesis - it opens in your browser, and the project it makes is one you can delete Genesis and still run.