Reference
Security and privacy
Understand which code can run, how jobs are isolated, and where your CI data is stored.
Eligible repositories and events
Mirage runs code from private, active repositories selected in the GitHub App. Workflows
choose Mirage through their runner labels or routing setup. Supported events are pushes and manual workflow dispatches,
plus pull_request, pull_request_target, merge_group, schedule, workflow_run, and delete
workflows whose head branch belongs to the same repository. GitHub runs each of these from a
branch of your repository, so the code is code that could already be pushed there.
Merge-queue runs use GitHub's temporary branch in your repository after a pull request is
added to its queue. Their head repository must match the selected repository.
Fork pull-request runs, including pull_request_target runs for a fork, and other events, such as
issue_comment or repository_dispatch, are not allowed onto your runners. On a workflow configured for local execution with hosted fallback, Mirage can move
that run to its fallback before repository code runs locally. A job with a literal
mirage-* label has no fallback, so Mirage cancels it instead. Direct Cloudflare labels
have no hosted fallback.
Job isolation
| Execution environment | Boundary |
|---|---|
| Apple-silicon Mac | A fresh Linux or macOS virtual machine per job, with configured resource limits. Your personal working directories are not mounted into it. |
| Dedicated Linux host | A disposable Docker container per job. CPU and memory are enforced; the disk setting is a scheduling budget. |
| Proxmox | A disposable QEMU virtual machine cloned from your prepared template for each job. |
| Cloudflare | A runner in Cloudflare Containers, in the selected shared or BYO account. |
The dedicated Linux agent runs trusted workloads and needs nested Docker support. With standard Docker it requires privileged containers, which can give a job root-equivalent access to the host. Do not use that configuration for code you do not trust. The Linux host Docker path does not provide the Mac runner’s VM boundary. The Proxmox connector uses a separate QEMU VM per job, but its security still depends on the template, Proxmox cluster, network, and API-token configuration you manage.
Your data
| Data | Where it is kept |
|---|---|
| Full step logs, artifacts, secrets, and check results | GitHub Actions |
| Routing decisions, run and job status, step names and timings | Mirage, to display run history and diagnose routing |
| A bounded, redacted cancellation annotation | Mirage, when available, to explain a cancelled job |
| Actions cache on Mirage runners | Selected GitHub service, scoped R2 storage, opaque machine archives, or None |
Mirage also stores account configuration, machine health and capacity information, and settings audit history. It does not store full CI step logs or general check output. Host diagnostics are redacted service logs, separate from CI output.
Credentials and access
Mac setup uses a twenty-minute browser approval link. After you sign in, check the verification code shown in Terminal, choose the managing account, and confirm. Setup receives a one-time pairing code automatically. Pairing codes expire after ten minutes and can be used once. The Mac host service registers a public key and keeps its private key in a protected system Keychain. Runner registration credentials are temporary. You do not put Mirage credentials in your workflow or expose a public listener on the Mac for pairing.
First dashboard sign-in uses GitHub. You can then add a passkey linked to that identity; its
private key stays with your authenticator. CLI login uses your native operating-system
credential store and can be revoked with mirage auth logout.
For your own Cloudflare account, Mirage encrypts the provisioning token and places the runtime token in the runner backend’s Worker secrets. GitHub App credentials are not copied into your Cloudflare account.
To withdraw repository access, follow Change or remove access. To withdraw machine capacity, use Accounts and teams.