
watermarks-remover v0.5.0
一个隐私优先的应用,可从您拥有的内容中去除AI水印。
_ _ _ ____ ___ ____ ____ _ _ ____ ____ _ _ ____ ____ ____ _ _ ____ _ _ ____ ____
| | | |__| | |___ |__/ |\/| |__| |__/ |_/ [__ __ |__/ |___ |\/| | | | | |___ |__/
|_|_| | | | |___ | \ | | | | | \ | \_ ___] | \ |___ | | |__| \/ |___ | \
watermarks-remover
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
| Host | Target | Lands in |
|---|---|---|
| Claude Code(个人) | --target claude-code | ~/.claude/skills/<skill>(遵循 CLAUDE_CONFIG_DIR) |
| Claude Code(项目) | --target claude-project --project-dir PATH | PATH/.claude/skills/<skill> |
| Codex(个人) | --target codex | ~/.agents/skills/<skill> |
| Codex(项目) | --target codex-project --project-dir PATH | PATH/.agents/skills/<skill> |
| Cowork、claude.ai、云会话、例程 | --target cowork | dist/<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 —— 它仅处理文本,并自带脚本: