A good research skill packages procedural knowledge an expert would otherwise have to explain every time: the order of steps, the checks that catch mistakes, the venue- or instrument-specific rules. It is not a textbook chapter and not a wrapper around one API call.
0. Install the official tooling (once)
Anthropic's skill-creator supplies the eval loop, description optimizer and
packager. In Claude Code:
/plugin marketplace add anthropics/skills
/plugin install example-skills@anthropic-agent-skills
Use it to run evals (run_eval.py, run_loop.py) and to tune the description
(improve_description.py). This skill adds the research-specific conventions.
1. Decide whether it should be a skill
Create a skill when all hold:
- The task recurs across projects or people (not a one-off script).
- Doing it well requires non-obvious steps, checks or domain rules.
- An agent would plausibly get it wrong without guidance (test this: ask without the skill first).
Otherwise write a note or a script instead. Check catalog/skills.json for overlap and
extend an existing skill rather than creating a near-duplicate.
2. Scaffold
python skills/research-skill-creator/scripts/new_skill.py rebuttal-letter \
--category research-writing \
--description "Draft point-by-point responses to peer reviewers. Use when ..." \
--scripts --references
This writes skills/<name>/SKILL.md with spec-compliant frontmatter and evals/<name>/evals.json.
3. Write the description (it decides whether the skill is ever used)
- Say what it does and when to use it, with the words users actually type: "journal cover letter", "response to reviewers", "PRISMA flow diagram".
- Name concrete artifacts, tools and venues ("BibTeX", "Nature", "pgvector").
- At most 1024 characters, third person, no angle brackets, no marketing adjectives.
- Add "Use when ..." clauses for the 3-6 most common triggers, plus distinguishing cues vs. sibling skills (e.g. "for systems venues use systems-paper-writing").
4. Write the body
| Principle | Practice |
|---|---|
| Procedure over prose | Numbered workflows, decision tables, checklists |
| Progressive disclosure | SKILL.md under 500 lines; long material in references/*.md, linked with one-line "read when" hints |
| Deterministic work in code | Parsing, validation and conversion go in scripts/, which the agent runs rather than re-implements |
| Verify-first for facts that change | Venue limits, API versions, guidelines: tell the agent to fetch the official source and cite it |
| Honesty rules | Explicit "never fabricate data, citations or results; say when unverifiable" |
| Handoffs | End with related skills and when to switch |
5. Scripts: the repository contract
- Python 3.9+ standard library unless a dependency is essential. Declare it in
compatibility. argparseCLI with--help, a docstring with usage, exit codes0ok,1findings,2bad input.- UTF-8 console setup (the scaffold includes it) so Windows terminals don't crash.
- Network calls only to documented APIs. Every new domain must be added to
security/allowed-domains.txtwith a reviewer's approval. Set a descriptiveUser-Agent. - Never read credentials beyond the env var the user configures for that service. Never
exfiltrate environment data. No
eval/execof fetched content. Never pipe downloaded scripts into a shell.
6. Test
uv run tools/validate.py skills/<name>: spec + repo policy.uv run tools/lint_injection.py skills/<name>: prompt-injection and payload lint.- Fill
evals/<name>/evals.jsonwith 3-10 realistic prompts, including near-misses that should not trigger, and run them with skill-creator's eval loop. Compare with/without the skill. - Run each script on real sample inputs, including malformed ones, on Windows and Unix if possible.
uv run tools/build_catalog.pyto regenerate the marketplace, catalog and README tables.
7. Rewriting an adapted skill
Skills listed in third_party/upstream-manifest.json with rewrite_status: imported
are adaptations. A rewrite must be written from scratch (new structure, new
wording, re-verified facts), not paraphrased line by line. When it merges, set
rewrite_status: original for that skill in the manifest. The notices generator then
drops it from THIRD_PARTY_NOTICES.md and the importer stops overwriting it.
Related skills
research-agent-skills repository docs (CONTRIBUTING.md), Anthropic skill-creator,
autoskill (detects repeated workflows worth turning into skills).