keepmum

Pre-release · not yet independently audited

Keep
mum.

Your coding agent reads your secrets. keepmum makes sure that’s where they stop: masked before a request leaves your Mac, restored when the answer comes back.

For Claude Code, Codex, pi and opencode · Free and open source

What you wrote, and what leaves.

Secrets are always masked. Names, emails, phone numbers and addresses are masked too when you turn personal data on.

ON YOUR MAC

The staging deploy fails. Log in as dana.whitfield@example.com with password Zq8vX2mN4pL7kR9t and check why the key sk_live_51Hx8fQ2eZvKYlo2C7a9Rb is rejected.

SENT TO THE PROVIDER

The staging deploy fails. Log in as KEEPMUM_EMAIL_a41c07e2 with password KEEPMUM_SECRET_3b91d0aa and check why the key KEEPMUM_SECRET_7f3a9c2e is rejected.

BACK TO YOUR AGENT

Placeholders in the answer become real values again, so your agent can still log in, edit your .env and run your tests. Web and MCP tools keep the placeholders, so an injected prompt can’t send a real value out.

Four steps, all on your Mac.

01

Detect

96 rules with entropy and checksum checks, then OpenAI Privacy Filter on your Mac’s GPU for what only context gives away. A last step drops UUIDs, hashes and documented example keys.

02

Mask

Each value becomes a placeholder made with a key only your Mac has. The same value always gets the same placeholder, so the provider’s prompt cache keeps working.

03

Restore

Real values go back into streamed text, file edits and shell commands. They live only in memory, and are cleared when keepmum quits.

04

Fail closed

A request keepmum can’t scan (an unknown endpoint, an unreadable body, a WebSocket) is blocked. It is never sent raw.

A menu bar app that shows its work.

Set up in three steps: download the model, start the background service, switch on protection for each agent. Then watch requests go out and replies come back, see what was masked, choose what gets masked, and check the audit log.

The keepmum dashboard: requests going out and replies coming back, per coding agent
The keepmum menu in the menu bar

Every session

With protection on, Claude Code goes through keepmum in the terminal, VS Code and the desktop app.

Your rules

Turn off a type, add your own patterns, list exceptions, or leave a project out entirely.

An audit log

Every change that turned protection down, who made it and when, in a log that shows if it was edited.

Measured, not promised.

On synthetic, labeled datasets on an M5 Pro. The method and every result are in the repo.

0.989–1secret recall across five datasets, four of them held out
0.996–1personal data recall, with personal data on
100–145 msadded at the 95th percentile for 4K tokens of new text
8–9 msfor the rules alone, if you turn the model off

What keepmum doesn’t do.

It’s a safety layer, not a guarantee. Here is where it stops.

Every limitation, in full

Shell commands get real values

An agent can still run a command that sends a secret somewhere. Pair keepmum with a sandbox that limits the network.

Your local history keeps them too

keepmum protects what leaves your Mac, not what your agent stores on it.

Unusual IDs get masked by mistake

On the hardest fresh tests, 3 to 9 of 15 harmless IDs were flagged. That costs the model some context, never a leak.

Images and PDFs pass unscanned

Only text is checked. The local model is strongest on English.

Two ways in.

The Mac app

Everything included: keepmum, its Python runtime and the model server. Drag it to Applications, open it, and follow Settings › Setup.

Download for Mac

macOS 14 or later on Apple silicon. The model needs 1.6 GB of disk and about 1.7 GB of memory while it runs.

The command line

With Python 3.12, uv and the Xcode command line tools.

git clone https://github.com/blueandhack/keepmum.git
cd keepmum && uv tool install --editable .
native/pf-serve/build.sh
keepmum setup
keepmum claude

Say nothing
you don’t mean to.

Download for Mac