Cromford · the software factory
The first factory ran on water. This one runs on tokens.
Every other coding agent stops when the pull request opens. Ours starts there.
Cromford Mill, Derbyshire, 1771. Richard Arkwright turned a craft into a line.
Shipped. The invoices list now has an Export CSV button. It respects the current filters.
An example run, sped up. Every station is a real stage of the engine; the ticket and numbers are illustrative.
A pull request is not a shipped change. We take it the rest of the way.
Someone still has to review it, merge it, ship it, check it in production and tell the person who asked. That is most of the work. Cromford does all of it, and refuses to call it done when the evidence is missing.
It stops at your ceiling.
Set a limit per ticket and per month. When the line reaches it, it stops and tells you.
Approval is tied to a commit.
A separate reviewer reads the diff against the ticket. Push again and it reviews again.
Any model, switched any time.
Bring your own model keys. Every call is priced and rolled up to the PR it served.
Your accounts. Your machines. Your factory.
Cromford runs on accounts you already have. Fork it, fill in one settings file, and point it at a repo. Secrets stay on your box, never in the settings file.
- 01
Fork and configure
Fork the repo, copy the settings template, fill in one key per line.
- 02
Check the plan, create the resources
A dry run lists every resource you need. For now you create them by hand; a one-command install is coming.
- 03
Add a repo, file a ticket
Label an issue
ai-build. Triage reads it, and your first PR follows.
# 01 fork and configure $ gh repo fork cromford-ai/cromford --clone $ cp env-templates/selfhost.conf.example selfhost.conf # 02 check the plan $ bin/selfhost-install.sh --config selfhost.conf --dry-run # 03 add a repo, file a ticket $ bin/load-project.sh acme/invoices --project invoices $ gh issue create -R acme/invoices --label ai-build \ --title "Export the invoices list as CSV" ✓ triage picked up #412
The parts after the pull request. All of them.
A bill on every change
Every model call is priced and rolled up to the pull request it served.
Review that can say no
A separate reviewer reads the diff against the ticket. Approval is tied to the commit it read.
A merge queue with judgment
Routine changes merge on their own. Risky ones wait for your approval.
Checked in production
After the deploy, it signs in like a user and checks the new behavior is really there.
Mistakes become checks
Review findings that repeat turn into rules that fail in CI, so they stop coming back.
Archie, the operator
Watches the goals you set and messages you only when something needs you.
Screens are illustrations of real features. Tickets and figures are examples.
Bring your own model. Change it without a deploy.
Claude, Codex, Grok, OpenRouter or Fireworks. Pick any of them as your primary and line up the others as fallbacks. Every stage has its own route, stored as data, so you can change it tomorrow without touching code.
| Stage | Primary | Fallback | Why |
|---|---|---|---|
| triage | grok | openrouter | reads threads, decides ready or not |
| plan | claude | codex | writes the acceptance tests |
| build | codex | claude | the expensive part, capped per ticket |
| review | claude | fireworks | a different model from the builder |
An example setup. When a primary hits a limit or an outage, the stage moves down its ladder on its own.
What people ask first.
Is it really free?
Yes. The engine is Apache 2.0. You pay your own cloud and model bills, and nothing else. Cromford Cloud, where we run it for you, is coming.
Do I need Claude?
No. Use Claude, Codex, Grok, OpenRouter or Fireworks as your primary, per stage, with any of the others as fallbacks.
Which boards does it work with?
GitHub Issues today. Label an issue ai-build and the line picks it up. Unlabeled issues are never built.
Will it merge something I didn't want?
Merging only happens through Cromford's own gates, never from the build session. Your CI has to pass, the reviewer has to approve the exact commit, and risky changes wait for a person.
What stops it from running up a bill?
Hard caps per ticket and per month. When the line hits one, it stops and tells you. Every call is priced, so you can see what each change cost.
What happens when a ticket is unclear?
Triage asks the person who filed it and waits. It won't build on a guess.