v0.1.0 · MIT · Offline by design
Your AI chat history
is a credential store.
SanitAI scans your local LLM conversation history for leaked API keys, database credentials, and PII. Entirely on your machine. Zero network calls. No account.
brew install thepixelabs/tap/sanitai
curl -fsSL https://releases.sanitai.dev/install.sh | sh
cargo install sanitai
See it run
One command. Every secret. Nothing sent.
Meet Nix — SanitAI's built-in scanner. Auto-discovers your local Claude Code, Claude Desktop, and Cursor session files, flags every finding, touches no network.
FINDINGS (4)
─────────────────────────────────────────────────────────────
[HIGH ] ~/.claude/projects/myproject/session.jsonl turn=47 aws_access_key_id bytes=312..332
[HIGH ] ~/.claude/projects/apiwork/chat.jsonl turn=12 generic_api_key bytes=88..110
[MEDIUM] ~/.claude/projects/work/session.jsonl turn=91 email_address bytes=201..220
[LOW ] ~/.claude/projects/infra/debug.jsonl turn=3 internal_hostname bytes=44..60
─────────────────────────────────────────────────────────────
Workflow
Scan in under a minute.
Install
Install via Homebrew, cargo, or the install script. SanitAI runs entirely on your machine — no account, no sign-up, no network calls at runtime.
Scan
sanitai scan auto-discovers Claude Code, Claude Desktop, and Cursor session files on your machine, runs every detector, and surfaces findings with file, turn, and severity. Nothing is modified.
Redact
sanitai redact writes a clean copy alongside the original. Rotate the credentials that surfaced. Done.
The pattern
Files no one thought of as credentials.
LLM chat exports are JSON files. They happen to contain everything you typed into the AI assistant: API keys, database strings, internal hostnames, authentication tokens, proprietary code. You do not think of them as credential stores when you create them. Attackers do not need you to.
Compatibility
Supported Sources
| Source | Format | Status |
|---|---|---|
| Claude Code | JSONL session files (~/.claude/projects/) |
Supported |
| Claude Desktop | JSON conversation files (auto-discovered) | Supported |
| Cursor | SQLite workspace storage (.vscdb) |
Supported |
| GitHub Copilot | Chat history | Planned |
| Google Gemini | Conversation history | Planned |
Verification
Trust Signals
- ✓ Zero network calls at runtime — verify with
straceorfs_usage - ✓ Signed binaries via cosign/Sigstore
- ✓ MIT licensed — read every line on GitHub
- ✓ No telemetry — not opt-out, architecturally absent
- ✓ Original file never modified by default
- ✓ seccomp-bpf sandbox blocks network syscalls on Linux
Get started
Install SanitAI
brew install thepixelabs/tap/sanitai
curl -fsSL https://releases.sanitai.dev/install.sh | sh
cargo install sanitai
Verify binary signature with cosign
cosign verify-blob \
--certificate-identity https://github.com/thepixelabs/sanitai/.github/workflows/release.yml@refs/heads/main \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--bundle sanitai.bundle \
sanitai
Scan before you share.
Sleep after you do.
What it does
Built for the command line.
Local, offline, and deliberately narrow in scope — SanitAI does one job and does it without asking for an account.
Secret Detection
Scans Claude.ai and OpenAI exports for 8+ categories of leaked credentials — API keys, tokens, passwords, and PII — using pattern matching and entropy analysis. Nothing leaves your machine.
Redact on Export
Produces a clean copy of your chat export with findings masked or removed. The original file is never modified.
Custom Rule Engine
Write your own detection rules in YAML — define patterns, keywords, entropy thresholds, and severity levels. Ship a .sanitai/rules.yaml with your project to enforce team-wide hygiene.
Pipe Mode
Reads from stdin, writes to stdout. Drop it into any CI/CD pipeline with no config required — cat export.json | sanitai scan is a complete workflow.
Multi-format Support
Claude.ai and OpenAI Chat exports supported today. GitHub Copilot and Google Gemini exports on the roadmap. One command works the same regardless of which AI tool generated the file.
More comingAltergo Integration
Works natively with Altergo — the multi-account Claude Code manager. Scan across all your workspaces in one pass. No extra configuration.
Coming soonFor the audit file
Compliance Notes
GDPR Art. 32
Local processing — no Art. 28 agreement needed
SanitAI processes data exclusively on the local filesystem. No personal data crosses a network boundary. No data processor agreement under GDPR Art. 28 is required because no sub-processor is involved.
SOC 2 CC6.1 / CC6.6
Auditable scan output as detective control evidence
Scan reports can be retained as evidence of detective controls for logical access restrictions. JSON output format integrates with SIEM and GRC platforms for automated evidence collection.
Questions
The questions you'd ask Nix.
Does SanitAI send my conversations to any server?
No. SanitAI runs entirely on your local machine. Your conversation exports never leave your filesystem. There is no telemetry, no analytics, no network calls of any kind at runtime. Verify with strace on Linux or fs_usage on macOS.
What types of secrets can SanitAI detect?
SanitAI detects API keys for AWS, GCP, Azure, Stripe, Twilio, OpenAI, Anthropic, and GitHub; database connection strings (PostgreSQL, MySQL, MongoDB); PEM private keys and SSH keys; bearer tokens; and PII including email addresses and phone numbers. Custom YAML rules let you extend detection for your own patterns.
Which LLM conversation sources are supported?
SanitAI auto-discovers Claude Code session files (~/.claude/projects/**/*.jsonl), Claude Desktop conversation JSON files, and Cursor workspace SQLite databases. You can also pass any file or directory explicitly (sanitai scan <path>), or pipe content in via stdin. No export or download step required. GitHub Copilot and Google Gemini support are planned.
Can I run SanitAI in a CI/CD pipeline?
Yes. SanitAI exits with code 1 when findings are present, making it compatible with any CI/CD system. Use --format json for machine-readable output and --exit-zero for non-blocking canary scans.
How do I suppress false positives?
Disable specific detectors in ~/.config/sanitai/config.toml using disable_detectors = ['email_address']. Custom rules support context_keywords to narrow pattern matching and reduce false positives for your environment.