Execution and limits

What Sigma does with your code

What is fetched

Sigma fetches your pull request's exact head and base commits by SHA, as an immutable Git object snapshot — not your working tree, not a live clone it keeps updating. create_snapshot reads exact commit/tree/blob objects, ignoring working-tree edits; the fetch itself uses "a narrow repository-scoped installation token on the controller, with no checkout, repository execution, inherited Git credentials, hooks or redirects."

A snapshot is bounded: at most 128 MB and 20,000 entries. Every changed file in the review is guaranteed to fit (or the snapshot fails outright); beyond that, the smallest remaining files are archived first, and anything left out is recorded and shown to you as a scope note ("Sigma could not read everything") on that run.

Where it runs

Every review runs inside a disposable Docker sandbox: non-root user, a read-only system filesystem, no Linux capabilities, no new privileges, no Docker socket, and — for the default gateway executor — no network access at all (network=none). Command output is bounded and the whole container is removed after the attempt.

Subscription execution has a different boundary. On owner-login, the producer stage runs through a configured Claude subscription login and needs a route to Anthropic: it gets a Docker network with internal: true (no route off the host at all) whose only exit is a proxy that allows CONNECT only to api.anthropic.com, claude.ai, claude.com and platform.claude.com on port 443, and refuses every other host, port and method. That model also has no shell inside the login-holding container — every command is forwarded to a separate sidecar container with no login volume and no network at all. The offline guarantee does not currently extend to that stage's dependency installation and required checks, which still run inside the login-bearing container; closing that gap is open work (issue #146). See reviewers-and-executors.md for when owner-login applies.

The logins path adds a Codex ChatGPT-login verifier. The source baseline does not provide a Codex tool sidecar: its model-directed shell runs in the same sandbox as that login. Dependency preparation and required checks also run in the stage sandbox. Do not apply the gateway's credential-free offline guarantee to subscription stages or assume that a UI executor label closes this isolation gap. These paths need their own operational acceptance; a configured login is not proof of readiness or a grant for hosted/commercial use.

What leaves the host

Model calls leave your maintainer's Sigma host for a model provider. Which provider depends on the reviewer and executor:

  • Gateway executor (the default): both stages call out through Sigma's own credential gateway, using Sigma's API keys. Workers never receive provider keys directly.
  • Owner-login executor: the producer stage calls Anthropic directly from inside the sandbox through a configured Claude Code login; its verifier stage still runs on the API gateway. The person reading the profile is not automatically established as that login's owner or payer.
  • Logins executor: the Claude producer and Codex verifier use separate subscription logins and can send model requests to their respective providers. Availability requires the installation's enabled logins and repository gates.

In the configured “crossed” construction, Bravo's producer is Codex and its verifier is Claude; Charlie's producer is Claude and its verifier is Codex — so no producer is checked by its own provider's model.

What is kept

Sigma keeps a durable run record (stages, findings, cost, scope notes) and the snapshot/dependency artifacts it used, as host data outside the sandbox. How long these are kept is not yet defined: "Snapshot/dependency stores and retained logs are host data, outside tmpfs. Their per-artifact bounds do not constitute an aggregate host retention quota; release operations must include retention/backup policy." There is no per-review deletion request today.

The secret guard

Before anything a model wrote becomes durable — before it is saved as an artifact, before it reaches the run record, and again before a review is published — Sigma scans it for text shaped like a credential: Anthropic keys, Claude Code OAuth tokens, GitHub tokens, AWS access key IDs, JWTs, Bearer headers, and any unbroken 40+ character opaque run with a 20-character alphanumeric core. It also checks split/obfuscated forms of the same text (zero-width joiners, one-character-at-a-time spacing), so a token cannot slip through as s k - a n t - .... Ordinary review facts — a 40-character Git commit SHA, a SHA-256/512 digest, or a lockfile integrity hash — are exempted by exact form and keep publishing.

If a match sits in a finding's prose (title, claim, impact, evidence, suggested fix, verification), only that one field is replaced with a sentence naming the rule, the rest of the review still publishes, and a scope note is added: "Sigma withheld one finding's text because it looked like a credential (rule …, finding N, field …); that text was neither stored nor published." If a match sits anywhere else, the whole run does not publish: publication withheld: finding text resembles a credential, and the check names the rule and field — never the text itself.