From wonder
Use within /wonder to remove pre-publication and proprietary scientific content from a draft wonder profile — unpublished results, raw data values, sequences, compound structures, grant numbers, anything under embargo, IP, or NDA. Also manages the user's never-share filter list (the pre-declared "never leak this word" input). Use when the user wants to add to, review, or check text against that list.
How this skill is triggered — by the user, by Claude, or both
Slash command
/wonder:scrub-unpublishedThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Filter list: **implemented**. Model-judgment pass: **validated** (RED/GREEN).
Filter list: implemented. Model-judgment pass: validated (RED/GREEN).
Remove anything that would burn priority or breach IP/NDA if shared. Two layers, run in this order:
PROFILE.md.A plain-text file, one word or phrase per line (# comments and blank lines
ignored). Matching is case-insensitive and whole-word.
Location: ~/.wonder/never-share.txt by default; override with the
WONDER_FILTER_LIST env var. Per PROFILE.md, this is a local-only input
— and the list itself is sensitive (it names the very things the user is
protecting), so it must NEVER be committed to a repo, pasted into a profile,
or sent anywhere. When discussing the list with the user, refer to entries by
line number or count where possible rather than echoing them back.
All operations go through the script (run with uv):
uv run skills/scrub-unpublished/scripts/filterlist.py check <file|-> # report matches, exit 1 if any
uv run skills/scrub-unpublished/scripts/filterlist.py apply <file|-> # emit text with matches -> [REDACTED]
uv run skills/scrub-unpublished/scripts/filterlist.py add "<entry>" # append entries
uv run skills/scrub-unpublished/scripts/filterlist.py list # show entries
uv run skills/scrub-unpublished/scripts/filterlist.py path # show list location
When the user says something like "never share the compound name AX-201", use
add. Suggest obvious variants as separate candidate entries and let the
user confirm them (e.g. AX-201 and AX201) — never invent entries the user
didn't sanction.
Run over the entire profile, keywords included — PROFILE.md marks
keywords as the public surface (matched on and posted as the room seed), so
a never-share term surviving there is the most direct leak of all.
check. Any match is a hard block: run apply to
redact, then rewrite each redacted sentence so the [REDACTED] placeholder
isn't itself a tell ("working on [REDACTED] inhibitors" leaks that
something is hidden and invites guessing). A matched keyword is dropped
or replaced with a broader term (AX-201 → kinase inhibitors) — never
left as a placeholder.check on the rewritten draft — it must pass clean before the
profile may proceed to the review gate.Unpublished results and conclusions, raw data values, genetic sequences, compound structures, specific grant/award numbers, embargoed findings.
Model judgment, not regex — this is about scientific sensitivity, not patterns. Bias toward generalizing ("a kinase inhibitor", not the structure) and toward asking the user when uncertain. Better to under-share than to scoop someone.
Return to the caller (/wonder): the scrubbed draft, a short change log
(removed/generalized X because Y per edit), and filter-list status (clean
only if the final text passes check with exit 0). The user reviews and
approves; this skill never sends anything anywhere.
If the user manually removes something the passes missed and it is a stable
term (a name, an identifier), offer to add it to the filter list so it's
caught next time.
npx claudepluginhub cgreene/wonder --plugin wonderCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.