Security and data handling

How Patcharc handles your code, your keys and your data — what to read before you give it either.

Last updated 3 October 2026

What it touches

It reads support and errors, creates tickets in your tracker, opens PRs on the repos you pick, and posts to one Slack channel. Nothing else. Nothing runs without a click. Nothing merges without a human.

We never ask for personal access tokens, production database access, SSH or deploy keys, or write access where read is enough. Patcharc opens pull requests; you deploy.

A run, start to finish

  1. A person on your team presses Fix with AI. Nobody else can start a run, and a customer’s message never does.
  2. A new virtual machine starts for that run alone. It shares nothing with any other run or workspace.
  3. Your code arrives as a shallow clone, through a GitHub token that lasts about an hour and opens that one repo.
  4. The machine can reach GitHub, your model provider and your package registries. Nothing else resolves.
  5. The agent works inside a hard clock and a hard budget, and the policy checks its diff before anything is pushed.
  6. Patcharc opens a draft pull request and destroys the machine — on success, on failure and at a cap.

Keys

KeyWhoseWhat it is for
Support, error and tracker tokensYoursReading conversations and errors; creating and moving issues
Slack bot tokenYoursPosting to one channel
Your model key (BYOK)YoursThe agent’s requests to your provider
Our model key (Managed AI)OursManaged AI runs only; never inside the machine
GitHub installation tokenMinted per run, for about an hourClone, push, open the pull request
GitHub App private keyOursMinting that token, and nothing else

Every secret is encrypted with AES-256-GCM under a key of its workspace, and every workspace key under a master key in AWS KMS that never exists on a machine we run — a stolen database dump holds no usable credential. A secret is decrypted inside the job that needs it and dropped; once saved it is never shown again, only a masked suffix. Values from the vault are masked in every log and in our error reports, and a test holds that.

Keys meet the machine at its edge: the network proxy adds the GitHub token and the model key to requests for their own hosts, so the agent holds a placeholder that is worthless if stolen. If a coding agent refuses a placeholder, that one key goes in as an environment variable inside the machine and is wiped when the run ends. On your own key, model traffic goes to your provider directly, never through an account of ours.

Prompt injection

A customer’s words reach an agent that writes code, so they are treated as the most dangerous input in the system. They arrive in a delimited block labelled untrusted — data for the agent, never instructions to Patcharc.

The agent’s authority does not come from its prompt. Its branch, forbidden paths, diff size and network are fixed outside it and checked after it finishes, so a message that talks the agent into touching your billing code still fails before the push. And nothing merges automatically: a person on your team reads every pull request and merges it on GitHub, with their name on it.

Who can do what

Only a signed-in member of your team turns a report into a ticket or a run, and who may press Fix with AI is a grant per member. Every check runs on the server: calling the API directly meets the same checks as the button.

Every action is written to the audit log as a sentence — who connected what, who clicked, what ran, which pull request opened, who changed a setting — kept for the life of the workspace and exportable.

Threat model

ThreatWhere it entersWhat stops it
One workspace reading another’s dataAny queryEvery query is scoped to its workspace by construction, and a test proves the wrong workspace sees nothing
A stolen database dumpThe databaseSecrets are envelope-encrypted; the dump holds no usable token
A forged webhookPublic endpointsSignatures checked in constant time with a replay window, failures alerted on
Prompt injection in a reportThe agent’s promptReport text arrives as labelled, untrusted data; the agent’s limits are enforced outside the prompt
Escape from the machineThe runA virtual machine per run, egress to an allowlist, destroyed after
A token in a logEverywhereMasked at the logger, held by a test
A customer triggering codeThe pipelineOnly a team member’s click starts a run
A malicious uploadAttachmentsSize and type limits; executables, archives, HTML and SVG refused
A webhook floodPublic endpointsRate limits per workspace and endpoint; a flood becomes a queue, never a loss

Subprocessors

WhoWhat forWhat they see
RailwayHosting the app, the database and the queueYour workspace’s data, with secrets only in encrypted form
E2BThe virtual machine for each runYour code, for the length of a run
CloudflareThis website, and storage for attachments, run logs and backupsRequests to the site; stored files, with backups encrypted
AWS KMSThe master keyRequests to wrap and unwrap keys, never your data
ResendSign-in and notification emailRecipients’ addresses and the email’s text
SentryErrors in our own codeOur application’s errors, with secrets masked
PaddleBilling, as merchant of recordBilling name, email, address and payment
OpenRouterThe pre-read that sorts incoming messages, and on Managed AI the call that picks the modelA report’s text and evidence, sent only to providers that keep nothing and train on nothing
AnthropicManaged AI runsThe code and context of a Managed AI run, under Anthropic’s commercial terms

On your own key, your model provider works for you, not for us. The hosting region is stated here before launch.

Retention

WhatHow long
Webhooks as they arrive30 days
Run logs30 days
The audit logThe life of the workspace; cold storage after 24 months, still exportable
SecretsDeleted when you disconnect
Backups30 daily and 12 monthly copies

Backups and recovery

Two copies: the host’s own backups with point-in-time recovery, and a nightly dump encrypted before it leaves, kept in a separate, locked bucket away from the host, which a stolen token can neither read nor delete. Every week a job restores the latest dump and counts its rows; the full restore is rehearsed before launch and twice a year.

Recovery point: minutes. Recovery time: one hour.

Deletion

Delete a workspace and its reports, attachments, runs and their logs, connections and secrets are gone — a test walks every table to prove it. The audit log stays, anonymised. Cancelling never deletes anything; you decide when.

Report a vulnerability

Email security@patcharc.io. We follow 90-day coordinated disclosure. There is no bounty.

What we do not have yet

No SOC 2 report. A data processing agreement is sent on request until the reviewed one is published here. Questions about any of this: support@patcharc.io.