modernci Agent-first CI.
Cost

One number:
cost per merged change

What it cost to get one change from an agent's "done" to merged: the machines and the agents, together. It comes from the record of usage, never from a projection. A number we don't measure is a number we don't claim.

Waste counts against it. A superseded run, a flake re-run or an idle warm machine bought nothing, so it raises the number.Quality lowers it. A right verdict the first time means no re-run and no wasted agent attempt.
Customer zero · our own monorepo

Before and after, measured.

Our own monorepo is a large Rust codebase with about 30 agent PRs open at any time, climbing four rungs to main. Both sides cover the same number of merged changes. Until the switch-over is done, this shows "before" and says so.

BeforeGitHub Actions + homegrown engine
AfterModernCI
Machine minutesper merged change
measuring from the Actions bill
at switch-over from usage records
Agent spendper merged change
measuring from host reports
at switch-over
Wasteby class
~2,000 runner-seconds per PR: 4 cold shards rebuilding the same tree
at switch-over
Done to mergemedian
8 h stalls with no alarm; a rung 10,000 commits behind for weeks
at switch-over
Cost per merged change
measuring
at switch-over
Metering

Every unit of work makes one record.

Records are immutable, appended, and written before any status is posted, so no verdict goes unmetered. Everything goes on the record. Prices are applied on top: changing a price never changes a record. Export them with modernci daemon usage.

usage/2026-10-11.ndjson one line, formatted
{
  "id": "01JA9Q4M7X…",  "tenant": "acme",
  "repo": "monorepo", "move": "lane-search → predev", "check": "test",
  "kind": "run",
  "backend": "warm-2", "backend_owner": "tenant", "size": "large",
  "started": "2026-10-11T09:14:02Z", "ended": "2026-10-11T09:17:42Z",
  "minutes": 4, "saved_minutes": 0, "cost_actual": 0,
  "outcome": "green", "waste": "",
  "engine": "0.4.2", "config": "3f9c0e1"
}
Waste classes
The waste classes and what each means
ClassWork that bought nothing
supersededA newer push made the run moot.
cancelledStopped before it judged anything.
duplicateThe same inputs, judged twice.
infraA backend failed, not the code.
flakeA second witness: a re-run on another machine to confirm a flaky test.
warm_idleA warm machine that waited for work.
Budget caps per repo per day · a daily digest · the biggest waste, every 2 hours
Pricing

Free on your machines, metered on ours.

Pricing will be set from real usage records, like Actions but simpler: per minute by machine size. Numbers when we have them.

Standalone daemon

Your machines

$0

Free, forever. The whole product: the loop, the store, secrets, the UI and the operator MCP. It works with no cloud and keeps working if we vanish.

Fleet on modernci.dev

Many daemons, one view

metered

Connect any number of daemons with modernci cloud connect. Health, alarms, cost and waste across all of them. Code, logs and secrets stay home.

Platform backends

Our machines

per minute

Offered to any daemon as one more backend, by size. The router uses them only when they are the cheapest way to make the deadline.

Rates by machine size
SizeOn your machinesOn our machinesAgent spend
small · mediumlower rate · set from recordsone rate · set from recordsshown, never marked up
large · xlargelower rate · set from recordsone rate · set from recordsshown, never marked up
gpulower rate · set from recordsone rate · set from recordsshown, never marked up
a reused result$0$0none