Privacy
The short version: Dispatch sends the issue or pull request being triaged, and nothing else. It is self-hostable, so it does not have to touch anyone else's infrastructure.
What leaves your process
One request per event, containing:
- the title and body of the item
- the author's login and their association with the repository
- existing labels
- for pull requests: changed file paths, additions and deletions, commit messages, linked issue titles and bodies
- a diff excerpt, truncated to
data.maxDiffBytes(default 20 kB) - the repository description, primary language, and your
repoBrief
What does not
- Repository contents beyond the diff excerpt
- Any file you did not change
- Your other repositories
- Comment threads
- Anything at all once the daily budget is spent
Redaction
Every pattern in data.redact is applied before state leaves the process:
yaml
data:
redact:
- '(?<=Bearer )[A-Za-z0-9._-]+'
- '[\w.+-]+@[\w-]+\.[\w.]+'This also applies to recorded fixtures. The recorder asks the provider what it actually sent rather than recording what it was handed, so a cassette can be committed to a public repository without leaking what the live path would have stripped. A test plants a fake secret and asserts it does not appear.
A pattern that does not compile is skipped and reported by dispatch validate; the rest still apply.
Turning bodies off entirely
yaml
data:
sendBodies: falseDispatch still works. It triages from the title, the labels, the changed paths, the churn, the commit messages, and which issue-template sections the author left blank. The answers are weaker and their confidences are lower, which is the honest outcome — and the gate ladder will hold more of them back as a result.
Where your data rests
| Surface | Where decisions are stored |
|---|---|
| CLI | A local SQLite file, .dispatch/index.sqlite |
| Action | The Actions cache for your repository, plus an artifact |
| App | Your Postgres, if you self-host |
Installation keys in the App are encrypted with AES-256-GCM under a master key held in the environment, never in the database.
Cost
$0.042 per million input tokens, output free. A typical item runs 1.5–3k input tokens, so about $0.0001. A thousand issues is roughly ten cents. budget.maxRequestsPerDay caps it; past the cap Dispatch suppresses everything with budget_exhausted rather than spending more.