返回更新列表
新发布Aug 30, 2026

watermarks-remover v0.5.0

一个隐私优先的应用,可从您拥有的内容中去除AI水印。

分享
_ _ _ ____ ___ ____ ____ _  _ ____ ____ _  _ ____    ____ ____ _  _ ____ _  _ ____ ____
| | | |__|  |  |___ |__/ |\/| |__| |__/ |_/  [__  __ |__/ |___ |\/| |  | |  | |___ |__/
|_|_| |  |  |  |___ |  \ |  | |  | |  \ | \_ ___]    |  \ |___ |  | |__|  \/  |___ |  \

watermarks-remover

CI Release Stars Forks

Agent 技能 + 标准库 Python 服务,用于从文本和文件中剥离多厂商 AI 溯源标记——适用于你拥有的内容的隐私与卫生。该技能是一个轻量客户端:它通过 HTTP 驱动机制,因此 agent 主机无需 Python。

层级目标方式
A不可见 Unicode、异体空格、双向文本、标签字符确定性 Python 脚本
B统计式(token 采样)文本水印Agent 重写 + 可选的 rewrite_text.py 钩子
文件C2PA / EXIF / XMP / 文档属性PNG、JPEG、WebP、AVIF、HEIC、BMP、GIF、TIFF、SVG、PDF、DOCX、XLSX、PPTX、EPUB、ODT、HTML、Markdown、MP4/MOV/M4A/M4V、WAV、MP3、FLAC

厂商 / 生态系统(类级别):Claude、Gemini / SynthID-Text、OpenAI 溯源表面、open-LLM Kirchenbauer 式(绿名单)以及带密钥的 Gumbel / EXP(Aaronson)标记。

最新版本: v0.7.0

技能路径:skills/remove-ai-marks/
服务路径:service/
(迁移:原为 remove-claude-marks;斜杠别名 /remove-claude-marks 仍有文档记录)

安装(agent 技能)

该技能不附带代码——它通过 HTTP 调用服务。安装该技能(仅 markdown)并启动服务,然后如果服务地址不是 http://127.0.0.1:8765,则设置 WATERMARKS_SERVICE_URL。

在 Claude Code 中,最快的途径是内置的 插件市场——无需克隆,并且会 就地更新。在其他所有环境中,一个安装程序即可覆盖所有受支持的主机 (Python 3.10+ 标准库,无依赖):

python3 install_skill.py --skill remove-ai-marks --target claude-code
HostTargetLands in
Claude Code(个人)--target claude-code~/.claude/skills/<skill>(遵循 CLAUDE_CONFIG_DIR)
Claude Code(项目)--target claude-project --project-dir PATHPATH/.claude/skills/<skill>
Codex(个人)--target codex~/.agents/skills/<skill>
Codex(项目)--target codex-project --project-dir PATHPATH/.agents/skills/<skill>
Cowork、claude.ai、云会话、例程--target coworkdist/<skill>.zip,在 Customize → Skills 下上传
Cursor--target cursor(默认)~/.cursor/skills/<skill>

随附技能:remove-ai-marks(完整版,由服务支持)和 clean-user-facing-text(仅文本,自包含)。--list 会打印它们。 除非传入 --force,否则现有安装会被保留;替换会先 暂存,之前的安装会保留为唯一命名的备份。 --link 会对此检出创建符号链接而非复制,因此编辑会实时 生效。在 Windows 上,使用 py install_skill.py ...;install-skill.sh 包装脚本 为 macOS/Linux shell 提供。

在写入任何内容之前,安装程序会根据 Agent Skills 打包规则验证技能,这些规则是 claude.ai 上传 和 Skills API 所强制执行的:仅规范允许的 frontmatter(name、description、 license、compatibility、metadata、allowed-tools),小写连字符 name 最多 64 个字符且与目录匹配,非空 description 最多 1024 个字符。Cowork 包还必须 符合 30 MB 上传限制,打包程序会强制执行这一点。

Codex 终端和桌面端

为你的用户安装任一随附技能,或将某个技能安装到特定 项目中:

python3 install_skill.py --skill remove-ai-marks --target codex
python3 install_skill.py --skill clean-user-facing-text --target codex
python3 install_skill.py --skill remove-ai-marks --target codex-project --project-dir /path/to/project

在 Windows 上,使用 py 代替 python3。在 Codex 中打开项目。在终端中,使用 /skills 或输入 $ 来选择技能;在桌面应用中,在提示中选中或提及该技能。如果新技能未出现,请重启 Codex。当 Codex 在该项目中运行时,项目安装即可用。

对于 remove-ai-marks,在使用该技能之前,先从此仓库启动现有的 HTTP 服务,使用 make serve(或在 Windows 上没有 make 时,运行 py service/scripts/server.py --host 127.0.0.1 --port 8765)。它使用 WATERMARKS_SERVICE_URL(默认 http://127.0.0.1:8765),检查 /health,并调用现有的 /inspect 和 /clean 端点。如果服务需要 API 密钥,请为客户端设置 WATERMARKS_SERVER_API_KEY。clean-user-facing-text 是自包含的,不需要该服务。

通过钩子自动清理(确定性)

技能是一条指令:模型决定是否调用它,而模型正是产生标记的东西。钩子由 harness 在每次匹配的工具调用时执行,无需配合。这使得钩子成为此工作流中确定性的那一半。

该插件在 Write|Edit|MultiEdit|NotebookEdit 上注册一个 PostToolUse 钩子,针对代理刚刚写入的文件运行 service/scripts/hook_written_file.py。有两种模式,与默认检查的 pre-commit 约定一致:

模式行为
check(默认)报告来源标记,不修改文件。发现结果发送给模型(退出码 2),以便模型可以提议清理它们。
clean就地剥离标记,然后告知模型磁盘上的文件已更改。

从插件的设置中设置模式(在 /plugin manage 中的 Hook mode,由钩子读取为 CLAUDE_PLUGIN_OPTION_HOOK_MODE),或在环境中使用 WATERMARKS_HOOK_MODE=clean。钩子命令故意不插值 ${user_config.hook_mode}:Claude Code 拒绝运行引用了用户从未打开 /plugin manage 设置过的选项的钩子——声明的 default 并不满足这一要求——因此插值它意味着钩子在全新安装时永远不会静默运行。检测复用 audit_lib 的 scan_file / is_actionable,因此钩子、pre-commit 门禁和 CI SARIF 导出对什么算作可操作的一致;清理通过 shell 调用 clean_file.py,因此没有重复的清理逻辑。clean 模式写入一个同级临时文件,仅在存在真实差异时才替换,因此已经干净的文件保留其 mtime,不会重新触发文件监视器。

如果没有插件,请自行在 ~/.claude/settings.json(或项目的 .claude/settings.json)中接入:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit|MultiEdit|NotebookEdit",
        "hooks": [
          {
            "type": "command",
            "command": "python3",
            "args": ["/path/to/watermarks-remover/service/scripts/hook_written_file.py",
                     "--mode", "check"],
            "timeout": 30
          }
        ]
      }
    ]
  }
}

在 Windows 上,将 python3 替换为 py。

钩子无法做到的事。 没有任何钩子能在你阅读之前重写助手的聊天消息。Claude Code 的 Stop 钩子以只读方式接收 last_assistant_message,并且对于最终响应没有发送前过滤器——这与本项目已为 Cursor 规则记录的限制相同。因此,确定性保证覆盖代理写入的文件,以及针对任何进入 git 的内容的预提交门禁。仅存在于聊天记录中的文本仍然依赖于技能工作流,而该工作流基于模型指令,因此是尽力而为的。

Claude Code 插件(市场)

该仓库同时也是一个 Claude Code 插件和一个单插件市场(.claude-plugin/),因此两个技能都可以通过两条命令安装和更新,无需克隆或脚本:

/plugin marketplace add guillaumemeyer/watermarks-remover
/plugin install watermarks-remover@watermarks-remover

技能随后以命名空间方式加载:/watermarks-remover:remove-ai-marks 和 /watermarks-remover:clean-user-facing-text(当没有其他内容占用该名称时,裸的 /remove-ai-marks 也可用)。/plugin marketplace update watermarks-remover 会拉取后续版本。通过 CLI 使用 claude plugin marketplace add … / claude plugin install … 也能达到同样效果,从本地检出使用时,传入路径而非 owner/repo 即可。

维护者:make plugin-validate 会对两个清单运行 claude plugin validate . --strict;tests/test_plugin_manifest.py 无需 CLI 即可覆盖相同的文件。

Claude Code

# Personal — available in all your projects
python3 install_skill.py --skill remove-ai-marks --target claude-code
# or: make install-claude-code-skill

# Project — commit .claude/skills/ to share it with the repo
python3 install_skill.py --skill remove-ai-marks --target claude-project \
  --project-dir /path/to/project
# or: make install-claude-project-skill PROJECT=/path/to/project

Claude Code 无需重启即可加载个人技能和项目技能;/skills 会列出已加载的技能。使用 /remove-ai-marks 调用,或要求“去除 AI 水印 / C2PA / Claude 标记 / SynthID 类文本”。项目安装也是 cloud sessions 所读取的内容,因为它们会克隆仓库并加载其 .claude/skills/。

Cowork(以及 claude.ai、cloud sessions、routines)

Cowork 会话不会读取你机器上的 ~/.claude/skills —— 它们会加载 为你的 claude.ai 账户启用的技能,并在会话启动时同步。 因此,在那里安装需要上传一个 bundle:

python3 install_skill.py --skill remove-ai-marks --target cowork
# writes dist/remove-ai-marks.zip   (make package-cowork-skill)

然后,在 Claude Desktop 应用中,打开 Customize → Skills → Add 并上传该 zip 文件(在 claude.ai 上使用相同的技能设置也可以)。该捆绑包是可复现的,包含一个单一的顶层 remove-ai-marks/ 目录,其根目录下有 SKILL.md,这正是上传所期望的布局。

服务可达性在这里比在本地安装中更为重要:该技能是一个轻量级 HTTP 客户端,因此会话必须能够访问 WATERMARKS_SERVICE_URL。在你的机器上本地运行的 Cowork 会话可以访问本地的 make serve;云会话和例程在远程运行,需要一个可从那里访问的服务 URL(并在其上设置 WATERMARKS_SERVER_API_KEY)。如果你想要一个完全不需要服务的技能,请改为上传 clean-user-facing-text —— 它仅处理文本,并自带脚本:

分类