본문으로 건너뛰기
cccskills
무료GitHub에 공개

verify-watermark-removal

Test text watermark removal tools using samples marked with a known secret key. Measure whether the mark survives, alongside changes to meaning, facts, wording, and length, and compare recorded runs in a shared table.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Verify that a watermark-removal or "humanizer" step actually removed a statistical text watermark, by measuring a sample whose key the user holds. Use after any tool, script or service claims to have cleaned a text, or when the user asks whether such a tool works, which one to trust, or how to test one. Reports a detector score against fixed thresholds plus what the run cost in meaning, facts, verbatim overlap and length. This skill only measures and never removes a mark.

설치 방법 보기

이럴 때 유용합니다

  • Check a humanizer before paying for it
  • Compare watermark removal tools using the same measurements
  • Measure meaning and fact changes after rewriting
  • Check whether a known text watermark remains

포함된 파일(1)

  • SKILL.md10.0 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Verify Watermark Removal

A tool says it removed a watermark from a text. This skill checks whether it did, by measuring rather than by trusting the tool's own report.

The check works because the mark is planted first, with a key the user holds. A detector that knows the key is the strongest detector that can exist for that text, so its score is a ceiling rather than a guess. What the key buys is a scale of the user's own; what keeps a tool from recognising the sample is something else, namely that a freshly generated private sample is a text nobody has seen before. The samples shipped with the tool are published together with their key, so those can be recognised, and the repository says so in samples/README.md. The skill also reports what the rewrite cost the text, because a mark that disappeared together with half the meaning is not a result anyone wants.

This skill measures. It never removes a mark, and it never claims anything about a specific vendor's watermark.

When to Use This Skill

  • A "watermark remover", "AI humanizer" or "detector bypass" tool claims it cleaned a text, and the claim needs checking before anyone repeats it.
  • Someone is about to pay for such a tool and wants evidence instead of a landing page.
  • Several such tools have to be compared on one ruler, with numbers another person can reproduce.
  • A rewriting step sits inside a pipeline, and someone needs to know what it costs in meaning, facts and length.
  • The user asks how these tools can be tested at all, or why a "99% undetectable" promise cannot be verified from outside.

What This Skill Does

  1. Plants a known mark: generates text carrying a statistical watermark of the SynthID-Text class under a key the user chooses, and scores every sample as it writes it, so a text where the mark did not plant is named before anything is handed to a tool.
  2. Scores what came back: runs the keyed detector on the returned text and places the score against thresholds that were fixed before any run, giving one of four outcomes.
  3. Measures the cost: meaning similarity, facts kept, longest verbatim run, share of words changed, length ratio.
  4. Builds a comparison table: turns several recorded runs into one matrix, so tools are ranked on the same measurements instead of on their own claims.
  5. Keeps the answer honest: reports the grey zone as an outcome of its own and never turns a passing run into "this text is now undetectable".

How to Use

Basic Usage

Install once. A CPU is enough, Python 3.10 or newer:

git clone https://github.com/Yurakonoplya/unmark-checker && cd unmark-checker
git checkout v0.1.5              # the revision this page describes
pip install --index-url https://download.pytorch.org/whl/cpu torch
pip install -e .                 # no PyPI package: install from the clone
read -rs UNMARK_CHECKER_KEY && export UNMARK_CHECKER_KEY

The checkout pins exactly the revision described here: main moves, and a command that behaves differently from this page is worse than no page.

The key is typed at the read prompt, which echoes nothing and writes nothing to the shell history. Keep it in the environment, never in a file and never in a command that gets logged. The key is the whole basis of the check.

If the tool under test runs on the same machine, start it with env -u UNMARK_CHECKER_KEY <tool> ...: a process that inherits the key could score the sample itself and shape its output to it, which is exactly what the measurement is meant to rule out.

Then four steps.

1. Get a marked sample. The repository ships ready samples in samples/, with their key printed in samples/README.md. That is the fast path. For a test no tool can anticipate, generate your own (about two minutes each on a CPU with the small model):

unmark-checker generate --num 2 --words 100 --scheme shallow \
    --model sshleifer/tiny-gpt2 --out my-samples

Use --model gpt2 instead when the sample has to read as English, for example when it is going into a web form that rejects nonsense.

Every sample is scored as it is written, and the manifest next to the texts records the outcome of that scoring. Hand a tool only the samples the manifest records as mark_present. The command does not do this filtering for you: if the mark planted in none of the samples it says so and exits with code 2, but if it planted in some of them it warns, lists the ones it did not plant in and exits with code 0, leaving every file on disk. check behaves the same way: given such a sample it prints a warning and measures it anyway, and that measurement means nothing, because a mark that was never there cannot be removed.

2. Run the tool under test on the sample, and save exactly what came back, unedited, to a file.

3. Measure, one command:

unmark-checker check --sample my-samples/UM-1A2B3C.txt --returned cleaned.txt

4. Report what the run says, and only that. The outcome is one of four:

OutcomeWhat it means
mark_presentscore at or above 4.0; the tool did not take this mark out
uncertainscore between 2.0 and 4.0, the grey zone; do not round it to a yes or a no
mark_gonescore below 2.0; on this sample, on this run, the mark did not survive
not_our_textfewer than half the content words of the returned text come from the sample, so it is not recognisably the sample and no score is reported

Always report the cost numbers next to the outcome: meaning kept, facts kept, longest verbatim run, share of words changed, length ratio. They exist for the three scored outcomes only (mark_present, uncertain, mark_gone). A not_our_text run stops before they are computed and reports four things instead: the outcome, the share of content words that came from the sample, and the word counts of both texts. Do not ask for a meaning or facts number there, and do not report one as zero: it was never measured.

Advanced Usage

Add --json when the numbers are going into a table or a report:

unmark-checker check --sample my-samples/UM-1A2B3C.txt --returned cleaned.txt --json

One run on one sample is one measurement, not a verdict on a product. For a claim worth repeating, run several samples at several lengths and across the three scheme presets (shallow, default, deep).

Record each run as a service file and build one table out of the folder:

unmark-checker matrix --dir my-runs --out my-runs/matrix.md

The service file format is described in docs/service-file.md in the repository. Runs measured this way and published in the same format are collected at https://unmarkclaude.io/check/services, so a table built locally can be set against one built by someone else.

When installing anything is not an option, the same check runs in a browser at https://unmarkclaude.io/check, on a sample whose key that site holds. Use this skill instead when the text must not leave the machine, or when the key has to be the user's own.

Example

User: "I ran this paragraph through a humanizer that promises to strip AI watermarks. Did it work?"

Output:

The mark is still there. Detector score 6.41, at or above 4.0. Under the null
case a clean text scores that high about three times in a hundred thousand, so
this is not a coin flip: the tool did not take this mark out.
Meaning kept: 0.94 of 1.00. Facts kept: 7 of 7.
Longest verbatim run: 38 words. Words changed: 11%. Length: 0.97x (100 words
in, 97 out).

Read back to the user: the mark this tool was asked to remove is still in place, and the text came back almost unchanged. On this sample, on this run, the tool did not do what it promised. This says nothing about any vendor's own watermark.

What the Check Proves, and What It Does Not

  • A tool that leaves this mark in place is unlikely to remove a vendor's mark either: this is an inference from where both marks live (word choice), not a measurement; the measurement covers one key, one scheme, one model and one sample.
  • A tool that removes this mark has not been shown to remove anyone else's. Different key, different scheme parameters, different model. Say so, and do not let a passing run turn into "the text is now undetectable".
  • uncertain is an answer, not a rounding error. Collapsing the grey zone into a yes or a no is a lie in one direction or the other.

Tips

  • Use the user's own key whenever the result has to be strict. The shipped samples are convenient, and their published key is also their one weakness: a tool could recognise those exact texts and treat them specially.
  • Save what the tool returned byte for byte. Trimming a heading or a stray line moves the score and the verbatim run, and the numbers stop being comparable.
  • Report the cost numbers every time, not only when they look bad. They are what separates "removed the mark" from "rewrote the text into something else".
  • Longer samples give a steadier score. Below roughly 80 words the detector has little to work with, and uncertain becomes the normal answer.
  • Never tune the thresholds to a result. They were fixed before any run, and moving them after seeing one invalidates every number produced with this code.
  • Apply this only to text the user owns or is authorised to process.

Common Use Cases

  • Checking a paid "humanizer" before the subscription renews.
  • Comparing several removal services on one ruler and publishing the table.
  • Testing a rewriting step inside an internal pipeline for what it costs in facts and meaning.
  • Answering "is this text still watermarked" with a measurement and a stated limit, instead of a guess.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Handle ActiveCampaign contact and marketing tasks through Rube MCP, a connection for agent tools. Find or create contacts, manage tags and subscriptions, enroll contacts in existing automated workflows, and create follow-up tasks.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Finding or registering contacts
  • Adding or removing contact tags
  • Subscribing contacts to lists or unsubscribing them
davepoon/buildwithclaude3.7천2026년 10월 20일 업데이트

Research competitors’ live Meta and Google ads to identify opening hooks, offers, calls to action, and landing pages. Receive a sourced creative brief and up to three test ideas adapted to your product.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Find angles for new ad copy
  • Plan creative tests using competitor ads
  • Choose a landing page message
davepoon/buildwithclaude3.7천2026년 10월 20일 업데이트

Add website or app tracking, then use command-line tools to review traffic, signups, drop-off, and returning users across projects. Run A/B tests, which compare alternative headlines or buttons, and inspect results to guide changes.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Adding page-view and key-action tracking
  • Reviewing traffic and referral sources across projects
  • Finding where visitors drop out before signup or purchase
davepoon/buildwithclaude3.7천2026년 10월 20일 업데이트

Establish rules for when an AI agent should recall past context and save lasting decisions, corrections, preferences, and failures. Works with Markdown files or memory services, preserving decision history and surfacing conflicting records.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Carry project conventions into the next session
  • Save user corrections and lasting preferences
  • Record failed approaches and their causes
davepoon/buildwithclaude3.7천2026년 10월 20일 업데이트

Audit local AI coding-agent sessions with agenttrace to identify spending, token use, tool failures, and operational problems. Produce readable or structured reports and define pass-or-fail thresholds for automated continuous integration checks.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Investigating session costs and token waste
  • Finding repeated tool failures and retries
  • Exporting session reports as Markdown or JSON
davepoon/buildwithclaude3.7천2026년 10월 20일 업데이트

Audit saved agent sessions for access to private files and evidence that secret values entered an agent's context. Get findings without displaying secrets, identify keys needing rotation, and inspect Claude Code or Codex sessions in a local report.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Check whether an agent accessed .env files
  • Identify keys that may need rotation
  • Audit private-file access by subagents
davepoon/buildwithclaude3.7천2026년 10월 20일 업데이트

davepoon의 스킬 모두 보기

이 스킬의 문제 신고