penname.

Your customers keep their pen names in front of the model.

penname sits between your app — or your AI agents — and any model provider: OpenAI, Anthropic, or anything OpenAI-compatible. It swaps every real name, email, phone and ID number for a stable pen name on the way out, and restores it on the way back. The model never sees the real thing.

Create an account Free while in early access. No card, no payment.

What penname can, and can't, see

The gateway runs on your machine.

It reads your database and does the swapping — the only thing that ever touches a row, and it holds your master key. Neither leaves it.

The hosted side sees names, never values.

Table and column names, what you marked sensitive, and token counts. Never a row, never a prompt, never your master key.

Check it yourself.

DETAIL_LOGGING=true prints every word the gateway sends to the model. The only other thing it talks to is penname.io, for your key, your column names and token counts.

Three steps, about ten minutes

1 · Sign up, get a key2 · One Docker command 3 · Point your app at it
  1. Get your key. Sign up and copy the pk_… it shows. Free in early access — no payment now, and we'll tell you well before that changes.
  2. Run the gateway in a new folder. Docker is the only thing you install:
    docker run -it -v ${PWD}/penname:/setup pennameio/gateway init
    cd penname && docker compose up -d
    It asks for your key and an optional read-only database URL, generates your master key, and writes every config file for you.
  3. Point your client at it: base URL http://localhost:8088/v1 for OpenAI, http://localhost:8088 for Anthropic. Keep your provider key, add the header X-Penname-Scope: user=<id>.

The full guide, every setting and troubleshooting: penname.io/docs. What's new: changelog.

Or let your coding agent do it

penname ships an MCP server. Claude Code, Codex, Cursor or the Claude / ChatGPT desktop app can read your schema, mark what's sensitive, and troubleshoot. The signup page hands you a ready prompt with your key in it — or add it directly:

# with your pk_ key
claude mcp add --transport http penname https://penname.io/mcp \
  --header "Authorization: Bearer pk_your_key"