mcpbeat Sign in

Signal Discovery Skill for Claude

Discover missing AI provenance and watermark coverage in the remove-ai-watermarks library from fresh or historical corpora, then validate detection and removal parity. Use for corpus gap mining, periodic signal audits, new-provider discovery, or deciding whether old retained data must be replayed. Do not use for ordinary per-file identification or removal.

1.3k tokens
context cost
SKILL.md, read when the skill is used
2
files
plus reference files
0
copies elsewhere
how many repositories repackaged it
6 039
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/wiltodelta/remove-ai-watermarks --skill signal-discovery

What comes with it

5 652 bytes besides the instruction
references/coverage-and-cadence.md

The instruction itself

3 sections, as written by the author

Signal discovery

Work from the remove-ai-watermarks repository root. This skill discovers and

closes library coverage gaps. Implementation, tests, fixtures, and

documentation changes belong in this library; do not patch a downstream

consumer to compensate for a detector or cleaner gap.

Treat retained inputs as sensitive and read-only. Keep reports, contact sheets,

sidecars, and derived samples under the library's gitignored .local-eval/.

Never commit a retained input or an artifact derived from one.

Use only publication-cleared or synthetic files for tracked fixtures.

Before acting, read:

  • CLAUDE.md and .claude/rules/development.md;
  • docs/verification-plan.md;
  • docs/supported-signals.md and docs/watermarking-landscape.md;
  • references/coverage-and-cadence.md.

Choose the run

Do not call corpus_gap_scan.py a complete signal audit. Select every mode the

question requires:

  • Fresh discovery finds new providers, serializations, labels, and formats

in objects added since the preceding review.

  • Historical replay reruns current code on the complete retained history.

Use it after detection-path or format-support changes and on the periodic

backstop defined in the reference.

  • Removal parity proves that every detected removable signal is cleared

without violating the signal family's fidelity invariant.

  • Calibration or provider oracle is required where the corpus has no

self-evident answer key. Never treat a local negative as proof that a

proprietary watermark is absent.

Start by inventorying the current code, not a remembered list. Enumerate image

and video visible-mark registries, metadata readers and strippers, local

invisible decoders, explicit invisible vendor routes, supported containers, and

the stable signal families emitted by identify. Reconcile that inventory with

the coverage matrix before interpreting any green result. A hand-written marker

list or report family map that omits a current registry member is itself a

finding.

Run protocol

  • Record the library commit, version, enabled extras, corpus date range, and

exact commands in an untracked run directory. Preserve the pre-run Git

status so unrelated work is not attributed to the audit.

  • Refresh the local retained corpus through its owning, external collection

process when the task calls for fresh data. Use an explicit gitignored

destination, do not delete local objects, and finish with a zero-delta pass.

Fetch paired outputs only for a removal or complaint investigation.

  • Run the applicable fresh and historical discovery modes from the reference.

Use corpus_gap_scan.py --since YYYY-MM-DD for the overlapping fresh window

and omit --since for the complete history. Report counts per input shape

and per outcome; an example does not establish coverage. Give every code and

corpus snapshot a distinct --report path. The adjacent

.progress.jsonl checkpoint is the live progress source and makes the same

command resumable; use --restart only when intentionally discarding it.

  • Triage every candidate into one of: parser/serialization gap, missing vendor

attribution, new visible mark, possible invisible signal, format/read error,

expected non-AI provenance, or false candidate. Preserve unresolved items as

unresolved.

  • Reproduce an actionable gap with a failing test before changing code. Derive

the smallest publication-safe fixture from a controlled source or construct

it synthetically; do not move the retained file into a tracked path.

  • Implement the fix in the library subsystem that owns it. Update the library

registry, parser, remover, public docs, and published agent skill when their

contracts move. Updating a downstream consumer to take a released version is

a later, separately scoped task.

  • Rerun the affected focused audit and the complete historical regression

mode. A detection change must name the files expected to move before the

after-run; classify lost signals separately from intended new detections.

  • Run removal parity for every newly detected removable signal. A quiet

post-removal detector is necessary but not always sufficient: check

pixel/stream invariants and visually inspect residual-prone visible marks.

  • Run bash maintain.sh. Report evidence limits, incomplete rows, crashes,

unsupported formats, and oracle-unavailable cohorts explicitly.

External oracle uploads are separate mutations. Use the provider-oracles

skill only for a bounded, already-selected candidate, and obtain the required

action-time upload approval. Do not adapt candidates against an oracle, retry

automatically, or substitute one provider's verdict for another's.

How to use it

Copy the folder

Take wiltodelta/signal-discovery from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.