CommonCompute
Get startedDownload the Mac app
Security — Trust model

Your jobs run on other people's Macs. Here's exactly what that means.

Common Compute is a marketplace: the machine that executes your job is an Apple Silicon Mac owned and operated by an independent provider — not a server in a datacenter we control. That architecture is why the prices are what they are, and it has real confidentiality consequences. This page lays out what is protected today, what is not yet, and what you should (and shouldn't) send during beta.

What is protected today

The pipe, the dispatch, and the economics.

TLS in transit

Every hop — your client to our API, our coordinator to the provider's Mac, results back out — is TLS 1.2+. Nothing crosses the public internet in the clear.

Signed task envelopes (Ed25519)

Each task assignment is signed by the coordinator with Ed25519. Provider machines verify against a pinned public key, with a 5-minute clock-skew window and replay protection, and refuse anything that doesn't verify. A third party can't inject work into a provider's Mac or impersonate the router.

Providers can't choose whose jobs they run

Dispatch is platform-controlled and push-only. There is no endpoint a provider can poll to browse the queue or request a specific task, and the assignment carries no customer identity, so targeting a particular customer is not something a provider can arrange. What a provider can do is switch off whole categories of work — by workload, by model, by priority tier — and those declines carry no penalty.

Storage and size caps

Inputs and results are staged in Cloudflare R2 under per-task keys. A job's input is deleted when the job settles — seconds, not days — because nothing reads it again once the task is terminal; a sweep every 15 minutes is the backstop for anything the fast path missed. Results are kept until the 30-day sweep, since you still have to fetch them, and either can be deleted on demand with DELETE /v1/jobs/{id}/data. Per-workload input size caps bound what any single task can carry to a provider machine. Worth being clear about what this does and does not buy: shortening the window reduces how long a payload is sitting somewhere it could leak from. It does nothing about the assigned provider, who sees the input in plaintext while running it.

Restricting who can run a job

Jobs may be submitted with data_class: 'confidential', which routes them only to providers flagged as vetted. It is a hard filter applied before scoring, not a preference: if no vetted provider is available the job waits and then fails saying so, rather than falling back to the open marketplace. Vetting is granted manually and audit-logged, and nothing a machine reports about itself can earn it — the flag asserts something about the operator, not the hardware. Two honest limits. First, this is a supply-chain control rather than a cryptographic one: it narrows who the provider can be, and the assigned provider still decrypts your payload to run it. Second, we are not yet running a standing vetted pool, so confidential capacity is arranged per customer — talk to us before sending traffic with this flag, or it will queue and then fail rather than run.

Verified results, reputation, and payout gating

Providers are continuously tested with golden tasks — canaries with known answers, dispatched through the same path as customer work and carrying byte-identical requirements — plus replication sampling on a slice of standard jobs, sampled with a keyed hash so a device can't predict when it's being watched. A golden failure freezes that device's payouts immediately and counts against an integrity score that gates whether it is paid at all; enough of them push it out of customer dispatch. Earnings only become payable after a verified track record. Two honest limits: our canary inputs are drawn from a fixed fixture set today, so a device that has seen one could in principle recognise it again, and a provider can decline categories of work without penalty. Neither lets a provider pick a customer.

A locked-down provider app

The Mac app runs under Apple's hardened runtime with an outbound-only network entitlement, and ships Developer ID signed, notarized, and stapled. It declares no server entitlement and opens no listeners anywhere in its source — though since it is not App-Sandboxed, that is a property of how we wrote it rather than one the OS enforces. Job inputs can't reach private network addresses — every fetch goes through a gate that refuses non-public hosts even across redirects. It is not App-Sandboxed today, so treat file-system containment as a hardening item we still owe you, not a guarantee. Providers never see your account identity — tasks arrive pseudonymous.

The verification design — golden tasks, replication sampling, reliability scoring, payout gating — is documented in full in our result-verification spec. The defense against dishonest providers is economic, not cryptographic: we make sustained fraud unprofitable and detectable, we do not make it mathematically impossible.

What is not protected yet

The assigned provider sees your input in plaintext.

Job inputs are not end-to-end encrypted to the provider. To execute your task, the assigned Mac must decrypt and process the actual input — the prompt, the audio file, the image, the document. A provider who modified their machine could read, copy, or exfiltrate the inputs of jobs assigned to them, and no cryptographic control currently prevents that.

What limits the blast radius today: providers can't pick whose jobs they receive, inputs are size-capped and pseudonymous, retention is short, and the verification and payout machinery makes operating a dishonest node costly. What doesn't exist yet: payload encryption to an attested per-device provider key, and data-classification routing that keeps sensitive jobs on higher-trust hardware. Both are on the roadmap; neither has shipped. We will update this page when that changes.

If your threat model can't accept a third-party machine seeing job inputs, don't send that workload yet. That's the honest answer.

What to send during beta

Match the data class to the trust model.

Good fit
Public or low-sensitivity data: published documents, marketing assets, open datasets, product imagery, podcast audio, code you'd push to a public repo. This is what the network is built for today.
Think first
Internal business data. Strip or pseudonymize identifiers before submission — embeddings of anonymized text, transcription of recordings without personal details. Use the API's data controls: short retention is the default, and deletion on request is honored.
Don't send (yet)
Regulated or PII-heavy data: health records (HIPAA), payment card data (PCI), government-classified material, or anything containing credentials and secrets. Until payload encryption to attested provider keys ships, this data does not belong on the beta network.

Questions about whether your workload fits?

Ask before you send — we'll tell you straight if the trust model isn't there yet for your data.

security@commoncompute.aiBack to the security overview