Skip to content

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: false

Dispatch 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

SurfaceWhere decisions are stored
CLIA local SQLite file, .dispatch/index.sqlite
ActionThe Actions cache for your repository, plus an artifact
AppYour 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.

MIT licensed.