How we handle your code
An audit tool asks for a lot of trust. Here is exactly what happens to your code when CodeTruss scans it, and the boundaries we hold ourselves to.
Read-only, never executed, always deleted
Each scan downloads your repository as a GitHub tarball — a plain archive of files. No git clone, so no repo hooks can ever run. The archive is extracted into a temporary workspace with hard caps (30,000 files, 400 MB uncompressed, 25 MB per file), analyzed statically — your code is never executed or imported — and the workspace is deleted when the scan finishes, on success and on failure alike. What persists is metadata: paths, sizes, languages, findings, scores. Never your source.
Local CLI boundary and receipt integrity
The CLI runs Git inventory, scope classification, sensitive-path checks, deterministic analyzers, and your configured verification commands on your machine. Its vulnerability pass disables hosted OSV lookups and reports that coverage limitation instead of making a hidden network call. Optional--llm review supplies a bounded task, reviewed diff prefix, and fixed response schema to Anthropic, OpenAI, or authenticated Claude Code with credentials you control. Coverage is disclosed and truncation prevents a pass. The provider client may add runtime instructions or metadata; the Claude path requires safe mode, disables tools and customizations, and withholds API-key environment variables. The request never crosses CodeTruss servers. Deterministic CLI commands do not contact CodeTruss. Installing the CLI fetches release metadata and package bytes from CodeTruss.codetruss auth logincontacts CodeTruss device/session endpoints, but uploads no source, patch, or receipt. codetruss auth status contacts the session endpoint to verify the saved credential, and codetruss auth logout contacts it to revoke the credential before deleting the local copy. Neither sends source, patches, or receipts.codetruss syncis the only command that uploads a receipt to CodeTruss, and it sends a redacted receipt rather than the patch. The CLI has no background usage telemetry, receipt upload, or synchronization. Website install-copy and design-partner-link events are non-PII distribution and interest proxies; they do not prove installation, activation, consent, or enrollment.
.codetruss.yml is the reviewable repository policy that may be committed. The private .codetruss/ directory holds local receipts, patches, snapshots, signatures, signing material, and generated runners. CodeTruss adds it to the repository-local Git exclude, verifies those paths remain ignored, and fails closed if evidence becomes tracked or is routed through unsafe paths. This protects normal Git adds without claiming that Git cannot be deliberately forced to stage an ignored file.
A synced receipt may include the task, relative file paths, commit hashes, scope, the analysis profile, analyzer findings, verdict and reasons, and an optional LLM summary. The CLI removes the absolute repository path, agent command arguments/start errors, and verification commands/output before upload. It never uploads the patch.
Each receipt is signed with a locally generated Ed25519 key. Its JSON signature and the recorded Markdown and patch hashes can be checked withcodetruss verify. Someone you hand a receipt to holds no key of yours, socodetruss verify-receipt checks it for them outside any repository, and keeps the two claims apart rather than blurring them: integrity — these bytes have not changed since signing — comes from the receipt itself, while provenance — a party you trust signed them — is established only against a public key obtained from that party out of band. Release installers resolve a versioned package and verify its published SHA-256 digest before npm installs it. The digest detects a mismatch with CodeTruss release metadata; by itself it is not independent package provenance.
Least-privilege GitHub access
The CodeTruss GitHub App requests only what the product needs: repository contents (read/write — snapshots in, fix-PR branches out), pull requests (read/write), issues (read/write, for roadmaps and milestones), and metadata (read). Operations run on installation tokens that expire after about an hour. Uninstall the app and all access ends immediately. CodeTruss never pushes to your default branch — every change arrives as a pull request you review.
Tenant isolation and encryption
Every piece of tenant data is scoped to your organization, and every API path re-checks that scope with role-based access control — cross-tenant references simply 404. Bring-your-own AI provider keys are encrypted at rest with AES-256-GCM and are write-only through the API (we show you the last four characters, nothing more). Passwords are bcrypt-hashed; all traffic is TLS; Stripe webhooks are signature-verified.
External data flows
Hosted scans send only the documented categories in the privacy policy: architecture facts to your AI provider for report generation (never raw source), the contents of affected files when — and only when — you approve a fix PR (max 4 files, bring your own keys on Pro+ to keep it in your account), and direct dependency names + versions to OSV.dev for the vulnerability check. The local CLI has a separate, stricter boundary: no OSV request; direct-to-your-provider traffic only when you choose --llm; and a redacted receipt sent to CodeTruss only when you run sync. Neither CLI path sends the patch to CodeTruss.
Defensive by design
Analyzers and AI prompts are scoped to defensive code health: exposed secrets are reported by location and type — never their value — and the system does not generate exploit code or offensive tooling.
Who processes your data (subprocessors)
We keep the list of third parties short and name every one: Supabase (our Postgres database), Vercel (hosting), Stripe (billing — no card data ever touches our servers), Resend (transactional email), GitHub (repository access via our App), and OSV.dev (which receives only dependency names and versions for the vulnerability check). Your chosen AI provider — Anthropic, OpenAI, or Google — processes hosted AI features only when you enable them, and on Pro+ plans you can point those features at your own account. A provider you invoke directly with CLI --llm receives the task and diff from your machine under your provider account; CodeTruss does not proxy that request.
Data retention
The repository snapshot is the sensitive part, and it does not linger: each scan deletes its workspace the moment the scan finishes — on success and on failure alike. What we keep afterward is metadata — paths, sizes, languages, findings, scores, and reports — and we keep it until you delete it. Nothing is retained “just in case.”
Deleting your data
Deleting a repository from the dashboard removes its metadata, findings, scans, and reports right away. To delete an entire account or organization, email zack@codetruss.com from your account address and we will remove your data from production within 30 days. Full details are in the privacy policy.
Reporting a vulnerability
Found a security problem in CodeTruss? Email zack@codetruss.com with details and we will respond quickly — we are a small team and reports go straight to the people who can fix them. Please give us a reasonable window to patch before public disclosure.