How to Build a Plugin for Anthropic Claude Cowork (and Claude Code)
A practical guide to building an Anthropic Claude plugin: package a SKILL.md capability, install it, trigger it, and measure how it performs.
This guide walks through how to build a plugin for Anthropic Claude Cowork (the same packaging approach applies to Claude Code). Cowork is an agent harness - the runtime that runs plugin capabilities on real work. Your plugin is the app; a Skill is a capability inside it.
If you're new to the concept, start with what an agent plugin is.
Step 1 — Write the SKILL.md
A Cowork Skill is a directory with a SKILL.md. The frontmatter tells Cowork when to trigger it:
---
name: month-end-close
description: >
Use this skill when the user asks to "run the month-end close",
"reconcile the bank accounts", or "prepare the close pack".
Reconciles accounts, reviews accruals, and produces a close pack.
---
# Month-end close
## Steps
1. Confirm the period and locate the data.
2. Reconcile each bank account; list exceptions.
3. Produce a close pack. Propose journals — never post them.
See the SKILL.md template for a fuller scaffold.
Step 2 — Package it as a plugin
In Cowork, Skills are distributed inside plugins - a folder with a .claude-plugin/plugin.json manifest plus your skills/ directory:
my-plugin/
├── .claude-plugin/plugin.json
└── skills/
└── month-end-close/
└── SKILL.md
{
"name": "my-plugin",
"version": "0.1.0",
"description": "What this plugin does."
}
Step 3 — Install and trigger it
Install the plugin in Cowork, then describe the task the way a real user would — you don't click a "run" button. If your description is good, Cowork loads the Skill automatically:
"Run the month-end close for May and flag any exceptions."
If it doesn't trigger, the fix is almost always the description: add the exact phrases users say.
Step 4 — Connect data and tools
Cowork Skills can use connected tools (via MCP connectors) and bundled scripts. Pull data from a connected source when one is available; otherwise have the Skill ask for the files it needs. Keep deterministic steps in scripts/.
Step 5 — Measure it
Once people are using your plugin, you'll want to know what's happening inside it: which capability is invoked, where it errors, how long it takes, and whether your latest version is better than the last. Wrap each Skill's telemetry with Telvine - invocations, errors, and feedback, with no user content collected - and a live dashboard shows real usage.
This closes the loop: build → ship → measure → improve.
Frequently asked questions
Is a Claude Cowork Skill different from a Claude Code Skill?
They share the SKILL.md format. Cowork targets non-developer knowledge work; Claude Code targets the terminal. A well-written Skill often works in both.
How do I distribute a Skill to my team?
Package it as a plugin and share the .plugin file (or a marketplace). Teammates install it once and it triggers automatically.
Why isn't my Skill triggering? The description is too vague or doesn't match how users phrase the request. Iterate on it first.