Privacy

agent-delivery-gates collects nothing and sends nothing. Every gate runs with no network request; fetching a language's grammar is the one exception, and it only happens when you ask for it.

Back to the front page

What the tools send

Nothing, during a gate run. No file under src/ or hooks/ that check, mutate, census, induce, test-diff, or any hook reaches opens a socket or calls fetch. There is no telemetry, no analytics, no crash reporting, no update check, and no API key to give it, because there is nothing to authenticate to.

The one exception is explicit: agent-delivery-gates lang add <language> fetches that language's tree-sitter grammar, a plain .wasm file, from unpkg.com, and writes it into .adg/grammars/ in your project. The request refuses any redirect instead of following one, so the bytes it considers always come from that host, never one a redirect substituted; and before anything is written, those bytes are checked against a sha256 digest this project pinned for that exact package version, so a wrong, truncated, or tampered download is rejected instead of installed. adg init can do the same, but only after you answer yes at a terminal or pass --yes. Neither runs unless you invoke it; nothing else in this package ever does.

That same digest is checked again every time a grammar already in .adg/grammars/ is actually loaded, not only at the moment it is fetched: a file that fails is refused, not read. .adg/grammars/ gets a .gitignore written into it the first time it is created, so it is not something an ordinary commit sweeps in by accident, but the digest check does not depend on that -- a stale file from before this check existed, or one that reached the directory some other way, is checked and refused on its own bytes, regardless of how it got there.

The package has one runtime dependency, web-tree-sitter (MIT licensed, zero dependencies of its own): the WebAssembly runtime that loads a grammar fetched the way above. A WebAssembly grammar has no capability to open a socket, read a file it was not handed, or make a syscall, so carrying it costs one direct dependency and nothing transitive.

The git hooks, the command line tools and the MCP server all run as local processes on your machine. The MCP server speaks stdio to whatever started it and does not listen on a port.

What the tools write

Everything the gates record stays inside the repository you run them in, under .adg/:

  • .adg/test-diff.json, the baseline recording what a repository already held when the gates were adopted, so old work is not reported as new weakening.
  • .adg/prose-rules.txt and .adg/prose-baseline.txt, used only when the optional prose check is turned on.
  • .adg/induced/, holding the failures an induced-failure run declares.

adg init also writes hook configuration into your project for whichever agents you ask it to set up. Those files are yours, they are readable text, and they are the only things the tools create.

adg census checks out your own base commit into a scratch git worktree in the system temporary directory and removes it when it is done. Nothing is copied out of the repository, and nothing survives the run.

This website

These pages are static files. They load no JavaScript, no fonts, no images from anywhere else, and no analytics. They set no cookies and use no browser storage. Opening this page makes exactly one request, for this page.

It is served by GitHub Pages. Like any web host, GitHub receives the request and can log it, which is outside this project's control. GitHub's own privacy statement covers what it does with that.

Installing it

Installing from npm is a request to npm, and npm sees it. That is true of every package and has nothing to do with this one. After the install, the code does not go back.

Questions and changes

Every claim here is a claim about code you can read. If you find one that does not hold, that is a bug, and an issue is the place for it. Changes to this page arrive the way everything else here does, as a commit in the repository.