From idea to a working product

You have an idea. At the end it runs. In between: you.

You say what you want to build and you answer the questions that come up. What you get back is a backlog you can build from, one story at a time. One agent plans the story and you approve the plan. A second one builds exactly that. A third one checks the result, and it never wrote a line of it.

The problem

It runs. That is not the same as done.

With vibe coding you can build something in an afternoon that solves a real problem. It is software you would have bought, or waited for, or never got at all.

Shipping it is a different thing. Who else will use it? What are the parts called, so the next person finds them? What happens when the data is missing? Those answers are in your head or nowhere. Either way they are not in the code.

How it works

So you get asked.

One question at a time, in an order where every answer helps the next one. Who is this for? What are the parts called? What happens when the data is missing? What is on purpose not part of it?

Nothing gets written down that you did not say. Your answers go onto a page, and the next question starts from there. At the end there is a backlog, and every story in it holds what someone needs to build it.

Eleven steps. Each one reads what the step before it wrote, which is why the later ones are short. You can stop after any step and continue next week. Every step has its own page.

  1. Discovery Working out what to build, before any code exists
  2. Handoff One command, and the workbench is up
  3. Build Three agents, one story at a time
Discovery Lands in: Confluence

01 Brief

You say what you want to build. The questions come one at a time. What problem does this solve? Who has it? What does the product do, and what will it not do? How will you know it worked? Nothing goes on the page that you did not say.

It is one page, and it is the only step that needs nothing before it. The most useful part is the one nobody writes down by themselves: what this product will not do. Every later step reads that line.

The page it writes
  • Problem / why
  • Audience
  • Core capabilities
  • Out of scope
  • How we know it works
  • Assumptions / frame
The brief, section by section
Discovery Lands in: Confluence

02 Personas and journeys

The personas come from the audience groups in the brief. Each one stands for a real group of users. Later, when a decision can go two ways, you have somebody to decide it for.

Everything later rests on the journeys. One per flow, told as a story from the persona's side and not as a spec: the moment it starts, what they really do, what annoys them about it today, and what changes once your product exists. Not a table of steps, and not a wish list. Together they have to cover everything the brief promised, and the backlog later follows them. If a journey is wrong, every story under it is wrong in the same way.

What a journey page carries
  • Persona(s)
  • Trigger
  • Journey
  • Pain points today
  • What the app changes
  • Related work items
What a persona and a journey carry
Discovery Lands in: Confluence

03 Domain model

The things your product deals with, what they are called, how they relate to each other, and the states they move through. Taken from the nouns the personas really handle, in business language. No tables, no foreign keys, no database yet.

It is a reference, not a build order. Nothing gets built just because it stands on this page. The schema grows story by story, and it fits together because every story reads the same page. The names are decided here too, in English by default. The build takes them over unchanged, and every story that invents its own word costs you later.

The page it writes
  • What the domain is about
  • Entities
  • Relationships
  • States
  • Enumerations
  • Open points
The four passes of the model
Discovery Lands in: Confluence

04 Design brief

How it should feel, the principles behind it, and the screens that matter. Enough for a design system and a prototype to come out of it, instead of somebody guessing at both.

What you get back is a prompt. Give it to Claude Design or to Figma, and you get a real prototype, not a mood board. Its URL goes onto the stories in step 06. Whoever builds a screen then has the design itself, not a description of it.

The page it writes
  • Design goal (north star)
  • Brand personality and tone
  • Design principles
  • Visual direction
  • Accessibility
  • What the generation should deliver
What the design brief settles
Discovery Lands in: Confluence

05 Technical frame

Backend, frontend, auth, storage, the services you talk to. You make each decision while it is still cheap to make, and it is written down with its reason, so nobody reopens it in the middle of a story.

It also settles the things that run through everything and hurt to change later: how identifiers are built, what an error looks like, how validation works, migrations instead of a setup script. Storage comes late on purpose. What you have to store decides which database you need, not the other way round.

At the end it hands you the command that turns those decisions into a working environment, already filled in.

The page it writes
  • Architecture at a glance
  • Building blocks and interfaces
  • Technology decisions
  • Operating frame
  • Cross-cutting conventions
  • Open points
› monoceros init acme \
    --with-languages=node \
    --with-services=postgres \
    --with-features=claude,claude-code-roles,github,atlassian/twg
How the decisions become a command
Discovery Lands in: Jira

06 Backlog

Epics and stories, cut from the journeys. One story promises one function and holds everything someone needs to build it: schema, endpoint, view, migration, configuration. Nothing that only a later story needs.

That rules out most of what a backlog usually starts with. No scaffolding story, no schema story, no design-system story. You build the scaffolding when the first function needs it. That makes the early stories big, and that is fine. Anything you build before a function needs it is a guess, and you pay for it twice.

One test before a story is written down. If this were the last story built before a demo, what could the persona do afterwards that they could not do before? If there is no answer, it is not a story.

What every story carries
  • Business context
  • Implementation notes
  • Design
  • Acceptance criteria
What a story has to carry
Discovery Lands in: The project directory

07 Project files

The README for people, and the agent instructions for whoever reads them next: the stack, the conventions, the words your domain uses, and where decisions are recorded. Written once here instead of repeated in every story, because an agent reads this file before every task.

It asks what is public and what is not, and then it splits the files along that line. What describes the code is committed. What names your customer, your Confluence space or your board is not, and nothing you commit points at it.

The development flow is the part with an opinion in it, so you get a proposal instead of a finished text: branch, draft pull request, board status, commit, comment, merge. Twelve steps, and two places where it stops and asks you. Nothing goes into the file before you have seen it.

the project directory

  README.md      for people
  CLAUDE.md      for Claude Code
  AGENTS.md      for OpenCode
What goes into the two files
Handoff Lands in: Your machine

08 The workbench comes up

You run the command from step 05, and Monoceros builds the workbench: a container with the stack you decided on, the services running next to it, and the roles installed. One command, and nobody sets any of it up by hand.

The agent works in there and cannot reach the rest of your machine. Not your keys, not your browser, not the directories next door. That is the reason you can let it work instead of watching it.

Monoceros builds the container from that one file, so you can throw it away. Tear it down, build it again, and you get the same thing back.

› monoceros apply acme

  ▸ pulling image, installing features...
  ✓ workbench ready
Your first workbench
Build Lands in: The workbench

09 Plan

The planner reads the story, then it reads what belongs to it: the epic above it, and the discovery pages behind that. It also looks at what is really in the workbench, so the plan fits the stack you have and not one it assumed. Then it clears up the rest with you, while being wrong is still cheap.

It writes a plan that a fresh agent can carry out without ever seeing the conversation. It writes no source code at all, and a hook makes sure of that. At the end it names the command that carries on, with the plan filled in.

› /monoceros-plan ACME-126

  ✓ plan written
  › Continue with /monoceros-ship guestbook/reminder-emails
How the roles work
Build Lands in: The workbench

10 Implement

You hand over the plan, not the ticket, and the implementer follows it and may not change it. Every changed line goes back to a step in that plan. The code next door stays as it is, and nobody gets improvements they did not ask for. When the work is done, it tells you what to test and waits.

Then it runs the acceptance command from the plan, and the real output decides. It commits, and there it stops. Pushing, merging and everything else that leaves your machine is not its job.

› /monoceros-ship guestbook/reminder-emails
How the roles work
Build Lands in: The workbench

11 Review

The reviewer knows nothing about the change, and that is the whole point. It never saw the conversation and never watched the work, so it cannot carry a misunderstanding over from either one.

It only reads, and it gets evidence before it forms an opinion. It runs the acceptance command itself instead of believing the implementer. Then it compares the result with the plan, step by step. The answer is PASS, or CHANGES_REQUIRED with a numbered list under it.

How the roles work
What you can check

None of this is a chat log.

Every claim above comes down to one question. Can you see it, or do you have to believe it? So here is what a run really leaves behind.

## Acceptance

    npm ci && npm run lint && npm test

Green means: eslint reports nothing, and the TAP summary ends
with # fail 0 and # pass at least 135.

The measured baseline on main before this story is 106 pass,
0 fail (verified by running it).
From the plan for one story in a real project. The planner ran the test suite first, to see where the project stood, and then wrote down the number the result has to beat. The reviewer runs the same command itself instead of believing the implementer. That plan is 1,200 lines long: seventeen steps and twenty-four files, named before anybody wrote code.

The plan

Written before any code, in the repository and not in a session. It names the files, the steps, and the command that decides pass or fail. If the story was misread, you see it here, while a change still costs nothing.

A comment on the work item

What changed and in which commit, on the ticket itself. Anyone on the board sees it without opening the repository.

A pull request

The change arrives like a colleague's would: as a diff you review, not as something already merged.

Twice it stops and waits for you: before the commit, and before the merge. It pushes nothing and merges nothing on its own.

Before you start

Four things people ask.

Do I need a fresh Confluence and an empty Jira?

No. In Confluence you point at one page, and everything gets created under it. In Jira you name a project. What else lives in either is none of its business.

Worth setting up cleanly if you are starting fresh: a Jira project of your own, with the issue types epic, story and task. That is the requirement. The statuses stay yours, nothing in the chain reads or moves one, and Open, In Progress, In Review, Done are enough.

On the Confluence side there is nothing to install. Two of the pages come with a diagram, the domain model and the technical frame, and the skills draw those themselves and attach them as images.

I already have a product. Can I use this on it?

Yes, and the chain tells you where to start. Every step derives from the one before it, so you begin at the first thing you actually lack. A running product with no domain model gets one written from what is there.

Can I extend or change the backlog later?

Yes, with the same skill that cut it in the first place. New stories under an existing epic, a story that has to change because the product did, a whole epic that was not planned at the start.

We are adding a second invoice format. Work out what that changes and cut the stories for it.

It works from the discovery pages while it does that, and it feeds changes back into them. So when the product moves, the brief, the journeys and the domain model move with it, and the backlog is not the only place that knows.

Does any of this work without Jira and Confluence at all?

The build half does, steps 08 to 11 above: it works in the workbench against whatever tracker your repository uses, and /monoceros-plan takes a task straight from you when there is no ticket at all. Only discovery, steps 01 to 07, is tied to Atlassian today.

Get started

The first thing you type is a sentence, not a command.

It runs on your own Docker. No account, nothing to sign up for, and nothing leaves your machine. Discovery writes to Confluence and Jira today, so you need access to both. The roles need neither, and they work with whatever tracker your repository already uses.

  1. Install Monoceros

    One script, and Docker has to be running. Installation

  2. Create the workbench

    › monoceros init acme --template=discovery-atlassian
  3. Bring it up

    › monoceros apply acme
  4. Optional: work in the app

    Attach the Claude Code desktop app over SSH, so you work in the app instead of the terminal. Claude Code

acme is a sample name. Use your own.

You do not have to go through the whole chain. Every step reads what the steps before it wrote, so you can stop after any of them and continue next week. And if you already have a backlog, skip the first seven. Give a story to the planner, and it will ask you what the ticket left out.

Then you start, and this is the whole prompt:

I'd like to build something that keeps my freelance invoices in order. Let's write a brief for it.