← usetori.dev

Tori: Security and data handling

Version 20261028 · Octo Fintech Holdings LLC · This page is the reference for what Tori receives, how it moves, what it keeps, who else handles it, and how it is protected. The Privacy Policy and any signed data processing addendum point here for the specifics.

1. What Tori receives

Tori receives data when you sign in, when an agent session starts, and when a check runs, which happens when your coding agent finishes a task or when you run a Tori command yourself.

DataWhenPurpose
Contents of the code files the check selects: every code file git reports as modified or untracked in the repository when the check runs (not only the files the agent changed), or the files you name when you run tori check yourself; never any path on your project's ignore listeach checkthe check itself
The list of file paths in the repository (names only, no contents), minus ignored pathseach checkthe check
Contents of .env.example (the template file, no real values)each checkthe check
GitHub username and emailsign-inyour account
A one-time GitHub access tokensign-inexchanged for your Tori session; used once to read your GitHub identity, not stored
A machine identifier (a hash of hostname, user, OS and architecture); a label only if you set TORI_AGENT_LABELstart of each agent sessionidentifies which machine the agent ran on, in the record
The project identifier: the repository's git remote URL (normalized, credentials removed), or, when the repository has no remote, local: followed by a 12-character hash of the directory's absolute path, a stable per-machine, per-directory identifierinstall and each checkidentifies the project
The Tori client's package name and version (the HTTP User-Agent, e.g. @earntori/mcp/0.1.11)each requestdiagnostics; tells which client version made a request

The check selects files by git status, so untracked work in progress in the same repository is included unless you exclude it. Paths you list in .tori/project.json under ignore (tori ignore add fixtures/, seeds/**, scratch) are never sent for checking, never appear in the file-path list, and never leave your machine; re-running tori init preserves the list.

Tori does not receive any other file, your application's runtime data, your customers' data, or credentials. It never reads the repository as a whole and runs no background process.

2. What Tori does with it

The files are checked against rules on Tori's servers. The checks are deterministic rules. No AI model or model provider is in the data path. The data is not used for any other purpose, not used for training, and not shared with or sold to anyone.

3. How the data moves

  1. Your agent finishes a task
  2. The Tori command-line tool runs on your machine and reads the code files git reports as modified or untracked, minus ignored paths
  3. It sends them over HTTPS (TLS) to Tori's API, hosted on Vercel
  4. The check runs in memory on Vercel; the files are not written to storage
  5. The results (findings and the signed record) are written to Tori's database, hosted on Neon

Processing and storage are in the United States (AWS us-west-2, Oregon).

4. What is kept, and for how long

KeptRetention
Findings: file path, line number, rule, messagelife of the account
The signed record: hashes, timestamps, receiptslife of the account
Account details: GitHub identity, project identifierslife of the account
Machine identifier, and the label if you set onelife of the account; the record's first entry for that machine is permanent
Not kept
File contentsprocessed in memory and discarded after the check
Request bodies in logsTori's application logs do not include file contents or request bodies
GitHub access tokenused during sign-in and discarded

Vercel runtime logs (request metadata, application messages) are retained for 1 day. Neon's restore window is 1 day, meaning deleted data can be recovered for up to 1 day after deletion and not after.

On request, or when the account is closed, findings, records and account details are deleted within 30 days.

5. Subprocessors

ProviderRoleData it handlesRetentionAttestation
VercelHosts Tori's APIFile contents in memory during the check; request metadata in logsFiles: not retained. Logs: 1 daySOC 2 Type II
NeonHosts Tori's databaseFindings, the record, account detailsLife of the account; 1-day restore windowSOC 2 Type II
GitHubSign-in (OAuth)GitHub identity onlyPer GitHubSOC 2 Type II

No other third party is in the data path. Tori will give 30 days' notice before adding a subprocessor.

6. Security

7. Commitments

8. Contact

Ben Quaye · security@usetori.dev