Reference
Security model
Review the trust boundary, retained data, and credential lifecycle.Treat every job as untrusted
The containment boundary is a fresh, resource-bounded VM—not a runner process or host directory permission scheme. The menu-bar app exposes no inbound listener, and guest networking is NAT-only.
Trusted events
Only these workflow sources may execute on Local Mac or Cloudflare:
- pushes;
- manual workflow dispatches; and
- pull requests whose head belongs to the same repository.
Fork pull requests and unverifiable events fail closed before repository code runs.
Retained data
| Mirage retains | GitHub retains |
|---|---|
| Immutable IDs and routing decisions | Step logs and general check output |
| Job lifecycle and timing metadata | Artifacts and cache payloads |
| Bounded cached step names and timing | Actions secrets |
| One redacted cancellation-like annotation | Authoritative status and attempt history |
Credentials
- Pairing codes are hashed, single-use, and expire after ten minutes.
- The random device credential is stored as a this-device-only Keychain item.
- JIT runner configuration is ephemeral and cleared after readiness or termination.
- Dashboard sessions use Secure, HttpOnly cookies and immutable GitHub identity.
- GitHub OAuth tokens and passkey private keys are not persisted by Mirage.