CCodeRealm
User guide

How to get a working product out of CodeRealm

Written for an engineer who wants several agents working in parallel under gates that do not bend — tests that decide, a reviewer that is itself measured, a product that has to boot, a user that has to be able to use it — and who wants to see, in numbers, how often the machine was right. You will need a terminal, git, the claude CLI signed in, and spec-kit on the machine your agents run on; the platform installs none of these for you and says so. What it does not need from you is the building: it needs your decisions, in small answerable questions, and it refuses to make them for you quietly.

Contents

1 · What CodeRealm is

CodeRealm is a place where a description turns into software. You write, in ordinary language, what you want to exist. The platform interviews you until that description has no holes left in it, writes the specification and the technical plan, breaks the work into small pieces, gives those pieces to AI agents that write real code, and then checks every piece before it is allowed to count as finished.

You are not asked to program. You are asked to decide — over and over, in small, answerable questions. That is the whole trade: the platform does the building, you supply the judgement about what “correct” means for your product.

What you need to bring

  • An idea you can describe in a few sentences — what it does, who uses it, what would make it good.
  • Patience for an interview. Storyteller, the orchestrator, will ask questions before it writes anything.
  • Willingness to answer “which of these two behaviours do you want”. Every unanswered question is a guess someone else makes for you.
  • A Claude subscription on some machine you control — either the server already has one, or you install a small program on your own computer (section 12). The agents are paid for by that subscription; nothing in this platform spends anyone else’s.
  • spec-kit on that same machine. It is the public, open-source toolkit that writes the specification, the plan and the task list; the platform drives it exactly as it is and ships no copy of it. Installing it is one command (section 12).

What it is not

  • Not a chatbot that pastes code at you. The output is a git repository with history, tests and documentation — the same thing a development team would hand over.
  • Not a drag-and-drop app builder. There are no templates. What gets built is what your specification says.
  • Not a machine that removes you from the loop. It stops and asks whenever a decision is genuinely yours, and it refuses to invent an answer quietly.

Why the fantasy names

The method is called DoD — Deploy or Die, and its vocabulary comes from tabletop role-playing games. You are the GM (Game Master): the person who runs the game and decides what counts. The workers on a project are a party. What each worker is trusted to do is a competency at a level, and they earn XP for work that is accepted. The names are playful; the mechanics underneath are ordinary, strict project management.

The method’s name is the part that is not playful. Deployed is the only definition of finished this platform accepts — not written, not reviewed, not merged. Every rule in section 9 exists to stop work being called done one step earlier than that.

2 · How it works, start to finish

Everything below is one long loop. It is worth reading once before you start, because every screen in the platform is a window onto one of these stages.

You describe the product
A few sentences in a chat window. No format, no template.
Storyteller interviews you
Batches of numbered questions until nothing important is ambiguous. Silent guesses are forbidden.
The Designer draws every window
For a product with a user interface: an inventory of every screen, dialog, state and system window, drawn as a clickable prototype, rendered at every size in both themes and checked for completeness by the platform. You approve it before any technology is chosen.
The specification is written
Spec, constitution, technical plan, and a list of small tasks — produced by spec-kit, a public specification toolkit the platform drives.
It becomes a project
Requirements, user stories, test cases, tasks and the links between them land in the database. Nothing lives in loose files.
An arbiter classifies every task
What kind of work it is, how hard it is, and whether a machine can decide when it is done.
The specification is checked against itself
Spec, plan and tasks are read against one another before anyone starts. A critical finding holds everything until you look.
The dispatcher hands out work
Each task goes to someone in the party who is qualified, free, whose machine is online, and who is not blocked by unfinished work.
An agent does the task
In its own isolated copy of the repository, on its own branch. Nobody edits anyone else's work in place.
The automatic GM checks the result
Tests run. Scope is compared against what the task allowed. A second model reviews the change. The product is actually started. Failures are sent back with a penalty — up to three times — before a human is called.
Accepted work is merged
Only green work reaches the main line of the repository. Then dependent tasks are released automatically.
Convergence asks whether it is all there
When everything is accepted, the code is assessed against the specification and whatever was asked for but never built comes back as new tasks. Its verdict, not a full board, is what finished means.
The Designer accepts the build
Every screen of the approved design is opened in the running product at the same sizes and themes and compared with its picture. Deviations become defects with fix tasks.
The Golden User tries the product
Once it has converged, a fresh agent installs and uses the product from its own README and reports what does not work.
You have a product
A repository, a specification it can be checked against, a trail showing how every piece was verified, and a bill for what it cost.
The one idea behind all of it

An under-specified task must never slip through silently. Every place the platform could guess — what you meant, whether the tests count, whether the app even starts — it stops and either asks you or writes down what it assumed. Most of the rules in section 9 are that single idea applied to a different moment.

Whose Claude session pays

There are no API keys anywhere in this platform. Every run — an agent, the Storyteller, a reviewer — is started through the claude command-line tool signed in on some machine, and that sign-in is a person’s own Claude subscription. The platform never holds it, never copies it and never lends it:

  • On your own Mac (CodeRealmApp, or a site you run for yourself) everything runs on the claude signed in there. Yours.
  • On a shared site each person connects their own computer as a host (section 12) and their work runs there. A project’s runs go to its owner’s hosts; a chat runs on the host it was started on. If none of your hosts is online, your work waits — it never moves to someone else’s machine.
  • The server’s own claude, if there is one, belongs to the person who set the site up. Only they run on it. A second GM is a second subscription and needs their own host.
  • A spent usage window pauses one host — the one whose subscription hit the limit — for ten minutes at a time. Everyone else’s hosts keep working.

If you have never used an AI agent before

An agent here is an AI model that is given a task, a copy of the code, and a terminal, and works on its own for a while — reading files, writing files, running the tests — until it decides the task is done. It is not a person and it does not remember yesterday. Two things follow that matter for you: it does exactly what the written task says, so the words of the task are everything; and it can be wrong with complete confidence, which is why nothing it produces counts until the checks in section 8 have run.

3 · The words you will meet

Skim this now; come back when a word bites.

People and roles

WordWhat it means
GMGame Master — the person who runs everything and has the final word. Sees all projects, approves accounts, changes anyone's role, owns the registries of executors and competencies. A GM never receives tasks: judging your own work is not judging.
LeaderA local GM. Everything a GM can do to every project, a leader can do to their own: the board, the gates, the party, baselines. Their executors, hosts and local models are their own too — created, skilled and deleted by them, invisible to other leaders. What stays with the GM is the site itself: the competency list, the users, the server.
MemberSees only the projects whose party they belong to, and works their own tasks.
StorytellerThe orchestrator you talk to when you create a project. It interviews you and runs the specification pipeline. It does not write your product's code.
Automatic GMThe part of the platform that judges an agent's submission without you: runs the tests, reads the change, starts the product, and either merges or sends the work back. Section 8.
HostA machine with a signed-in claude command: the server, or your own computer with CodeRealmRunner on it. Every agent lives on one host and its runs are paid by that host's Claude session.
ExecutorAnyone who can receive a task — an AI agent or a human. Executors exist independently of projects and are invited into a project's party.
Team (party)The agents and people invited to one project (Settings › Team). Only party members receive that project's tasks.

Work

WordWhat it means
ArtifactA document the project is made of: the specification, a requirement, a user story, a test case, the technical plan, a design note, a report. All of them live in the database, versioned.
TaskOne small, independently checkable piece of work. A project usually has dozens to low hundreds of them.
DependencyTask B cannot start before task A is accepted. The board shows dependent tasks dimmed with a padlock.
CompetencyThe kind of skill a task needs — backend, testing, documentation, hardware. A global list the site provides, plus the private ones a leader adds for their own executors.
Level (L1–L5)How hard the task is, and how skilled the executor is. An executor is offered tasks up to their level in that competency.
OracleWho decides that a task is done. Automated (a machine check settles it), agent does it / human accepts, or requires judgement (a person must do and judge it).
XPPoints an executor earns for accepted work and loses for rejected work. Enough XP raises their level.
BudgetA dollar cap on a project. When the model runs have cost that much, nothing new is dispatched until you raise it.
GateA check a submission must pass before it counts: tests, review, smoke, scope. Each has a switch in Settings.

Words from the world of code, in one paragraph each

WordWhat it means
Repository (repo)The folder holding your product's files plus the complete history of every change ever made to them. The platform creates one per project automatically.
CommitOne saved change, with a message explaining it. History is a chain of commits; nothing is ever silently overwritten.
BranchA private line of work. Each task gets its own, so two agents working at once cannot damage each other.
mainThe trunk — the one line of work that is considered real. Only accepted, verified work is merged into it.
MergeFolding a finished branch back into main. If two branches changed the same lines, the merge conflicts; section 8 says what the platform does then.
DiffThe exact lines a change added and removed. Reviewers read diffs, not whole files.
Test / test suiteA program that checks the product automatically. Green means it passed; red means something is broken.
Smoke testThe crudest possible check: start the product the way the documentation tells a human to start it, and see whether it answers. A test suite can be entirely green over a product that does not start at all.
TerminalThe text window where commands are typed. On a Mac it is the Terminal app. Section 12 asks you to type three lines into it, and nothing more.
CLIA program used from the terminal rather than by clicking. The claude CLI is the Claude assistant in that form; the agents are built on it.

4 · Getting an account

Running CodeRealmApp on your own machine?

Then there is no account step at all: whoever opened the app is the GM, and the platform signs you in silently. There is no Sign out and no People section. This section describes the shared web version, where several people work on one server. Section 14 covers the app.

The CodeRealm sign-in card
The way in. Sign in and Register are the two tabs of the same card — Register only where the site lets people register; the link under the card leads back to this guide.
1

Register — or be given an account

On the sign-in screen, switch to Register, pick a username (two characters or more; capital letters do not matter when signing in) and a password of at least ten characters.

If you are the very first person on a brand-new site, you become the GM the moment you register — active immediately, no approval, no waiting. Everyone after you needs approval (step 2).

Some sites keep registration closed: then there is no Register tab and the card says Registration is closed on this site. Accounts are handed out by a GM. A GM makes your account instead — the platform invents a login and a password for it, e-mails them to you if the site can send mail, and otherwise the GM passes them on. Sign in and change the password first thing.

You will also see a list of competencies with checkboxes. Tick the ones you can personally do and set an honest level — a tick starts at L2, change it if that is wrong. If you cannot program at all, tick nothing — that is a perfectly normal account, and it is the account this guide is written for. The list only decides what kind of tasks could ever be offered to you personally; it has no effect on what agents can do for you.

The registration form with its competency checkboxes
Registering. The skills list is about you, not about the platform: leave every box empty if you do not write software yourself. The owner adjusts the levels afterwards anyway.
2

Wait for approval

After registering you see Account created. A GM must approve it before you can sign in and the card switches back to Sign in. Signing in before approval returns waiting for GM approval. This is not an error and there is nothing to retry — someone has to let you in. The GM does that in Settings › People with Activate.

3

Sign in and look at the top-right corner

Your username sits in the header. Clicking it opens Change password — it asks for your current password and the new one, and changing it signs out every other session you have open. Next to it is Sign out. A gold GM tag appears there if you are the Game Master. A session lasts seven days, then you sign in again.

“too many failed attempts — try again later”

Eight wrong passwords within ten minutes — on one account, or from one network address — lock sign-in for the rest of those ten minutes. The message means exactly that, not that your password is wrong. Wait, then try once, carefully.

Which role do I need?

To create your own projects and run them end to end you need leader or GM. A member can only see and work inside projects someone invited them to. Roles are set by a GM in Settings › People. Section 16 has the full table.

5 · A tour of the screen

The menu, on every page

On a computer the menu sits on the left; on a phone it opens from the button at the top left. It has three main entries, two for the workspace, and the rest at the bottom:

  • Search or jump to… (or ⌘K / Ctrl K) — type part of a page or project name and press Enter.
  • Home — what needs you, and your projects.
  • Inbox — everything that waits for a person, with a counter. Only things nothing moves past without you are counted: a task whose verdict is yours, a project whose work nobody can take, an interview waiting for your answer.
  • Projects — every project, with filters and a search box.
  • Agents & machines — the assistant, the machines agents run on, the agents and people who take tasks (section 7).
  • Insights — which agent to trust with what, and what finished work costs.
  • Help — this guide. Signed out, it is the only entry, next to Sign in.
  • Settings — the theme, your account, the skills list, and for the owner the people of the site.
  • Light theme / Dark theme — CodeRealm opens dark; the light theme is the readable one outdoors. The choice is remembered in that browser.
  • Your name, with a key button to change your password and a button to sign out.

Home

It refreshes itself every thirty seconds. From top to bottom:

  • A note when agents are paused because a machine’s Claude usage window is spent, with the minutes until they resume by themselves. Nothing is lost and nothing is asked of you.
  • Needs you. The things waiting for a person, oldest first, each with one button: a task waiting for your verdict (Check), a project whose ready work no agent can take — the skill is missing or not deep enough (Choose a fix, section 17), a project whose agents sit on a machine that is offline (See machines), a pipeline silent for fifteen minutes with work queued, and an interview waiting for your answer. Five are shown; the rest are in Inbox.
  • Projects. One line per project: its name and key, how many tasks are accepted out of how many, and its state in words — Stuck · needs you and Waiting for your check in amber, Building, Done, Paused. Filter by Active, Paused or Done. New project starts the interview with the assistant; Create manually makes an empty project for people who already have a specification to import. Both are shown to leaders and the owner only.
  • Agents at work, folded: every task an agent holds right now, and who holds it.

A site with no projects shows a short Get started list instead: connect a computer, describe your first project, answer when you are asked.

Home: Needs you with one task waiting for a check, and the project list
Home on a small site. One thing needs you — a task whose verdict is yours — and the one project says so in amber, with how many of its tasks are accepted.

Inbox

Two lists. Needs you is the same list as on Home, with the selected item opened on the right: why it waits, and buttons to open the task or the project. Updates is everything the platform reports that needs no action from you — a machine that stopped answering, a runner that refused an update, a background run that failed, what the platform repaired by itself, and every verdict passed on work lately. Mark all as seen clears the count. A fault that keeps happening shows a count instead of repeating.

Inbox: the Needs you list with the selected item open beside it
The Inbox with one item open: why it waits, in the platform’s own words, and the way to it.

Create manually, in detail

A small form: Key (a short code, forced to capitals, and permanent — it is the prefix of every task number, like PHOTO-T012), Name, Description, then Create. The project is empty: no artifacts, no tasks, no repository yet. Your next stop is Specification › Import.

Inside a project

Under the project’s name, key and state, seven tabs. Three of them hold a second row of views. Section 7 covers each:

TabWhat it is for
OverviewWhere the project stands — specification, build, check — the one next step that waits for you, the tasks ready to start, and the spend and trust numbers.
TasksThe board. Where the work actually happens. Also the budget, the trust numbers and the specification gate. Empty columns are hidden; a long column shows its first twelve cards.
SpecificationRequirements, user stories, test cases, all artifacts (history, baselines, links), Traceability — how requirements, tests and tasks connect — the project’s documents, and Import, to load an existing specification.
DesignThe approved design — inventory, tokens, every rendered picture, the prototype — and the Designer’s reviews of the build.
CodeRepository — the code the agents wrote: branches, files, commits, differences. Run it — start the product and look at it running.
ActivityLog — every event that has ever happened in this project. Bugs — defects found after acceptance, and the Golden User.
SettingsProject — the gates, the commands, the budget, the environment, and deleting the project. Team — who works on this project, and whether they are enough.

The address remembers the tab, so a link can open a project straight on its tasks, or on one task.

A project's Overview: stages, your next step, tasks ready to start, and the numbers
A project opens here. The three bars say how far the specification, the build and the checks are; Your next step is the one thing in this project that waits for you; below, what is ready to start, and on the right what it has cost and how far its reviews can be trusted.

6 · Your first project, step by step

Read this section once through before doing it. The whole run, for something small, is an evening of your attention spread over a few hours of the platform working.

1

Start the interview

New project on Home or Projects. Type what you want — or pick one of the examples under What do you want to build? — and press Start. Wait for the grey system line Workdir initialised with spec-kit on host ‘…’ — it takes a few seconds; sending before it appears is retried for you automatically. Later answers go the same way: ⌘↵ on a Mac, Ctrl+Enter elsewhere, or Send.

The chat needs a host that is online

The assistant runs on a machine of yours (section 12). If none of yours is online the button answers none of your hosts is online — connect CodeRealmRunner on your machine (Agents & machines) and try again. A GM uses the server when the server has the claude command; a leader always uses their own machine. A chat stays on the host it was started on for its whole life: if that machine is asleep later, sending a message says host ‘…’ is offline — start CodeRealmRunner there, and the cure is to wake the machine, not to start a new chat.

Opening the page starts clean. If a conversation of yours is still in progress, a line at the top offers it — Continue it; an Inbox item about a waiting conversation opens that one directly. Start over begins a fresh one; Past conversations lists your last fifty with their state, project key, date and first line. Nobody else sees your conversations.

A description that works well says four things: what it does, who uses it, what makes it good, and what it must not do.

A description that works

“A small tool that renames photo files by the date the photo was taken, so my holiday folders sort chronologically. I run it on my own Mac from the terminal, on folders of up to a few thousand photos. It must never overwrite an existing file, and it must be able to show me what it would do before doing it. I do not need a graphical interface.”

A description that wastes an hour

“An app for my business.” Storyteller will get there, but only by asking you thirty questions that a paragraph of yours would have answered.

The first thing Storyteller says back is not a question about your product. It quotes your text and asks whether to hand it to the specification step as written, to replace it, or to have Storyteller write the description for you from what you have said. Answer as written unless you want to change something.

Storyteller can think for several minutes at a time — it is running a full specification pipeline, not typing a reply. Text appears as it is written, marked streaming…. Stop cancels the current turn and keeps everything said so far. Send is greyed while a turn is running and once the chat is finished.

The conversation with the assistant on the New project page
The end of the interview that produced the project in these screenshots. Note what was asked: not “which framework”, but where the date comes from and what happens when two photos share a second. The panel above the message box appears when the specification is finished and the project exists.
2

Answer the interview honestly

The interview is a transport of the tool underneath, not a wrapper around it. Spec-driven development is a chain of steps — draft the specification, clarify it, write the project’s constitution, plan the build, cut it into tasks — and each step takes an input that, at a terminal, its operator would type. Here you are that operator.

So before each step, Storyteller says which one it is about to run, what that step accepts, and what your answer will actually steer. The planning step, for instance, is where the language, the dependencies, the testing framework and the target platform get decided — you write those constraints, or you reply Decide by Storyteller and it writes them in your place. Whatever you write is passed on word for word.

If your opening message is a raw idea rather than a product to build — no clear users, problem or scope — Storyteller first offers to assess the idea with spec-kit's own assess bundle: intake, research, define, shape and decide, ending in a verdict of go, needs clarification or kill. A go turns the shaped concept into the description for the specification; a kill stops with the reason, which is a result, not a failure. You can always skip it and go straight to the specification.

The clarifying step comes back with one numbered batch of questions, each with its options and a recommended answer. Answer by number — plain sentences are fine. There will usually be two or three rounds. Every question it produces reaches you: nothing decides on your behalf which ambiguities are worth your attention.

Three answers you can always give:

  • “Decide by Storyteller.” Storyteller takes the operator’s seat and writes the input itself — the answer a well-informed person would have typed, drawn from what you have already said and from the documents written so far. It quotes that text to you in full before running the step, and the choices behind it go into the specification as explicit assumptions. You are handing over the pen, not skipping the question: the empty answer would leave the choice inside the tool, where nobody can read it back or argue with it.
  • “I do not understand the question.” There is no special button for this; it is an ordinary reply, and Storyteller answers it like one — with the options in plain words and the consequence of each. Asking is a legitimate move, not a failure.
  • “Stop asking and proceed.” Everything still open is recorded as an assumption and the pipeline continues. You are allowed to do this; you are simply choosing to be surprised later rather than now.
Why the interview is worth your patience

Every question you answer here costs you a sentence. The same question answered wrongly by a machine costs a rewrite of a dozen tasks that were built on top of the wrong answer. This is the cheapest moment in the entire project to change your mind — and, as step 5 explains, the only moment the specification itself can still be changed.

3

Approve the design

When clarify has nothing left and the product has a user interface, Storyteller announces the design step and asks for a design brief — mood, references, brand, density, the platform conventions to follow (“macOS”, “Material 3”, “iOS”). The brief steers the look, never the technology. Then the chat belongs to the Designer, a separate role with its own session, until you approve.

The Designer first writes the inventory: every window the product can show — per role, per entity (list, detail, create, edit, delete confirmation), every step of every story, the system windows (sign-in, not found, server error; launch, offline and permission-denied on mobile; main window, preferences and about on desktop) and the implicit ones (dialogs, drawers, menus, toasts, notifications, e-mails) — each with its states: default, loading, empty, error, not allowed and the product’s own. The platform checks it against the specification by machine — a user story no screen serves, a missing system window, a missing default state — and sends gaps back to the Designer before you read anything. You answer about the inventory; then it draws.

The drawing is a self-contained HTML prototype, one page per screen and state, from one set of design tokens. The platform renders every picture — web at phone 390 and desktop 1440 px, Android and iOS at phone and tablet plus a large-text phone, desktop at three window sizes — in light and dark, and checks that each one renders without an error, a network request or horizontal overflow. The Design panel under the chat shows the check, the inventory, the tokens of both themes and the matrix of pictures, with the prototype one click away. Tell the Designer what to change in the chat; Approve design is enabled only while the check is complete and nothing has changed since. Skip design lets a product go on without one.

After approval Storyteller continues with the constitution. The plan maps the design onto its stack and may not restyle it; every task that builds interface names its screens (Screens: S001, S004); one task makes each screen openable for the review (a URL with ?design-state= under DESIGN_REVIEW=1 on the web, a debug deep link on mobile, a --design-screen … --design-shot launch on desktop); and the import is refused while any screen of the design is built by no task.

4

Let it hand over

When the specification, the plan and the task list all exist, a panel appears above the message box: The project is created from this conversation, with Open the project and Start another. In that one moment the platform also:

  • imported every document as artifacts, and linked requirements to the tests that check them;
  • created every task, with its dependencies already wired;
  • put every active executor you own into the project’s party — agents and humans alike. Prune the party (step 6) if that is more than you meant;
  • read the quickstart document and guessed the verify command (how to run the tests) and the run command (how to start the product). The smoke URL is filled in only when the run command names a port. The setup command is not guessed — if your product needs installing before it runs (most do), you fill that field yourself in step 7;
  • listed the tools the project needs on the machine, with install commands written on the assumption of a Mac with Homebrew;
  • committed a starting scaffold and a .gitignore to the repository;
  • ran the arbiter over every task to set its competency, level and oracle;
  • started the specification analysis (section 9). Nothing is dispatched until it answers.

All of that is visible afterwards. Nothing here is a black box.

5

Read what it understood, before any code is written

Open Artifacts. Read the specification and the requirements as if someone else wrote them for you, because someone did. Look especially at the Assumptions — those are the decisions you delegated.

The specification cannot be edited here

Everything the pipeline produced — constitution, spec, plan, requirements, user stories, test cases, and the imported design notes — is read-only from the moment the project exists. Every later check judges against these documents, and a hand-edit would make the judge and the builders disagree. Only notes you add yourself stay editable.

So if something is wrong, your options are, from cheapest to dearest:

  • you have not pressed anything yet and the chat is still open — say it in the chat; the turn is not over until the green banner;
  • one task is built on the wrong understanding — Return — task at fault on that task (step 9), then New Task with the right wording;
  • a whole feature is wrong — start a new Storyteller project with a corrected description. Re-running the specification pipeline on an existing project is not available yet.

Deleting a spec-kit artifact is refused for the same reason as editing it.

What does exist is Re-spec, in Specification › Import: bring the changed spec-kit documents and the platform applies them to the live project — the documents become new versions of themselves with the old text kept, requirements are matched by their codes (new ones added, changed ones updated, vanished ones retired), and tasks are matched by their T-codes: unchanged ones stay exactly as they are, accepted included; a changed task gets the new text, and if it was already accepted it is reopened, because what it delivered was for the old text; new tasks are created and classified; tasks that vanished are deleted when nothing was ever done on them and kept, marked as orphaned, when something was. Requirements change in every real project; this is how they change here.

When you are happy, open Baselines and create one — it pins the current version of every document, so you can always see what has drifted since.

6

Check that somebody can actually do the work

Open Party. The Balance table is the important part: rows are competencies, columns are levels L1–L5, numbers are open tasks. A number in red, or nobody in the coverage column, means no member of the party is skilled enough for those tasks — they will sit in the backlog forever, silently, unless you fix it.

Two fixes: add an executor who has that skill, or raise an existing executor’s level on the Executors page — your own executors are yours to create and skill. While you are here, Remove anyone who should not be on this project — the handover invited every active executor of yours.

Settings › Team with the Balance table
Exactly the situation to catch before pressing anything: packaging shows one L3 task, nobody as coverage and 1 unreachable. That task would have waited forever without a word. The two agents below carry the implementer role; Wren also reviews.
7

Decide how strict the gates are, and how much to spend

Open Settings. These switches decide what has to be true before work is allowed to count as done. The defaults are strict on purpose. Section 7 explains each field; the short version:

  • Verify command — how to run the tests. Guessed from your project; leave it.
  • Setup command — how to install the product in a fresh copy (create a virtual environment, install dependencies). Empty by default. Without it, the smoke gate and RealRun start a product that has never been installed, and fail. Copy it from the project’s quickstart document in Artifacts.
  • Smoke gate + Run command — actually start the product and knock on it. Keep the gate on, and make sure the run command is filled: the switch does nothing while the command is empty.
  • LLM review gate — a second model reads changes before they are accepted. Keep on. Section 8 says which model reads what.
  • Specification gate — before the first task goes out, the spec, the plan and the task list are read against each other. A critical finding holds dispatch until you look. Keep on: this is the only check that runs while fixing anything is still free.
  • Convergence — when everything is accepted, the code is compared against the specification and anything missing comes back as new tasks. Keep on.
  • Golden User — once the project has converged, an agent installs your product from its own README and tries to use it. Keep on.
  • Auto-dispatch — when a task is accepted, the tasks it was blocking start automatically, and idle executors are refilled once a minute. On means the project runs by itself; off means you hand out every piece by hand.
  • Budget, USD — a cap on what the model runs may cost. 0 means no cap. Set one: it is the only brake if something loops. Twenty dollars is plenty for a small project. Section 10.
Press Save

Nothing on this tab is applied until you press Save at the bottom of the form and see Saved. A switch you flipped and did not save is still in its old position.

Settings › Project with the gate fields, the budget and the environment
The middle of the tab: the last gates, the budget with what is spent so far, the Golden User switch and Save; below them Targets, Components and the start of the Environment list, where a missing tool shows its install command. Every label says in one line what the switch does and what turning it off costs — the fields are meant to be read, not configured from memory.
8

Let it run

Open Tasks. If an amber banner reports specification findings, read them first (section 7, Tasks). Then press Dispatch all. Work starts flowing across the board left to right:

ColumnWhat it means for you
BacklogExists, not released yet.
ReadyReleased, waiting for someone free and qualified whose host is online.
AssignedHas an owner. An agent picks it up within about ten seconds.
In ProgressBeing worked on right now.
VerifyingSubmitted. Tests, review, smoke and merge are running — or it is waiting for you.
AcceptedDone, checked and merged into main.
RejectedSent back. Reopen puts it in Backlog; with Auto-dispatch on it is released again at once.

A dimmed card with a padlock is waiting for another task; hovering names the blocker. You can close the tab — the platform keeps working, and picks up where it stopped even if the server is restarted.

Do not be surprised to see three agents in the party and one card in progress. Two tasks that name the same file never run at the same time — the second waits, with a dispatch_wait event in the Log saying which task it waits for. On a project where every task touches one file, work is a queue, and the time it takes is the sum of the tasks.

The task board with all seven columns in use
The board mid-run. Three cards in Ready carry a padlock and the name of the task they wait for. Each card shows its code, priority, level and class, and who holds it — a robot icon for an agent, a person for a human. The line above the board carries the counts, the trust numbers and the money spent.
9

Answer when you are called

Most tasks accept themselves. When one genuinely needs you, it appears in the Needs you list on the Home page, and opening it shows an amber banner Waiting for your decision with the reason. A blue banner instead means the machinery is still working and you can walk away.

The verdict buttons appear only under the amber banner — while the blue one says the machinery is still checking, there is nothing for you to decide yet, and a verdict given during a running check would race it. Your buttons, and when to press which:

ButtonPress it when
AcceptYou are satisfied the task is done. The work is merged into main and XP is awarded. Greyed out until something green is on record — see Verify passed. Refused if the merge conflicts; then Reject with a note to redo on current main.
Verify passedYou checked something by hand and it is fine. The note you type is kept. For a task a person submitted this is mandatory before Accept, because no machine ran anything.
Verify failedYou checked and it is not fine. This is not a mere note: the task goes straight back to the executor as in progress, and they are charged a quarter of the reward.
RejectThe work is wrong. The executor is charged half the reward and the task goes back to the queue. Available while the task is assigned or in progress too, not only when it waits.
Return — task at faultThe work was fine but the task itself was impossible or contradictory. Nobody is charged and any earlier charge on this task is refunded. Use this rather than Reject when the instructions were the problem.
Stop runYou want the current attempt abandoned with no blame — wrong moment, wrong approach, changed your mind. The agent's process is killed and the task returns to Ready. Earlier charges are not refunded. With Auto-dispatch on it is handed out again within a minute; turn the switch off first if you mean “stop for good”.
ReopenA rejected task should be tried again. You may add dependencies at the same time.
GM assign: nameYou want this exact executor to do it. Skips the qualification, level and load checks. Only active, non-GM party members are listed.
DeleteThe task should not exist. Gone for good, after a confirmation. Not offered while an agent holds it — Stop run first.

Who may press them: Accept, Verify and Reject — a GM, the project’s owner, or a party member with the reviewer role, and never on a task they hold themselves. Stop run, Reopen, Delete, GM assign and dependencies — a GM or the owner. The buttons are shown to everyone; pressing one you may not press answers with a red 403.

Each task also carries an acceptance report — the button Acceptance report — how this task was verified — listing what ran, what the reviewer said, and what was merged. Read it before accepting something you are unsure about.

A task open, waiting for your decision
A task that genuinely needs you. The amber banner says why in plain words — no machine check can judge whether a README reads clearly — and every button from the table above is on the row beneath it. Below: what was run, and everything that has happened to this task.
10

Look at the real thing

Open RealRun and press Start. The platform takes the accepted code from main, runs the setup command, and starts it with your project’s own documented run command. A web product appears in a frame; a command-line product prints its output instead.

This is the moment to stop trusting the board and use your own eyes. Show log gives you everything the product printed while starting. The instance stops by itself after twenty minutes with nobody looking.

Code › Run it showing the running product inside the platform
The product itself, running from the accepted code — the commit is named on the right. Above it the platform says what to expect, and here it is honest: a tool is missing on the machine and only five of fourteen tasks are accepted, so it warns that the product may not work yet. Below, the thing the tasks built, started the way its own documentation says to start it.
11

Let it converge, then read the bugs

When every task is accepted, two things happen by themselves, in order. First Convergence: the code is assessed against the specification, and anything asked for but never built comes back as new tasks (priority P1, level L2, in a phase called Convergence N), classified and dispatched at once. Its report lands in Artifacts as Convergence — commit. When it reports converged for the current main, the Golden User runs: an agent instructed to behave like a newcomer — clone the project, follow the README, install it, run it on real data, and compare what happens against your requirements, not against the code.

Anything that does not match is filed on Bugs with a reproduction. From there: Create fix task sends one back into the pipeline, or Send all to tasks sends every open one. A fix is only accepted with a test that catches the defect — so the same bug cannot come back unnoticed.

The button Send in the Golden User in Activity › Bugs forces a run right now — even if convergence has not finished and even if this commit was already examined. It costs a run of the strongest model; press it when you want a fresh outside look, not as a way to skip convergence.

Activity › Bugs with defects filed by the Golden User
Two defects: one the Golden User found by using the product, one a person reported. Colour is severity, the left badge is where the defect stands between new and verified.
Why this step exists

A real project once passed 122 tasks with every gate green and still did not do the one thing it was for. Every gate reads code; none of them had ever used the product. That is what the Golden User is for, and it is why the last word belongs to someone who only looks at the outside.

7 · Every screen, in detail

Specification — the documents

The project’s documents, as a tree. Pick one to read it; markdown is rendered. Each carries a status badge — draft, approved or obsolete — which is a label for people, nothing in the pipeline reads it. Documents that came out of the specification pipeline — the spec, the plan, requirements, stories, test cases, the constitution, and imported design notes — are read-only: their Edit button is absent and the title says why. Notes you add yourself stay editable. Reports the platform writes (acceptance reports, the specification analysis, convergence and Golden User reports) appear here too.

  • + New Artifact — status, parent, title and body of a note. That is the only type you can create by hand: every spec-kit type would be read-only the moment it was saved, and nothing would link it to any task.
  • Delete — on notes you wrote. Spec-kit artifacts have no Delete: removing one is an edit of the specification too, and the platform refuses it the same way.
  • Traceability — the links to other artifacts. + link asks for a direction (this → or → this), a type and a target found by title. Types: derives (a story comes from a requirement), implements (a task or note realises it), verifies (a test case checks it), relates (anything else). Links may not point at themselves, be duplicated, or cross into another project. Hover a link for its ✕.
  • History — every saved version, with Revert to this version on any version but the latest. A new version is stored on every change; identical saves do not create noise. Reverting is for the project’s GM or leader.
  • Baselines — pin the current version of every artifact under a name (for example v1.0-spec-freeze). Opening a baseline later shows how many documents changed since, and which are changed or deleted. Creating one is for the project’s GM or leader; the ✕ next to a baseline removes it without asking. This is how you answer “what did we agree to, exactly?”.
Specification › Requirements with REQ-1 open and its traceability links
A requirement, its text, and the Traceability panel showing the test case that verifies it. History and Baselines sit on the same row.

Specification › Traceability

A picture of the project shaped like a V: what was asked for on the way down (specification, user stories, requirements, plan), what checks it on the way up (acceptance count, test cases), and the tasks along the bottom with four counters — pending, in work, verifying, accepted. Everything is clickable — a requirement opens the artifact, a task opens the task. The bottom row shows twelve tasks and says +N more in Tasks for the rest. Use it to find requirements nothing verifies.

Specification › Traceability linking requirements, test cases and tasks
Specification and requirements on the left, the checks that answer them on the right, tasks at the bottom. The dotted lines are real links — REQ-5 has none reaching it, which is the question the picture is there to raise.

Tasks

Three views of the same tasks. List, the one that opens, groups them top-down by what is happening — waiting for a check, in progress, ready, backlog, accepted, rejected — and hides an empty group; long groups show their first rows and a button for the rest. Board is the same as columns, Table a sortable table with checkboxes for changing many tasks at once. A click on any task opens it.

The Tasks tab in its List view, grouped by what is happening
The List view mid-run: one task waits for a check, two are being built, four are ready to start.

The line above the tasks reads, for example, 64 tasks · 58 accepted · 2 waiting for a check · reviews overturned 1/25 · came back 3/58 · $41.20 spent of $60. The two fractions are the trust numbers explained in section 10.

Banners that can sit above the board:

  • Specification findings, in amber, with the analysis text and two buttons: Analyse again re-runs the check after you changed something, and Start anyway… asks for a reason of at least ten characters and lifts the hold. After a waiver a grey line stays: Specification findings waived by name: reason.
  • Budget spent — $X of $Y. Nothing more is dispatched until the cap is raised in Settings. Work in flight finishes.

Board shows the seven columns (on a phone: chips, one column at a time, the first non-empty one by default). Table shows everything at once with a checkbox per row and one to select all; the bar N selected · Class · Level · Priority · Apply · Clear changes the selected tasks in one go, leaving any field set to keep alone. Top-right buttons:

  • Dispatch all — hand out everything that can currently be handed out. Greyed out, with the reason on hover, while the specification gate or the budget holds the project.
  • Classify — run the arbiter over the tasks again to set competency, level and oracle. It runs in the background with a counter (Classifying 12/122…) and ends with a summary: how many were classified, levels, competencies, New competencies created and — the line that matters — No active executor has a skill in: … These tasks will not dispatch until you grant skills on the Agents & machines page. Note that a re-run overwrites the oracle too, including a requires judgement you set by hand.
  • New Task — add work by hand, with title, description, class, level, priority and oracle. Create stays grey until there is a title. A task with class (none) is never dispatched: give it a class, or run Classify.

Each card shows its code, priority, level, class in short form (auto, agent → you, judged for the three oracles), who holds it, and — once it has cost anything — a dollar amount.

Opening a task gives you its full record:

  • the description, and its phase from the task list;
  • Class / Level / Priority / Oracle as drop-downs that apply the moment you change them, no Save. Once an oracle has been lowered from requires judgement it cannot be raised back from here;
  • Depends on — chips with ✓ for accepted blockers and … for open ones, a ✕ to remove, and + add dependency… listing this project’s tasks. Cycles, self-dependencies and other projects are refused;
  • the branch, the blue or amber banner from step 9, and the button row;
  • Mark ready — releases a Backlog task without dispatching it. Shown only while Auto-dispatch is off; with it on, Dispatch is the button;
  • for a human executor: Start, then a field for the branch or commit they worked on and Submit;
  • the acceptance report, Verification runs (newest first, each passed / failed / not run with its kind — local for the test command, smoke, manual), and History, the complete event trail with the data each event carried. Money spent on this task is shown here as model spend on this task.

The oracle deserves a moment. It answers “who decides this is done”:

OracleOn the cardMeaning
automatedautoA machine check settles it. These tasks can be accepted without you.
agent does it, human acceptsagent → youAn agent produces the result, then it waits for your Accept.
requires judgementjudgedNo machine check can decide this. It waits for a person to do it and a person to judge it.

A requires judgement task offers two waivers instead of the drop-down: let an agent do it… (the agent produces the result, you still accept it) and fully automate… (a machine check is declared sufficient). Both demand a written reason of at least ten characters, and the reason is kept in the record and printed in the acceptance report. That is deliberate: downgrading a check is allowed, doing it invisibly is not. The one exception is Classify, which re-decides every oracle by itself — run it before you set oracles by hand, not after.

Activity › Bugs

A defect found after acceptance belongs here, not in a new task — here it keeps its reproduction, its link to the requirement it breaks, and the proof that it is gone. The header counts N open · M total; each card is BUG-id, its state, its severity and, once one exists, its fix task.

Report a defect asks for what is wrong, detail, severity (low to critical), where it was found (a commit, a version, a run), how to reproduce it, what you expected, and what actually happened. A bug moves new → triaged → fixing → resolved → verified, or is closed as wontfix with a reason. The buttons follow the state:

Every reported bug is assessed right away by spec-kit's bug-assess skill, on the project owner's host, against a fresh checkout of main: the bug's detail shows the suspected root cause, the files, a proposed remediation and a suggested severity with its confidence, and the full assessment under a fold. It is advice, not a verdict — triage still sets the severity — and it is handed to the fix task so the executor starts from it. assess again repeats it after main moved or when a run failed.

StateButtons
newTriage (confirm it is worth fixing) · Won't fix (asks why) · Create fix task
triagedCreate fix task · Won't fix
fixing / resolvedGone — verify (asks what you actually checked; the default says “checked by hand on the real thing”) · Still reproduces

Create fix task makes a P1 task tied to the bug; Send all to tasks appears when there are new or triaged bugs and does it for every one, reporting any it skipped. The fix task is held to the proof rule in section 9. At the bottom of a bug, the Trail lists every state change with who made it and their note.

Code › Repository

The actual code. A branch selector (main by default), Files to walk the tree with breadcrumbs, file sizes and a viewer (binary files are named, very large ones truncated), and Commits listing the last sixty with what each changed — click one for its diff, ← commits to go back. You do not need to understand any of it — but it is here, it is yours, and it is not a rendering of something that lives elsewhere. A project created with Create manually has no repository until its first agent task runs; the tab says so.

Code › Repository showing the file tree and a file
The repository the agents wrote into. Files walks the tree at any branch; Commits lists the history and what each change touched.

Code › Run it

Start does not exist until the product is expected to show something. When tasks are imported the Storyteller names the task after whose acceptance a person can first use the product — usually the end of the MVP phase — and the tab says which task that is and where it stands. Ask the Storyteller again re-judges it; the owner can also set it in the project's settings. Once that task is accepted and the product still does not work,Report: RealRun does not work files a critical bug with everything the platform saw and creates its fix as an urgent task: nothing else is dispatched while that fix waits, and the next executor to finish — by acceptance or rejection — takes it. Running work is never interrupted.

Pressing Start then answers a question the frame cannot: should it work? The platform says whether the product is expected to work at this point of the project, and if it should but does not, why. It reads the run itself (did the process start, did anything answer on the port, does the page name files the server does not have), the host's environment (are the project's tools installed where it runs) and the project's progress by phase — a product whose MVP phase has no accepted task is expected to show nothing, and the panel says so rather than leaving you to guess. Openphases under it for the accepted count of each.

Start / Stop / Reload, an open in a tab link, and Show log. It runs the accepted code from main, at the commit shown in the corner, and reports up 3m 12s while alive. Finished cleanly (exit 0) is a success for a tool that does its job and stops; a red exit code means it fell over and the log says why. If the project has no run command yet, this tab tells you so and points at Settings. Starting needs the owner or GM; looking does not.

From any machine other than the server itself, the product is shown through a proxy and the tab says proxied — deep links inside the app may break: a web product that jumps to an absolute address inside itself will lose the frame. Everything else works. From a phone this is always the case.

Settings › Team

The Balance table (see step 6) with a Party coverage column naming who covers each competency and an Unreachable count — open tasks above the best implementer’s level; then the current party as cards (kind, inactive if so, queue 1/2 against the WIP limit, skills with XP, Remove), and the executors available to Add. Each party member can hold two roles, toggled on the card:

  • implementer — receives dispatched tasks. Without it, nothing is ever handed to them.
  • reviewer — may verify, accept or reject other people’s tasks in this project. Never their own. A human needs to be linked to their account for this (Agents & machines → Edit → Linked user); until then the button is greyed with the reason. A local-model agent cannot take this role; a GM executor shows no role buttons at all.

Activity › Log

Every event in the project, newest first, loaded a hundred at a time (Load more). Filter by type with the chips (each shows its count; several can be on at once), by task number, and by free text in the event data; Clear resets. When you want to know why something happened three hours ago, this is where the answer is. Every submission and every review also carries what it cost — tokens read, written and served from cache, and dollars — so the log answers “where did the budget go” as well as “what happened”. Section 19 lists the event types worth knowing.

Activity › Log with the project's event history
Every dispatch, submission, test run, review, penalty and merge, in order, with the data each event carried.

Specification › Import

For projects that already have a specification. Four tabs — constitution.md, spec.md, plan.md, tasks.md — each taking a pasted text or an uploaded .md/.txt file (a dot marks the filled ones). Under Design docs, + Files adds any number of supporting documents, guessing their place from the file name (research, data model, quickstart, contracts, checklists), and + Paste takes a path and text. Import becomes active once anything is filled and ends with Imported: N artifacts, N links, N tasks. Everything becomes artifacts, links and tasks exactly as if Storyteller had produced them — including the specification analysis, which starts at once and holds dispatch until it answers.

Settings › Project

Every field is applied by Save at the bottom; the labels in the interface are the long versions of this table.

FieldWhat it doesAdvice
Key / Name / DescriptionIdentity of the project. The key is the short code in front of every task.Set once, leave alone.
Statusactive, frozen or done. Only an active project is dispatched at all — not by the pulse, not by the cascade after an acceptance, not by Dispatch all.Freeze a project to pause it without deleting it: nothing new goes out, and runs already under way finish and are judged as usual. done is a label.
Repo pathWhere the working copy lives on the server.Created automatically. Leave empty.
Verify commandThe command that runs your tests. Exit code 0 means passed.Guessed from the project, or detected from the repository once tests exist. Change only if you know why.
Auto-dispatchAccepting a task automatically releases the tasks it was blocking, and once a minute idle executors are refilled.On, unless you want to hand out every piece yourself.
LLM review gateBefore auto-acceptance a second model reviews the change. Which model depends on the size of the change and the level of the task — section 8.On.
Smoke gateBefore auto-acceptance the product is started with its own documented command. With a smoke URL it is knocked on; without one the command is run to completion and judged by its exit code.On — and fill the run command, or the gate is silently idle.
Run commandThe start command from your quickstart, with {port} where a port belongs; a free port is chosen per run and also handed over as the PORT variable.Guessed. Verify it once in Code › Run it.
Setup commandOne-time preparation of a fresh copy: virtual environment, dependencies. Runs before the smoke gate and before RealRun.Not guessed. Copy it from the quickstart; without it most products fail to start.
Smoke URLThe address knocked on until it answers. Any answer counts, even a 404 — the question is whether the server came up.Filled in when the run command names a port. Leave empty for a command-line tool.
Specification gateBefore the first dispatch, spec-kit reads the spec, plan and tasks against each other. A critical finding holds dispatch until you look. Nothing dispatches while the analysis is still running either.On. The findings, Analyse again and Start anyway… appear on the Tasks tab.
ConvergenceWhen every task is accepted, the code is assessed against the specification and whatever was never built comes back as new tasks. Repeats until it reports converged; three rounds without converging stop, file a “Convergence stopped” report and call you.On. The Golden User waits for its verdict.
Budget, USDA cap on the model cost of this project; the label shows what is spent so far. 0 means no cap. At the cap the dispatcher pauses and says so on the Tasks tab; runs already going finish.Set one. Section 10.
Golden UserOnce the project has converged, an agent installs and uses the product and files what it finds.On.

Below the fields, Environment lists the tools the project needs on the machine its agents run on — your host. The line Checked and installed on names that host (a drop-down when you have several). Each tool shows its state there — present, missing, installing, install failed, unknown — with Check and, where possible, Install and its Log. Both run on that host, through your runner, as your user: nothing is installed on the server. The install command was written by a model from the project’s documents, so it is shown on the card and again in a confirmation before anything runs. The same tool can be present on one leader’s laptop and missing on another’s; each sees their own answer. + Tool adds one by hand (key, name, check command, install command, manual steps) to the shared list; ✕ unlinks it from this project. Extract from docs rebuilds the list from the plan and quickstart. Generate scaffold commits a portable editor workspace and a setup document to the repository. The list refreshes every five seconds.

At the bottom, the danger zone. Deleting a project removes its artifacts, tasks and events from the database and requires typing the project key to confirm. It is refused while an agent is still working on a task of this project — Stop run first. The git repository on disk is left untouched, and your Storyteller chats stay in History — your code survives even this.

Agents & machines

The registry of workers — yours. A leader sees and runs their own executors: creates them, gives them skills, puts them on their own hosts, deletes them. Another leader’s executors do not appear at all. A GM sees everyone’s. A member only looks.

  • Each card: a robot or a person, the kind, GM if it never receives tasks, on hostname — with (server) when that host is the server itself — in red when the host is offline, inactive, WIP limit N · queue M, one tile per competency showing the level and the XP behind it (click a tile to change it), and the buttons Edit, + Skill, Delete.
  • + New Executor / Edit — the form: Name; Kind (human or agent); WIP limit, how many tasks it may hold at once (default 2); GM (never receives tasks) — with it on, the WIP limit disappears, there is nothing to limit; Active; for a human, Linked user, which ties the executor to an account — without it the reviewer role cannot be given; for an agent, Host (a drop-down of the registered machines, opening on — pick a host — until you choose one; a host that is offline, or the server when its session is not yours, is listed greyed with the reason; with none the form says No host registered yet — add one above). An agent cannot be saved without a host: it runs on a machine, and a server that only serves the site is not one. Then either CLI and Model for a cloud agent, or, for a local model, Context window (never below 32768) and Unload after idle in seconds (default 1800). CLI is the program on that host the agent drives: claude, or qwen where Qwen Code is signed in there.Model is a drop-down filled from the chosen host: for claude the CLI’s aliases (opus, sonnet, haiku) and the ids of the current family, for qwen the models that host’s own Qwen Code settings name (the runner reports the ids and nothing else from that file); other id… opens a field for one not listed. With claude the first row picks the model by task level (L1 haiku, L2–3 sonnet, L4–5 opus); with qwen it leaves the CLI its own default. A qwen agent implements and never reviews — switching an executor to qwen takes the reviewer role off it in every party it sits in. Moving an agent to another host is refused while it has a run in flight.
  • + Skill — competency, level (a GM correction), XP, and Remove skill. This is what makes an executor eligible for tasks.
  • Delete — type DELETE to confirm. Refused while the executor holds an assigned, in-progress or verifying task. Accepted work stays in the history.
  • Your Storyteller panel — the host your Storyteller sits on and the model it speaks with. Host: automatic (the server if its session is yours, else the runner heard from last) or one of your machines; a machine that cannot take the seat right now is listed with the reason (offline, claude not signed in, spec-kit not installed, a probe plugged in), and a chosen machine that loses the seat is stood in for by the automatic choice until it can take it again — the panel says where the seat actually is. Model: the CLI’s own default or one from the same list as an executor’s. Judging runs of your projects follow the same seat.
  • Hosts and Local models panels — sections 12 and 13.
Agents & machines: your assistant, the machines, local models and the agents and people with their skills
The page from the top: where your assistant runs and which model it speaks with; the machines, each saying in one line whether it is ready and why not; the local models found on them; and below, one row per agent or person with the skills it is trusted with and the level of each.
The Edit agent or person dialog for an agent: machine, CLI and a Model drop-down filled from that machine
An agent’s form. The model is chosen from what the selected CLI on the selected machine offers, not typed from memory.

Settings › Skills

The list of skill kinds: key, name, description, each marked global or private. Global ones are the site’s defaults, kept by the GM. Private ones belong to the leader who made them:+ New private (the key in lower-case with dashes, like avr-firmware) adds one that only you see and only your executors and projects use — another leader cannot see it and a newcomer’s registration form does not offer it. Keys are unique across the site: if a global one already has the key you want, use the global one. Edit and Delete appear on what is yours. When the arbiter invents a competency for one of your projects, it lands in your private list. Delete is refused while any executor holds the skill or any task carries the class, naming how many — deleting would strip the skill from everyone and leave those tasks classless. When the arbiter meets work that fits no existing competency it creates one here on the spot — as a real entry, not a proposal — and the Classify summary names it. Look at this page after a Classify run: a competency nobody holds is a task nobody will ever get.

Settings › People (owner only)

  • Each row: username, e-mail if known, role, deactivated, (you). The role drop-down applies immediately. Reset password asks for a new one of ten characters or more and signs that person out everywhere. Deactivate / Activate — the second is how a new registration is approved. Deactivating also deactivates the person’s executor, so no task can reach them. The last active GM cannot be demoted or deactivated; their controls are greyed out.
  • Disable registration — the sign-in page loses its Register tab. A completely empty site still lets the first person register, so a fresh server can get its GM.
  • Mail — an SMTP server (host, port, user, password, from-address, encryption: STARTTLS on 587, SSL on 465, or none). Save and send a test asks for an address and reports sent to … or mail failed: …. Without mail the platform still works; it just cannot send account details.
  • + Add user — an e-mail and a role. The login is the part before the @ (with a digit added if taken), the password is twelve random characters, and the account is active at once with a human executor attached. The result is shown once — Site / Login / Password / Role — with an amber note if it could not be e-mailed. Copy it before closing.

8 · What happens after an agent submits

This is the automatic GM — the part of the platform that judges work while you sleep. Knowing its steps is what lets you read an acceptance report or a task’s History without guessing.

The sequence

An agent is handed the task
It gets the whole technical plan, the documents the task names, the previous rejection reasons if any, and a fresh copy of the repository on its own branch. It is told to write tests for code (not for a documentation deliverable), and — when the project has no verify command yet — to run the whole suite itself once, since nobody will after it. It has one hour.
It works, then hands in
Everything it changed is committed. If it found the task impossible as written it may leave a BLOCKED.md instead — then the task goes straight to the Needs you list without penalty, with the agent's reason in the amber banner. A rerun would only hear the same thing; a person has to change the task.
Tests run
The verify command, up to thirty minutes. Red → sent back, −25 % XP (bounced_back). No test runner yet, or an empty suite → recorded as not run (formal), and judging continues.
Smoke gate
With a run command: setup, then start on a free port. Knocked on for sixty seconds if there is a URL; otherwise run to the end (up to fifteen minutes) and judged by exit code. Failure → sent back.
Scope check
Files in the diff are compared with the files the task text names. Extra files are put to the reviewer as a question, not punished — unless the review gate is off, in which case the parser's word is final and −25 % applies.
Empty change?
An agent that says “already done” and changes nothing is not believed: current main is audited against the task's acceptance criteria instead (conformance). Only a criterion that is not met counts as a gap; remarks about things that could be better are kept in the report and do not send the task back.
Review
A second model reads the diff — which one, see the table below. It is told what the platform already settled: test files are always in scope, a documentation task (“agent does it, human accepts”) owes no tests. Verdicts: accept, accept with blocking findings, reject. The last two → sent back with the findings, −50 % XP.
Regression proof (fix tasks only)
The new test files are laid over a clean main and the tests are run: they must fail there. A fix whose test passes without the fix is sent back. A project with no verify command cannot run the proof at all — that fix goes to the Needs you list for a person, without a penalty.
Merge
The branch is merged into main. A conflict is retried with a strategy that keeps both sides and then the tests are run; green → merged and noted as “union”; red or no tests → rolled back and sent back to be redone on current main.
Accepted
XP is awarded, an acceptance report is written, the branch is deleted, and every task that was waiting on this one is released.

Which model reviews

The changeReviewer
Only documentation files (.md, .txt, .rst, .adoc), 80 changed lines or fewerNobody. The review is recorded as skipped.
60 changed lines or fewer on an L1 or L2 taskThe cheap reviewer (Sonnet).
First attempt on an L1–L3 taskSonnet, whatever the executor's model was — except that a Haiku executor's work is always read by Sonnet or better.
L4–L5, or any attempt after a rejectionOne tier above the executor: Haiku → Sonnet → Opus → Fable; Fable → Fable.
A local model's or a qwen agent's workSonnet, always.

The LLM review gate switch turns all of this on or off; there is no finer setting. Judging a change costs about as much as making a trivial one, which is why the cheapest cases are read cheaply or not at all.

Sent back, and how often

  • Every sent back above is an automatic rejection: the reason is written into the task, the executor is charged, the task returns to Ready, and — with Auto-dispatch on — it is handed out again at once, with the rejection reasons in the new prompt.
  • Each run leaves a handover for the next one. An agent finishes by writing at most a dozen lines about the repository — where things live, how the tests are really run, what is already installed, what tripped it up — and the next agent to work in that project reads them before it starts. It is a shortcut, not evidence: the note says so, and an agent that relies on it is told to check it. Every delivering run rewrites it.
  • An agent is also told what it keeps getting wrong. Beside the reasons this particular task came back, its prompt carries at most three lines drawn from that executor’s own record across the board — scope it was charged for, rejections, red verifications, runs that changed nothing — each written as a check to run before submitting rather than as history. An executor with a clean record is told nothing.
  • Three rejections, or three red test runs, and the automatic GM stops: the task goes to the Needs you list with auto_gm_gave_up and the reason. Three consecutive platform errors (a crashed run, a timeout) do the same, without charging anyone.
  • The same objection twice in a row is not a strike: it means the task’s own rules cannot all be satisfied at once. The automatic GM stops immediately, refunds every charge on the task, and files rule_deadlock. A repeated merge conflict does not count — that is two tasks racing for a file, cured by redoing on current main.

Things that pause the whole pipeline

  • A host’s usage window is spent. Recognised from the run’s output (usage limit, rate limit, 429, quota, overloaded). The task returns to the queue without penalty (rate_limited), runs on that host pause for ten minutes, the dashboard shows the blue banner naming it, and the pulse picks the work up again afterwards. Agents on other hosts are not affected.
  • The budget is reached. Nothing new is dispatched; runs in flight finish. Section 10.
  • The project is frozen. Nothing is dispatched at all; the task's Log says so.

The pulse

Every ten seconds the platform picks up assigned tasks. Once a minute it hands out every unblocked task in every active project with Auto-dispatch on, to every eligible executor with room — this is what revives a project after a restart, a rate limit or a re-classification without anyone pressing anything. Every five minutes it checks whether a project has earned convergence or a Golden User run. Eligible means: the competency at that level or higher, an implementer in this party, active, below their WIP limit, on a host that is online and whose usage window is not spent, and no file overlap with a task already in flight.

9 · The rules the platform will not bend

When the platform refuses something, it is almost always one of these. They exist because each one was bought with a real failure. Where a rule has an edge, the edge is written here too.

A specification is checked before anyone works to it

Spec, plan and task list are read against each other before the first task is dispatched: requirements nobody turned into work, tasks tracing to no requirement, requirements that contradict each other, promises with no measurable meaning. A critical finding — made by one model and confirmed by a stronger one — holds dispatch until a person either fixes the documents or waives it in writing, with a reason that is kept. Nothing dispatches while that check is still running, either. If the check itself crashes, dispatch is not held: a broken audit is the platform’s fault, not your specification’s. The report lands in Artifacts as Specification analysis.

The specification does not drift

Documents the pipeline produced cannot be edited afterwards. Every check judges against them; a hand-edit would make the judge and the builders disagree. Changing your mind is a new task, a returned task, or a new project — never a quiet edit.

A full board is not a finished product

When every task is accepted, the code is assessed against the specification, and anything that was asked for but never built comes back as new tasks. That repeats until it reports that nothing is left — and that verdict, for the current main, is what finished means. Three rounds that still do not converge stop and call you: at that point the specification is asking for something the work cannot reach, and another round would only say so again.

Tests decide; where there are none, a person does

Every submission runs the project’s test command. If there is no test runner in the project yet, or the suite is empty, the run is recorded as not run rather than quietly counted as a pass — so you can always tell the difference between “checked” and “nobody checked”. And a not run is never accepted by the platform on its own: the reviewer still reads the diff and says what it thinks, but the task then waits in the Needs you list for a person, with that review in front of them. On a new project that is the first few tasks — the foundation — which is exactly where an opinion about a diff is the weakest evidence there is. The way out is the obvious one: make the test runner one of the first tasks.

A product that does not start is not finished

With the smoke gate on and a run command set, the product is started with the exact command its own documentation gives a human, and knocked on. A suite can be green while the application cannot boot; this is the check that notices. Without a run command the switch is idle.

Work stays inside the task it was given

The files a change touches are compared against what the task described. Wandering outside is not an automatic verdict — a task may authorise it in its own words — so it is put to the reviewer as a question, and only charged when confirmed. With the review gate off there is no reviewer to ask, and the parser’s verdict stands.

A second opinion before acceptance

With the review gate on, a second model reads every change that is more than a short piece of documentation. A rejection, or a finding the reviewer marks blocking, sends the work back with the findings; only after three such returns, or a deadlock, is a human called. The table in section 8 says which model reads which change.

A fix is not accepted without proof

A task that fixes a bug must come with a test that fails without the fix and passes with it. A test that passes either way proves nothing and the fix is sent back. Two edges: the proof needs a verify command — a project with none cannot run it, so the fix goes to a person instead of being blamed on the executor; and the proof is part of the automatic path only — a person pressing Accept is trusted to have looked.

Only green work reaches main

Merging happens after the checks, not before. If another task changed the same files first, the platform tries once to keep both sides and runs the tests on the result; if that is green the merge stands and the report says union. If it is red, or there are no tests to ask, the merge is rolled back and the task is sent back to be redone on current main. The platform never guesses that a merge is correct without a test saying so.

Three strikes, and a deadlock is not a strike

The automatic GM may reject and requeue a task three times, then it stops and asks a human. But if it raises the same objection twice in a row, that is not a careless executor — it is a task whose own rules contradict each other. It stops immediately, refunds what was charged, and says so.

Nobody judges their own work

A GM executor never receives tasks. A reviewer may not accept their own. A project owner may not accept a task they hold. The person who did the work is never the person who signs it off.

An empty change is audited, not trusted

If an agent claims a task was already done and produces no change, the platform audits the current code against the task’s criteria instead of taking its word.

Nobody spends anyone else’s subscription

Every run happens on a host, and a host belongs to one account. A project’s runs go to its owner’s hosts. If none is online the work waits; it never switches to another person’s machine.

10 · Money and trust

What a run costs

Every run of a cloud model reports what it cost, in dollars at the model’s list price. The platform keeps that number on the task (model spend on this task, and the dollar figure on its card), adds it up per project ($41.20 spent above the board and on the Settings label), and writes the tokens and dollars into every submission and review event in the Log.

  • The project total counts the runs of executors and their reviews. The arbiter, the specification analysis, convergence, the Golden User and the Storyteller chat are not in it.
  • A local model’s run costs zero, and is recorded as zero.
  • A qwen run’s price is left blank, not guessed: a free quota and a paid key are the same call from here. Its tokens are recorded; the dollars are the account holder’s to know.
  • If the host’s Claude is on a subscription, no invoice for these dollars ever arrives — the subscription pays in usage windows, not money. The figure is still the honest price of the work, and above all of the waste: a task that was rejected twice shows three runs’ worth.

The budget

Settings → Budget, USD. Zero means no cap. When the project’s spend reaches the cap, the dispatcher stops handing out work: the Tasks tab shows Budget spent — $X of $Y, the Log gets one budget_block event, and runs already going are allowed to finish. Raise the number (or set it to zero) and the next pulse continues. Set one on every project: an agent that keeps being sent back is otherwise limited only by the three-strike rule, per task.

Two numbers no vendor shows you

Above the board, next to the counts, sit two fractions. They are there so you can decide how much of this to trust.

NumberWhat it countsHow to read it
reviews overturned X/YOf Y automatic verdicts a person later looked at, X were reversed — an accept turned into a reject, or the other way round.Growing X means the automatic reviewer is wrong about your kind of work. Move more tasks to “agent does it, human accepts”.
came back X/YOf Y accepted tasks, X later came back — a bug was filed against them, convergence found them incomplete, or someone reopened them.Growing X means “accepted” was not the same as “done”. Usually the specification was thin where those tasks were.

11 · Levels, XP and penalties

Every executor holds a level from L1 to L5 in each competency, and is only offered tasks at or below that level. Accepted work earns XP; enough XP raises the level. This is not decoration — it is how the dispatcher decides who is allowed to touch the hard parts.

WhatRule
Reward10 XP × the task level, unless the task sets its own.
Level thresholdsL2 at 100 XP, L3 at 300, L4 at 600, L5 at 1000. Levels are never skipped.
Rejected submission−50% of the task reward. Automatic and human rejections alike.
Tests went red−25%. Also when a person presses Verify failed.
Change left the task's scope−25%, once a reviewer confirms it — or at once when there is no review gate.
FloorA charge is never less than 1 XP, and XP never falls below zero.
DemotionLevels are never lowered automatically. Only a GM demotes, deliberately.
RefundReturn — task at fault, and a deadlock, give back everything charged on that task. Stop run charges nothing but refunds nothing either.
Not chargedA blocked task (BLOCKED.md), a rate limit, a platform error, a merge conflict caused by another task — none of these cost the executor anything.

12 · Hosts and CodeRealmRunner

Every run — an agent implementing a task, the Storyteller drafting a specification, a reviewer reading a diff — happens on a host: a machine with the claude command-line tool signed in. Your own computer becomes one when you install CodeRealmRunner on it, and from then on everything you start on the site is done there, by your own Claude session. Nobody spends anyone else’s account: the runner connects outward to the site, keeps no password, opens no port, and the session never leaves your machine.

Is the server a host?

Only when the claude command is installed and signed in on it — and even then only for the person who set the site up, whose subscription that sign-in is. They can work with no runner at all. Everyone else, a second GM included, needs their own host. If the server has no claude, its row in the Hosts panel shows a grey dot with site only and every run, Storyteller included, needs one of your own hosts online. That row never disappears: it is the site’s own entry, and it is there to say plainly that the site is not a place where work runs.

What you need on your computer

  • A Mac with Apple silicon (M1 or later), a Linux machine (x86_64) or Windows (x86_64). The Linux and Windows builds come from the pipeline; the macOS build is still made on a Mac. No Intel Mac build exists.
  • git. Open Terminal and type git --version; if macOS offers to install the command-line developer tools, accept.
  • The claude command-line tool, signed in. Install it from Anthropic’s documentation (Claude Code), then run claude once and sign in with your Claude account. Check with claude auth status — it must say "loggedIn": true. A Claude subscription (Pro or Max) is what pays for the agents. The runner looks for the tool in the usual places (~/.local/bin, Homebrew, ~/.claude/local).
  • spec-kit, the specification toolkit the Storyteller drives. Install uv first if you do not have it, then spec-kit:
    curl -LsSf https://astral.sh/uv/install.sh | sh
    uv tool install specify-cli
    specify version
    The last line prints a box with a CLI version; that is the check. Without spec-kit a host can still run agents on tasks, but the Storyteller will not start a chat there and the audits (specification analysis, convergence) will not run there — the platform never substitutes its own copy for the one on the host.
  • Qwen Code — optional, a second CLI a host can offer. Install it with npm install -g @qwen-code/qwen-code, run qwen once and finish its sign-in; the host then reports qwen signed in and its executors can be set to that CLI. An agent on qwen develops only — every verdict in the pipeline stays on claude, because the gates are calibrated on its readers. The platform runs it in safe mode with a reduced tool set: your own QWEN.md, hooks, extensions, skills and MCP servers take no part in a pipeline run, and the agent gets the six tools it works with. That is deliberate — the task text is the whole contract — and it is also what a run costs: measured on qwen 0.23.2, the CLI as it comes carries about 34,000 tokens of system prompt and tool schemas into every turn, and about 10,000 this way.
  • LM Studio — optional, only for local models (section 13).

Connecting, step by step

1

Open the dialog and download the runner

Agents & machines → Connect a machine. Anyone signed in may do this for themselves. The dialog explains the three steps and offers the download — CodeRealmRunner-macos-arm64, about twenty megabytes. Nothing has been created yet: closing the dialog here, with Cancel or the cross, leaves no trace. If it says No runner build is on this server yet, the site’s owner has not built one; nothing you can do from here.

2

Press Add

Add creates the host: a row appears in the Hosts panel as (waiting for the runner) with a yellow dot, and the dialog now shows the connect command with a one-time token. From here Cancel (or the cross) deletes that waiting row and its token again — press it if you changed your mind, or lost the token before using it.

3

Run the connect command

Open Terminal, go to your Downloads folder, and paste the command the dialog shows. It looks like:

cd ~/Downloads
chmod +x CodeRealmRunner-macos-arm64
./CodeRealmRunner-macos-arm64 connect https://your-site.example --token XXXXXXXX

The token is shown once. If you lose it, remove the waiting host and add a new one. Leave --token off and the program asks for it. Add --name Studio-Mac to list the host under a name other than your computer’s; add --no-autostart if you would rather start it by hand each time (the program is still copied into its own directory, and that copy is the one to start — connect prints the path). A machine with neither claude nor qwen signed in is refused unless you add --without-agents: it then registers as a host that runs no agent until a CLI is installed and signed in there — it can still check tools and serve RealRun.

“cannot be opened because the developer cannot be verified”

The runner is not notarised with Apple, so macOS may block the first start. Either go to System Settings → Privacy & Security and press Open Anyway, or remove the quarantine mark once:

xattr -d com.apple.quarantine CodeRealmRunner-macos-arm64

The program then prints what it found, line by line:

claude CLI: /Users/you/.local/bin/claude (signed in)
git: ok
spec-kit CLI: /Users/you/.local/bin/specify
qwen CLI: not installed (optional)
LM Studio: not installed (optional)
registered as host 'Your-Mac' (#3) at https://your-site.example
LaunchAgent dev.coderealm-runner installed; it starts at login and restarts if it stops

If claude is missing or not signed in, it says so; the host still registers, but nothing will run on it until that is fixed, or until an executor there is set to a CLI that is signed in. If spec-kit is missing, it says that too: the host registers and can run agents, and the Hosts panel shows spec-kit NOT installed with an amber note until you install it and reconnect.

4

Watch the row turn green

Back in the dialog, the third step changes to Connected as “Your-Mac” within a few seconds (with claude is NOT signed in there yet or spec-kit is NOT installed there if that is the case), and the button becomes Done. A connected host is real and stays; only an unused token is cancelled. The Hosts panel now shows the green dot, the platform version, claude signed in, the spec-kit version (spec-kit 1.1.3), qwen signed in where Qwen Code is set up there, and how many LM Studio models the machine offers.

The runner also asks spec-kit whether a newer release is out (once in six hours). When one is, the row says spec-kit 1.0.2 (1.1.3 is out), an amber note explains that the Storyteller and the audits run the old toolkit, one notice is raised per release, and the host's owner or a GM sees Upgrade spec-kit to 1.1.3: it runs specify self upgrade on that machine — the host's own installer, never a copy shipped by the platform.

The Connect a machine dialog after Add was pressed: download link, the connect command with a one-time token, the waiting line, and Cancel; behind it the Machines list with the new waiting row
After Add. Behind the dialog the new row already sits in the list as waiting; the moment the runner on that machine connects, it turns green with the machine’s name, whether claude is signed in there, whether spec-kit is installed, and the LM Studio models it offers — and the button becomes Done. Until then Cancel (or the cross) forgets the token and the row.

Living with it

  • Online means heard from in the last ninety seconds. The runner reports in every twenty seconds or so. Close the laptop lid and it goes offline; open it and the dot is green again within a minute or two. After a reboot the autostart brings it back at login. When the server restarts, every host shows offline for a few seconds until it reports again.
  • A run on a host that vanishes is lost. If the runner stops reporting for ninety seconds in the middle of a task, the run ends with host went offline, and the task is returned to the queue without penalty.
  • Your executors live on your host. Every agent you own is created on one of your hosts. An agent on an offline host takes nothing: the task waits in Ready, the Home page shows an amber its agents’ host is offline banner naming the machine, the executor’s card on the Agents & machines page shows its host in red, and the task’s Log has a dispatch_gap event.
  • Your browser is not a host. Sign in from a phone or another computer and you see and manage everything exactly as before; the work still runs on whichever of your hosts is online.
  • A chat belongs to its host. A Storyteller chat runs on the host it was created on, for good. Wake that machine to continue it.
  • spec-kit lives on the host, not on the server. Every specification workspace — a chat, an analysis, a convergence run — is laid down with the spec-kit that is installed on the machine doing the work. What you install is what runs; update it there when you want a newer one.
  • Judging runs go to the project owner’s host — the one chosen in Agents & machines → Your assistant, or with nothing chosen the server if the owner is a GM and the server has claude, otherwise the owner’s most recently heard-from runner.
  • One runner, one site. The runner keeps one configuration. To move it to another site, disconnect and connect again.
  • GM sees every host; everyone else sees only their own. The server’s row is shown to the person whose session it is and to GMs, nobody else. Renaming is possible through the API but has no button.

Updating the runner

The runner only knows the host functions it was built with. When the site moves on, the runner notices on its next poll, downloads the site’s current build into its own directory and restarts on it — nothing to do on your side; the Hosts panel shows runner vX is older than the site’s vY only for the minute this takes. CodeRealmRunner update does the same by hand. The token and the registration stay; only the program changes.

The file you downloaded is only the installer: connect copies it into ~/Library/Application Support/CodeRealmRunner/bin/ (Linux: ~/.config/CodeRealmRunner/bin/, Windows: %APPDATA%\CodeRealmRunner\bin\) and the autostart runs that copy — with --no-autostart too, since only that copy is replaced when the site moves on. You may delete the download afterwards. A runner connected by an older build that still runs from Downloads is moved there by CodeRealmRunner install.

On the machine itself

CommandWhat it does
CodeRealmRunner statusWhich site, which name, where the files are, and what the site says: online or offline, when it was last heard, how many local models.
CodeRealmRunner runRun in the foreground, in this terminal window — for a look at what it prints, or when installed with --no-autostart.
CodeRealmRunner disconnectUnregister from the site, remove the autostart and the configuration. The executors that lived on this host are deactivated — they are not deleted, but they take nothing until a GM moves them to another host and reactivates them.
CodeRealmRunner update · install · versionFetch the site's build now and restart on it · move into the runner's own directory and reinstall the autostart · which build this is.

Its files live in ~/Library/Application Support/CodeRealmRunner/: bin/ (the program it actually runs), config.json (the token — keep it private), runner.log, and work/, where the copies of repositories it works on are kept. The autostart entry is ~/Library/LaunchAgents/dev.coderealm-runner.plist. To uninstall completely: disconnect, then delete that folder and the downloaded binary.

Remove on the site’s Hosts panel is the other direction: it forgets the host and its token, and is refused while executors still live on it — move or delete them first.

Boards, probes and targets

Plug a debug probe into a machine that runs CodeRealmRunner — an ST-LINK on a NUCLEO, a J-Link, a CMSIS-DAP — and the host card on Executors lists it within a minute, together with the microcontroller it reads behind it: the core (from CPUID) and, for an STM32, the part (from DBGMCU_IDCODE), e.g. ST-LINK (STLink V3) 003B…3431 → STM32U535/545 · Cortex-M33 r0p4 · DEV_ID 0x455 · NUCLEO-U545RE · /dev/cu.usbmodem1403. The probe's serial port and USB drive are found under the probe itself, so two boards on one Mac are never mixed up. Replugged something? read the MCUs again on the card.

A firmware project says which microcontrollers it runs on in Settings → Targets: one row per role — main, slave, sensor-1 — with its part (STM32U545RE), and the probe that reaches it, picked from the list of every probe on your runners. Bound to a probe, a target is that probe wherever it is plugged in; left unbound, any probe wired to that MCU (or that board) will do, on whichever runner has it — unplug it from one Mac, plug it into another, and the other runner takes the runs. The console is the probe's virtual COM port, RTT, or a serial port you name.

From there the roles go through the project. The Storyteller asks which microcontroller is which and creates the targets; the documents of every target's MCU are fetched; every task names the target it is about (the Target field on the task); agents are told where each target is and reach it only through bench; and before a task is accepted the Bench Judge runs the on-target images on the boards — tests/target/<role>/<suite> on that role's probe, and a suite with the same name under two roles as one joint run, the slave flashed first, the main last, every console required to say END. A host whose probes are all a project's targets runs that project's agents beside them; any other probe plugged in still holds agent runs there.

Components: a driver written once per board

When a task's work has passed on the board — a display driver, a flash driver — open the accepted task and press Save as a component: pick its files (lib/… is preselected), give it a key and a name. The component remembers the board and MCU it was proved on and the board's verdict. Every later project with a target on that MCU or board lists it under Settings → Components; Add to project commits it to lib/ with a COMPONENT.md saying where it was proved, and the agents are told it is there and proved, so they use it instead of writing their own. A component published again shows as Update in the projects that have the older version.

13 · Local models as developers

A machine that can run a language model of its own can put it to work at no cloud cost. LM Studio is a free desktop application (lmstudio.ai) that downloads and runs open models on your computer. Install it, and inside it download a model — look for one marked as supporting tool use, and one that fits your memory with room to spare. The platform never downloads a model itself.

The Local models on host panel on the Agents & machines page lists what LM Studio holds on the selected host; it appears once there is a model or more than one host. For the server it is read directly (the list is cached for twenty seconds — reload the page a moment after installing a model); for a runner host the models arrive with its regular report. Each row: provider, name, parameters, size, and either Add as developer, added, or no tool use — will not work as an agent with a greyed button.

  • Add as developer turns a model into an agent of yours on that host with a WIP limit of one. Give it skills like any other executor.
  • Developers only. A local model implements tasks; it never judges. Review, arbitration, convergence and the Golden User stay on cloud models, and the platform refuses to give a local agent the reviewer role. Its work is reviewed by Sonnet like anyone else’s — in our first live run the reviewer caught a real defect in a local model’s diff before the merge.
  • What it costs: nothing. A local run consumes no cloud tokens and none of the subscription window — the trail records its cost as zero. The cloud is spent only on judging the result. In practice a local developer is the right worker for L1–L2 tasks: scaffolding, small fixes, documentation.
  • Load parameters are the executor’s. Edit a local agent and you set its context window (never below 32768 — an agent prompt is large, and below that the runtime cuts the task off before the model sees it) and how long the model stays loaded when idle before its memory is returned to the machine (default thirty minutes). The platform starts LM Studio’s server itself and loads the model with these settings at dispatch time; the load is recorded on the task.
  • Memory is the limit. A model too large to load next to whatever else the machine is running is refused by LM Studio, and the executor sits idle with the reason in the task’s Log. A 27-billion-parameter model does not fit beside a running platform in 24 GB; a 4-to-9-billion one does.
  • Deleting the agent frees the model. The weights stay installed; Add as developer comes straight back.

14 · CodeRealmApp — the platform as a Mac application

CodeRealmApp is the same platform packed into one application for one person on one Mac. Start it and a window opens on the Home page; nothing else to install, no server to run.

  • No accounts. Whoever opened the app is the GM. There is no sign-in, no Sign out, no People section, no registration. Executors are always agents.
  • The host is this Mac. The app uses the claude command signed in on this computer and the specify command installed on it. Install both exactly as in section 12; without claude nothing runs, and without spec-kit the first chat stops with spec-kit is not installed on this host. Runner hosts cannot be added to the app — it has no runner builds to hand out — so the app is a single-machine affair.
  • Only from this screen. The app listens on this computer alone; a phone or another computer cannot open it.
  • Your data — the database and the repositories — lives in ~/Library/Application Support/CodeRealm/. Back that folder up and you have everything.
  • Updating is replacing the application with a newer copy; it does not update itself. Like the runner, it is not notarised: the first start may need Open Anyway in System Settings → Privacy & Security.

Everything else in this guide — the interview, the board, the gates, the reports — is identical.

15 · For the administrator

Hosting the shared version for others — the compose file, the four containers, the two volumes, deploying from GitLab, backups and restore, the variables the API reads — is its own document, written for the person who runs the machine: the administrator's guide. Nothing in it is needed to use the platform.

16 · Who may do what

ActionMemberLeaderGM
See a projectonly with their executor in its partyown projectsall
Create a project (New project or Create manually)—yes, on their own hostyes
Storyteller chats—own, on their own hostown; on the server only if the server's claude is theirs
Board: Dispatch, Mark ready, New Task, edit fields, dependencies, Reopen, Stop run, Delete, GM assignMark ready onlyown projectsall
Start and Submit a tasktheir own taskstheir own tasks—
Verify / Accept / Rejectwith the reviewer role, not their ownown projects, not a task they holdall, not a task they hold
Report a defectyesyesyes
Artifacts: notes, links, delete; Import; Settings; RealRun Start; Partyreadown projectsall
Baselines: create · Revert to a version—own projectsall
Executors and their skills; local models as developersread ownown: create, skill, deleteall
Competenciesread globalglobal: read; private: ownglobal and every private one
Environment tools: Check and Install (on their own hosts), + Tool, Extractreadyesyes
Add a hostownownown; sees all
Users, roles, approvals, mail, registration switch——yes

An invisible project answers as if it did not exist. A button you may not press is still drawn; pressing it answers with a red 403 line, and nothing changes.

17 · When nothing moves

Nine times out of ten it is one of these. The dashboard usually names the cause itself in an amber banner; the task’s Log names the rest.

What you seeWhat it really isWhat to do
Tasks sit in Ready, nobody takes themNo party member has the competency or the level those tasks need.Settings › Team → Balance. Red numbers and “nobody” show exactly which skill is missing. A GM adds an executor or raises a level on the Agents & machines page.
“no implementer can take this work” bannerThe same thing, said out loud, with the competency and level named.As above.
Nothing dispatches on a brand-new projectThe specification is still being analysed, or the analysis found something critical.Tasks tab: the banner names the finding. Fix what you can and press Analyse again, or Start anyway… with a reason if you disagree.
“Budget spent” bannerThe project's model cost reached the cap you set.Settings → raise the budget or set 0, Save. Look at where it went first: the dollar figures on the cards.
Cards dimmed with a padlockThey are waiting for another task to be accepted.Nothing is wrong. Hover to see the blocker; finish that one first.
Several agents, one card in progressThe waiting tasks name the same files as the running one; they are queued behind it (dispatch_wait in the Log).Nothing. This is correct. Time is the sum of the tasks.
“its agents' host is offline” banner, or an executor's card with its host in redThe runner on that machine is not running, or the machine is asleep.Wake the machine; check with CodeRealmRunner status there. Autostart brings the runner back after a reboot, but not through a closed laptop lid.
A task lands in the Needs you list with “the agent stopped: the task cannot be done as written”The agent found a file, a document or a decision it needs missing, and said so instead of guessing. No rerun would change that.Read the reason in the amber banner. Return — task at fault, then write the task the way it can be done (or add the missing input) and dispatch the new one.
A local agent never picks anything upLM Studio could not load the model — usually there is not enough free memory next to whatever else the machine is running.Open the executor and check its context window; free memory or pick a smaller model. The load and its parameters are recorded on the task.
An executor is idle while work waitsTheir WIP limit is reached, they are not marked implementer, or they are inactive.Agents & machines page for the limit and active flag; Settings › Team for the role.
“Agent runs paused on ‘host’ — usage window spent”That host's Claude subscription has used up its allowance for this window.Nothing. It resumes by itself; the banner says roughly when. Other hosts keep working, and no work is lost.
“none of your hosts is online” when starting a chatStoryteller needs a host of yours, and none is reporting in.Start CodeRealmRunner on your machine (section 12), or — if the server's claude is yours — sign claude in on the server.
“spec-kit is not installed on your online host(s)” when starting a chatThe machine is there, but the toolkit the Storyteller drives is not.On that machine: uv tool install specify-cli, then reconnect the runner (or, on the server, restart the API). The Hosts panel shows the note until then.
Storyteller says “thinking” for minutesNormal. A spec-kit run takes minutes.Wait. Stop cancels the turn without losing the conversation.
A chat says its workdir was rebuiltThe scratch folder for that chat disappeared (a reboot, for example).Nothing to fix. Storyteller still remembers the conversation; ask it to write the files again.
Verification says “not run”There is no test runner in the project yet, so nothing was executed.Expected in the first tasks. Once tests exist the command is detected and recorded. Until then the review is the only gate — read the reports.
A fix task waits for you with “the platform cannot prove the new test catches the defect”The proof needs a verify command and this project has none.Set the verify command in Settings and Reopen, or judge the fix yourself and Accept.
A fix task is rejected with “A fix is accepted only with a test that catches the defect”The agent's test does not fail on the unfixed code, or it added no test.The executor's fault; the rerun gets the reason. Three times and it comes to you.
Smoke gate keeps failingThe product genuinely does not start with its documented command — or the setup command is empty and nothing was installed.RealRun → Show log. Usually the setup or run command in Settings is wrong, or the product is broken — which is the gate doing its job.
Agents fail with “command not found” for a compiler or a build toolThe toolchain is missing on the host the agents run on — yours, not the server.Settings → Environment: Check, then Install on that host. The commands run there through your runner.
A task bounced three timesAutomation gave up and handed it to you.Open it, read the event history and the acceptance report. Usually the task is contradictory: use Return — task at fault, fix the wording, reopen.
“too many failed attempts” at sign-inEight wrong passwords within ten minutes, on this account or from this address.Wait ten minutes. Then one careful try; a GM can reset the password.
A red 403 after pressing a buttonYou are not allowed to do that in this project.Section 16. Ask the project's owner or a GM.
The site answers 502The machine hosting the platform is asleep or off the network.Wake it. Nothing is lost.

18 · Questions people actually ask

Do I really not need to know how to program?

To get a product built: no. To judge whether a finished product is what you asked for: no, and that is deliberate — the Golden User and the acceptance reports exist so the last word can be given by someone who only sees the outside. What you do need is the willingness to answer questions precisely, and to type three lines into a terminal once, to connect your computer.

What does it cost me?

The agents run on a Claude subscription on your host. The platform shows you the list price of every run anyway, so you can see where the effort went and set a budget per project. Local models cost nothing to run.

Where is my code, and can I take it away?

In an ordinary git repository the platform keeps for the project, browsable in Code › Repository. It is standard git; any developer or tool can pick it up. Deleting a project does not delete it.

How long does a project take?

The interview is an hour of your attention at most. After that it depends on how many tasks the specification produced and how many can run at once — tasks that touch the same files run one after another. Small projects finish in hours, larger ones over days, and the board tells you the truth at any moment.

What if I disagree with what Storyteller wrote?

Say so in the chat before the handover — that is the last moment the specification can change. After it, the documents are read-only — until you bring a changed specification through Re-spec in Specification › Import, which revises them in place and reopens only the tasks whose text changed. If a task is already built on the wrong understanding, use Return — task at fault so nobody is charged for following bad instructions, and write the task you meant with New Task. For a change bigger than a few tasks, start a new project with a better description.

Can I add something after the project has started?

Yes. New Task on the Tasks tab, with the dependencies you need and a class, then Dispatch. Anything larger than a handful of tasks deserves a new project so that the specification and the product do not drift apart.

An agent broke something that used to work. Now what?

Nothing is ever lost: every change is a commit and every accepted task is a merge. File it on Bugs with how to reproduce it, then Create fix task. The fix will only be accepted with a test that catches that exact defect.

Can several people work on one project?

Yes. A GM or the project owner invites executors into the party and gives them the implementer or reviewer role. Human executors get tasks on the same board as agents, and pick them up with Start and Submit; a human’s submission waits for a person to press Verify passed and Accept.

Who can see my project?

GMs see everything. A leader sees the projects they own. Everyone else sees only projects whose party they are in — an invisible project answers as if it did not exist.

Does the server see my Claude account?

No. The runner connects outward and runs claude locally; your sign-in never leaves your machine. The server sees the results and the cost figures, nothing else.

19 · Quick reference

Task statuses

StatusColumnMeaning
backlogBacklogCreated, not released.
readyReadyReleased, waiting for an executor.
assignedAssignedHas an owner, not started.
in_progressIn ProgressBeing worked on.
awaiting_verificationVerifyingSubmitted — being checked, or waiting for a person.
acceptedAcceptedVerified and merged.
rejectedRejectedSent back.

Bug states

StateMeaning
newReported, nobody has looked.
triagedConfirmed as worth fixing.
fixingA fix task is in flight.
resolvedThe fix landed; not yet confirmed by a person.
verifiedSomeone checked it is really gone.
wontfixDeliberately not fixed, with a written reason.

Artifact statuses and link types

WordMeaning
draft / approved / obsoleteA label on an artifact for people. The pipeline does not read it.
derivesThis came from that (a story from a requirement).
implementsThis realises that (a task or a note against a requirement).
verifiesThis checks that (a test case against a requirement).
relatesAnything else.

Events worth recognising in a Log

EventMeaning
dispatch_assigned / dispatch_blocked / dispatch_wait / dispatch_gapHanded out · held by an unfinished dependency · queued behind a task using the same files · nobody could take it (the data says why: skill, host, limit).
agent_started / submitted / agent_blockedThe run began (with the model chosen) · the agent handed in · the agent declared the task impossible as written, and the task went to the Needs you list.
verification / bounced_backA test run and its result · tests went red, back to the executor.
llm_review / out_of_scope_diff / conformance_reviewThe reviewer's verdict (or skipped) · files outside the task's scope · an audit of main for an empty change.
regression_proofWhether the fix's test failed without the fix.
merged_to_main / auto_accepted / acceptedMerged (with “union” if both sides were kept) · accepted by the automatic GM · accepted by a person.
rejected / auto_gm_gave_upSent back (by auto-gm or a person, with the reason) · automation stopped: three strikes, three errors, rule_deadlock, agent_blocked or unprovable_fix.
xp_awarded / xp_penalty / xp_refundedMoney of the XP kind.
rate_limited / budget_block / spec_gate_blockThat host's usage window is spent · paused for the budget · held by the specification analysis.
judgement_waived / gm_override_assign / stopped_by_gmAn oracle lowered with its reason · a task assigned by hand · a run stopped by a person.

Priorities and levels

BadgeMeaning
P1 / P2 / P3Priority: P1 is taken first.
L1 … L5Difficulty of a task, and skill of an executor. An executor is offered tasks up to their own level.

Time limits

WhatLimit
One agent runOne hour.
A test runThirty minutes.
A reviewTen minutes.
Smoke: waiting for the product to answerSixty seconds. A command run to completion: fifteen minutes.
RealRun with nobody lookingTwenty minutes, then it stops itself.
A host without a reportNinety seconds, then it is offline.
A sign-in lockTen minutes.
A sessionThirty days.

If something in this guide does not match what the platform does, the platform is right and the guide is stale — say so, and it gets fixed. A guide that disagrees with reality is worse than no guide.