CSPF-Founder

Redactproxy — Data skill for Claude Code

Data community

A local proxy that keeps client data out of Claude Code.

How to install Redactproxy

This entry records only its repository, not the path inside it, so there is no exact command to give. Open CSPF-Founder/redactproxy and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Redactproxy does

A local proxy that keeps client data out of Claude Code.

Alternatives in Data

  • Private GPT — Complete API layer for private AI applications on local models: RAG, skills, tools, MCP, text-to-sql, and more 57.5k ★
  • HTML Anything — ✨ The agentic HTML editor — your local AI agent writes the HTML, you ship it 8.5k ★
  • Build Failure — Diagnose elasticsearch-js CI and local build failures 5.3k ★

README

RedactProxy

A local, two-way redaction proxy for [Claude Code](https://claude.com/claude-code), or anything else that speaks the Anthropic Messages API. It sits between the client and the real API: on the way out it replaces real client data (domains, IPs, emails, credentials, and more) with stable fake values, and on the way back it puts the real ones in again. Claude only ever sees the fakes. Your tool calls still run against real infrastructure.

Built for pentest and consulting teams who want to use Claude Code on a live engagement without that client's data reaching the model provider.

Why

When you run an AI coding agent on a live engagement, everything it touches ends up in the model: client domains, internal hostnames, credentials out of a config dump, employee emails, the client's own name. Almost none of it has any reason to leave your machine. The model doesn't need the real hostname to reason about a finding. It needs one that stays the same every time it sees it.

That is all redactproxy does. It rewrites the API traffic and nothing else: no added prompts, no tool restrictions, no change to how Claude Code behaves. It listens on loopback and refuses to start on any other address.

How it works

%%{init: {'theme':'base','themeVariables':{
  'actorBkg':'#2f6fb2','actorBorder':'#2f6fb2','actorTextColor':'#ffffff',
  'actorLineColor':'#6e7681','signalColor':'#6e7681','signalTextColor':'#6e7681',
  'noteBkgColor':'#48525c','noteTextColor':'#ffffff','noteBorderColor':'#6e7681',
  'lineColor':'#6e7681'}}}%%
sequenceDiagram
    participant CC as Claude Code
    participant RP as redactproxy
    participant API as api.anthropic.com

    CC->>RP: request (real PII)
    Note over RP: find text fields, tokenize:
real value -> stable fake RP->>API: request (tokens only) API-->>RP: response (tokens) Note over RP: detokenize:
fake -> real RP-->>CC: response (real PII)

A given real value always maps to the same fake one