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 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 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.
PartyThe executors invited to one project. 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 Users page. 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; the link under the title 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 competency list is about you, not about the platform: leave every box empty if you do not write software yourself. A GM 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 on the Users page 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 on the Users page. Section 16 has the full table.

5 · A tour of the screen

The header, on every page

  • CODEREALM — back to the project list.
  • Projects · Executors · Competencies — the three main areas. GMs also get Users. Everyone can open Executors and Competencies; only a GM can change anything there.
  • Guide — this document. It is the only link you see before signing in.
  • A small counter appears for GMs and leaders when tasks are waiting for a human verdict. It refreshes every thirty seconds; click it to go straight to them. A task counts when its oracle wants a person, when a human submitted it and a reviewer must look, or when the automatic GM gave up on it.
  • A notices badge, for GMs and leaders, whenever something went wrong lately — a host that stopped answering, a runner that refused an update, a background run that failed, runs paused after a fault. It includes what the platform fixed by itself: a dispatcher pass that failed and was skipped, a host that came back after being silent. Click it for the list, and Mark all seen when you have read it. A fault that keeps happening shows a count instead of repeating.
  • Your username, Sign out, a theme switch and the platform version.
  • The theme switch — the sun or moon between Sign out and the version. CodeRealm opens dark; press it once for the light theme, which is the readable one outdoors or with a window behind you. The choice is remembered in that browser and applies to every page.

The Projects page — your control room

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

  • Banners. They appear only when something needs you. Four exist:
    • Agent runs paused on ‘host’ — the subscription’s usage window there is spent, in blue, with “resuming by itself in about N min”. Nothing is lost and nothing is asked of you; other hosts keep working.
    • KEY: its agents’ host is offline, in amber, naming the agents and the machine: everyone who could take the work sits on a host that is not reporting in. Wake the machine or start CodeRealmRunner there.
    • KEY: no implementer can take this work: competency Ln (N tasks) — the best implementer is Lm, or — no implementer has it at all, in amber. Somebody must be given that skill; section 17.
    • KEY: pipeline stalled — silent for 3h 56m, in amber. The project has tasks ready, nobody working, and nothing has happened for fifteen minutes. Section 17 lists the causes.
    Amber means act; blue means wait.
  • Verification Queue. Every task, across all projects, that is waiting on a decision. This is your to-do list. Columns: the task, its level, its oracle (judgement or automated), who holds it, the latest check (passed, failed, running, no run) and how long it has waited. Click a row to open it.
  • Projects. One card per project with its key, name, status badge and how many tasks are ready to start. New via Storyteller starts the interview; + Manual creates an empty project for people who already have a specification to import. Both are shown to leaders and GMs only.
  • Executor Pool. Every executor, their skills, their load against their limit (load 1/2), idle or inactive, and exactly what each one is working on right now.
The Projects page: verification queue, project cards and executor pool
The Projects page of a small project mid-flight. One task waits for a verdict at the top; the project card says four tasks are ready to start; at the bottom every executor shows its skills, its load against its limit, and the task it holds right now.

+ Manual, 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 its Import tab.

Inside a project

A sidebar (a row of chips on a phone) with ten tabs, under a breadcrumb Projects / name / tab and the project’s status badge. On a desktop the Artifacts entry also has three sub-filters with counts — Requirements, User Stories, Test Cases; on a phone you reach the same documents through the Artifacts tree. Section 7 covers each tab:

TabWhat it is for
ArtifactsThe documents: spec, requirements, user stories, test cases, plan, notes, reports. History, baselines, links.
V-ModelA picture of how requirements, tests and tasks connect.
TasksThe board. Where the work actually happens. Also the budget, the trust numbers and the specification gate.
BugsDefects found after acceptance, and the Golden User.
RepositoryThe code the agents wrote: branches, files, commits, differences.
RealRunStart the product and look at it running.
PartyWho works on this project, and whether they are enough.
LogEvery event that has ever happened in this project.
ImportLoad an existing specification instead of writing one here.
SettingsThe gates, the commands, the budget, the environment, and deleting the project.

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

Projects → New via Storyteller. 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. Then type what you want and press ⌘↵ on a Mac, Ctrl+Enter elsewhere, or click Send.

The chat needs a host that is online

Storyteller runs on a host (section 12). If none of yours is online the button answers none of your hosts is online — connect CodeRealmRunner on your machine (Executors → Hosts) 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 brings back your most recent chat, finished or not — that is why you may see an old conversation. New chat starts a fresh one; History lists your last fifty with their status, project key, date and first line. Nobody else sees your chats.

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 Storyteller chat during the interview
The interview that produced the project in these screenshots. Note what is being asked: not “which framework”, but where the date comes from and what happens when two photos share a second. The green bar 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.

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 4 explains, the only moment the specification itself can still be changed.

3

Let it hand over

When the specification, the plan and the task list all exist, a green banner appears: Project created from this chat, with Open project and Start new chat. 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 5) 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 6;
  • 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.

4

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 8), 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, on the Import tab: 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.

5

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.

The Party tab 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.
6

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.

The Settings tab with the verification and gate fields
The lower half of the tab: the last gates, the budget with what is spent so far, the Golden User switch, Save, the Environment list with a missing tool and its install command, and the danger zone. 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.
7

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.
8

Answer when you are called

Most tasks accept themselves. When one genuinely needs you, it appears in the Verification Queue on the Projects page, and opening it shows an amber banner Waiting for GM 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 a GM 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.
9

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.

RealRun showing the running product inside the platform
The product itself, running from the accepted code — the commit is named in the corner. Not a mock-up and not a description: the thing the tasks built, started the way its own documentation says to start it.
10

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 on the Bugs tab 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.

The Bugs tab 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

Artifacts

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?”.
The Artifacts tab with a requirement 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.

V-Model

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.

The V-Model view 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

The line above the board reads, for example, 64 tasks · 58 accepted · verification queue 2 · judge overruled 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 Executors 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 8, 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.

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:

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.

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 + Manual has no repository until its first agent task runs; the tab says so.

The Repository tab 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.

RealRun

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.

Party

The Balance table (see step 5) 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 (Executors → 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.

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.

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

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

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 on the RealRun tab.
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.

Executors

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.
The Executors page: the Your Storyteller panel, the Hosts panel, local models, and the executor cards with their skills
The executor registry. At the top, where your Storyteller sits and which model it speaks with; then the hosts and the local models found on them. Each card below is one worker: kind, WIP limit, queue depth, and one tile per competency showing the level it is trusted at and the XP behind it. Clicking a tile changes it.
The Edit Executor dialog for an agent: host, CLI and a Model drop-down filled from that host
An agent’s form. The model is chosen from what the selected CLI on the selected host offers, not typed from memory; the first row leaves the choice to the task level.

Competencies

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.

Users (GM 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 Verification Queue 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 Verification Queue 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 Verification Queue 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 verification queue 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
judge overruled 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

Executors → + Add host. 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, spec-kit installed, qwen signed in where Qwen Code is set up there, and how many LM Studio models the machine offers.

The Add host dialog after Add was pressed: download link, the connect command with a one-time token, the waiting line, and Cancel; behind it the Hosts panel 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 Projects page shows an amber its agents’ host is offline banner naming the machine, the executor’s card on the Executors 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 Executors → Your Storyteller, 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.

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 Executors 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 Projects 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 Users page, 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 (Storyteller or + Manual)yes, on their own hostyes
Storyteller chatsown, 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 versionown 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 switchyes

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.Party → Balance. Red numbers and “nobody” show exactly which skill is missing. A GM adds an executor or raises a level on the Executors 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 Verification Queue 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.Executors page for the limit and active flag; Party tab 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 on the Repository tab. 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 on the Import tab, 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 Verification Queue.
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.