skip to content
Control

Parallax

Control

Every key of parallax.yml, the switches that exist, how to opt out at each level, how to remove the App, and what is kept for how long.

parallax.yml

The file at a repository’s root supplies repository commands and review settings. It does not turn session capture on or off. The current installer captures all repositories unless this machine has a local repository allowlist. The reader takes one key: value per line; check may also be a list.

keymeans
testThe command that runs the suite. Every proof is a comparison against it. Absent, the door guesses from the root: package.json with a test script → npm test, Cargo.toml → cargo test, pyproject.toml or pytest.ini → pytest -q, go.mod → go test ./…; the check run then says "guessed".
setupRun once in the sandbox before test (npm ci, pip install -r …). Guessed with test when a lockfile or requirements file is present.
checkA command, or a list of commands, run with the change applied before reviewers read: a type-check, a lint. Absent, the precheck's defaults by root marker file.
benchThe command that runs the repository's benchmark. Profiled for the reviewers instead of the suite. Never guessed.
commenttrue posts the one terminal result comment per reviewed head on a pull request; false (what the connect PR writes) posts none. The check run and the line suggestions are posted either way: the suggestions are the review.
deliver: proven-onlyOnly proven findings are eligible for suggestions and the fix PR. The rest stay listed in the check run. The first pass, which delivers only unverified code, posts nothing. Absent (the default): findings are delivered with their evidence labels. Refuted patches and patches that regress the suite are never offered one-click or included in the fix PR.
review: offOpt out of pull-request reviews without changing local session capture. The door reads this setting from the pull request's target branch before cloning; explicit re-runs obey it too. An absent key or file does not opt out of PR review.
parallax.yml
# Repository commands and review delivery options.
# Local capture scope is configured separately on each machine.
test: npm test
setup: npm ci --no-audit --no-fund
check:
  - npm run typecheck
  - npm run lint
comment: false
# bench: npm run bench
# deliver: proven-only

Source: packages/github/src/config.ts · packages/github/cards/github.input.json · packages/lens/cards/delivery.json · packages/latency/cards/latency.input.json

Lenses and switches

By default a review runs every lens (bugs and security as one question, perf, hygiene, drift) and the mechanical dead-code scan on the diff, and delivers what it finds labelled by evidence. On door versions that support review narrowing, additional keys control the review: lenses (the lenses that run, by name), severity_floor (critical, high, medium or low: a proven finding rated below it is held in the check run and console), ignore (path globs cut from the diff before any reviewer reads it), and rules(free-text review rules handed to every reviewer; absent, the ## Code Review Rules section of AGENTS.md is used). What you control per repository beyond that is delivery (deliver) and the comment.

A door you run yourself has these switches in its environment. On the hosted door they are set once for everyone.

variabledoes
PARALLAX_PR_REVIEW=on|offAutomatic pull-request reviews on push. Default off; explicit review requests remain available.
PARALLAX_FIRST_PASS=offNo first pass on a pull request; the deep pass alone. Default on.
PARALLAX_INVESTIGATE=offReviewers read their shard without the repository tools (no investigation phase). The phase is on by default with no round or spend cap, and the old cap variables are refused at boot.
PARALLAX_A2A=offNo contrarian pair: findings from the bugs and security lenses are not put to a seat from another lab for a counter-claim.
PARALLAX_BRIEF=on|off|abWhether sessions get the session-start brief. Default on; ab splits by session id and is used inside campaigns.
PARALLAX_CONTINUAL=on|off|abWhether reviews get the continual store's lessons in their header. Default on; ab is used inside campaigns.
PARALLAX_SWEEP_MODE=immediate|nightly|rolling|offWhen sessions are swept: as they end (default), at PARALLAX_NIGHTLY_TIME, in staggered account batches, or never.
PARALLAX_ABANDON_MINHow many silent minutes end a session (30).
PARALLAX_JOB_MS · PARALLAX_SWEEP_JOB_MSThe wall clock of a PR review (20 min) and of a sweep (30 min) on a door in bounded mode. The hosted door runs unrestricted: no wall clock; each seat has an inactivity clock only. Operational: a cut step is could-not-run, never refuted.

Source: packages/server/cards/server.input.json · packages/server/cards/schedule.input.json · packages/discovery/cards/discovery.input.json · packages/continual/cards/injection-policy.json

Opting out

levelhow
Repository capture on one machineSet the capture allowlist to the absolute repository paths you want captured. Roots include descendants and are not globs. No list, or an empty list, means all repositories. Each developer configures their own machine; deleting parallax.yml does not opt out.
Automatic session uploadsSet PARALLAX_STORE_UPLOAD=off before launching your coding agent. An explicit upload command can still send sessions, and separately enabled session reviews still send review requests and reports. This is not a switch that stops local capture.
One machineClose coding agents and run the review and capture uninstall commands below, then restart the agents. Do not delete config.json as an opt-out: missing repository configuration means all repositories.
One upload credentialRevoke its capture token on the setup page. This prevents future use of that token; it does not remove local hooks or delete sessions already uploaded.
Automatic session reviewsRun the session-review uninstall command to remove review hooks. Capture has its own uninstall command and can stay installed independently.

Follow capture scope setup to set the allowlist. To remove review and capture hooks, run these commands in the environment where they were installed. They preserve local history by default and do not erase already uploaded sessions.

terminal or PowerShell
node "$HOME/.parallax-client/app/session-review/bin/session-review.mjs" uninstall
node "$HOME/.parallax-client/app/capture/bin/parallax-capture.mjs" uninstall

Source: capture/src/repo-allow.mjs · capture/bin/parallax-capture.mjs · session-review/bin/session-review.mjs

Removing the App

  1. Decide separately whether to remove capture on developer machines. Neither deleting parallax.yml nor uninstalling the GitHub App stops local capture.
  2. On GitHub, open Settings → Applications → Installed GitHub Apps → Parallax → Uninstall. The door receives the installation webhook and removes the installation from your account; a pull request on that installation is answered installation not registered and never reviewed.
  3. Run the machine step above on each developer’s machine.

Uninstalling erases that installation’s stored PR sessions and their derived review data. Queued PR jobs are removed and running jobs receive cancellation before they can rebuild those sessions or persist more review work. Laptop captures and other installations’ PR sessions are not erased just because they share a repository; retention and explicit deletion still apply. Erasure also removes review sessions that depended on the deleted sessions as context.

Source: packages/github/cards/github.input.json · packages/server/src/index.ts · packages/server/cards/retention.json

Data retention

whatkept
Sessions: turns, tool calls, signals, the raw transcript mirror, the source snapshot30 days from the session's end or last activity (PARALLAX_RETAIN_DAYS on a self-hosted door), then removed by the retention sweep. Fields over 256 KiB are stored truncated and marked.
Reviews, forks, lens runs, sweeps, deliveries and their outcomesIn the door's store, per account, until the session they belong to is deleted.
Lessons (recall)30 days from the last confirmation; a re-confirmation pushes the expiry out. DELETE /v1/recall/:id removes one for good.
Continual store entries (write-back lessons, suppressions)In the store with their receipts; an entry with expires_at_ms is not injected past it (the review's own tool paths 90 days, its candidates 30, for session memory).
Prepared fix PRs waiting to publishOne day in the durable outbox after the terminal result.
Content-free exclusion markers (off / incognito)Survive session deletion and retention, so excluded bytes are never re-ingested. They hold no content: an account and a path hash.

DELETE /v1/sessions/:id removes the session, its runs, the lessons whose only source it was, its corrected tool paths, its note and its snapshot in one transaction; review artifacts derived from it are erased with it. Every table carries the account id and every read filters on it; no export or training set reads another account’s rows.

Source: packages/session-capture/cards/session-capture.input.json · packages/recall/cards/recall.input.json · packages/continual/cards/store.json · packages/server/cards/pr-followup.output.json · packages/calibration/cards/calibration.input.json · packages/session-memory/cards/policy.json