# How Skipbox works

> What happens between a push and a finished job: the webhook, the checks, a runner made for one job, a fresh VM, and its deletion.

Skipbox runs GitHub Actions jobs as self-hosted runners that Fluxenic operates in Helsinki, Finland. GitHub still runs your workflows, keeps your logs and shows the results. Skipbox only provides the machine each job runs on.

## From push to finished job

1. A job whose `runs-on` asks for a Skipbox label is queued on GitHub.
2. GitHub tells Skipbox through the app's webhook.
3. Skipbox checks the job: the repository must be private, and the account needs a plan or its trial, with room for one more job of that size. A job that doesn't fit waits its turn. See [Concurrency and queueing](https://docs.skipbox.dev/concurrency).
4. Skipbox asks GitHub for a runner registration that takes a single job, with the job's own labels.
5. A new VM starts with that runner. The runner takes one job with those labels, and GitHub sends it your code, the secrets your workflow passes, and a token for the job.
6. When the job ends, the VM is deleted with its disk. A runner still registered is removed.

## What stays the same

- Your workflows, actions and logs stay on GitHub. Skipbox never edits or pushes a workflow, and keeps no copy of your code or logs.
- Moving a job is one line: its `runs-on`. Moving it back is the same line.
- Jobs whose `runs-on` you don't change keep running on GitHub's runners.

## Where jobs run

Jobs run in Helsinki, on dedicated servers Fluxenic rents from Hetzner and on Hetzner Cloud servers made for one job each, whose vCPU are shared with other Hetzner customers. There is no other region. See [Network and egress](https://docs.skipbox.dev/network).

## One VM per job

A VM runs one job and is never given another, because the next job could come from someone else's pull request. A job can run for up to 6 hours: see [Job time limit](https://docs.skipbox.dev/job-time-limit). How the VMs are kept apart: [VM isolation](https://docs.skipbox.dev/isolation).

Updated 2026-11-09 · https://docs.skipbox.dev/how-it-works
