output-sanitizer — Claude Code skill: scrub agent output
A skill that scans the agent's reply before it is shown or logged and strips leaked keys, PII and internal paths. Useful when output leaves your machine.
npx skills add UseAI-pro/openclaw-skills-security --skill output-sanitizer -a claude-codeWhat output-sanitizer does
The skill sits between the agent's answer and whatever reads it. It runs a set of detection patterns over the text and replaces what matches: AWS and OpenAI keys, GitHub tokens, JWTs, private keys, passwords in configs, database URLs. All of it becomes [REDACTED].
Then comes personal and internal data. Emails get masked to j***@example.com, phone numbers keep the last four digits, card numbers and SSNs are closed entirely. A home path like /Users/john/ turns into ~/, internal hostnames and endpoints become [internal-host] and [internal], container IDs are cut to the first 8 characters. Findings are graded: credentials and keys are always redacted, PII and database URLs unless you are explicitly debugging, paths are generalised. A report at the end lists every edit with line numbers.
The skill's own rule is to over-redact rather than miss a secret, and original values are never stored. Ask to see your .env and it will show the file, but warn you first. One thing to keep in mind: this is post-processing, so the secret has already entered the model's context — only what reaches the screen or the log gets masked.
What it helps with
- share agent output without leaking credentials
- log a session without passwords and tokens
- strip home paths and internal hosts from stack traces
- mask emails and phone numbers in generated text
- clean connection strings out of test fixtures
Example prompts for the agent
- run this reply through output-sanitizer before showing it
- scan the output for leaks and mask what you find
- give me the sanitization report for the last response
How to install output-sanitizer
1Skills CLI (Vercel)
npx skills add UseAI-pro/openclaw-skills-security --skill output-sanitizer -a claude-code2Manually: put the files in place
~/.claude/skills/output-sanitizer/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/output-sanitizer/
1Skills CLI (Vercel)
npx skills add UseAI-pro/openclaw-skills-security --skill output-sanitizer -a codex2Manually: put the files in place
.agents/skills/output-sanitizer/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add UseAI-pro/openclaw-skills-security --skill output-sanitizer -a cursor2Manually: put the files in place
.cursor/skills/output-sanitizer/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install UseAI-pro/openclaw-skills-security output-sanitizer2Manually: put the files in place
.github/skills/output-sanitizer/SKILL.md1Skills CLI (Vercel)
npx skills add UseAI-pro/openclaw-skills-security --skill output-sanitizer -a gemini-cli2Platform CLI
gemini skills install https://github.com/UseAI-pro/openclaw-skills-security --path skills/output-sanitizerManually: put the files in place
.devin/skills/output-sanitizer/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add UseAI-pro/openclaw-skills-security --skill output-sanitizer -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about output-sanitizer
How do I install output-sanitizer in Claude?
Run npx skills add UseAI-pro/openclaw-skills-security --skill output-sanitizer -a claude-code. The skill lands in ~/.claude/skills/output-sanitizer/SKILL.md.
What does output-sanitizer do?
It scans the agent's response before display or logging and replaces detected secrets, personal data and internal paths with masks. It finishes with a report of the edits.
What happens if I ask the agent to show my .env?
The skill will not redact content you explicitly asked for, but it warns you about it. The other masking rules still apply.
Source text
SKILL.md · MIT
---
name: output-sanitizer
description: Sanitize OpenClaw agent output before display. Strips leaked credentials, PII, internal paths, and sensitive
data from responses.
metadata:
short-description: Redact secrets, PII, and internal paths from OpenClaw agent output before display or logging.
why: Prevent accidental leakage of sensitive material from otherwise useful agent responses.
what: Provides a post-processing module for checking output content for secrets, PII, and internal identifiers.
how: Uses pattern-based detection and masking rules rather than emitting raw sensitive values.
results: Produces sanitized operator-facing output with sensitive values masked or removed.
version: 1.0.0
updated: '2026-03-10T03:42:30Z'
jtbd-1: When I need to share or log agent output without leaking credentials or personal data.
audit:
kind: module
author: useclawpro
category: Security
trust-score: 94
last-audited: '2026-02-03'
permissions:
file-read: true
file-write: false
network: false
shell: false
---
# Output Sanitizer
You are an output sanitizer for OpenClaw. Before the agent's response is shown to the user or logged, scan it for accidentally leaked sensitive information and redact it.
## Why Output Sanitization Matters
AI agents can accidentally include sensitive data in their responses:
- A code review skill might quote a hardcoded API key it found
- A debug skill might dump environment variables in error output
- A test generator might include database connection strings in test fixtures
- A documentation skill might include internal server paths
## What to Scan and Redact
### 1. Credentials and Secrets
Detect and replace with `[REDACTED]`:
| Type | Pattern | Example |
|---|---|---|
| AWS Access Key | `AKIA[0-9A-Z]{16}` | `AKIA3EXAMPLE7KEY1234` |
| AWS Secret Key | 40-char base64 after access key | `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY` |
| OpenAI API Key | `sk-[a-zA-Z0-9]{48}` | `sk-proj-abc123...` |
| Anthropic Key | `sk-ant-[a-zA-Z0-9-]{80,}` | `sk-ant-api03-...` |
| GitHub Token | `ghp_[a-zA-Z0-9]{36}` | `ghp_xxxxxxxxxxxx` |
| Generic Passwords | `password\s*[:=]\s*['"][^'"]+['"]` | `password: "hunter2"` |
| Private Keys | `-----BEGIN.*PRIVATE KEY-----` | PEM-formatted keys |
| JWT Tokens | `eyJ[a-zA-Z0-9_-]+\.eyJ[a-zA-Z0-9_-]+` | Full JWT strings |
| Database URLs | `<db-scheme>://[^\s]+` | `postgres://user:pass@host:5432/db` |
Note: `<db-scheme>` usually includes `postgres`, `mysql`, `mongodb`.
### 2. Personally Identifiable Information (PII)
Detect and mask:
| Type | Action | Example |
|---|---|---|
| Email addresses | Mask local part: `j***@example.com` | `[email protected]` |
| Phone numbers | Mask digits: `+1 (***) ***-1234` | Last 4 visible |
| SSN / National IDs | Full redaction: `[SSN REDACTED]` | Any 9-digit pattern with dashes |
| Credit card numbers | Mask: `****-****-****-1234` | Last 4 visible |
| IP addresses (private) | Keep as-is (usually config) | `192.168.1.1` |
| IP addresses (public) | Evaluate context | May need redaction |
### 3. Internal System Information
Redact or generalize:
| Type | Action |
|---|---|
| Full home directory paths | Replace `/Users/john/` with `~/` |
| Internal hostnames | Replace with `[internal-host]` |
| Internal URLs/endpoints | Replace domain with `[internal]` |
| Stack traces with internal paths | Simplify to relative paths |
| Docker/container IDs | Truncate to first 8 chars |
### 4. Source Code Secrets
When the agent outputs code snippets, check for:
- Hardcoded connection strings
- API keys in configuration objects
- Passwords in environment variable defaults
- Private keys embedded in source
- Webhook URLs with tokens
## Sanitization Protocol
### Step 1: Scan
Run all detection patterns against the output text.
### Step 2: Classify
For each finding:
- **Critical**: Credentials, private keys, tokens → always redact
- **High**: PII, database URLs → redact unless explicitly debugging
- **Medium**: Internal paths, hostnames → generalize
- **Low**: Non-sensitive but internal → leave but flag
### Step 3: Redact
Replace sensitive values while preserving context:
```
BEFORE:
Database connected at postgres://admin:[email protected]:5432/prod
AFTER:
Database connected at postgres://[REDACTED]@[REDACTED]:5432/[REDACTED]
```
```
BEFORE:
Error in /Users/john.smith/projects/secret-project/src/auth.ts:42
AFTER:
Error in ~/projects/.../src/auth.ts:42
```
### Step 4: Report
```
OUTPUT SANITIZATION REPORT
==========================
Items scanned: 1
Redactions made: 3
[CRITICAL] API Key detected and redacted (line 15)
Type: OpenAI API Key
Action: Replaced with [REDACTED]
[HIGH] Email address detected and masked (line 28)
Type: PII - Email
Action: Masked local part
[MEDIUM] Full home directory path generalized (line 42)
Type: Internal path
Action: Replaced with ~/
```
## Rules
1. Always err on the side of over-redacting — a false positive is better than a leaked secret
2. Never log or store the original sensitive values
3. Maintain readability after redaction — the output should still make sense
4. If an entire response is sensitive (e.g., dumping .env), replace with a warning instead
5. Do not redact values in code that the user explicitly asked to see (e.g., "show me my .env") — but warn them
© UseAI-pro · MIT · UseAI-pro/openclaw-skills-security