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

Claude Code GitHub Actions cost: minutes, rates, caps

Convika Team12 min read

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

Claude Code's GitHub Action bills GitHub Actions minutes on top of Claude's tokens. Anthropic's examples run it on ubuntu-latest: $0.006 a minute in a private repository, free in a public one. A self-hosted runner bills no minutes, and Skipbox is one at a flat $39 a month with unlimited minutes.

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

  • The runner: the one your workflow's runs-on: line names. Anthropic's examples all say runs-on: ubuntu-latest, GitHub's 2-core Linux runner.
  • The rate: GitHub bills that runner at $0.006 a minute in a private repository and rounds every job up to a whole minute.
  • A month: the job's minutes times its runs. GitHub's detailed usage report has a workflow_path column that gives you the real number.
  • The caps: an if: on the job, concurrency, paths, timeout-minutes, --max-turns, and a GitHub budget.
  • No meter: GitHub bills nothing for a self-hosted runner's minutes. Skipbox S is $39 a month for a 4 vCPU runner, however many minutes Claude and your CI run.

Which runner Claude Code's action runs on

The one you name. Claude Code's action is a step in a job, and the job's runs-on: line picks the machine. GitHub's workflow syntax: "Use jobs.<job_id>.runs-on to define the type of machine to run the job on," and "The destination machine can be either a GitHub-hosted runner, larger runner, or a self-hosted runner."

Anthropic's own pages say the same thing from two sides:

  • Its three example workflows (respond to @claude, review a pull request, run on a schedule) all say runs-on: ubuntu-latest. So its cost note reads: "the Claude Code GitHub Action runs on GitHub-hosted runners, which consume your GitHub Actions minutes."
  • The action's README lists: "Runs on Your Infrastructure: The action executes entirely on your own GitHub runner (Anthropic API calls go to your chosen provider)."

On a private repository, ubuntu-latest is a VM with 2 CPUs and 8 GB of memory, billed as GitHub's Linux 2-core runner.

Other coding agents bill the same meter:

AgentWhere its job runs, in its own docsWhat GitHub bills
Claude Code GitHub Actionruns-on: ubuntu-latest in Anthropic's examplesThe minutes of the runner the job names
Codex GitHub Action"Run the job on a Linux or macOS runner." Its examples say runs-on: ubuntu-latestThe minutes of the runner the job names
Copilot code review"Copilot code review runs on standard GitHub-hosted Ubuntu Linux runners by default."On private repositories: "The runner cost draws from your account or organization's included compute usage. Additional usage is billed at standard GitHub Actions rates."
Copilot cloud agentGitHub Actions compute"the calculated runner cost draws from your account's monthly included compute usage"

What a minute costs

GitHub's rates for Linux x64 runners, per minute, read November 11, 2026, beside the runner that has no per-minute rate:

Runnerruns-on:SizePer minute, private repository
GitHub Linux 2-coreubuntu-latest2 CPUs, 8 GB$0.006
GitHub Linux 4-core (larger runner)the label you give it4 cores$0.012
GitHub Linux 8-core (larger runner)the label you give it8 cores$0.022
Skipbox S (made by Fluxenic, the company that publishes this site)skipbox4 vCPU, 8 GBNone. $39 a month, unlimited minutes

Four rules decide what a Claude run adds:

  • Whole minutes. "GitHub rounds the minutes and partial minutes each job uses up to the nearest whole minute." A job that ends after 20 seconds bills 1 minute.
  • The whole job. The job runs until Claude finishes, so the time Claude spends waiting on the model is runner time. A 10-minute run on ubuntu-latest is GitHub's own example: "$0.06 USD is deducted from the repository owner's included compute usage (10 × $0.006 USD)."
  • Included compute first. GitHub Team includes $18 of compute a month, which is 3,000 minutes on ubuntu-latest. Claude's runs share it with every other job. Past it, GitHub bills each minute.
  • The repository's owner pays. "Usage is charged to the repository owner, not the person who triggered the workflow runs."

In a public repository, standard GitHub-hosted runners are free, so Claude's action uses no billed minutes there.

The minutes are one of two bills. The other is Claude's: "each interaction consumes tokens based on the length of prompts and responses, task complexity, and codebase size." With an API key, Anthropic bills those tokens. "If you authenticate with an OAuth token, runs use your Claude subscription instead of API billing." A longer run raises both.

Count a month from the usage report

You don't have to estimate. GitHub's detailed usage report lists minutes by workflow file.

  1. Open your organization's Billing & Licensing, then the metered usage page. GitHub's docs: "At the top of the page, click Get usage report," pick the detailed report, and "Click Email me the report." The detailed report covers "a maximum period of 31 days."
  2. Filter the workflow_path column to Claude's workflow file, such as .github/workflows/claude.yml. The detailed report "includes the same fields as the summarized report and adds username and workflow_path."
  3. Add up three columns for those rows: quantity (the minutes, on the actions_linux SKU for ubuntu-latest), gross_amount, and net_amount, "the amount that your account will be billed." The part your included compute covered is in discount_amount.

Organization owners and billing managers can get the report. For one run, GitHub also shows "the billable job execution minutes for an individual workflow run."

Before a month of data exists, the arithmetic is:

minutes a month = runs a month × minutes per run, each run rounded up

The runs are what surprise people. Anthropic's review example starts on pull_request with types: [opened, synchronize, ready_for_review, reopened], and synchronize fires on every push. With 40 pull requests a month, 5 pushes each, and a 6-minute review, that is 40 × 5 × 6 = 1,200 minutes. Claude "skips draft and closed pull requests, pull requests it judges not to need a review," and ones it already commented on, but the job has started by then and bills its minute.

Claude's pushes also start your other workflows. Anthropic's docs tell you to let the action push as the Claude GitHub App when CI doesn't run on its commits, because "GitHub doesn't trigger workflows on commits made with the default GITHUB_TOKEN." Those CI minutes are in the same report, under your CI's workflow_path. What coding agents do to a CI bill has that arithmetic.

Cap the minutes

Anthropic's review example with four caps added:

name: Claude review
on:
  pull_request:
    types: [opened, ready_for_review]
    paths:
      - "src/**"
concurrency:
  group: claude-review-${{ github.event.pull_request.number }}
  cancel-in-progress: true
jobs:
  review:
    runs-on: ubuntu-latest
    timeout-minutes: 15
    permissions:
      contents: read
      pull-requests: read
      issues: read
      id-token: write
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 1
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          plugin_marketplaces: "https://github.com/anthropics/claude-plugins-official.git"
          plugins: "code-review@claude-plugins-official"
          prompt: "/code-review:code-review --comment ${{ github.repository }}/pull/${{ github.event.pull_request.number }}"
          claude_args: '--max-turns 10 --allowedTools "mcp__github_inline_comment__create_inline_comment"'
  • Fewer triggers. Without synchronize, the review runs when a pull request opens or leaves draft, not on every push. In the @claude workflow, keep Anthropic's if: contains(github.event.comment.body, '@claude') on the job: it "keeps runners from starting on comments that don't mention @claude."
  • paths. The workflow starts only when a changed file matches. For the opposite filter, GitHub says: "When all the path names match patterns in paths-ignore, the workflow will not run."
  • concurrency. One group per pull request means "there can be at most one running job or workflow in a concurrency group at any time." With cancel-in-progress: true, a new run stops the one still going.
  • timeout-minutes. "The maximum number of minutes to let a job run before GitHub automatically cancels it. Default: 360." Without it, a stuck run can bill 6 hours.
  • --max-turns. Anthropic's cost list: "Set --max-turns in claude_args to limit iterations." Fewer turns cap the tokens and the minutes together.

A GitHub budget is the hard stop: "For metered products such as GitHub Actions, Copilot AI credits, or cloud sandboxes, you can set budgets to prevent usage once the budget threshold is reached." It stops more than Claude. In GitHub's own example of an Actions budget that has run out, "members are now blocked from using all GitHub-hosted runners until the next billing cycle or until the budget is increased." Leave Stop usage when budget limit is reached off, and the budget only emails you at 75%, 90%, and 100%.

Make the minutes stop mattering

Every cap above trades minutes for work Claude doesn't do. The other way is a runner with no meter.

GitHub's billing page lists "Self-hosted runners" under usage that "remains free independently and does not reduce the included compute usage." GitHub announced a charge for self-hosted runners on December 16, 2025 and shelved it the next day; nothing has been charged since. You can run that machine yourself, or rent one that someone else runs.

Skipbox is the second kind. It runs Linux x64 jobs from private repositories on a VM kept for your account, at $39, $79, or $149 a month for 4, 8, or 16 vCPU, with "Unlimited minutes" and "No usage charges." A job moves with one line:

jobs:
  review:
    runs-on: skipbox

The same job-minutes on ubuntu-latest and on Skipbox S, with GitHub Team's $18 taken off:

Job-minutes a monthubuntu-latest on GitHub TeamSkipbox S
10,00010,000 × $0.006 − $18 = $42$39
20,00020,000 × $0.006 − $18 = $102$39
43,200, one runner busy all month43,200 × $0.006 − $18 = $241.20$39

Skipbox S is cheaper above 9,500 job-minutes a month: ($39 + $18) ÷ $0.006. Against GitHub's larger runners of the same size, Skipbox S is cheaper above 4,750 job-minutes a month, M above 4,410, and L above 3,977. Past those numbers, a busier agent adds nothing to the bill.

What a flat price doesn't change:

  • Claude's own bill. The tokens cost the same on any runner.
  • Jobs at once. Skipbox S runs one 4 vCPU job at a time, and the next waits. Five @claude requests at the same moment run one after another. Waiting adds nothing to the bill, and more plans run more at once.
  • Other systems. Skipbox runs Linux x64 only.
  • Copilot code review. GitHub's docs say: "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 that review stays on GitHub's runners.

Anthropic's examples are written for ubuntu-latest, so try your own workflow before you move it for good. 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. To go back, change the line back.

Start a free Skipbox trial on skipbox.dev

Every runner sold at a flat monthly price is in flat-rate GitHub Actions runners, and per-minute runners are compared in Blacksmith alternatives.

Frequently asked questions

How much does Claude Code's GitHub Action cost in GitHub Actions minutes?

The minutes of the runner its job names, at that runner's rate. Anthropic's examples use ubuntu-latest, which GitHub bills at $0.006 a minute in a private repository, each job rounded up to a whole minute, after your plan's included compute. A 10-minute run is $0.06. In a public repository, standard runners are free. On a self-hosted runner, GitHub bills no minutes: Skipbox S is a flat $39 a month with unlimited minutes. Fluxenic, the company behind Convika, makes Skipbox.

Does Claude Code GitHub Actions use my GitHub Actions minutes?

Yes, on a GitHub-hosted runner in a private repository. Anthropic's docs: "the Claude Code GitHub Action runs on GitHub-hosted runners, which consume your GitHub Actions minutes." The runner bills for the whole job, including the time Claude waits on the model. Claude's tokens are a separate bill, from Anthropic or your Claude subscription.

Can Claude Code's GitHub Action run on a self-hosted runner?

Yes. The action's README says it "executes entirely on your own GitHub runner," and GitHub lets a job's runs-on: name a self-hosted runner. GitHub bills nothing for self-hosted runner minutes. Skipbox is a self-hosted runner that someone else runs: change the job's line to runs-on: skipbox, for a flat $39 a month on its 4 vCPU plan.

How do I stop Claude Code from using too many GitHub Actions minutes?

Start fewer jobs and cap each one. Trigger on @claude or on opened, not on every push. Add a paths filter, a concurrency group with cancel-in-progress: true, timeout-minutes, and --max-turns in claude_args. A GitHub Actions budget stops spending at a limit, but it stops your other GitHub-hosted jobs at the same limit.

How do I see how many minutes Claude Code used this month?

Download GitHub's detailed usage report from your organization's billing pages and filter the workflow_path column to Claude's workflow file. quantity is the minutes and net_amount is what GitHub bills after your included compute. The detailed report covers up to 31 days.

Can I use my Claude Pro or Max subscription instead of an API key?

Yes. Claude Code's docs describe CLAUDE_CODE_OAUTH_TOKEN as "an OAuth token that authenticates with your Claude subscription, available on Pro, Max, Ultra, Team, and Enterprise plans," made with claude setup-token. Runs then use the Claude subscription, not API billing. The GitHub Actions minutes are billed the same either way.

Sources

Read 2026-11-11 (Japan time).