自动脱敏¶
claude-mem 可以在存储观察结果和摘要之前自动检测并脱敏常见的机密信息。与手动 <private> 标签 不同,这是一个确定性的 regex 管道,可以捕捉你从未亲自输入过的机密——例如 curl 响应中打印的 API 密钥,或 Bash 命令回显的内容。
工作原理¶
启用后,脱敏会在与剥离 <private> 标签相同的单一位置运行,因此同时覆盖所有采集路径:工具输入和输出、你的提示词(包括存储的提示词历史)以及用于生成摘要的助手最后一条消息。服务器运行时 还会在存储事件之前对事件正文中的每个文本值进行脱敏,worker 和 hook 日志会对它们写入的工具行(例如 Bash 命令)进行脱敏。一个例外:服务器运行时会话和事件元数据(例如会话元数据中的开场 prompt)仅在字符串包含标签时才进行标签剥离,因此脱敏不会对其运行。内容会扫描一组精选的高置信度机密模式,匹配项会在原位置替换为自闭合的 <redacted type='...'/> 占位符,保留周围上下文,从而保持搜索和观察质量不受影响。
Before: curl -H "Authorization: Bearer sk-abc123def456..." …
After: curl -H "Authorization: Bearer <redacted type='openai_key'/>" …
当负载包含标记时,观察者提示词会告诉模型将其视为占位符,而不要推断出字面值。没有标记的提示词保持不变,因此当未发现任何内容时,脱敏不会增加 token 开销。
启用¶
添加至 ~/.claude-mem/settings.json:
这就是让 12 个内置模式生效所需的全部配置。添加 "CLAUDE_MEM_REDACT_GENERIC_ENABLED": "true" 还可以开启 3 个通用模式。
内置模式¶
| 名称 | 捕获内容 |
|---|---|
aws_access_key |
AKIA… 和临时 ASIA… 密钥 ID(16 个尾部字母数字字符) |
aws_secret_key |
40 字符 base64,锚定到任意大小写的 AWS_SECRET_ACCESS_KEY=…(如 ~/.aws/credentials 中),或 JSON "SecretAccessKey": "…"(aws sts 输出) |
aws_session_token |
100+ 字符 base64,锚定到 AWS_SESSION_TOKEN=…、aws_session_token = … 或 JSON "SessionToken": "…"(临时 STS/SSO 凭据) |
github_pat |
ghp_…、gho_…、ghu_…、ghs_…、ghr_…、github_pat_… |
openai_key |
sk-…(≥20 字符) |
anthropic_key |
sk-ant-…(≥20 字符) |
slack_token |
xoxb-…、xoxp-…、xoxa-…、xoxr-…、xoxs-… |
jwt |
eyJ…[.]eyJ…[.]… 三段式令牌 |
private_key_pem |
-----BEGIN [RSA\|DSA\|EC\|OPENSSH\|PGP\|ENCRYPTED\|]PRIVATE KEY[ BLOCK]----- 块 |
stripe_key |
sk_live_…、pk_live_…、rk_test_… |
google_api_key |
AIza…(35 个尾部字符) |
claude_mem_key |
claude-mem 自己的服务器 API 密钥(cmem_…)和 cmem.ai Pro 记忆密钥(cm_pro_…) |
通用模式¶
没有厂商前缀的凭据(例如数据库密码、内部令牌)需要基于密钥名称的低置信度匹配。以下三种模式默认关闭,直到你主动启用:
| 名称 | 捕获内容 |
|---|---|
generic_password |
分配给 password / passwd 密钥或 *_PWD 密钥的值(DB_PASSWORD=…、MYSQL_PWD=…),支持 shell、yaml 或 JSON 风格 |
generic_token |
分配给 *_TOKEN / *_SECRET / *_API_KEY 密钥的值(例如 AUTH_TOKEN=…、"client_secret": "…") |
bearer_token |
Authorization: Bearer … 之后的值 |
它们在每个厂商模式之后运行,因此具有厂商形状的值(如 sk-… 密钥、JWT 等)会保留其特定标记。为了避免误报,它们仅在值长度达到 8 个及以上字符、包含至少一个字母、并且完全由机密典型字符组成时才会触发——因此 max_tokens=4096、短 PIN、纯数值以及 PWD / OLDPWD 工作目录变量不会被处理。在服务器运行时事件正文中,凭据命名密钥(client_secret、db_password、token 等)下的字符串值会被整体脱敏。与每个内置模式一样,它们都可以按名称单独禁用。
禁用单个内置模式¶
CSV 格式。其他内置模式保持启用。
添加自定义模式¶
{
"CLAUDE_MEM_REDACT_ENABLED": "true",
"CLAUDE_MEM_REDACT_CUSTOM_PATTERNS": "[{\"name\":\"company_internal_token\",\"regex\":\"INTERNAL-[A-Z0-9]{32}\"}]"
}
name 是必填项,并会显示在 <redacted type='...'/> 标记中。自定义模式会在内置模式之前评估,因此你可以覆盖特定令牌族的內置检测。
如果你的 regex 无法编译,或 JSON 格式错误,claude-mem 会记录一条警告并跳过损坏的条目——其余条目继续工作。
诊断日志¶
每次调用时向 worker 日志写入一行 pattern,count。原始匹配到的字节永远不会被记录。
限制¶
- 超大字段安全失败:单个字段超过约 1M 字符(UTF-16 码元)时,会整体替换为
<redacted type='oversize'/>,而不是未扫描地存储,并记录一条警告。匹配数量没有上限:每个匹配都会被脱敏。 - 覆盖缺口:内置模式不覆盖 Azure / GCP service-account JSON / IBM Cloud / 私有 IDC 令牌——请为这些场景使用自定义模式。
- 不可读的 settings.json:如果文件在脱敏开启时无法解析(例如手动编辑出错),claude-mem 会继续使用最后成功加载的配置或内置模式进行脱敏,并记录一条警告。它不会回退到默认值(关闭)。修复文件以更改配置,或在环境中设置
CLAUDE_MEM_REDACT_ENABLED=false以关闭脱敏。 - server-beta 范围:在多租户
server-beta部署中,脱敏配置目前是从 worker 本地的~/.claude-mem/settings.json读取,而不是从租户级设置读取。对于团队部署,请在 worker 级别配置脱敏。未来的变更将改为使用租户级脱敏配置。 - 破坏性:这是破坏性替换,而不是加密。被脱敏的字节无法恢复。如果你需要可逆的保护,请使用
<private>标签,并让机密完全不出现在对话中。
与 <private> 标签的对比¶
<private>(手动) |
自动脱敏 | |
|---|---|---|
| 触发方式 | 用户用 <private>...</private> 包裹内容 |
在内容任意位置进行 Regex 匹配 |
| 粒度 | 整个块被丢弃 | 行内占位符,保留周围内容 |
| 默认行为 | 始终开启(无需设置) | 默认关闭,直到你主动启用 |
| 适用场景 | 你事先知道内容属于敏感信息 | 你希望为意外泄露的 Token 提供安全网 |
两者可以同时使用 — <private> 块会先被移除,然后自动脱敏会扫描剩余内容,因此无论 <private> 块内部包含什么,其内容都会被完全移除。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/claude-mem