私有标签¶
概述¶
使用 <private> 标签来标记你不希望持久化到 claude-mem 观察数据库中的内容。这让你能够对跨会话记住的内容进行细粒度控制。
工作原理¶
将任意内容包裹在 <private> 标签中:
Claude 可以在当前会话中查看并使用这些内容,但它不会被保存为观察记录。
使用场景¶
1. 敏感信息¶
Please analyze this error:
<private>
Error: Database connection failed
Host: internal-db-prod.company.com
Port: 5432
User: admin_user
</private>
What might be causing this?
Claude 会看到完整错误信息,但只有问题会被存储。
2. 临时上下文¶
<private>
Here's some background context just for this session:
- Project deadline is tomorrow
- This is a hotfix for production
- Manager asked for this specifically
</private>
Help me fix this bug quickly.
3. 调试信息¶
<private>
Debug output from previous run:
[... 500 lines of logs ...]
</private>
Based on these logs, what's the root cause?
4. 探索性提示词¶
<private>
I'm just brainstorming here, not making a final decision
</private>
What are some wild approaches to solving this?
技术细节¶
标签行为¶
- 多行支持:标签可以包裹多行内容
- 多个标签:你可以在一条消息中使用多个
<private>代码块 - 嵌套标签:内部标签会随外部标签一同被移除
- 始终生效:无需配置——自动工作
被过滤的内容¶
<private> 标签会将内容从存储和记忆中过滤掉:
- 用户提示词存储——保存到 user_prompts 表之前,标签会被剥离
- 工具输入——在创建观察记录之前,传递给工具的参数会被过滤
- 工具响应——在创建观察记录之前,工具的输出会被过滤
- 所有可搜索内容——私有内容永远不会进入数据库或搜索索引
重要:标签是在存储时被剥离,而不是从实时对话中剥离。Claude 在会话期间会看到包含 <private> 标签的完整内容,只有内容持久化到数据库时,这些标签才会消失。
不会被过滤的内容¶
- 会话摘要(仅由非私有观察记录生成)
- Claude 的响应(claude-mem 不捕获)
示例¶
示例 1:API 密钥¶
API 密钥不会被存储,但 Claude 可以在会话期间使用它。
示例 2:个人备注¶
<private>
Note to self: This is for the Smith project - the one we discussed
last Tuesday. Don't confuse with the Jones project.
</private>
Review the authentication implementation and suggest improvements.
个人上下文有助于 Claude 理解你的请求,同时不会污染你的观察历史。
最佳实践¶
- 不要过度使用标签:仅对真正不希望被存储的内容使用
<private> - 上下文很重要:Claude 对你项目的理解来自观察记录——过度使用私有标签会降低未来上下文的质量
- 机密信息应另行管理:虽然
<private>可以防止存储,但敏感数据仍应使用适当的机密信息管理 - 测试是否生效:如果不确定标签是否被剥离,请检查
~/.claude-mem/silent.log
验证¶
要验证标签是否正常工作:
- 提交一个包含
<private>标签的提示词 - 检查数据库,确保私有内容未被存储:
- 私有内容不应出现在 user_prompts 或 observations 中
<private>标签本身也应被剥离
架构¶
<private> 标签采用边缘处理模式:
- 内容在任何存储之前,于钩子层被过滤
- UserPromptSubmit 钩子:在保存到 user_prompts 表之前,从用户提示词中剥离标签(你输入的提示词在存入数据库之前会被清理)
- PostToolUse 钩子:在创建观察记录之前,从序列化的 tool_input 和 tool_response JSON 中剥离标签
- 过滤发生在数据到达 worker service 或数据库之前
- 这保持了 worker 的简单性,并遵循单向数据流
- 标签在实时对话中保持可见,但会从所有持久化存储中被剥离
标签剥离范围:该实现从工具输入和工具响应的序列化 JSON 表示中剥离标签,而不是从对话 UI 中的原始用户提示词文本中剥离。你输入的用户提示词文本存储在单独的表(user_prompts)中,标签在存储前也会被剥离。
这种设计确保私有内容永远不会到达数据库、搜索索引或记忆代理,从而在临时数据和持久数据之间保持清晰分离。
相关功能¶
故障排除¶
标签未被剥离¶
- 验证语法是否正确:
<private>content</private> - 检查
~/.claude-mem/silent.log中的错误 - 确保 worker 正在运行:
npm run worker:status - 重启 worker:
npm run worker:restart
部分内容被存储¶
如果观察记录中出现了部分内容: - 确保标签已正确闭合 - 检查标签名称是否拼写错误 - 验证内容是否位于工具执行中(不仅仅在你的提示词文本中)
静默日志显示错误¶
如果你在 ~/.claude-mem/silent.log 中看到错误:
这通常是无害的——它表明防御性类型检查正在正常工作。然而,如果您经常看到这些信息,则可能表明存在 bug。请在 https://github.com/thedotmack/claude-mem/issues 报告。
另请参阅¶
- Auto-Redaction — 可选的基于正则表达式的检测,用于发现意外的 token 泄漏。通过捕获您从未亲自输入的秘密,与
<private>标签形成互补。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/claude-mem