Install any skill in seconds. Free to start, no credit card required.
Get Started Free →fedoroff-vlad/scrub-identity
Use when a repository artifact is about to record WHOSE data a tool was run against — an employer's or client's repo name, package path, hostname, ticket key, or domain vocabulary — in docs, commit messages, PR bodies, tests or fixtures. Fires on: "we proved it on <real repo>", "обезличь", "убери упоминания", "anonymize this", "is this safe to commit", "can this be public", writing a fixture modelled on real data, or a status/architecture note about a production run. Produces the de-identified w
Passed 20 of 22 test cases with the skill, and 10 of 22 without it.
and 9 more in the full report
10 fixed10 passed either way2 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 10 test cases the skill fixed. Same model, same prompt, with and without the skill.
What should the pre-commit script do if a developer runs it without having created a local `.private-terms` file on their machine?
| Checked | Without skill | With skill |
|---|---|---|
| States that the script must fail with a explicit warning message rather than passing silently. | Missed | Passed |
The instructions your model reads when the skill loads.
The tool may read anything. The repository may record only shape and scale.
An indexer, a scraper, a migration script — its whole job is to run against a real, named system, and inside that run the real names are load-bearing. That is input, and input is not the concern here.
The concern is artifacts: files you commit, messages you write, fixtures you
author. There the name is almost never load-bearing. "We proved it on
acme-billing-aggregate-server" and "we proved it on a 143-file production Java
service" carry the same engineering weight — the second one just does not hand a
reader your employer's internal system inventory.
Ask of every mention: does the argument still stand if I replace the name with its shape? If yes — and it nearly always is yes — replace it.
Not just the obvious name. In order of how often each is missed:
| Kind | Example | Replace with |
|---|---|---|
| Repo / service name | acme-billing-aggregate-server | "a production Java service" |
| Package / namespace path | ru/gov/agency/dept/product/module | com/example/app/module/..., or describe it: "a seven-level single-child chain" |
| Domain vocabulary | industry terms as fixture headings, table rows, class names | neutral equivalents (Refunds, Billing, Claim) |
| Ticket keys | PROJ-4417 | drop, or "the ticket that asked for X" |
| Hosts / URLs | wiki.corp.internal, an intranet Confluence space key | "the internal wiki" |
| People | a colleague's name in a commit message | role: "the reviewer", "the owner" |
| Schema names | real DB / table / topic names copied into a fixture | invented ones |
| Counts that are already public | 143 files, 868 fragments, 7201 edges | keep — this is the shape, and it is the part that argues |
The domain-vocabulary row is the one that gets rationalised away: "the fixture is invented, so it is fine". A fixture written entirely in one industry's terms reads as a description of a real system, and it points at the same employer as the repo name did. Invented content in real vocabulary is still a fingerprint.
test cases passed, vs 10 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.