One line. Every provider.
Change runs-on to ci-router and every CI job is placed on the provider and size that best fit availability, price, performance and latency — with fallback, one bill, and a placement that learns from every run.
How it works
The router owns everything GitHub-facing; providers only need to run our runner.
1 · workflow_job
Our GitHub App receives the queued job with its labels, repo and workflow. A card on file is required — no card, no runs.
2 · placement
The engine scores every provider × size on live availability, list price, and learned wall-time/cost/steal/memory per (repo, workflow, label) — epsilon-greedy, with a fallback chain.
3 · boot + run
A single-use JIT config boots our own runner image on the chosen provider (thin bootstrap on third-party, warm baked image on briq). Telemetry at exit, VM destroyed.
Minutes per day, per provider
routed vCPU-time — the runs-on.com-style comparison
Billed per day, per provider
provider cost + margin — one invoice
Public usage
Anonymized aggregates from GET /v1/public/stats?days=30 — finalized UTC days only (the newest point is at least 2 days old and never changes once published). Buckets backed by fewer than 5 teams are withheld, and days with nothing publishable are dropped (missing ≠ zero).
Not enough public data yet — with fewer than 5 teams per bucket, nothing is published.
The routing table
API-first compute providers, resellable directly or via BYOK credentials. Adding one is a single adapter file.
Price per vCPU-minute (list)
what the placement engine optimizes against — GitHub-hosted included for reference
Pricing
A card on file is required to run jobs — PAYG works on list prices, no provider deal needed.
Pay as you go
Dedicated
Security
Irreducible truth: a workflow can always read its own secrets — use OIDC short-lived credentials and protected environments. Full model in the repo's docs/security.md.
Design process, open
This prototype's UI and brand were explored in public rounds — every board is a self-contained page served from the repo's design/ folder.
All pages & rounds index ↗
App, API and every design round (dashboard candidates, identity, icon benchmark, 7 logo rounds) — http://127.0.0.1:4779/index.html
Latest logo round: 3D cube-check ↗
Isometric square with the bottom angle as a green check — Codex + Claude boards, 30 marks with orange twins — design/logo-3d/