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
- 2 · How it works
- 3 · The words you will meet
- 4 · Getting an account
- 5 · A tour of the screen
- 6 · Your first project
- 7 · Every screen in detail
- 8 · After an agent submits
- 9 · Rules that never bend
- 10 · Money and trust
- 11 · Levels, XP and penalties
- 12 · Hosts and CodeRealmRunner
- 13 · Local models
- 14 · CodeRealmApp
- 15 · For the administrator
- 16 · Who may do what
- 17 · When nothing moves
- 18 · Questions people ask
- 19 · Quick reference
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.
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
| Word | What it means |
|---|---|
| GM | Game 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. |
| Leader | A 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. |
| Member | Sees only the projects whose party they belong to, and works their own tasks. |
| Storyteller | The 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 GM | The 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. |
| Host | A 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. |
| Executor | Anyone who can receive a task — an AI agent or a human. Executors exist independently of projects and are invited into a project's party. |
| Party | The executors invited to one project. Only party members receive that project's tasks. |
Work
| Word | What it means |
|---|---|
| Artifact | A 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. |
| Task | One small, independently checkable piece of work. A project usually has dozens to low hundreds of them. |
| Dependency | Task B cannot start before task A is accepted. The board shows dependent tasks dimmed with a padlock. |
| Competency | The 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. |
| Oracle | Who 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). |
| XP | Points an executor earns for accepted work and loses for rejected work. Enough XP raises their level. |
| Budget | A dollar cap on a project. When the model runs have cost that much, nothing new is dispatched until you raise it. |
| Gate | A 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
| Word | What 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. |
| Commit | One saved change, with a message explaining it. History is a chain of commits; nothing is ever silently overwritten. |
| Branch | A private line of work. Each task gets its own, so two agents working at once cannot damage each other. |
| main | The trunk — the one line of work that is considered real. Only accepted, verified work is merged into it. |
| Merge | Folding a finished branch back into main. If two branches changed the same lines, the merge conflicts; section 8 says what the platform does then. |
| Diff | The exact lines a change added and removed. Reviewers read diffs, not whole files. |
| Test / test suite | A program that checks the product automatically. Green means it passed; red means something is broken. |
| Smoke test | The 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. |
| Terminal | The 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. |
| CLI | A 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
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.

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.

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

+ 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:
| Tab | What it is for |
|---|---|
| Artifacts | The documents: spec, requirements, user stories, test cases, plan, notes, reports. History, baselines, links. |
| V-Model | A picture of how requirements, tests and tasks connect. |
| Tasks | The board. Where the work actually happens. Also the budget, the trust numbers and the specification gate. |
| Bugs | Defects found after acceptance, and the Golden User. |
| Repository | The code the agents wrote: branches, files, commits, differences. |
| RealRun | Start the product and look at it running. |
| Party | Who works on this project, and whether they are enough. |
| Log | Every event that has ever happened in this project. |
| Import | Load an existing specification instead of writing one here. |
| Settings | The 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.
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.
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 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.”
“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.

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

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.
0means no cap. Set one: it is the only brake if something loops. Twenty dollars is plenty for a small project. Section 10.
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.

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:
| Column | What it means for you |
|---|---|
| Backlog | Exists, not released yet. |
| Ready | Released, waiting for someone free and qualified whose host is online. |
| Assigned | Has an owner. An agent picks it up within about ten seconds. |
| In Progress | Being worked on right now. |
| Verifying | Submitted. Tests, review, smoke and merge are running — or it is waiting for you. |
| Accepted | Done, checked and merged into main. |
| Rejected | Sent 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.

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:
| Button | Press it when |
|---|---|
| Accept | You 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 passed | You 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 failed | You 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. |
| Reject | The 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 fault | The 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 run | You 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”. |
| Reopen | A rejected task should be tried again. You may add dependencies at the same time. |
| GM assign: name | You want this exact executor to do it. Skips the qualification, level and load checks. Only active, non-GM party members are listed. |
| Delete | The 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.

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.

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.

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?”.

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.

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”:
| Oracle | On the card | Meaning |
|---|---|---|
| automated | auto | A machine check settles it. These tasks can be accepted without you. |
| agent does it, human accepts | agent → you | An agent produces the result, then it waits for your Accept. |
| requires judgement | judged | No 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:
| State | Buttons |
|---|---|
| new | Triage (confirm it is worth fixing) · Won't fix (asks why) · Create fix task |
| triaged | Create fix task · Won't fix |
| fixing / resolved | Gone — 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.

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.

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.
| Field | What it does | Advice |
|---|---|---|
| Key / Name / Description | Identity of the project. The key is the short code in front of every task. | Set once, leave alone. |
| Status | active, 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 path | Where the working copy lives on the server. | Created automatically. Leave empty. |
| Verify command | The 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-dispatch | Accepting 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 gate | Before 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 gate | Before 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 command | The 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 command | One-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 URL | The 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 gate | Before 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. |
| Convergence | When 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, USD | A 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 User | Once 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, orqwenwhere 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.


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
Which model reviews
| The change | Reviewer |
|---|---|
| Only documentation files (.md, .txt, .rst, .adoc), 80 changed lines or fewer | Nobody. The review is recorded as skipped. |
| 60 changed lines or fewer on an L1 or L2 task | The cheap reviewer (Sonnet). |
| First attempt on an L1–L3 task | Sonnet, 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 rejection | One tier above the executor: Haiku → Sonnet → Opus → Fable; Fable → Fable. |
| A local model's or a qwen agent's work | Sonnet, 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.
| Number | What it counts | How to read it |
|---|---|---|
| judge overruled X/Y | Of 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/Y | Of 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.
| What | Rule |
|---|---|
| Reward | 10 XP × the task level, unless the task sets its own. |
| Level thresholds | L2 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. |
| Floor | A charge is never less than 1 XP, and XP never falls below zero. |
| Demotion | Levels are never lowered automatically. Only a GM demotes, deliberately. |
| Refund | Return — task at fault, and a deadlock, give back everything charged on that task. Stop run charges nothing but refunds nothing either. |
| Not charged | A 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.
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
claudeonce and sign in with your Claude account. Check withclaude 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
uvfirst 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, runqwenonce 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 ownQWEN.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
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.
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.
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.
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.
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.

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
| Command | What it does |
|---|---|
CodeRealmRunner status | Which 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 run | Run in the foreground, in this terminal window — for a look at what it prints, or when installed with --no-autostart. |
CodeRealmRunner disconnect | Unregister 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 · version | Fetch 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
claudecommand signed in on this computer and thespecifycommand 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
| Action | Member | Leader | GM |
|---|---|---|---|
| See a project | only with their executor in its party | own projects | all |
| Create a project (Storyteller or + Manual) | — | yes, on their own host | yes |
| Storyteller chats | — | own, on their own host | own; 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 assign | Mark ready only | own projects | all |
| Start and Submit a task | their own tasks | their own tasks | — |
| Verify / Accept / Reject | with the reviewer role, not their own | own projects, not a task they hold | all, not a task they hold |
| Report a defect | yes | yes | yes |
| Artifacts: notes, links, delete; Import; Settings; RealRun Start; Party | read | own projects | all |
| Baselines: create · Revert to a version | — | own projects | all |
| Executors and their skills; local models as developers | read own | own: create, skill, delete | all |
| Competencies | read global | global: read; private: own | global and every private one |
| Environment tools: Check and Install (on their own hosts), + Tool, Extract | read | yes | yes |
| Add a host | own | own | own; sees all |
| Users, roles, approvals, mail, registration switch | — | — | yes |
An invisible project answers as if it did not exist. A button you may not press is still drawn; pressing it answers with a red 403 line, and nothing changes.
17 · When nothing moves
Nine times out of ten it is one of these. The dashboard usually names the cause itself in an amber banner; the task’s Log names the rest.
| What you see | What it really is | What to do |
|---|---|---|
| Tasks sit in Ready, nobody takes them | No 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” banner | The same thing, said out loud, with the competency and level named. | As above. |
| Nothing dispatches on a brand-new project | The 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” banner | The 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 padlock | They 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 progress | The 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 red | The 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 up | LM 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 waits | Their 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 chat | Storyteller 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 chat | The 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 minutes | Normal. A spec-kit run takes minutes. | Wait. Stop cancels the turn without losing the conversation. |
| A chat says its workdir was rebuilt | The 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 failing | The 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 tool | The 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 times | Automation 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-in | Eight 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 button | You are not allowed to do that in this project. | Section 16. Ask the project's owner or a GM. |
| The site answers 502 | The 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
| Status | Column | Meaning |
|---|---|---|
| backlog | Backlog | Created, not released. |
| ready | Ready | Released, waiting for an executor. |
| assigned | Assigned | Has an owner, not started. |
| in_progress | In Progress | Being worked on. |
| awaiting_verification | Verifying | Submitted — being checked, or waiting for a person. |
| accepted | Accepted | Verified and merged. |
| rejected | Rejected | Sent back. |
Bug states
| State | Meaning |
|---|---|
| new | Reported, nobody has looked. |
| triaged | Confirmed as worth fixing. |
| fixing | A fix task is in flight. |
| resolved | The fix landed; not yet confirmed by a person. |
| verified | Someone checked it is really gone. |
| wontfix | Deliberately not fixed, with a written reason. |
Artifact statuses and link types
| Word | Meaning |
|---|---|
| draft / approved / obsolete | A label on an artifact for people. The pipeline does not read it. |
| derives | This came from that (a story from a requirement). |
| implements | This realises that (a task or a note against a requirement). |
| verifies | This checks that (a test case against a requirement). |
| relates | Anything else. |
Events worth recognising in a Log
| Event | Meaning |
|---|---|
| dispatch_assigned / dispatch_blocked / dispatch_wait / dispatch_gap | Handed 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_blocked | The 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_back | A test run and its result · tests went red, back to the executor. |
| llm_review / out_of_scope_diff / conformance_review | The reviewer's verdict (or skipped) · files outside the task's scope · an audit of main for an empty change. |
| regression_proof | Whether the fix's test failed without the fix. |
| merged_to_main / auto_accepted / accepted | Merged (with “union” if both sides were kept) · accepted by the automatic GM · accepted by a person. |
| rejected / auto_gm_gave_up | Sent 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_refunded | Money of the XP kind. |
| rate_limited / budget_block / spec_gate_block | That host's usage window is spent · paused for the budget · held by the specification analysis. |
| judgement_waived / gm_override_assign / stopped_by_gm | An oracle lowered with its reason · a task assigned by hand · a run stopped by a person. |
Priorities and levels
| Badge | Meaning |
|---|---|
| P1 / P2 / P3 | Priority: P1 is taken first. |
| L1 … L5 | Difficulty of a task, and skill of an executor. An executor is offered tasks up to their own level. |
Time limits
| What | Limit |
|---|---|
| One agent run | One hour. |
| A test run | Thirty minutes. |
| A review | Ten minutes. |
| Smoke: waiting for the product to answer | Sixty seconds. A command run to completion: fifteen minutes. |
| RealRun with nobody looking | Twenty minutes, then it stops itself. |
| A host without a report | Ninety seconds, then it is offline. |
| A sign-in lock | Ten minutes. |
| A session | Thirty 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.