Do not open a public issue. Use GitHub's private vulnerability reporting on this repository (Security → Report a vulnerability).
- Revoke the key in the Claude Console first. A leaked key stays usable until it is revoked.
- Remove the key from history:
git filter-repo --replace-text expressions.txt, whereexpressions.txtmaps the key to***REMOVED***. Deleting the file in a new commit is not enough, because the key stays in history. - Force-push the rewritten history and ask anyone with a clone to re-clone.
- Secrets: keys are read from the environment or
.env, which is gitignored.gitleaksruns in pre-commit and in CI. - Tools: a tool with no policy row is denied.
read_fileandwrite_filecannot leave the directory the runtime started in, and they refuse any file whose name starts with.env. - Output: tool results are capped and marked as data. They are not sanitized, so prompt injection through a tool result is still possible. See the README "What breaks" section.
- A tool that is allowed can still do harm inside the workspace. Keep
write_fileonaskunless you need it. - The eval job uses the real key only when someone starts it by hand (
workflow_dispatch). It never runs on pull requests, so fork pull requests never get the secret.