Privacy
Seatbelt works like your coding agent. To check your code, it reads your code. Your agent already streams your whole project to an API on every edit. Seatbelt sends it once, to the hosted engine, to catch mistakes before you share the link.
Your source passes through the detector and is not stored. It is read, then discarded, and only the redacted report is kept. Here is exactly what does and does not leave, a tighter pipe than the one you already trust.
What gets uploaded
A zip of your project source, built on your machine by the MCP. It is an allowlist, not a filter: only source and config file types go in, the code and config the check actually reads. Images, binaries, media, and fonts never leave your machine, because nothing outside the allowlist is ever added.
What never leaves
- Dependencies and history. node_modules, .git, and the common build dirs (.next, dist, build, and the rest) never leave, and neither do most dotfiles.
- Credential files, named. Some dotfiles do go up, because they are where a committed token actually sits. Alongside
.envfiles, the zip includes.npmrc,.envrc,.netrc,.pypirc,.dockercfg,.git-credentials, and.htpasswd. These are worth calling out: an.npmrcholds a publish token for your packages, and a.netrcor.git-credentialscan hold logins for services that have nothing to do with the app you are scanning. If one is sitting in your project, we would rather read it and tell you than skip it and call the scan clean. If you want any of them to stay put, list it underignores. - Database contents. .sqlite and .db files are sent as empty placeholders. A database sitting in a public folder still trips the gate, but zero database bytes leave your machine.
- Your build. The build command is never uploaded. Hosted scans skip the build gate.
- Local secrets. Files like
.env.localand.env.production.localstay on your machine. A committed.envwith real values is still flagged, because that one ships. - Large files. Anything over 512KB is skipped.
You choose what leaves
Anything you list under ignores in .seatbelt/config.json is never scanned or uploaded. Add a folder or file name there and it stays on your machine.
How it is handled
- Size cap. The zip is capped at 4.5MiB, checked on your machine before any bytes are sent. Over the cap you get a plain stop, never a partial upload.
- On the server. The zip is written to a private temp directory, unpacked there, and read. The directory is removed when the scan returns, on the error path as well as the normal one. Nothing of your source is kept afterwards, and nothing is copied anywhere durable along the way. The report that is kept holds file paths, line numbers and redacted cues, never a whole secret value.
- Who can read the report. A report lives at a long random address, and anyone who has that address can open it. There is no password on it, no expiry, and no delete button today, so treat the link the way you would treat a password. That openness is the point at handoff: the person you send it to can verify it without an account. If it is more exposure than you want, run the engine locally and nothing is uploaded at all.
- Told at scan time. The privacy line prints on every hosted scan, in your agent, before the results. It names what leaves, the credential files above, and the fact that the report link is the whole access control. Nothing on this page is something you only find out here.
Or upload nothing
Point the MCP at a local API and it scans on your machine directly, uploading nothing. Teams that cannot let source leave their environment run the engine locally.
The marketing site
This page, and the rest of the public site at withseatbelt.com, uses two analytics tools: Google Analytics, for aggregate traffic counts, and Snitcher, a business tool that shows which companies land here so our small team knows who to reach out to. Snitcher reads business signal: the company and industry behind a visit, and the pages they read. Both run only on these marketing pages.
They are walled off from the product. The scanner, the detector, and the app never load them. Nothing you scan, no source, no config, no report, is ever sent to Google Analytics or Snitcher or used for this. Everything above about what leaves your machine still holds, because this touches none of it.
We honor Global Privacy Control and do not run either tool for visitors in the EU, EEA, UK, or Switzerland. To opt out anywhere else, turn on Global Privacy Control in your browser, or email hello@withseatbelt.com and we will exclude you.