How it works
Find, rotate, encrypt. The three-step loop that stops leaked AI-chat keys from sitting on disk.
Transcript Vault has one job: turn leaked API keys in your AI chat history from "still usable" into "rotated and saved in an encrypted vault."
The loop
┌─────────┐ ┌──────────┐ ┌──────────┐
│ Find │ ──▶ │ Rotate │ ──▶ │ Encrypt │
└─────────┘ └──────────┘ └──────────┘
▲ │
└──────────────────────────────────┘
re-scanFind
The app reads transcript files from the assistant directories on your
Mac. It looks for API-key patterns: provider prefixes (sk-,
sk-ant-, AKIA, AIza, ghp_, xoxb-, eyJ for JWTs, etc.),
private-key blocks (-----BEGIN ... PRIVATE KEY-----), and generic
api_key = …, secret = …, token = …, password = … assignments
where the value is long enough to look key-shaped.
For Google Antigravity specifically, the per-turn message JSONs hide
the agent payload inside a base64-encoded protobuf field
(stepPayload). The scanner decodes those, extracts the printable
byte runs, and scans the result, so keys pasted into Antigravity are
surfaced even though the JSON looks empty to a naive grep.
Every match is reported with file, line, the kind of secret detected, and a masked preview of the value (first 4 + last 4, fixed star count in the middle). The full string is never displayed in the UI.
Rotate
You rotate the key. The app does not call the provider, store credentials, or talk to anyone's API. We never want to be in the loop on your provider account.
For each finding, the typical flow is:
- Click the row to jump straight to that line in the transcript.
- Open the provider's dashboard (the app links you out when it recognizes the provider).
- Revoke the leaked key and issue a fresh one.
- Update wherever the new key needs to live.
- Come back to Transcript Vault and mark the finding Rotated.
A rotated finding still keeps a record so you can prove later that the specific exposed key is no longer usable.
Encrypt
Once everything in a transcript has been dealt with, you click Encrypt. The transcript is encrypted with age (X25519) and saved into the local vault.
Deleting the leftover plain-text original is offered as an explicit second step. The encryption itself is what protects the secret; removing the original is just so a stale copy can't sit there for a backup tool or sync agent to pick up.
The vault key lives in the macOS login Keychain and unlocks automatically when you log in. You don't enter a separate password.
Live watching
A background watcher runs by default (no Pro required). It observes your transcript folders and re-scans whenever Claude Code, Codex, Gemini CLI, or Antigravity writes new content. New conversations and new leaks surface in seconds, with no manual rescan needed.
The watcher is debounced and uses an mtime-keyed cache, so a stable transcript is a cheap hash lookup rather than a re-read. Only the currently-being-written file actually gets re-scanned each refresh burst.
Re-scanning manually
Click Scan any time to force a full re-sweep. Useful if you restored a transcript from a backup or pointed the app at a new location.
What does NOT happen
- The app does not upload transcripts.
- The app does not call any provider's API.
- The app does not phone home with telemetry, analytics, or crash reports.
- The app does not modify the assistant itself. Claude Code, Codex, Gemini CLI, and Antigravity keep working exactly as before.

