Self-hosted GitHub Actions

Faster CI for agents

Dedicated runners for teams and solo developers using AI coding agents. Try one CI run free before you pay. Your agents connect the project. We maintain the server

A full web application CI run on one server

Public website, customer portal with an admin area, and FastAPI backend

12:14

Six jobs waited for available memory. Five finished before the portal browser checks

A second project on the same server, a pull request check: 12:01 with 6,640 backend tests and 311 portal browser scenarios. Run time starts when the workflow launches and ends when the last job finishes. Your own measurement will show your result

jobs in this run
13
backend tests
7,257
browser checks
1,365
retries of failed tests
0

AI coding agents run CI throughout the day

After each change, your agent waits for the full CI result. A dedicated runner is worth testing if a run takes more than 15 minutes or jobs spend time in a queue.

Your agent can measure this right away: it reads the GitHub Actions run history and prepares a report. The report includes:

  • median and 90th percentile of full run time
  • time spent waiting in the queue
  • the five slowest steps
  • run count and total job minutes

The agent only reads GitHub Actions data. It leaves code and settings unchanged

Get the CI measurement prompt

Is Progon a fit?

A good fit

  • AI agents write code and run CI throughout the day
  • GitHub Actions in private repositories
  • Linux workloads: Python, Node.js, Playwright and Docker
  • Full runs take more than 15 minutes, or jobs wait in a queue

Outside our scope

  • Public repositories, where a runner may execute code from an outside pull request
  • macOS, iOS or Windows builds
  • GitLab CI or Jenkins

From trial run to acceptance

  1. You + agent + us

    Try a run

    Your agent measures your current CI right away. Send us the report. We arrange one free run on our runner and compare the time with your CI. We agree access and data cleanup before the trial

  2. You + us

    Agree the price

    After the trial, we agree the scope and fixed price. You choose a plan and pay the invoice. For the own-server plan, rent a server from a hosting provider and give us the agreed access

  3. You + agent + us

    Connect your project

    We prepare the server. Your agent follows the connection prompt to create a one-time token. You forward it to us so we can register the runners. The agent then moves heavy jobs to the server

  4. Your agent

    Check the result

    Your agent repeats the measurement on the new server. It compares run time, test counts, retries and failures before and after connection

Managed runners or your own server

  • One free CI runRun your CI on our runner before you pay and compare it with your current setup. We agree access and data cleanup before the trial
  • Refund if CI is no fasterIf the median full run time does not decrease after connection, we refund your first payment. Read the refund terms

Your own server

We set up CI for your first two repositories on your server

$990

one-time setup, USD

  • Dedicated server configuration
  • CI connection and optimization for your first two repositories
  • Result verification and handover of the configured CI
  • You pay hosting separately at your provider's rate
  • Setup fee is paid before work starts
  • Setup within 1 day from the agreed start
  • Optional ongoing support
  • Setup fee refunded if acceptance measurements show no improvement

Support for your own server

Optional support for the own-server plan

$330

per server per month, USD

  • Server monitoring
  • Scheduled software updates
  • Restoration of configured CI
  • 5 hours of requested changes each month

Prices are in USD and include any taxes Progon must collect. We confirm the final itemized total, payment route and start date before you accept an order. Consumer cancellation rights apply as set out in the service terms

Additional repositories cost $65, $195 or from $390 to connect, depending on the work. We credit available included hours first

How hours and extra work are chargedHide hours and extra work details

Additional repositories

Pay once to connect a repository. There is no extra monthly fee per repository

  • Standard connection

    $65

    1 hour

    Connect an existing workflow to the runner and verify the run

  • With adaptation

    $195

    3 hours

    Adapt workflows, caches and parallel jobs, then verify the result

  • Complex connection

    From $390

    Estimate agreed in advance

    Rework the build, environment or job sequence within an agreed estimate

All prices are in USD. Available included hours reduce the agreed connection fee. You pay only the balance

Included hours

  • We use the current month's available hours first. You do not pay again for that work
  • You pay the rest of the agreed estimate separately. That work does not also consume included hours
  • Initial setup and fixes to our setup errors do not use included hours
  • Unused hours do not roll over to the next month

Estimates and extra work

  • We agree the scope and price before work starts
  • Extra work costs $65 per hour and starts only after you agree
  • If we underestimate an agreed task, its price stays the same
  • Scope extensions and new work need a separate agreement

Monthly scope

  • We agree the repository count and monthly work in advance
  • An extra repository does not increase the fee for the current server
  • If you need another server, we agree it separately

Example: a third repository on the managed plan

Connection is estimated at 3 hours. You have 2 included hours left this month, so we credit them first. You pay $65 once for the remaining hour. The monthly fee stays at $590

How this CI run finished in 12:14

Heavy stages reserve memory before they start and release it when they finish

Jobs from your projects

  • TestsProject A · running
  • BuildProject B · running
  • Browser checksProject A · waiting for memory

One server for all projects

32 GB memory · SSD

Memory reservations
A · TestsB · BuildAvailable
32 threads

No fixed CPU quotas per job

Caches on SSD
  • Packages
  • Browsers
  • Docker
  1. Reserve

    Memory is reserved before start

  2. Run

    Projects run alongside each other

  3. Release

    The next job can use the reservation

Allocation example. Reservation sizes are illustrative
More about resource allocationHide details
  • One shared queueMemory and CPU are shared across projects. A heavy stage waits in the shared queue until enough memory can be reserved
  • Memory for each stageStages and reservations are configured in advance. Each stage releases its reservation when it ends, reducing the risk of running out of memory
  • CPU without fixed quotasA job can use all 32 threads when they are free. Heavy jobs receive more CPU weight when threads are in demand
  • Caches stay on the serverPackages, browsers and Docker images do not need to download on every run. Frequently used files stay in memory

Server load during the 12:14 run

The same run shown in the timeline above

of 32 CPU threads used at peak
28
CPU threads used on average
16
GiB of process memory at peak
8.3
jobs stopped for lack of memory
0
reserved: portal browser tests reserved: screenshots reserved: backend reserved: other jobs idle runners and services memory used, including cache process memory

Memory, GiB

reservation budget: 26 GiB 1

CPU threads in use

1. Screenshot checks started as soon as the backend build finished

Show chart dataHide chart data
TimeReserved, GiBUsed with cache, GiBProcesses, GiBThreads
0:016.418.30.80
1:0221.219.72.32
2:0225.822.83.810
3:0225.623.23.89
4:0325.625.47.024
5:0425.625.06.822
6:0426.024.87.326
7:0026.024.57.426
8:0126.025.17.825
9:0226.023.86.823
10:0224.719.62.810
11:0222.217.61.64
12:036.415.80.90

One server for all your projects

When one project is idle, another can use the available memory and all CPU threads.

To add a project, your agent creates a token. We register its runners and configure the job stages. You do not need to write a separate resource allocator

Two projects ran their full checks on the same server at once. One finished in 13:36

Choose how you run GitHub Actions

Compare who runs the server and how costs change as your CI workload grows

Show the comparisonHide the comparison
OptionWho manages itCostAs you run more CI
Progon managed serverWe manage a dedicated server for your private Linux workloads$590/monthServer, initial setup and support includedSame server feeWithin the agreed server capacity and work scope
GitHub-hosted runnersGitHub manages the runners. You maintain your workflowsPer minuteBeyond the usage included in your GitHub planMore billed minutesCharges depend on runner type and included usage
Your own serverYou rent the server. We set up CI, with optional ongoing support$990 onceHosting paid separately
Optional support: $330/month
Capacity is the limitExtra resources or another server need a separate agreement

GitHub Actions stays your workflow platform with every option. Progon runs heavy jobs on self-hosted runners. You can leave light jobs on GitHub-hosted runners

A fixed server fee covers the agreed capacity. More jobs may wait when memory is full. We assess your workload before connection and agree any extra resources in advance

We have not benchmarked the example suite against a standard GitHub-hosted runner. Use the free trial to compare with your current CI

Prompts for your coding agent

Give the prompt to your agent. It needs repository access and the GitHub CLI. Use Claude Code, Codex, Cursor or another coding agent

Your agent prepares a report on your current CI right away. It only reads GitHub Actions data and leaves code and settings unchanged

Measure GitHub Actions CI for this repository right now, using the run history from the last 7 days. Do not change code or settings.

1. List runs from the last 7 days:
   gh run list --limit 500 --created ">=DATE_7_DAYS_AGO" --json databaseId,workflowName,event,createdAt,conclusion
2. Get the jobs for each run:
   gh api repos/{owner}/{repo}/actions/runs/RUN_ID/jobs --paginate
3. For each job, calculate queue time (started_at minus created_at) and execution time (completed_at minus started_at). Identify checkout, dependency installation, build and test steps separately.
4. Report the run count, total job minutes, median and 90th percentile of full run time, the share of time spent in the queue, and the five slowest steps.
5. Assess whether a Progon dedicated server fits this repository. It fits private repositories with Linux jobs when a full run takes more than 15 minutes or jobs wait in a queue. It does not support public repositories or macOS, iOS or Windows builds.
6. Save the report to ci-measurement.md, show it to me, and suggest that I send it to Telegram @progonci.

Before you pay

  • One serverIf the server fails, checks wait for repair. If a managed server is unavailable through our fault for more than 24 consecutive hours, we reduce that month's fee in proportion to the downtime. You configure any fallback to GitHub-hosted runners separately
  • Secrets and accessA runner can access repository secrets. Your own server is rented in your name. A managed server is dedicated to you, with server access held only by us. We inspect code or secrets only when you request diagnostics. We wipe the server disk within 3 working days after the contract ends
  • Network and queuesServer capacity alone cannot remove every network or queue delay. The measurement shows where your workflows spend that time
  • Run timesThis page shows measured results for two projects. Your CI needs its own measurement
  • If CI is no fasterWe compare the median full run time before and after connection. Your agent uses the same measurement method, repositories, workflows and job set. If the median does not decrease, we refund the first managed month or the own-server setup fee
  • Payment and termsServices are provided by a Russian individual entrepreneur under the linked terms. We agree the scope, invoice currency and payment route before payment. Availability depends on your location and payment provider. Read the terms

Start with a free CI run

Message us on Telegram to arrange one free run on our runner