Get protected in 60 seconds
One command. No account. No configuration.
Install
Install once globally. Protects every project on your machine.
curl -fsSL https://pretense.ai/install.sh | shThe package name on npm is pretense.
pnpm add -g pretenseyarn global add pretensebun add -g pretenseInitialize
Run once per project. Builds your mutation profile in .pretense/
pretense init# Scans your codebase and builds .pretense/ mutation profile# Takes ~3 seconds for a 100K-line codebase# Nothing is sent to external servers during initCreates .pretense/ in your project root.
Start the proxy
Keep this running in a terminal tab while you work.
pretense start# Proxy running on http://localhost:9339# All LLM API calls now route through Pretense# Ctrl+C to stopThe proxy must be running before you send prompts. Add pretense start to your project package.json dev scripts to start it automatically.
Route your AI tool
Point your tool at localhost:9339. One change protects everything.
ANTHROPIC_BASE_URL=http://localhost:9339 claude
Set the env var once in your shell profile and every Claude Code session is automatically protected.
Settings → Models → Override Base URL http://localhost:9339
Works with every model in Cursor: Claude, GPT-4o, Gemini. One setting protects all of them.
OPENAI_BASE_URL=http://localhost:9339 node your-script.js
Drop-in replacement. No code changes — just set the env var before any OpenAI SDK call.
client = OpenAI(
base_url="http://localhost:9339",
api_key=os.environ["OPENAI_API_KEY"],
)Pretense speaks both the Anthropic and OpenAI wire formats. Any tool that accepts a base URL works.
Verify it is working
Scan a file to see exactly what Pretense will protect.
pretense scan src/auth.tsSecrets are blocked before the request leaves your machine. Identifiers are mutated and restored transparently.
Free tier limits
The local CLI is always unlimited. Limits only apply to the cloud proxy service.
Limits reset on the 1st of each month. View Pro plans ($29/seat/mo) when you need more.
What gets protected
Pretense is identifier-level. It mutates names, not logic. LLM output quality is preserved.
| Token type | Example | What Pretense sends | Status |
|---|---|---|---|
| Function names | getUserToken | _fn4a2b | mutated |
| Class names | DatabaseConnection | _cls8d3f | mutated |
| Variable names | secretKey | _v9x2c | mutated |
| API keys / secrets | sk-ant-... | BLOCKED | blocked |
| Comments | // fetch user | // fetch user | preserved |
| String literals | "hello world" | "hello world" | preserved |
CLI quick reference
| Command | Description |
|---|---|
pretense init | Scan codebase and build .pretense/ project profile |
pretense start | Start the proxy on localhost:9339 |
pretense scan <file> | Scan a file for secrets and mutable identifiers |
pretense mutate <file> | Apply mutations and print the result |
pretense reverse <file> | Reverse mutations — restore original identifiers |
pretense audit | Display full mutation audit log (SOC2/HIPAA evidence) |
Claude Code: MCP integration
Register the Pretense MCP server in your Claude Code settings for automatic pre-send scanning on every session.
{
"mcpServers": {
"pretense": {
"command": "pretense-mcp",
"args": []
}
}
}Next steps
You are protected. Here is where to go deeper.