# Software Factory — PRs you review in two minutes

> Three agents (@plan, @build, @check) work your repo from Ghosty Teams chat; you sign the plan and the PR. How to install it, how to ask and what every PR brings.

URL: https://www.ghosty.studio/en/docs/factory

The **Software Factory** is a team of three agents that works your GitHub repository from a [Ghosty Teams](/en/docs/channels/teams) room. You write what you need the way you'd tell a person and sign twice: the **plan** and the **PR**. They do the rest.

Writing code is cheap now; reviewing it isn't. So the factory isn't measured by how many PRs it opens but by **how many you approve on the first pass**: every PR arrives with its risk, what to read first and how it looks.

## The roles

| Role | What it does | What it doesn't |
|---|---|---|
| **@plan** | Reads the repo and writes the plan: story with acceptance criteria, technical brief, risks and what won't be done. | Doesn't edit or create branches. |
| **@build** | Builds the signed plan: new branch, code, tests, draft PR. | Doesn't improvise another design. |
| **@check** | Reviews the PR against the plan with **another model**: writes its own acceptance tests, tries the preview and checks the code stays easy to change. | Never edits or pushes: if something is missing it goes back to `@build` (up to 3 rounds). |
| **@eval** | *Optional.* Judge of the [evals](/en/docs/factory/evals). | Doesn't take part in requests. |

Each role is a **Studio agent** you choose (engine, model and keys are changed in `/app/agents`). The same agent can be `@ghosty` in another room and `@build` here: the role reaches it per turn. A `@check` on a different engine than `@build` reviews better, because it doesn't share its blind spots.

## Install

1. **Teams → Settings → Apps → Software Factory** (workspace owner only).
2. Pick the repo and which Studio agent plays each role. Connect your GitHub to sign.
3. The factory room and its Tasks board are created. **Every room with repos is a factory**: you can bind more repos to other rooms.
4. In `/factory`, **"Ready for agents"** grades the repo and **"Prepare repo"** opens a single PR with what's missing: CI, `AGENTS.md`, `CODEOWNERS` and Dependabot. With GitHub Pro or Team (or a public repo), **"Protect main"** turns on the rule that nothing gets in without approval.

## Ask for a change

```text
@plan add exporting appointments to CSV from the calendar
```

1. `@plan` posts the **plan card**. Sign it with the button, with "✅" in the thread, or ask for changes with "cambios: …".
2. Once signed, `@build` builds with **your** GitHub and opens a draft PR.
3. `@check` reviews it. If it passes, the platform takes the PR out of draft and posts the **verdict card**.
4. You review and merge (from the card or on GitHub). The request closes by itself when merged.

Other ways in: assign a task to `@plan` in Tasks, **"What do you want to achieve?"** in `/factory` (it splits it into a sprint of 3 to 8 tickets), "Suggest requests" and scheduled reviews in "Automatic".

## The verdict card

What you need to review in two minutes, without rebuilding the change in your head:

- **Risk.** The platform marks it from what the PR touches, not from the agent's word: authentication, migrations, dependencies, public API, `.github/` or more than 400 lines → **high**. `@check` can raise it for delicate logic, never lower it.
- **Read first.** Up to five `file:lines` with the why, most delicate first.
- **Screenshots.** If the repo has previews, the screen that changed on desktop and mobile.
- **Changes, CI and review:** files and lines, CI status (verified on GitHub) and how many rounds it took with `@check`.
- **Details:** what `@check` said, folded.

## What's measured

In `/factory`, per room:

| Number | What it is |
|---|---|
| Pass first review | Of the PRs a person already reviewed, how many were approved without changes (or merged straight away). **The metric that matters.** |
| Review time | Median from "PR ready" to the first human review. |
| Get merged | Merged among closed requests. |
| @check corrections | Average rounds before approval. |
| Request to PR | Median from request to PR ready. |

## Next

- [Team per repo](/en/docs/factory/team-per-repo): `.ghosty/factory.md` and "@build con opus".
- [Knowledge base](/en/docs/factory/knowledge): what agents must know about your repo, in your repo.
- [Evals](/en/docs/factory/evals): compare agents and models on your own requests.
