Title: Self-hosted GitHub runners, fresh for every job
URL: https://codemany.com/features/single-use-runners
Description: Self-hosted GitHub runners from Codemany are single-use: each job gets a fresh just-in-time runner on your Mac or Linux box. Change one runs-on line.
All pages as Markdown: https://codemany.com/llms.txt

---

[Home](https://codemany.com/) › [Features](https://codemany.com/features)

# A fresh self-hosted runner for every job

Codemany gives every GitHub Actions job a fresh self-hosted runner on your own Mac or Linux machine. Each runner takes one job, then it is removed and a new one starts.

## What you get

Most self-hosted GitHub runners live for weeks. Files from one job stay around for the next. Codemany works a different way. Every job gets its own just-in-time runner, used once.

- **A clean folder for every job.** Old build files can't break the next build.
- **No runner chores.** You never run `config.sh` or remove old runners.
- **Your own machine.** Jobs run on the Mac or Linux box you already have.

## The one-line change

You don't write any runner config. Change `runs-on` in your workflow and push.

```
name: CI
on: push
jobs:
  build:
    runs-on: [self-hosted, codemany]
    steps:
      - uses: actions/checkout@v4
      - run: make test
```

Keep `self-hosted` first. Then a job never lands on a GitHub-hosted machine by mistake. To keep a job on Linux, use `runs-on: [self-hosted, Linux, codemany]`. Every label is in [Runner labels](https://codemany.com/docs/advanced#labels).

## How a single-use runner works

A GitHub Actions runner that is self-hosted usually stays registered. Codemany's runners only live for one job.

1. Register just in time
   Codemany registers a runner with GitHub, with the labels `self-hosted` and `codemany`.
2. Take one job
   GitHub still schedules the job and shows its log. It hands the runner one job.
3. Exit and wipe
   When the job ends, the runner exits. Codemany removes it and wipes its folder.
4. Start a fresh one
   A new runner starts and waits for the next job.

If a runner crashes, Codemany replaces it. Updates wait until running jobs finish. The full story is in [Single-use runners](https://codemany.com/docs/guides/ephemeral-runners).

## One machine, many repos

You don't need one machine per repo. A self-hosted GitHub runner for multiple repositories is the normal case here. Pick your repos, or a whole organization, in the app.

Each repo keeps a warm runner while there are spares. Idle runners move to repos with waiting jobs. Busy runners are never touched.

Each job needs about 4 GB of memory, 2 CPU cores and 15 GB of disk. An 8 GB Mac runs 1 job at a time. A 16 GB Mac runs 3. To run more at once, add machines.

## What it does not do

A fresh runner keeps jobs apart from each other. It does not keep a job away from your machine.

- **It is not a sandbox.** A job runs as your user. Files it changes outside its folder stay. Read [what a self-hosted runner is](https://codemany.com/docs/guides/self-hosted-runner) and [Runner security](https://codemany.com/docs/guides/runner-security) first.
- **It adds no tools.** Jobs use the tools on your machine. Nothing is preinstalled.
- **No Windows and no Intel Macs.** You need an Apple silicon Mac on macOS 14 or later, or 64-bit Linux with systemd.

On Linux, you can turn on a [fresh VM per job](https://codemany.com/features/vm-per-job) for more isolation. It is off by default.

## Start your trial

1. Install
   Get the Mac app, or run one command on Linux.
2. Sign in
   Sign in with GitHub and pick your repos.
3. Change one line
   Set `runs-on: [self-hosted, codemany]` and push.

Every step is in [Get started](https://codemany.com/docs/get-started). Prices are on the [pricing page](https://codemany.com/pricing).

## Questions

### What do I change in my workflow?

One line: `runs-on: [self-hosted, codemany]`. Codemany does the rest.

### Is the runner reused between jobs?

No. Each job gets a new just-in-time runner. It is removed after the job, and its folder is wiped.

### Can one machine serve several repos?

Yes. Pick the repos in the app, and any of them can use the machine. Idle runners move to repos with waiting jobs.

## Related

Read next: [single-use runners in detail](https://codemany.com/docs/guides/ephemeral-runners), [what a self-hosted runner is](https://codemany.com/docs/guides/self-hosted-runner), [an optional Linux VM per job](https://codemany.com/features/vm-per-job) and [Get started](https://codemany.com/docs/get-started).

Codemany is $20 a month for 2 machines. Try it free for 14 days, with no card.

[Start a 14-day trial](https://codemany.com/docs/get-started)
