Skip to content

[AI审查][Docs] README「所有数据仅在本地处理,不会发送到任何外部服务」与实际数据流不符 #28

Description

@josephmqiu

Important

🤖 AI 代码审查声明:本 issue 由 AI 模型 Claude Fable 5(Anthropic,运行于 Claude Code)在一次完整代码审查中发现并撰写,经 @josephmqiu 授权提交。审查基于当前 main 分支 HEAD(commit c5ece53)的源码与文档逐行阅读。

问题描述

README「注意事项」一节(README.md:206)声称:

所有数据仅在本地处理,不会发送到任何外部服务

这与项目的实际数据流不符。只有解析这一步是本地的,解析产物随后必然离开本机:

  1. tools/ 下的解析脚本确实在本地运行(这部分没问题);
  2. 但 SKILL.md 的流程明确要求 agent 用 Read 工具读入解析结果(如 /tmp/wechat_out.txt),这些聊天记录内容会作为上下文发送给用户所使用的 LLM 服务(Anthropic API 或其他模型服务商)——这正是生成 persona 的方式,整个项目的核心步骤就是把语料交给模型分析;
  3. 照片同理:README 说「照片分析只提取元数据(日期/位置),不上传照片内容」,但 SKILL.md 方式 C 明确写着「具体照片的内容由用户选择后通过 Read 工具直接查看(Claude 原生支持图片)」——照片内容同样会被发送给模型服务。

考虑到本项目处理的是极其私密的数据(与前任的完整聊天记录、私人照片),隐私声明与事实不符是全部发现里最需要优先修正的一条。用户会基于这句话做出「敢不敢导入真实聊天记录」的决定。

附带问题:/tmp 中间产物

SKILL.md 的所有解析命令都把产物写到固定路径(/tmp/wechat_out.txt/tmp/imessage_out.txt/tmp/social_out.txt 等):

  • /tmp 是系统共享目录,多用户机器上其他用户可读(取决于 umask);
  • 文件不会被清理,聊天记录明文长期留存在项目目录之外;
  • 固定文件名意味着上一个前任的解析结果可能被下一次流程误读。

修复建议

  1. 改写 README 注意事项,如实描述数据流。建议措辞:
- 解析脚本(tools/)完全在本地运行,不会主动联网。
- 但解析产物会作为上下文发送给你所使用的 LLM 服务(如 Anthropic API),
  用于分析和生成 persona——请在导入真实聊天记录前知悉这一点,
  并参考所用服务商的数据政策。
- 照片:photo_analyzer.py 仅提取 EXIF 元数据;但如果你在流程中让 AI
  查看具体照片(方式 C),照片内容同样会发送给 LLM 服务。
  1. 中间产物改写到项目内的 gitignored 目录(如 exes/.cache/),流程结束后由 agent 主动删除;不要用固定的 /tmp 路径。

  2. (可选)在 /create-ex 的 intake 第一步加一句一次性提示,让用户在导入数据前确认知情。

英文版 README(README_EN.md)如有对应表述需要同步修改。

如需要,我可以提交对应的 PR(README 中英双语 + SKILL.md 路径调整)。


English TL;DR: README claims "all data is processed locally and never sent to any external service," but only the parsing is local — the extracted chat content is then read into context and sent to whatever LLM API the agent uses (that's the core of the pipeline), and SKILL.md option C explicitly has the agent read photo content despite the README claiming metadata-only. Intermediate parse outputs also persist at fixed world-shared /tmp paths. Suggested fix: rewrite the privacy note truthfully (wording proposed above), move intermediates into a gitignored project dir with cleanup, and add a one-time informed-consent note at intake.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions