Aún no está en español, así que la ves en inglés.

AI coding agents and your CI bill: the GitHub Actions math

Convika Team11 min read

  • ci
  • github-actions
  • ai-agents
On this page

Coding agents open more pull requests, and every push runs your CI, so a per-minute GitHub Actions bill grows with them. At 3 pushes per pull request and a 10-minute job on GitHub's 8-core runner, 30 pull requests a day is 27,000 job-minutes: $594 a month. Skipbox M runs 8 vCPU jobs for a flat $79 a month.

Fluxenic, the company behind Convika, makes Skipbox, so the flat-price runner in this post is our own product. Every GitHub, Anthropic, and vendor fact below was read on its own page on November 11, 2026, quoted, and linked under Sources.

  • The cause: an agent pushes a fix for each review comment and each failed check, and every push starts your workflows again.
  • The bill: job-minutes × the runner's rate. It has no ceiling unless you set a budget, and a budget stops your jobs.
  • The wait: jobs queue when more arrive than your runners take at once.
  • The fixes that cut runs: cancel-in-progress, path filters, and fewer triggers for the agent's own job.
  • The fix that removes the meter: an always-on runner at a flat price. One 8 vCPU runner busy all month is 43,200 job-minutes: $950.40 on GitHub's 8-core runner, $79 on Skipbox M.

Why agents multiply CI runs

More pull requests, and more pushes to each. GitHub's Octoverse report says: "By September 2026, more than 40% of pull requests on GitHub started with an agent's first draft, up from 17% in March." The same report says GitHub Actions ran "more than three times last year's total" of jobs.

An agent doesn't open a pull request and stop. It pushes again for each review comment and each red check, and each push is a new CI run. Anthropic's docs for Claude Code's GitHub Action treat that as the wanted behaviour: when CI doesn't run on Claude's commits, they tell you to change how the action authenticates, because "GitHub doesn't trigger workflows on commits made with the default GITHUB_TOKEN."

One team's own words, from Forestwalk's June 8, 2026 post: "As our PR throughput has gone up, it's increasingly obvious that our CI actions are too slow and expensive." And later: "our agents run a lot of CI jobs."

The agent's own job bills minutes too. That arithmetic is in what Claude Code's GitHub Action costs in Actions minutes.

The arithmetic at 10, 30, and 100 pull requests a day

The assumptions, so you can swap in your own:

  • Each pull request gets 3 pushes: the first, and 2 fixes.
  • Each push runs one 10-minute job on GitHub's Linux 8-core runner, $0.022 a minute.
  • The month has 30 days. Agents don't take weekends.
  • The account is on GitHub Team, which includes $18 of compute a month.
Pull requests a dayCI runs a dayJob-minutes a dayJob-minutes a monthAt $0.022 a minuteAfter GitHub Team's $18
10303009,000$198$180
309090027,000$594$576
1003003,00090,000$1,980$1,962

For your own number: pull requests a day × pushes per pull request × job-minutes per push × 30 × your runner's rate. GitHub's Linux rates are $0.006 a minute for the 2-core ubuntu-latest, $0.012 for 4-core, $0.022 for 8-core, and $0.042 for 16-core, and "GitHub rounds the minutes and partial minutes each job uses up to the nearest whole minute."

The included $18 doesn't grow with the pull requests. Every run the agents add past it is billed in full.

Why CI gets slow when pull requests pile up

Three things stack:

  • Runs nobody needs keep running. An agent pushes 3 fixes in 10 minutes. Without a concurrency rule, all 3 runs go to the end, and only the last one matters.
  • Jobs arrive in bursts. Agents finish at the same moment more often than people do. 10 pull requests opened together, each with a 6-job matrix, is 60 jobs at once.
  • Runners are finite. GitHub's limits page lists the "Total concurrent jobs" on standard GitHub-hosted runners: 20 on GitHub Free, 40 on GitHub Pro, 60 on GitHub Team, and 500 on Enterprise. On runners you host, the limit is your machines. Jobs past it wait, and "A job can be in the queue for 24 hours before it is automatically cancelled."

On a per-minute runner you mostly get the bill and not the wait. On a fixed set of machines you get the wait and not the bill. The options below move you between the two.

The options

OptionWhat it cutsWhat it leaves
cancel-in-progressThe runs a newer push replacedEvery run that finishes still bills
Path filtersRuns for changes your tests don't readCode changes run in full
Larger GitHub runnersMinutes per job, when the job uses the coresA higher rate per minute
A GitHub budgetThe bill, at a hard limitIt stops every GitHub-hosted job at that limit
An always-on runner at a flat price, such as Skipbox (made by Fluxenic, the company that publishes this site)The meter: $79 a month for 8 vCPU, unlimited minutesJobs past the plan's size wait their turn

Cancel the run a new push replaces

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

GitHub's workflow syntax: "To also cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true." The minutes a stopped run already used are billed. The rest of it never runs.

Skip the runs that test nothing

on:
  pull_request:
    paths-ignore:
      - "docs/**"
      - "**/*.md"

"When all the path names match patterns in paths-ignore, the workflow will not run." Agents edit docs and comments as often as code.

Larger runners

A larger runner costs more per minute: GitHub's 4-core is 2 times the 2-core rate, and the 8-core is 3.7 times. The bill drops only when the job gets shorter by more than that. A test suite that already runs in parallel may; a single-threaded build won't.

An always-on runner at a flat price

A 30-day month has 30 × 24 × 60 = 43,200 minutes. One 8 vCPU runner that never idles runs 43,200 job-minutes:

Runner, 8 vCPUThe arithmeticA month
GitHub 8-core43,200 × $0.022$950.40
Skipbox Mflat$79

Skipbox M is cheaper: $950.40 ÷ $79 is 12 times its price. GitHub doesn't bill those minutes at all, because a runner from another company connects as a self-hosted runner, and GitHub's billing page lists "Self-hosted runners" under usage that "remains free independently and does not reduce the included compute usage."

Copilot code review uses Actions minutes too

Since June 1, 2026, each Copilot code review on a private repository is one more agent job on the same meter. GitHub's changelog of April 27, 2026: "GitHub Actions minutes will be consumed from your existing plan entitlement for each review that is run on private repositories, with any usage beyond your included minutes billed at standard GitHub Actions rates."

GitHub's billing page says it this way today: "Each Copilot code review consumes GitHub Actions compute in addition to AI credits." Reviews and CI draw on the same included compute, and "No eligible usage type has priority over another when drawing from the shared included compute usage."

To find the review minutes, download the detailed usage report and filter workflow_path by dynamic/agents/copilot-pull-request-reviewer.

The review job can't move to just any runner. GitHub's docs: "ARC is the only officially supported solution for self-hosting Copilot code review. For security reasons, do not use non-ARC self-hosted runners." ARC is Actions Runner Controller, which runs on Kubernetes. So Skipbox doesn't run the review job. It takes the rest of your CI, and the builds and tests you move leave GitHub's included compute for the reviews.

The same three teams on a flat price

A flat plan sells size, not minutes. Skipbox M runs one 8 vCPU job at a time, so the question is how many M plans the day's work fits in:

Pull requests a dayJob-minutes a daySkipbox M plans, work spread over 24 hoursSkipbox M plans, work packed into 8 hoursGitHub 8-core, a month
103001, $791, $79$180
309001, $792, $158$576
1003,0003, $2377, $553$1,962

Each plan count is the day's job-minutes divided by the minutes in the window (1,440 or 480), rounded up. That is the least that fits: the runners are busy most of the time, and jobs wait their turn. Add a plan and they wait less. Waiting adds nothing to the bill, and Skipbox's account page shows how many jobs are waiting and how long the oldest has waited.

Skipbox's prices are $39, $79, or $149 a month for 4, 8, or 16 vCPU, with "Unlimited minutes" and "No usage charges." Against GitHub's runner of the same size on GitHub Team, Skipbox S is cheaper above 4,750 job-minutes a month, M above 4,410, and L above 3,977. Against the 2-core ubuntu-latest, Skipbox S is cheaper above 9,500.

What it doesn't have:

  • macOS, Windows, or Arm. Skipbox runs Linux x64.
  • GitHub's memory per core. Skipbox M has 16 GB; GitHub's 8-core runner has 32 GB.
  • The Copilot code review job, as above.

No benchmark of Skipbox has been published, so this post claims no speed for it.

To move a job, sign in at skipbox.dev with GitHub, install the Skipbox app, and change the job's line:

jobs:
  test:
    runs-on: skipbox

skipbox asks for 4 vCPU; on plans with the larger VMs, skipbox-8x16 and skipbox-16x32 ask for those. The Skipbox trial runs one 4 vCPU job at a time for 7 days or 3,000 job-minutes from your first job, whichever comes first, and takes no card.

Start a free Skipbox trial on skipbox.dev

Per-minute prices across GitHub and 7 runner vendors are in how much GitHub Actions runners cost, and the vendors by billing model are in Blacksmith alternatives.

Frequently asked questions

Do AI coding agents increase GitHub Actions costs?

Yes. Every pull request and every push an agent makes starts your workflows, and GitHub bills each job by the minute. At 30 pull requests a day, 3 pushes each, and a 10-minute job on GitHub's 8-core runner, that is 27,000 job-minutes, $594 a month. A flat-price runner takes the minutes off the meter: Skipbox M runs 8 vCPU jobs for $79 a month with unlimited minutes. Fluxenic, the company behind Convika, makes Skipbox.

Why is CI slow since AI agents started opening more pull requests?

More jobs arrive than your runners take at once, so they queue. Agents push several fixes in a row, and without cancel-in-progress every older run still goes to the end. GitHub runs at most 60 standard jobs at once on GitHub Team; on runners you host, the limit is your machines.

How do I stop CI from running on every push an agent makes?

Add a concurrency group with cancel-in-progress: true, so a new push stops the run still going on that branch, and paths-ignore, so a docs-only push starts nothing. Then start the agent's own review on opened or on a mention, not on every push.

Does Copilot code review use GitHub Actions minutes?

Yes, since June 1, 2026, on private repositories. GitHub's billing page: "The runner cost draws from your account or organization's included compute usage. Additional usage is billed at standard GitHub Actions rates." On public repositories it stays free.

Can Copilot code review run on a self-hosted runner?

Only on Actions Runner Controller. GitHub's docs: "ARC is the only officially supported solution for self-hosting Copilot code review. For security reasons, do not use non-ARC self-hosted runners." Skipbox isn't ARC, so it doesn't run the review job. It runs the rest of your CI for a flat monthly price.

What is the cheapest way to run CI for AI coding agents?

Cut the runs first: cancel-in-progress and path filters cost nothing. For the runs that are left, a runner that is busy most of the day costs least at a flat price. One 8 vCPU runner busy all month is 43,200 job-minutes: $950.40 on GitHub's 8-core runner, $79 on Skipbox M.

Sources

Read 2026-11-11 (Japan time).