Teaching an agent your work — and pointing it at real data
2026-07-31
The first session argued that an agent is useful because it can act — read your files, run your tools, and check its own work.
This session is about the three things you add to it:
…and then the part you cannot install: how the two of you actually work.
bioc-package-check/
├── SKILL.md # required: frontmatter + instructions
├── scripts/ # optional: code the agent can run
├── references/ # optional: docs loaded on demand
└── assets/ # optional: templates, data
SKILL.md needs exactly two fields: name and description.
Everything else is optional.
Three stages, and only the first one is always paid for:
| Stage | What loads | Cost |
|---|---|---|
| Discovery | name + description, for every installed skill |
~100 tokens each |
| Activation | the full SKILL.md body, only when relevant |
<5,000 tokens |
| Execution | scripts/, references/, assets/ — only if needed |
as required |
This is the difference between a skill and a CLAUDE.md section: CLAUDE.md is always resident.
The agent never sees the body until it has already decided to load it.
Weak: “Helps with Bioconductor packages.”
Strong: “Reviews an R/Bioconductor package for common submission issues — NAMESPACE completeness, vignette presence, BiocCheck warnings, DESCRIPTION metadata. Use when the user asks to check, review, or prepare a package for submission, or mentions BiocCheck, R CMD check, or Bioconductor guidelines.”
Write what it does and when to use it. Include the words you would actually say. Lean pushy — the common failure is a skill that never fires.
SKILL.md is now an open standard, governed at agentskills.io, with 40+ products reading the same format.
Cursor · OpenAI Codex CLI · Google Gemini CLI · GitHub Copilot · VS Code · JetBrains Junie · Goose · Letta · OpenHands · Amp · Kiro …
A format Anthropic shipped as a Claude Code feature is now read, unmodified, by OpenAI’s own coding agent.
# 1. Personal — every project you work on
mkdir -p ~/.claude/skills/my-skill # then write SKILL.md
# 2. Project — this repo only, committed to git
mkdir -p .claude/skills/my-skill # then commit it
# 3. Plugins and marketplaces — the native package manager
/plugin marketplace add anthropics/skills
/plugin install document-skills@anthropic-agent-skills
# 4. skills.sh — cross-agent installer (Vercel)
npx skills find
npx skills add <owner>/<repo>Star counts verified directly against the GitHub API, 2026-07-30 — the secondary write-ups about this ecosystem are full of stale numbers.
| Collection | What it is |
|---|---|
obra/superpowers |
A whole methodology — TDD, systematic debugging, subagent-driven development. Most-starred of the three. |
mattpocock/skills |
“Skills for Real Engineers” — /grill-me, /to-spec, code review, domain modelling. |
anthropics/skills |
The official examples, the spec source, a starter template, and document generation (PDF/DOCX/XLSX). |
Five minutes — go browse. Scan the code to open this deck on your own laptop, then click the three links above. Find one skill you would actually use this week.
Both community collections have more stars than Anthropic’s own.
Bioconductor/ai-agent-skills — active, led by Levi Waldron with Marcel Ramos.
analyze-r-package · improve-code-coverage · security-audit-r-package · update-r-news · create-package-instructions · bioc-pkg-finder — thirteen in all.
And BiocCheck itself carries commits where an agent wrote the tests, marked with an assisted-by: trailer.
Five more — now read one of these. Open Bioconductor/ai-agent-skills and read the SKILL.md closest to your own work.
Would it have caught the last thing that bounced in review?
---
name: bioc-package-check
description: Reviews an R/Bioconductor package for common submission
issues — NAMESPACE completeness, vignette presence, BiocCheck warnings,
and DESCRIPTION metadata. Use when the user asks to check, review, or
prepare a Bioconductor package for submission, or mentions BiocCheck,
R CMD check, or Bioconductor guidelines.
allowed-tools: Bash(R CMD check *) Bash(Rscript -e *)
---
## Instructions
1. Run `R CMD check --as-cran .` and
`Rscript -e 'BiocCheck::BiocCheck(".")'`; capture full output.
2. Confirm `vignettes/` has at least one .Rmd/.qmd that builds.
3. Confirm every `NAMESPACE` export has an `@export` tag and a
non-empty `@examples` block.
4. Check `DESCRIPTION` for valid `biocViews:` and a version matching
the release convention.
5. Report blocking issues, warnings, and passes separately.
**Do not fix anything — report only.**You wrote bioc-package-check. A week later you type:
“Can you look over my package before I submit it?”
Nothing happens.
Your description said check, review, prepare, BiocCheck, R CMD check. It never said “look over”.
A skill that does not fire is indistinguishable from a skill you never wrote.
| Should fire | Should not fire |
|---|---|
| “look over my package before I submit it” | “what does biocViews mean?” |
| “is this ready for Bioconductor?” | “write a testthat test for this” |
| “run BiocCheck and tell me what’s blocking” | “explain S4 dispatch to me” |
| name | yours to pick — it namespaces every tool the server exposes, and it is how you remove it later |
| transport | stdio = a process you launch · http = a URL someone else runs |
| location | command + args for stdio · url for http |
The name is not cosmetic. Call it biocontext and its tools arrive as mcp__biocontext__search_uniprot — that prefix is what keeps two servers with a search tool from colliding, and what you will read in a permission prompt at 2am.
| Scope | Where it lives | Use it for |
|---|---|---|
local |
this project, your machine | trying something out |
project |
.mcp.json, committed to git |
a shared repo — a workshop, a package |
user |
every project you open | the two or three you genuinely always want |
--scope project turns thirty laptops into one clone and one approval prompt.
.mcp.json{
"mcpServers": {
"biocontext": {
"type": "http",
"url": "https://biocontext-kb.fastmcp.app/mcp"
},
"pdbe": {
"type": "stdio",
"command": "uvx",
"args": ["pdbe-mcp-server", "--server-type", "pdbe_api_server"]
},
"gget": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "gget-mcp@latest", "stdio"]
}
}
}Verify with claude mcp list — each should report connected.
biocontext — ten databases, one endpointHosted — nothing installs. ~49 tools across UniProt, STRING, AlphaFold, Ensembl, Open Targets, Europe PMC, bioRxiv, ClinicalTrials.gov, PanglaoDB, InterPro.
“Canonical PanglaoDB markers for microglia — and does recent literature agree?”
“What does UniProt say about TP53, and its highest-confidence STRING partners?”
pdbe — structures, from the people who curate themEMBL-EBI’s Protein Data Bank in Europe. Structures, ligands, and the publications behind them — an official project of the group that owns the data, not a community wrapper.
“What structures exist for human p53, and which have a bound ligand?”
“Get the InterPro domain architecture for P04637.”
gget — a familiar toolkit, wrappedThe Pachter Lab’s gget, which many of you already run from the command line. One server reaching Ensembl, BLAST, AlphaFold, PDB, CELLxGENE, COSMIC. · ▸ preview here
“What is the Ensembl ID for ACE2, and which tissues express it?”
“BLAST this sequence and tell me the closest annotated match.”
{
"mcpServers": {
"biocontext": {
"type": "http",
"url": "https://biocontext-kb.fastmcp.app/mcp"
},
"pdbe": {
"type": "stdio",
"command": "uvx",
"args": ["pdbe-mcp-server", "--server-type", "pdbe_api_server"]
},
"gget": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "gget-mcp@latest", "stdio"]
}
}
}One hosted, two local. Commit it, and the room clones instead of installing.
“What are the canonical PanglaoDB marker genes for microglia in humans, and can you find recent bioRxiv or Europe PMC papers about microglial markers to see if the field agrees?”
Marker lookup and a live literature cross-check, in one sentence, across two unrelated resources — and the answer is checkable against what you already know from scran or SingleR.
Tested live 2026-07-30: returns ITGAM (CD11b) and ITGAX among the top markers.
An agent cannot reliably distinguish instructions from you from text that arrived inside a tool result.
So a compromised paper abstract, variant annotation, or search result can steer it.
user-scope grants.mcp.json before you approve itThe direction people forget: not R calling an agent, but an agent calling your live R session.
The agent inspects objects you already have loaded — not a fresh subprocess.
mcp_server() alone surfaces no useful tools, and that list is read-only. Add 'run' to the groups and the agent can execute R — and return plots as images. Off by default, deliberately.
Antigravity and Copilot have no mcp add command. Same server, written down:
~/.gemini/config/mcp_config.json · .agents/mcp_config.json per project~/.copilot/mcp-config.json[mcp_servers.r-btw] in ~/.codex/config.tomlRemoving it: claude mcp remove r-btw · everywhere else, delete the entry — or set "disabled": true to keep it but inert. Deleting the block always works.
| What it is | Reach for it when | |
|---|---|---|
| MCP | plumbing to an external system | the agent must touch real data |
| Skill | procedural knowledge, loaded on demand | you keep pasting the same steps |
| Sub-agent | isolated worker, own context window | a side task would flood your context |
| Slash command | a skill you invoke, not one that fires | side effects need deterministic timing |
They compose: a skill can run as a sub-agent (context: fork); a sub-agent can preload skills.
A sub-agent has its own context window, system prompt, tool access, and optionally its own model.
The canonical case: “read these forty files and tell me which three matter.”
Unguided one-shot attempts succeed roughly a third of the time. Writing the plan first collapses the ambiguity the agent would otherwise guess at.
The pattern, in three moves:
SPEC.mdFrom Matt Pocock’s collection — an agent that interrogates you, and refuses to start until you are done.
The session that wrote the code is too close to its own reasoning to review it honestly.
So review somewhere else:
An architecture decision record — one short file per consequential decision.
Context (what forced a choice) · Decision (what you chose) · Consequences (what it costs you)
For humans, it answers the question code cannot: why is it like this? Git tells you what changed. An ADR tells you what was rejected, and what would have to change for the answer to be different.
For agents it does three jobs at once — memory that survives the end of a session · guardrails on code that looks wrong and is not · decisions it should not silently reopen.
An agent tidying “ugly” code has no way to know the ugliness was a deliberate response to an incident. Write decisions down — but not the way you write them for people.
applies_to glob, so irrelevant decisions never loadThis repository’s own docs/adr/ is the worked example: ten decisions, each with a talks doctor check enforcing it.
Not a second clone. One repository and history, checked out into several directories at once — each on its own branch.
Two agents, two worktrees, no collisions — the classic pairing being one writing and one reviewing.
Then encode the whole loop so it runs the same way every time: worktree → small commits → PR → automated review → fix → merge on green. CLAUDE.md for advice; hooks when it must be enforced.
CLAUDE.mdFor every line, one question:
Would removing this cause a mistake?
If not, cut it.
Keep: the commands an agent cannot guess (devtools::load_all(), BiocCheck::BiocCheck("."), how your tests are actually run), the constraints that look wrong but aren’t, the conventions specific to this package.
Cut: standard R idiom, anything derivable from the code, aspirational style guidance nobody enforces.
SKILL.md — and now an open standard, read by forty-plus tools--scope project puts MCP servers in the repo, so tooling ships with the codeai-agent-skills — and no policy on any of this yetSkills — agentskills.io · code.claude.com/docs/en/skills · skills.sh · obra/superpowers · mattpocock/skills · anthropics/skills
MCP — code.claude.com/docs/en/mcp-quickstart · biocontext.ai/registry · biomcp.org · pdbe-mcp-servers · gget-mcp
R — posit-dev.github.io/mcptools · ellmer.tidyverse.org · posit-dev.github.io/btw
Bioconductor — Bioconductor/ai-agent-skills
All links verified 2026-07-30. Slides and a notes handout: talks.seandavis.net