Back to Blog
·7 min read
LaunchFounderProduct Hunt

We're Launching on Product Hunt: Here's What We Built and Why

Pretense started as a solution to our own problem. We were using Claude to build Pretense, and realized we were sending proprietary code to Anthropic. Here is the full story.

The Problem We Kept Running Into Ourselves

We were building Pretense, a tool to protect proprietary code from LLM APIs, using Claude Code. The irony was not lost on us.

Every time we asked Claude to help refactor a mutation algorithm or write tests for the proxy interceptor, we were sending our own proprietary code to Anthropic's API. The scanner logic we had spent months developing. The mutation map format we designed to be compact and reversible. The heuristics we built for identifying code blocks in mixed prompts.

We were the target user. We had the exact problem we were trying to solve. And we were not solving it for ourselves because the tool was not finished yet.

That is how most good tools start. You build the thing you need. You make it work for yourself. Then you figure out whether other people have the same problem.

They do. A lot of them.

What We Built

Pretense is a local-first AI firewall. It sits between your development tools and the LLM API.

The core capability is mutation. Not redaction. That distinction matters.

Redaction removes information from your prompt before it reaches the model. If you redact getUserToken, the model sees [REDACTED]. The model cannot produce useful output about a function it cannot name. Redaction breaks the tool to protect it.

Mutation replaces the identifier with a deterministic synthetic. getUserToken becomes _fn4a2b. The function still exists in the prompt. The call graph is intact. The model can reason about the code, suggest improvements, and write tests. When the response comes back, Pretense reverses every synthetic back to the real identifier. You get working code with your real function names.

Your proprietary identifiers never leave your machine. The mutation map lives in .pretense/mutation-map.json. Pretense's servers never see it. Anthropic's servers never see your real function names.

The Technical Insight

Here is the thing about LLMs that makes mutation work: they do not care what the identifiers are called.

When Claude refactors a function, it is reasoning about the structure of the code. The control flow, the data dependencies, the patterns that suggest potential improvements. The actual name getUserToken is noise to the model. The model would produce the same quality output if the function were named _fn4a2b.

This is the key insight Pretense is built on. The semantic content that makes AI output useful is structural. The semantic content that makes your code proprietary is the identifiers. Those are separable.

Redaction tools confused these two things. They removed the identifiers to protect confidentiality and destroyed the structural context the LLM needed to be useful. Pretense separates the concerns: preserve structure, transform identifiers.

The result is LLM output quality within 3% of unprotected prompts, with 100% round-trip fidelity for identifier reversal.

What We're Launching Today

**CLI v0.2.0.** The command-line interface now supports all major AI providers: Anthropic, OpenAI, Google (Gemini). One proxy, all providers. We added streaming support so large responses stream back in real-time without buffering.

**MCP server.** Pretense ships a Model Context Protocol server that registers with Claude Code. When active, Claude Code calls pretense_scan before processing any tool result containing code.

**VS Code extension.** A status bar indicator shows mutation activity in real-time. The command palette includes Pretense: Scan Current File and Pretense: View Mutation Map.

**GitHub Action.** The pretense-scan Action runs in CI and blocks merges on unprotected API calls in CI pipelines.

**Dashboard.** A Next.js dashboard that shows mutation activity across your team, session history, secret detection events, and compliance metrics.

What's Next

Team features are the next focus. Right now, Pretense is an individual developer tool. The next version extends this to teams: a shared mutation policy, centralized audit log, and team-level reporting.

Enterprise SSO is coming. BoxyHQ SAML integration for organizations that require SSO for all tools.

Custom mutation rules. Today, Pretense mutates all identifiers uniformly. The next version allows per-file and per-pattern rules.

The longer-term roadmap is on-prem deployment. Some organizations cannot route AI traffic through any cloud infrastructure at all.

How to Try It in 30 Seconds

bash
npm install -g pretense
cd your-project
pretense init
pretense start
export ANTHROPIC_BASE_URL=http://localhost:9339
claude "help me refactor this module"

We are launching on Product Hunt today because we want to hear from the developer community. If you have questions, we are in the comments all day.

Upvote on Product Hunt: https://www.producthunt.com/posts/pretense

[Try Pretense free](/early-access)

Share this article

Ask me anything