Open source · Apache 2.0

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.

Runs on your machinesAny model: Claude, Codex, Grok and moreYour GitHub
Mill · the lineFloorsChimneyWater wheelLit · ticket in workCromford · ElevationSheet 1 of 1 · 1771

Cromford Mill, Derbyshire, 1771. Richard Arkwright turned a craft into a line.

The lineExample run · acme/invoices
#412Export the invoices list as CSVai-buildFiled by Dana on GitHub Issues · 6 comments
cromford commented on #412

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.

Where other agents stop

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.

Hard caps

It stops at your ceiling.

Set a limit per ticket and per month. When the line reaches it, it stops and tells you.

Review that blocks

Approval is tied to a commit.

A separate reviewer reads the diff against the ticket. Push again and it reviews again.

Your keys

Any model, switched any time.

Bring your own model keys. Every call is priced and rolled up to the PR it served.

Self-host

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.

GitHubCloudflareFly or your own VMA model key
  1. 01

    Fork and configure

    Fork the repo, copy the settings template, fill in one key per line.

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

  3. 03

    Add a repo, file a ticket

    Label an issue ai-build. Triage reads it, and your first PR follows.

What's in the box

The parts after the pull request. All of them.

PR #418 · cost$
plan$0.41
build$2.38
fix round 1$0.64
review$0.69
total$4.12

A bill on every change

Every model call is priced and rolled up to the pull request it served.

Review · #4182 rounds
BLOCK 7a1e0d4round 1
No test covers an empty invoices list. The export would write a header-only file with no message.
APPROVE 3f9c2e1round 2

Review that can say no

A separate reviewer reads the diff against the ticket. Approval is tied to the commit it read.

Merge queue · invoices3
#417 dark mode togglemerging
#418 export CSVqueued
#415 billing schemawaits for you
schema, auth, billing and large diffs wait for a person

A merge queue with judgment

Routine changes merge on their own. Risky ones wait for your approval.

Production QA · #418passed
signed in as test user✓
/invoices shows Export CSV✓
file has 212 rows✓
filters carried into export✓

Checked in production

After the deploy, it signs in like a user and checks the new behavior is really there.

GuardrailsCI
findingnative confirm() in UI
seen3 reviews
becamerule: no-native-dialogs
nowfails in CI

Mistakes become checks

Review findings that repeat turn into rules that fail in CI, so they stop coming back.

Archie · chatI3
Merge rate on invoices dropped this week. Most blocks are missing tests. I recommend adding a test template to the plan step.
Archie approve I3

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.

Models

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.

RunnerClaudeRunnerCodexRunnerGrokRunnerOpenRouterRunnerFireworks
StagePrimaryFallbackWhy
triagegrokopenrouterreads threads, decides ready or not
planclaudecodexwrites the acceptance tests
buildcodexclaudethe expensive part, capped per ticket
reviewclaudefireworksa 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.

Questions

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.

Start

Clone it. Point it at your board. Watch your first ticket ship.