Run and operate

Costs, limits, and troubleshooting

What a run spends and on whose account, the four caps that bound one run, where a run reports its own cost, what each plan reaches, and the handful of things that go wrong first.

One run spends Actions minutes on your GitHub plan and model tokens on your model key, and Repo Fleet meters neither.

Who pays for what

A run spends two things, and Repo Fleet is on neither meter.

  • GitHub Actions minutes come off your own GitHub plan, exactly as your tests do. A public repository runs free; a private one draws the plan's included minutes, then pays per minute.
  • Model tokens bill the key you added as a secret, priced per million by the model the run uses.
  • Repo Fleet runs no model, meters no task, and keeps no copy of your code.

What one run reports it spent

  • The result the action writes at the end of a run names its cost in dollars, its turns, and its duration.
  • execution_file is the step output holding that execution log, for a later step to read, upload, or comment.
  • display_report: true on the step writes the report, cost included, to the job summary, so the run's own page carries the number.
  • The Console totals what every run has spent on the key; GitHub's billing page does the same for minutes.

The four caps that bound one run

  • --max-budget-usd in claude_args stops Claude Code once the run's API spend reaches that number. It is the only cap counted in the thing Anthropic bills.
  • --max-turns caps how many times Claude calls the model, so a run going in circles ends before it reaches the budget.
  • timeout-minutes is GitHub's hard stop on the job, and it caps the minutes the job can bill. Left out, GitHub allows a job six hours.
  • A concurrency group keeps runs to one at a time, so the worst hour costs one run rather than a queue of them.
  • A cap stops a run, never a spend already made. A run that fails still spent what it spent.
  • Claude Code in GitHub Actions sets all four in one file, running on a schedule is where they matter most, and timeouts and concurrency covers the two GitHub keys on their own.

Keeping a run cheap

  • Narrow the trigger. A label, or a path filter, runs the agent on what you meant rather than on every push.
  • Read the first few runs before you widen anything.
  • Cap it outside the file too. A spend limit on the Console workspace and a budget on GitHub Actions catch what the file cannot.

What each plan reaches

  • Free takes every public repository on every account you link, and one private repository in total.
  • Pro takes every repository, public and private.
  • A repository past the limit says so where you meet it. Pricing has the rest.

When something goes wrong

What you see Usually
The workflow never runs Nothing triggers it, or a schedule was edited on a branch rather than the default one.
The Claude step fails at once ANTHROPIC_API_KEY is missing, empty, or spelt differently in the file.
The push at the end is refused The token has no contents: write, or the branch is protected.
No pull request appears The token has no pull-requests: write.
A run queues and stays there Another run holds the same concurrency group.
The run stops mid-task It reached --max-turns, --max-budget-usd, or the job's timeout-minutes.
Runs lists nothing Nothing has run in the last seven days, or the app cannot see that repository.

Where to look

  • The log on github.com is the whole truth: every command, its output, and the step that stopped.
  • The editor's findings catch what GitHub would refuse, before a run spends anything.
  • Still stuck? Contact us with the repository and the run.