Files
remove-ai-watermarks/docs/agent-skill.md
T

249 lines
14 KiB
Markdown

# Agent skill
The published Agent Skill lives in
[`skills/remove-ai-watermarks/`](../skills/remove-ai-watermarks/). It teaches
coding agents to drive the `remove-ai-watermarks` CLI on content the user
generated or edited. It is not a fifth release surface: it ships with this
repository and updates when the skill files change.
## Install
Any agent that speaks the [Agent Skills](https://agentskills.io/specification)
format:
```bash
npx skills add wiltodelta/remove-ai-watermarks
```
Claude Code, from this repository as a marketplace:
```text
/plugin marketplace add wiltodelta/remove-ai-watermarks
/plugin install remove-ai-watermarks@remove-ai-watermarks
```
SkillsMP indexes public GitHub `SKILL.md` files and does not need a separate
upload. ClawHub and the Claude community marketplace are explicit publishes;
see [Release and distribution](release-and-distribution.md#agent-skill).
## Where the skill can actually be listed
Most skill catalogs are install registries, not discovery engines. A listing
without search traffic does not bring people to the CLI or to
[raiw.cc](https://raiw.cc). Prefer channels that a stranger can find, and keep
the intended-use boundary in every public description. Official review may
still reject a watermark-removal listing; that is a risk, not a reason to
widen the scope.
Do these in order after the skill is on the default branch.
1. **GitHub default branch.** Unlocks `npx skills add wiltodelta/remove-ai-watermarks`.
Cursor, OpenCode, Pi, Codex, and Copilot have no separate skill store; they
consume this repo or a copied `SKILL.md`.
2. **SkillsMP.** Aggregates public GitHub `SKILL.md` files. No submit form. A
search for `remove-ai-watermarks` now returns this skill. Neighboring
`watermark` hits are PDF-add and detection skills, not removal.
3. **skills.sh.** No submit form. A row appears on the leaderboard only after
people run `npx skills add`. The listing is live and has recorded real
installs; the README install line remains the seed, not a registration.
4. **Awesome-list PRs.** Hand-curated GitHub lists are how people browse skills
today. One accurate PR per list, with the scope sentence intact.
- `ComposioHQ/awesome-claude-skills`: submitted 2026-09-05 as PR 1841
(Creative & Media); no maturity bar in its contribution rules. Rechecked
2026-09-11: still open, CI green, no review comments, waiting on the
list maintainers.
- `heilcheng/awesome-agent-skills`: submitted 2026-09-09 as PR 483 under
Community Skills > Media. The skill's three concrete input/output examples
satisfy the list's working-example requirement. Rechecked 2026-09-11:
still open; the only check failure is their Vercel deploy authorization,
which a contributor cannot grant.
- `VoltAgent/awesome-agent-skills`: DEFERRED. Its CONTRIBUTING rejects
brand-new skills ("give your skill time to mature and gain users before
submitting"). The skill now has real installs and shipped releases, but
adoption remains too small to make the list's maturity claim comfortably.
- `VoltAgent/awesome-openclaw-skills`: DEFERRED on adoption only. Entries
are indexed via clawskills.sh, and the ClawHub prerequisite in step 6 is
now met. The list still requires proven real-world usage. Re-attempt once
the ClawHub listing shows organic installs.
5. **Claude community marketplace.** Form at
[platform.claude.com/plugins/submit](https://platform.claude.com/plugins/submit)
(individuals) or the claude.ai directory form (Team/Enterprise). Validate
with `claude plugin validate` first. SUBMITTED 2026-09-07 for Claude Code
only (strict validation passed; Apache 2.0; description carries the
scope boundary; platform selection limited to Claude Code because Cowork
was not tested). Pending review; the team may reach out by email.
Rechecked 2026-09-11: `platform.claude.com/plugins` is 404, and
`claude.ai/directory` is the MCP connector catalog, not plugins; a search
there does not list this skill. Do not open a second submission. The
official Anthropic marketplace is curated and has no application.
6. **ClawHub.** `clawhub login` then `clawhub skill publish` from
`skills/remove-ai-watermarks/`. LISTED 2026-09-09: versions 1.0.5, 1.0.6,
and 1.0.8, submitted by the `clawhub` job in `distribute.yml` during the
0.39.0, 0.39.1, and 0.40.0 releases, are public. A green job proves only a
submission, so read the catalog itself:
`clawhub search remove-ai-watermarks` returns the row and
`https://clawhub.ai/api/v1/skills/remove-ai-watermarks` reports
`latestVersion.version` 1.0.8, while its `/versions` endpoint returns
1.0.5, 1.0.6, and 1.0.8. The earlier 1.0.3 and 1.0.4 submissions never became
public and do not appear in that version list, so they were bypassed rather
than recovered. 1.0.7 was a post-0.39.1 bump that never reached ClawHub.
The issue that tracked 1.0.3 and 1.0.4, openclaw/clawhub#3643, was closed
by the reporter on 2026-09-09 once
1.0.5 went through; nothing upstream was confirmed fixed, and it is the
fifth report of this shape (#3624, #3466, #3351, #3284), so treat a stalled
submission as recurring and file a fresh one rather than assuming the
pipeline is repaired. Release-time publishing is automated (see
[release-and-distribution.md](release-and-distribution.md)), and the job
fires only on a published GitHub Release: a skill version bumped after a
release reaches ClawHub with the next one. Do not publish by
hand to close that gap. The listing records the license as MIT-0 while
`SKILL.md` declares Apache-2.0, and that is not a listing error to repair:
MIT-0 is a platform-wide constant in ClawHub's own client
(`dist/schema/license.js`, and its version schema accepts only `"MIT-0"`
or null), so every skill published there is offered under MIT No
Attribution. Publishing to ClawHub means offering this skill on those
terms in addition to the repository's Apache-2.0; do not try to edit the
field, and do not read the mismatch as drift. The public catalog
already has an add-watermark skill; this is the removal counterpart, framed
as the user's own content. ClawHub disallows deception, impersonation, and
fake-engagement install loops.
7. **OpenAI ChatGPT / Codex plugin directory.** Skills-only plugins are a
supported submission type at
[platform.openai.com/plugins](https://platform.openai.com/plugins). This is
the largest consumer surface that actually reviews listings. It needs Apps
Management write access, a verified Platform identity, public website /
support / privacy / terms URLs, starter prompts, and five positive plus three
negative test cases. Claude marketplace approval does not transfer. Contact
your OpenAI partner before submitting: this skill's core value requires local
execution, arbitrary file access, and optional hardware access, which the
official guide routes through that product-specific review. Convert with
[Submit your Claude Code plugin to OpenAI](https://developers.openai.com/plugins/guides/submit-claude-plugin).
8. **AgenticSkills.** SUBMITTED 2026-09-09 as review issue 174 under AI/ML
Development. The submission carries the user-owned-content boundary and
links to the repository rather than hosting a separate copy. Rechecked
2026-09-11: the public index still does not list it (`/skills/remove-ai-watermarks`
is 404; search for `wiltodelta` returns 0 of 192). Their form promises a
48-hour review; that window has passed. Issue 174 is not a public GitHub
issue. Do not open a second submission. Followed up 2026-09-11 through
their contact form as a listing correction.
9. **AI Skills Catalog.** SUBMITTED 2026-09-09 as reference 2 under Video Media,
with Codex as the primary agent and every supported harness marked compatible.
Rechecked 2026-09-11: the public catalog at skillscatalog.ai shows 0 skills
from 0 publishers, `/api/featured` returns 401, and `/api/auth/session`
returns 500, so a stranger cannot confirm the listing. Do not open a
duplicate while that initial review is pending. Once accepted, treat
material skill-version updates as manual because the catalog stores
compatible packages in addition to source metadata and does not promise
that a GitHub change refreshes those packages. Use the update route
supplied with acceptance; if none is supplied, contact the catalog or
resubmit, then verify the live result.
The conditional update actions for every catalog are part of the canonical
release checklist in
[Release and distribution](release-and-distribution.md#agent-skill).
Do not treat Smithery or other MCP directories as skill catalogs. Do not open
a second near-identical skill to farm installs. The conversion path that
matters is: agent cannot run CUDA locally, so it sends the user to raiw.cc.
## When to edit the skill
Update `SKILL.md` and `references/` in the same change as any CLI edit that
alters:
- command names or routing;
- extras a command needs;
- no-signal or exit-code behavior;
- registered visible mark keys;
- the CUDA-only invisible-image rule;
- the intended-use boundary.
Keep `SKILL.md` under 500 lines. Put flag lists in `references/`. Do not copy
calibration numbers or retired pipeline names into the skill.
Write for every harness and a weaker model, not only Claude Opus:
- third-person description, keywords first, so a truncated listing still matches;
- a numbered checklist in `SKILL.md`;
- `scripts/probe.py` for CUDA, ffmpeg, CLI, and installer detection. It measures
CAPABILITY, not presence: it writes a blank PNG with `zlib` and `struct` and
runs the installed `visible` on it, because exit `2` is a state only a working
pixel stack reaches. Reporting a found binary as ready is what sent an agent
into a missing-cv2 crash on the Homebrew build, which carries no extras. It
also compares the installed release against `MIN_CLI_VERSION`, so a stale CLI
is named instead of being reported as a broken flag. Video capability is
checked separately in the installed CLI's Python environment:
`video_stacks.pixels` reports `ok`, `missing`, or `unknown`, and
`video_stacks.invisible` reports `installed`, `missing`, or `unknown`.
These checks load no weights. An unrecognized launcher leaves video
guidance unverified rather than inferring readiness from image support;
- uv, pipx, and pip as installer fallbacks;
- forward slashes only;
- no `allowed-tools` (that field is experimental and host-specific).
Raise `MIN_CLI_VERSION` in `scripts/probe.py` in the same change as any reference
that names a command, flag or value the previous release lacked. Left behind, it tells an agent its
CLI is current right before it types an option that build rejects.
Bump `metadata.version` in `SKILL.md` plus `version` in
`skills/.claude-plugin/plugin.json` and `.claude-plugin/marketplace.json` when
the skill instructions change. That version is independent of the PyPI package
version.
## Behavior evals
The deterministic suite proves the skill's prose matches the CLI. It cannot prove
the only thing a skill exists for: that a model reaches for it on a real request
and then obeys it. `scripts/skill_eval.py` measures that.
Each case builds a throwaway project with the skill installed and a recording
stand-in for the CLI first on `PATH`, runs a headless agent on one user prompt,
and grades the recorded command trace. Grading is mechanical wherever it can be:
"did it run `all` on a machine the probe said writes nothing" is a fact in the
trace, and "did it name an output file that is not on disk" is how a fabricated
result is caught without asking a model to judge itself.
```bash
python3 scripts/skill_eval.py --model haiku --repeat 3
python3 scripts/skill_eval.py --case visible_ru --model sonnet --out /tmp/eval.json
```
Cases live in `data/evaluations/skill/cases.json`; each carries the prompt, the
scenario the stand-in replays, and the expectations. Run outputs stay outside the
repository, per `data/README.md`. This never runs in `maintain.sh`: it spends model
tokens and needs the `claude` CLI.
Agents are nondeterministic, so the report is a pass RATE per check over `--repeat`
runs, never one verdict. Weak models are the point: run haiku before opus.
Four things the first runs found, all on haiku and none visible to the
deterministic suite:
- a skill that never triggered on "скажи, видно ли, что она сгенерирована ИИ",
because the description sold removal and not the question;
- a finished-looking removal report, with a size table for a file nobody wrote,
on a machine whose pixel stack was missing;
- `--mark gemini-sparkle`, a key that does not exist, guessed instead of read;
- a removal command run to answer a question that only needed `identify`.
`tests/test_skill_evals.py` keeps the harness honest: the stand-in's exit codes are
compared against the real CLI where the state is reproducible locally, the grader is
driven over hand-built traces, and every case is checked for internal consistency. A
scenario where `identify` names a visible mark that `visible` then cannot find sends
any agent into a retry loop and measures the case, not the skill.
## Validate
```bash
claude plugin validate .
claude plugin validate --strict .
claude plugin validate ./skills
```
The suite also checks frontmatter and manifest agreement in
`tests/test_agent_skill.py`, plus two things a catalog cannot see: that the
skill's prose still matches the live click application (mark keys, flag choices,
batch modes, exit codes, extras) and that a machine without the pixel stack gets
an install hint from the CLI, a caveat from `identify`, and `pixel_stack:
missing` from the probe.