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 repositories that are selected in the GitHub App and explicitly enabled in Mirage. Supported events are pushes, manual workflow dispatches, and pull requests whose branch belongs to the same repository.
Fork pull requests and events Mirage cannot verify 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. 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 Mac or Linux host runners | GitHub’s cache service |
| Actions cache on Cloudflare runners | Cloudflare R2, scoped to the relevant account and repository |
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
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.