One-line change, 75% cost cut
airCloset CTO Ryan Tsuji cut GitHub Actions CI costs to roughly a quarter of the original by switching runners twice. Each migration was a one-line change to runs-on. The final setup, on Namespace, also slashed p90 latency by 37% and eliminated silent hangs that plagued the previous provider.
Why CI costs balloon with AI agents
Tsuji identifies two compounding factors: AI agents push more frequently, increasing run count, and teams add more CI tasks (linting, coverage gates) as development speeds up. A single test workflow at airCloset runs 3,000–3,500 times per month. Run count times task count equals a quietly growing bill.
The migration path
- Until late March: GitHub-hosted (2-core)
- Late March to June: Blacksmith (4 vCPU)
- Late June to now: Namespace (4 vCPU/8GB)
They also evaluated self-hosting on AWS spot instances but rejected it due to instance startup overhead. Always-pooled runners win.
Each migration is literally a one-line change:
jobs:
test:
runs-on: nscloud-ubuntu-24.04-amd64-4x8
Migration 1: GitHub-hosted to Blacksmith
Comparing two weeks on either side, median run time dropped from 340s to 139s (-59%), and p90 from 598s to 157s (-74%). The machine doubled from 2-core to 4 vCPU. Unit price: GitHub 2-core $0.006/min, Blacksmith 4 vCPU $0.008/min. For 1.33x the price of 2 cores, you get twice the machine. Per-run cost dropped ~45%.
But Blacksmith had a flaky hang issue: npm install would occasionally hang silently, leaving runs stuck until the 6-hour default timeout. Over ~2.5 months, 32 runs died at a 30-minute timeout without notice. Manual cancels weren't counted, so 32 is a floor.
Migration 2: Blacksmith to Namespace (with a failure)
Namespace's Developer plan caps concurrency at 32 vCPUs (8 machines at 4 vCPU each). airCloset's AI-driven parallel development blew past that, causing queue pileups. They rolled back to Blacksmith after two days, upgraded to Business plan (160 vCPUs, 40 machines), and re-migrated successfully.
Lesson: measure peak concurrency before switching. Pull run history from the GitHub API to get the peak number of simultaneously running jobs.
Measured results: tail shrinks more than median
The rollback provided a controlled experiment. Comparing Blacksmith (rollback window) vs Namespace on identical workflows:
- Median: 378s → 339s (-10%)
- p90: 839s → 526s (-37%)
- Hangs: 32 → 0
For agent-loop operation, tail latency matters more than median because loop iteration time is set by the slowest link.
Cost math
Published unit prices (Linux x64, as of July 2026):
| Runner | Size | Price/min |
|---|---|---|
| GitHub-hosted standard | 2-core | $0.006 |
| GitHub larger runner | 4-core | $0.012 |
| Blacksmith | 4 vCPU | $0.008 |
| Namespace | 4 vCPU/8GB | $0.004 (prepaid) |
Namespace's 4 vCPU costs less per minute than GitHub's 2-core. Per run, GitHub → Blacksmith cut ~45%, Blacksmith → Namespace roughly halved it again. Total: ~25% of the GitHub-hosted era.
Caveats: Namespace has a plan fee ($100/month Team, $250/month Business). Overage is $0.006/min. Prices change; check current pages.
Which tier are you in?
- Free tier: stay on GitHub-hosted. Do nothing.
- Past free tier, bill stings: Blacksmith or Namespace both offer a one-line change for twice the machine. Blacksmith has 3,000 free minutes/month; Namespace has a 30-day trial.
- AI agents are your main developers: choose on tail latency and stability, and estimate peak concurrency before migrating.
Actionable takeaways
- If you're paying for GitHub-hosted runners, switch to a cheaper provider with a one-line
runs-onchange. The cost savings are immediate. - Measure peak concurrency before migrating to a plan with concurrency caps. Use the GitHub API to find the max number of simultaneous jobs.
- For AI-driven development, prioritize tail latency and stability over median speed. Silent hangs stall agent loops.





