Title: Self-hosted GitHub Actions macOS runner on your Mac · Codemany docs
URL: https://codemany.com/docs/guides/mac-runner
Description: Set up a self-hosted GitHub Actions macOS runner on a Mac mini or any Apple silicon Mac: install Codemany, sign in with GitHub, change runs-on. $20/month.
All pages as Markdown: https://codemany.com/llms.txt

---

[Guides](https://codemany.com/docs#guides)

# How to set up a self-hosted GitHub Actions macOS runner on a Mac

Turn a Mac mini, or any Apple silicon Mac, into a runner for your GitHub Actions jobs.

Install Codemany on a Mac with Apple silicon and macOS 14 or later, sign in with GitHub and pick your repositories. Then set `runs-on: [self-hosted, codemany]` in your workflow. Each job gets a fresh, single-use runner on your Mac, and GitHub still schedules the jobs and shows the logs.

## What you need for a macOS runner

- A Mac with Apple silicon, on macOS 14 or later. A Mac mini works as well as a laptop.
- A GitHub account that can add runners to the repo: a repo admin, or an organization owner.
- Room for the jobs. 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.

## Self-hosted runner setup on a Mac

1. Install
   [Download Codemany](https://codemany.com/download), drag it to Applications and open it.
2. Sign in with GitHub
   Choose **Sign in with GitHub** and enter the code the app shows on github.com. Your 14-day free trial starts by itself, with no card. Your token stays on your Mac.
3. Pick repositories
   Choose repositories, or a whole organization, then **Continue**. Public repos stay off unless you turn them on for that repo.
4. Install the Codemany Runners App, if asked
   Only when an account you picked doesn't have it yet: choose **Install…** and approve it on GitHub.
5. Change one line
   Set `runs-on` in your workflow, as below, and push a commit.

There is no `config.sh` or `svc.sh install` to run: Codemany registers a fresh just-in-time runner for each job, and its background service keeps taking jobs while the app is closed. Every step in detail: [Get started with Codemany](https://codemany.com/docs/get-started).

## Send a workflow to your Mac runner

The `codemany` label sends the job to your machines and nowhere else. Keep `self-hosted` first so a job never lands on a GitHub-hosted machine by mistake.

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

If you also run Codemany on Linux, add `macOS` to keep the job on a Mac: `runs-on: [self-hosted, macOS, codemany]`. Every label is explained in [Advanced › Runner labels](https://codemany.com/docs/advanced#labels).

## Keep the Mac awake

Jobs stop when the Mac sleeps. Codemany keeps the Mac awake while jobs run, until 2 minutes after the last job. You can change that to while runners are online, or never.

- **Laptop:** keep it plugged in, or use an external display when the lid is closed.
- **Low Power Mode** lets the Mac sleep anyway, so turn it off on a runner.
- **The app can stay closed.** Codemany's background service keeps running jobs.
- **Updates install themselves**, after running jobs finish.

## Xcode and other tools your jobs get

Jobs use whatever is installed on your Mac: Xcode, Homebrew packages, Docker. Nothing is preinstalled. Codemany checks your tools every 30 minutes and adds labels a job can ask for, such as `xcode` and `docker`.

Downloads from `actions/setup-node`, `setup-python` and other `actions/setup-*` steps stay in a shared tool cache between jobs. Details: [Advanced › Tools and caching](https://codemany.com/docs/advanced#tools). Building apps? See [iOS and Xcode builds on your own Mac](https://codemany.com/docs/guides/ios-xcode).

## Run more jobs at once

Add another Mac, a Linux server or a cloud machine ([Machines](https://codemany.com/docs/machines)). Each machine takes one slot on your plan. $20/month includes 2 machines; each extra machine is $10/month ([Pricing](https://codemany.com/pricing)).

## Questions

### What GitHub Actions macOS runner labels does Codemany use?

Every Mac runner carries `self-hosted`, `codemany`, `macOS` and `ARM64`. Codemany adds `xcode` and a version label such as `xcode-26.0` on a Mac with Xcode, and `docker` while a Docker engine answers on the Mac ([all labels](https://codemany.com/docs/advanced#labels)).

### Can a job keep runs-on: macos-15 or macos-latest?

Those labels pick GitHub-hosted runners, so the job keeps running on GitHub, and Codemany's runners don't carry them. To use your Mac, set `runs-on: [self-hosted, codemany]` and add `xcode-26.0` if the build needs Xcode 26.

### What does a GitHub Actions macOS runner cost per minute?

GitHub bills its hosted macOS runners at $0.062 a minute (3-core M1). A self-hosted runner with Codemany is a flat $20/month for 2 machines, however many minutes the jobs take ([savings calculator](https://codemany.com/savings)).

### Do I have to keep the Codemany app open?

No. Codemany's background service keeps running jobs when the app is closed.

### Does it work on an Intel Mac?

No. Codemany needs a Mac with Apple silicon on macOS 14 or later, so Mac runners are always `ARM64`.

### Where do I see the job logs?

On GitHub, as usual. You can also watch jobs in the app (**Overview** and **Runs**), the menu bar, or at `http://codemany.local:8825` from any device on your network.

### Why does my job stay Queued?

Every label in `runs-on` must match a runner, so a typo keeps the job waiting. More fixes: [Troubleshooting](https://codemany.com/docs/troubleshooting).

### Is a self-hosted runner on my Mac safe?

A self-hosted runner is not a sandbox: jobs run as your user. Only run workflows you would run in your own terminal. Read [Runner security](https://codemany.com/docs/guides/runner-security) and [Security & privacy](https://codemany.com/docs/security).

## Related guides

Read next: [self-hosted runner on Linux](https://codemany.com/docs/guides/linux-runner), [single-use runners](https://codemany.com/docs/guides/ephemeral-runners) and [cutting GitHub Actions costs](https://codemany.com/docs/guides/actions-cost).

[Previous Security & privacy](https://codemany.com/docs/security)[Next iOS and Xcode builds](https://codemany.com/docs/guides/ios-xcode)
