Adopting a published skill set
A colleague recommends workbench, a set of eight skills for everyday
development work, from ticket plans to commit messages. The set is
published as one plugin, and your team wants two of its skills. In this
lesson we vet the set the way you would vet a library and take the two
skills. Then we check what they change in a session against what they
add to the context.
The set is invented for the course. It is in the course repository at
site/examples/customizing-agents/adopting-a-skill-set/workbench/, next
to a short Python script, vet.py, that lists what each skill in a set
holds. The script only reads files, and nothing in this lesson installs
the set or runs its scripts. Run the commands from that directory, and
replace <course-repo> with the path to your copy of the course
repository.
cd <course-repo>/site/examples/customizing-agents/adopting-a-skill-setWhat you take on with a skill set
Section titled “What you take on with a skill set”Published skill sets are collections of skills that a vendor or a developer maintains for other people to install, often as a plugin. Model vendors, tool makers and individual developers all publish them. A set like this is a dependency, and its skills act in your sessions. They change whenever the author releases a new version.
One set can also hold skills under different licenses. Anthropic’s own public set is an example: many of its skills are under the Apache License 2.0, and its document skills are source-available, so you can read them, but they aren’t open source [1].
A skill acts in more ways than its text suggests. Its instructions tell
Claude what to do, and the steps can tell Claude to run the scripts that
come with the skill. A skill’s front matter can also have an
allowed-tools field. While the skill runs, Claude may use the tools
it lists without asking you first. That means the author of the skill
decides part of your permissions. The field takes effect even in a
folder that you never marked as trusted, so read it in every skill that
you didn’t write [2]. When the set is a plugin, it can
bring hooks and servers as well, and the previous lesson read those.
Even while nothing in it runs, a skill set has a cost. An enabled
plugin adds a short entry to every turn of every session: the name and
the description of each skill that Claude may start by itself. Claude
reads the rest of a skill’s SKILL.md only when the skill is used
[3].
That’s the first stage that
Loading only what the skill needs
measured for one skill, and a set has one such entry per skill.
Vet the set as you would a library
Section titled “Vet the set as you would a library”Before you install a set, look for these answers.
- License. Under which license is each skill you plan to use? The
open skill format has an optional
licensefield in the front matter, for a license name or the name of a license file next to the skill [4]. A skill with neither gives you no permission to copy it. - Maintenance. Who maintains the set, when did it last change, and how are its changes released? A changelog, versions and an issue tracker answer most of this. Note the version or the commit that you read.
- Contents. What does each skill do? Read every skill, every script
and every
allowed-toolsline before you install. The previous lesson did the same for a plugin’s hooks and servers. - Alternatives. What else would do the job? A set of eight skills is eight descriptions in your context and eight things to keep up to date. When you need two of them, copying those two or writing your own can be cheaper.
vet.py answers the license question and part of the contents question
for every skill at once. Each skill gets one line. It shows the license
and the number of scripts, then who may invoke the skill and an estimate
of the tokens its name and description add to every session. It counts
the same text with the same rule as inventory.py in the previous
lesson. A skill that only you may invoke
counts as 0 tokens, because its description stays out of the context.
When a skill has an allowed-tools line, the script prints it at the
end of that skill’s line.
List what the workbench set holds
Section titled “List what the workbench set holds”Run this, and compare with the output below.
python3 vet.py workbenchset license: none marketplace workbench-market: plugin workbench 3.2.0: 8 skills skills: 8 commit-message: Apache-2.0; no scripts; Claude or you; always loaded 30 deploy: Apache-2.0; no scripts; you only; always loaded 0 plan-ticket: Apache-2.0; no scripts; Claude or you; always loaded 32 release-notes: none stated; no scripts; Claude or you; always loaded 32 review-diff: Apache-2.0; no scripts; Claude or you; always loaded 29 setup-env: Apache-2.0; 1 script; Claude or you; always loaded 42; pre-approves Bash(python3 *) spreadsheet: Copyright 2026 The workbench authors. All rights reserved.; 2 scripts; Claude or you; always loaded 39 write-tests: Apache-2.0; 1 script; Claude or you; always loaded 26 always loaded, whole set: 230
Output verified in CI from site/examples/customizing-agents/adopting-a-skill-set/whole_set.py.
The set has no license file at the top, so each skill has its own terms.
Every skill except two is under Apache-2.0. release-notes states no
license at all, so you have no permission to copy it. spreadsheet has
a license file that reserves all rights. Open
workbench/skills/spreadsheet/LICENSE.txt: it allows use through the
plugin and nothing else.
Read the setup-env and deploy lines more closely. setup-env
pre-approves Bash(python3 *), so while it runs, Claude may run any
python3 command without asking you. Open
workbench/skills/setup-env/scripts/bootstrap.py. It writes a settings
file to ~/.workbench/ in your home directory, outside every project.
That file turns on telemetry. deploy is the opposite case. Only you
can start it, by typing its name. Its description stays out of the
context.
For maintenance, open workbench/CHANGELOG.md. It lists three releases
in three months, each with a date and a line per change, and version
3.2.0 is the one you read. The set’s marketplace isn’t one of
Anthropic’s official ones, and auto-update is off by default for such a
marketplace [5]. An installed copy changes
only when you update it, so you can read each new release first.
Which skills may you copy?
Section titled “Which skills may you copy?”A published skill set has no license file at its top level. Its plan-ticket and review-diff skills say license: Apache-2.0 in their front matter. Its release-notes skill has no license field and no license file. Its spreadsheet skill has a LICENSE.txt that reserves all rights and allows use only through the set's plugin.
Your team wants to copy skills from the set into its own repository. Which two may it copy?
For each skill, what gives you permission to copy its files into another repository?
Read setup-env before you use it
Section titled “Read setup-env before you use it”A published skill set has a setup-env skill under the Apache License 2.0. Its front matter has allowed-tools: Bash(python3 *), and its first step tells Claude to run scripts/bootstrap.py, a script that comes with the skill.
Which statement about setup-env is right?
What does the allowed-tools field let Claude do while the skill runs, and what does the license say about that?
Where do you find the answer?
Section titled “Where do you find the answer?”You are vetting a published skill set before you install it. The set is a git repository with a changelog, one folder per skill, and a license field or a license file for some of the skills.
Is the question about what you may do with the files, how the set changes over time, or what a skill does when it runs?
An old set of thirty skills
Section titled “An old set of thirty skills”A public skill set has thirty skills, all under the Apache License 2.0. Its last release was fourteen months ago, and its issue tracker has many open reports that the skills no longer work with the current agent. Your team needs three of the skills.
What should the team do?
What would the team carry if it installed the whole set, and who would keep the three skills working?
Take two skills at a time
Section titled “Take two skills at a time”Adopt a set one or two skills at a time, and use them on real work for a while before you add more. When only one thing changed, a better or a worse result points to the skill that caused it.
A plugin doesn’t let you pick from its skills. The skillOverrides
setting, which hides one personal or project skill or keeps it out of
the context, doesn’t apply to skills that come from a plugin. You manage
those with /plugin, by turning the whole plugin on or off
[2]. When a set publishes each skill as its own
plugin, install only the plugins you need. When it publishes one plugin,
like workbench, copy the two skills whose license allows it into the
project’s .claude/skills/ folder, and write down the version you
copied. From then on, you take updates by hand, after you read the
changelog.
For workbench, take plan-ticket and review-diff. Both are under
Apache-2.0, have no scripts and pre-approve no tools. Give vet.py
their names after the set’s directory, and it lists only those two, with
their cost next to the cost of the whole set.
List the two skills you take
Section titled “List the two skills you take”Run this, and compare with the output below.
python3 vet.py workbench plan-ticket review-diffset license: none marketplace workbench-market: plugin workbench 3.2.0: 8 skills skills: 8 plan-ticket: Apache-2.0; no scripts; Claude or you; always loaded 32 review-diff: Apache-2.0; no scripts; Claude or you; always loaded 29 always loaded, the 2 you named: 61 always loaded, whole set: 230
Output verified in CI from site/examples/customizing-agents/adopting-a-skill-set/two_skills.py.
plan-ticket and review-diff add an estimated 61 tokens to every
turn, and the whole set would add 230. The estimate is small next to a
context window, but it is paid on every turn, and it grows with each set
you add. When there are many skills, Claude Code also shortens or drops
descriptions to fit its listing into a fixed share of the context, and a
skill whose description is dropped is harder for Claude to match to a
request [2].
In a real session, check two things after you add the skills.
- What they cost. Run
/contextbefore and after you add them. Its Skills row shows the size of the skill listing that the model receives [2]. - What they change. Collect two or three real prompts, and run each
one in a fresh session with the skill on and again with it set to
"off"inskillOverrides. When Claude starts a skill, you know that its description matched. Only the comparison shows whether the result got better [2].
Then act on what you found. A skill that didn’t change the results still
costs context and still needs updates, so delete its folder. When you
start a skill yourself now and then and never need Claude to start it,
give it disable-model-invocation: true in its front matter, and its
description leaves the context. After a few weeks, /skill-doctor lists
the context that each skill takes and how often it was used, and it
marks the skills that nobody ever invoked [2].
Two skills from a plugin of eight
Section titled “Two skills from a plugin of eight”The workbench skill set is published as one Claude Code plugin with eight skills. Six are under the Apache License 2.0, including plan-ticket and review-diff, which have no scripts. The team wants to start with those two and add more later.
How does the team start?
What does an enabled plugin put into every session, and which setting reaches skills that come from a plugin?
What do you do with each skill?
Section titled “What do you do with each skill?”A team adopted skills from a published set, one or two at a time, and compares runs of the same prompts in fresh sessions with a skill on and off. Each row is something the team found after a few weeks.
Match each finding to what you do next.
Did the skill change the results, and does it need to be in the context when nobody asked for it?
Check two new skills
Section titled “Check two new skills”You copied two skills from a published set into a project's skills folder in Claude Code. You want to know what they add to every session and whether they make the results better.
Which two of these checks tell you what the skills cost and what they change?
Which of these measures the context, which compares results, and which only shows that Claude found a skill?
Why one or two at a time?
Section titled “Why one or two at a time?”A team takes skills from a published set one or two at a time, and uses each on real work for a week or two before it adds the next one.
Why does the team add skills this slowly?
If the results change after a new skill arrives, what do you want to be able to say?
Exercise
Pick one public skill set yourself, for example one from a model vendor,
a tool maker or a developer whose work you follow. Vet it, take two of
its skills into a scratch copy of a project, and compare what they
change with what they add to the context. Know what the skills can
change before you start. Their steps can edit files, run their scripts
and run commands, and an allowed-tools line lets Claude use the tools
it names without asking, even in a folder you never marked as trusted
[2]. The exercise uses a fresh clone with no way to
push, and in the test sessions you ask for a plan or a report rather
than a commit or a deploy. That protects your project and nothing else.
A skill’s scripts run with your user rights, so they can change files in
your home directory as well. The skills you pick have to be safe outside
the clone too.
These commands fetch the set into ~/set-read and show its recent
history. The first line deletes ~/set-read, so the commands also work
on a second attempt. Replace <set-url> with the set’s repository.
rm -rf ~/set-readgit clone -q <set-url> ~/set-readgit -C ~/set-read log -5 --format='%h %cs %s'python3 <course-repo>/site/examples/customizing-agents/adopting-a-skill-set/vet.py ~/set-readvet.py reads skills in skills/<name>/SKILL.md, and it stops with a
message when the set has none there. If the set keeps them somewhere
else, read the folders by hand. Write down the commit at the top of the
log. Pick two skills whose license allows copying, run vet.py again
with their names, and read every file in their folders, the scripts
included. Both skills must have no allowed-tools line, and each of
their scripts must change only files inside the project, as with
plan-ticket and review-diff in workbench. If no two skills in the
set pass, pick another set, or stop here and write the vetting part of
the note below. Then make the scratch copy and start a session in
it with auto memory off, so that one test run can’t leave notes for the
next [6]. Replace <project> with the path to a
repository you work in, and <skill-a> and <skill-b> with the two
skill names.
rm -rf ~/skill-trialgit clone -q <project> ~/skill-trialcd ~/skill-trialgit remote remove originCLAUDE_CODE_DISABLE_AUTO_MEMORY=1 claudeRun /context and note the Skills row, then quit. Copy the two skills
in, start a new session the same way, and run /context again. The
cp line expects the skills in skills/<name>/, so change the paths
if the set keeps them elsewhere.
cd ~/skill-trialmkdir -p .claude/skillscp -R ~/set-read/skills/<skill-a> ~/set-read/skills/<skill-b> .claude/skills/CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 claudeFor each skill, run one real prompt that it is meant for in a fresh
session, and again in a fresh session with that skill set to "off".
The /skills menu sets it: select the skill, press Space until it shows
off, and press Esc to save [2].
A good result is a short note. It names the set, the commit you read,
the license of each skill you took, what each of their scripts and
allowed-tools lines can change, the Skills row before and after, and
for each prompt whether the skill changed the result. It ends with what
you would do with each of the two skills: keep it, make it user-invoked
or delete it. Would you have found the same answers by installing the
whole set and trying it?
Stretch: After a week of real work with the two skills, run /skill-doctor, remove any skill that didn't change a result, and only then take a third one from the set.
Recap
- Published skill sets are dependencies that act in your sessions and change with each release. One set can also mix licenses from one skill to the next [1].
- Vet a set before you install it: the license of each skill, who
maintains it and how it changes, every skill, script and
allowed-toolsline, and the option of writing the few skills you need. - Each skill that Claude may start by itself puts its name and description into every session, whether it runs or not [3].
- Take one or two skills at a time. A plugin’s skills come together, so copy single skills when the license allows it [2].
- Check each skill with
/contextand with the same prompts run with the skill on and off. Delete a skill that changed nothing.
You can now
- Vets a published skill set before installing it, as they would a dependency
- Adopts a few skills at a time and checks each one's effect and context cost
References
Section titled “References”- Anthropic. Agent Skills (the anthropics/skills repository). GitHub. Reference.
anthropics skills - Anthropic. Extend Claude with skills. Claude Code documentation. Reference.
Claude Code skills - Anthropic. Plugins overview. Claude Code documentation. Reference.
Claude Code plugins - Anthropic. Agent Skills specification. agentskills.io. Reference.
Agent Skills spec - Anthropic. Install and manage plugins. Claude Code documentation. Reference.
Claude Code plugin install - Anthropic. How Claude remembers your project. Claude Code documentation. Reference.
Claude Code memory