iiuniversitet.ruЦентр обучения нейросетямОткрыть каталог

Создание плагина Cowork с нуля

Шаг за шагом проводит через создание нового плагина для Cowork и выдаёт готовый к установке файл .plugin.

СкиллAnthropicClaudeApache-2.0Загрузить архив в ClaudeПроверка не требуется
Что делает
Шаг за шагом проводит через создание нового плагина для Cowork и выдаёт готовый к установке файл .plugin.
Когда брать
Когда вы хотите создать, собрать или спроектировать свой плагин со скиллами, агентами, хуками и подключениями MCP.
Когда не брать
Если разговор идёт не в десктопном приложении в режиме Cowork: готовый файл .plugin там не выдать.
Пример запроса
Хочу создать плагин, который готовит отчёты по продажам из нашей CRM. Проведи меня по шагам.
Нужно подключить
десктопное приложение Claude в режиме Cowork

Входит в плагин cowork-plugin-management. В Cowork и Claude Code можно поставить плагин целиком.

Как включить

  1. Нажмите «Скачать на русском» и сохраните архив.
  2. В Claude откройте Настройки → Capabilities → Skills → Upload skill и выберите архив.
  3. Включите скилл переключателем.
Для терминала

Распакуйте архив и положите папку create-cowork-plugin в ~/.claude/skills/. Файл SKILL.md должен лежать внутри этой папки.

Текст

---
name: create-cowork-plugin
description: >
  Проведи пользователя через создание нового плагина с нуля в сессии Cowork.
  Используй, когда пользователи хотят создать плагин, собрать плагин, сделать новый плагин, разработать плагин, заложить основу плагина, начать плагин с нуля или спроектировать плагин.
  Для этого скилла нужен режим Cowork с доступом к папке результатов, чтобы выдать итоговый файл .plugin.
compatibility: Requires Cowork desktop app environment with access to the outputs directory for delivering .plugin files.
---

Создание плагина Cowork

Собери новый плагин с нуля в управляемом диалоге. Проведи пользователя через выяснение задачи, планирование, проектирование, реализацию и упаковку — в конце выдай готовый к установке файл .plugin.

Обзор

Плагин — это самостоятельная папка, расширяющая возможности Claude скиллами, агентами, хуками (hooks) и интеграциями с MCP-серверами. Этот скилл содержит полную архитектуру плагина и процесс из пяти фаз для создания плагина в диалоге.

Процесс:

  1. Выяснение задачи — пойми, что пользователь хочет построить
  2. Планирование компонентов — определи, какие типы компонентов нужны
  3. Проектирование и уточняющие вопросы — подробно опиши каждый компонент
  4. Реализация — создай все файлы плагина
  5. Проверка и упаковка — выдай файл .plugin

Нетехнический вывод: веди весь разговор с пользователем простым языком. Не показывай подробности реализации вроде путей к файлам, структуры папок или полей схемы, пока пользователь не спросит. Формулируй всё через то, что будет делать плагин.

Архитектура плагина

Структура папок

Каждый плагин устроен так:

plugin-name/
├── .claude-plugin/
│   └── plugin.json           # Обязательно: манифест плагина
├── skills/                   # Скиллы (вложенные папки с SKILL.md)
│   └── skill-name/
│       ├── SKILL.md
│       └── references/
├── agents/                   # Описания субагентов (файлы .md)
├── .mcp.json                 # Описания MCP-серверов
└── README.md                 # Документация плагина

**Устаревший формат commands/**: в старых плагинах может быть папка commands/ с однофайловыми слэш-командами .md. Этот формат всё ещё работает, но новые плагины следует делать на skills/*/SKILL.md — интерфейс Cowork показывает оба варианта как единое понятие «Скиллы», а формат скиллов поддерживает постепенное раскрытие (progressive disclosure) через references/.

Правила:

  • .claude-plugin/plugin.json обязателен всегда
  • Папки компонентов (skills/, agents/) лежат в корне плагина, а не внутри .claude-plugin/
  • Создавай папки только для тех компонентов, которые плагин действительно использует
  • Для всех имён папок и файлов используй kebab-case

Манифест plugin.json

Находится в .claude-plugin/plugin.json. Минимально обязательное поле — name.

{
  "name": "plugin-name",
  "version": "0.1.0",
  "description": "Brief explanation of plugin purpose",
  "author": {
    "name": "Author Name"
  }
}

Правила имени: kebab-case, строчные буквы с дефисами, без пробелов и специальных символов. Версия: формат semver (MAJOR.MINOR.PATCH). Начинай с 0.1.0.

Необязательные поля: homepage, repository, license, keywords.

Можно указать собственные пути к компонентам (они дополняют автообнаружение, а не заменяют его):

{
  "commands": "./custom-commands",
  "agents": ["./agents", "./specialized-agents"],
  "hooks": "./config/hooks.json",
  "mcpServers": "./.mcp.json"
}

Схемы компонентов

Подробные схемы каждого типа компонентов — в references/component-schemas.md. Кратко:

КомпонентРасположениеФормат
Скиллыskills/*/SKILL.mdMarkdown + YAML-шапка
MCP-серверы.mcp.jsonJSON
Агенты (в Cowork используются редко)agents/*.mdMarkdown + YAML-шапка
Хуки (в Cowork используются очень редко)hooks/hooks.jsonJSON
Команды (устаревший формат)commands/*.mdMarkdown + YAML-шапка

Эта схема общая с системой плагинов Claude Code, но ты создаёшь плагин для Claude Cowork — десктопного приложения для интеллектуальной работы. Пользователям Cowork обычно полезнее всего скиллы. **Закладывай основу новых плагинов на skills/*/SKILL.md — не создавай commands/, если пользователю явно не нужен устаревший однофайловый формат.**

Настраиваемые плагины с подстановками ~~

По умолчанию не используй этот приём и не спрашивай о нём. Вводи подстановки ~~ только если пользователь прямо говорит, что хочет, чтобы плагином пользовались люди вне его организации. Можешь упомянуть, что такая возможность есть, если кажется, что пользователь хочет распространять плагин вовне, но не задавай об этом вопрос через AskUserQuestion по своей инициативе.

Когда плагин предназначен для передачи людям за пределами компании, в нём могут быть части, которые нужно подстроить под отдельных пользователей. Возможно, внешние инструменты придётся называть по категории, а не по конкретному продукту (например, «трекер проектов» вместо «Jira»). Если нужна передача, используй обобщённые формулировки и помечай места, требующие настройки, двумя знаками тильды, например create an issue in ~~project tracker. Если использовались какие-либо категории инструментов, запиши в корень плагина файл CONNECTORS.md, который объясняет:

# Коннекторы

## Как работают ссылки на инструменты

В файлах плагина `~~category` служит подстановкой для любого инструмента,
который пользователь подключает в этой категории. Плагины не привязаны к инструментам:
они описывают рабочие процессы через категории, а не конкретные продукты.

## Коннекторы этого плагина

| Категория       | Подстановка         | Варианты                        |
| --------------- | ------------------- | ------------------------------- |
| Чат             | `~~chat`            | Slack, Microsoft Teams, Discord |
| Трекер проектов | `~~project tracker` | Linear, Asana, Jira             |

Переменная ${CLAUDE_PLUGIN_ROOT}

Используй ${CLAUDE_PLUGIN_ROOT} для всех ссылок на пути внутри плагина в хуках и конфигурациях MCP. Никогда не прописывай абсолютные пути.

Управляемый рабочий процесс

Когда задаёшь пользователю вопрос, используй AskUserQuestion. Не считай верными значения «по отраслевому стандарту». Примечание: в AskUserQuestion всегда есть кнопка «Пропустить» и поле для своего ответа, поэтому не добавляй None или Other как варианты.

Фаза 1: Выяснение задачи

Цель: понять, что пользователь хочет построить и зачем.

Спрашивай (только о том, что неясно — пропускай вопросы, если ответ уже есть в первоначальном запросе):

  • Что должен делать этот плагин? Какую проблему он решает?
  • Кто будет им пользоваться и в каком контексте?
  • Интегрируется ли он с внешними инструментами или сервисами?
  • Есть ли похожий плагин или рабочий процесс как образец?

Перескажи, как ты всё понял, и подтверди это, прежде чем продолжать.

Результат: чёткое описание цели и объёма плагина.

Фаза 2: Планирование компонентов

Цель: определить, какие типы компонентов нужны плагину.

По ответам на этапе выяснения определи:

  • Скиллы — нужны ли специальные знания, которые Claude должен подгружать по требованию, или действия по инициативе пользователя? (профильная экспертиза, справочные схемы, руководства по рабочим процессам, действия по развёртыванию, настройке, анализу и проверке)
  • MCP-серверы — нужна ли интеграция с внешним сервисом? (базы данных, API, SaaS-инструменты)
  • Агенты (редко) — есть ли автономные многошаговые задачи? (проверка, генерация, анализ)
  • Хуки (очень редко) — должно ли что-то происходить автоматически по определённым событиям? (соблюдение политик, загрузка контекста, проверка операций)

Покажи таблицу плана компонентов, включая типы компонентов, которые ты решил не создавать:

| Компонент | Кол-во | Назначение |
|-----------|--------|------------|
| Скиллы    | 3      | Знания предметной области X, /do-thing, /check-thing |
| Агенты    | 0      | Не нужны |
| Хуки      | 1      | Проверка записи |
| MCP       | 1      | Подключение к сервису Y |

Получи подтверждение или поправки пользователя, прежде чем продолжать.

Результат: подтверждённый список компонентов для создания.

Фаза 3: Проектирование и уточняющие вопросы

Цель: подробно описать каждый компонент. Снять все неоднозначности до реализации.

Для каждого типа компонентов из плана задай целевые вопросы по проектированию. Подавай вопросы сгруппированными по типам компонентов. Дождись ответов, прежде чем продолжать.

Скиллы:

  • Какие запросы пользователя должны запускать этот скилл?
  • Какие предметные области он охватывает?
  • Нужны ли справочные файлы для подробного содержания?
  • Если скилл представляет действие по инициативе пользователя: какие аргументы он принимает и какие инструменты ему нужны? (Read, Write, Bash, Grep и т. д.)

Агенты:

  • Должен ли каждый агент срабатывать сам или только по запросу?
  • Какие инструменты ему нужны?
  • Каким должен быть формат результата?

Хуки:

  • Какие события? (PreToolUse, PostToolUse, Stop, SessionStart и т. д.)
  • Какое поведение — проверять, блокировать, изменять, добавлять контекст?
  • На основе промта (управляется языковой моделью) или на основе команды (детерминированный скрипт)?

MCP-серверы:

  • Какой тип сервера? (stdio для локального, SSE для размещённого с OAuth, HTTP для REST API)
  • Какой способ аутентификации?
  • Какие инструменты открыть?

Если пользователь говорит «как считаешь лучше», дай конкретные рекомендации и получи явное подтверждение.

Результат: подробная спецификация каждого компонента.

Фаза 4: Реализация

Цель: создать все файлы плагина по лучшим практикам.

Порядок действий:

  1. Создай структуру папок плагина
  2. Создай манифест plugin.json
  3. Создай каждый компонент (точные форматы — в references/component-schemas.md)
  4. Создай README.md с документацией плагина

Рекомендации по реализации:

  • Скиллы используют постепенное раскрытие: компактное тело SKILL.md (до 3000 слов), подробное содержание — в references/. Описание в шапке должно быть от третьего лица, с конкретными фразами-триггерами. Тела скиллов — это инструкции ДЛЯ Claude, а не сообщения пользователю: пиши их как указания, что делать.
  • Агентам нужно описание с блоками <example>, показывающими условия срабатывания, плюс системный промт в теле markdown.
  • Конфигурация хуков лежит в hooks/hooks.json. Для путей к скриптам используй ${CLAUDE_PLUGIN_ROOT}. Для сложной логики предпочитай хуки на основе промта.
  • Конфигурации MCP лежат в .mcp.json в корне плагина. Для путей к локальным серверам используй ${CLAUDE_PLUGIN_ROOT}. Обязательные переменные окружения опиши в README.

Фаза 5: Проверка и упаковка

Цель: выдать готовый плагин.

  1. Перечисли, что было создано, — каждый компонент и его назначение
  2. Спроси, нужны ли пользователю какие-либо поправки
  3. Выполни claude plugin validate <path-to-plugin-json>, чтобы проверить структуру плагина. Если команда недоступна (например, при работе внутри Cowork), проверь структуру вручную:
  4. .claude-plugin/plugin.json существует и содержит корректный JSON как минимум с полем name
  5. Поле name записано в kebab-case (только строчные буквы, цифры и дефисы)
  6. Все папки компонентов, на которые ссылается плагин (commands/, skills/, agents/, hooks/), действительно существуют и содержат файлы ожидаемых форматов — .md для команд, скиллов и агентов, .json для хуков
  7. В каждой вложенной папке скилла есть SKILL.md
  8. Сообщи, что прошло проверку, а что нет, так же, как это сделал бы валидатор в командной строке

Исправь все ошибки, прежде чем продолжать.

  1. Упакуй как файл .plugin:
cd /path/to/plugin-dir && zip -r /tmp/plugin-name.plugin . -x "*.DS_Store" && cp /tmp/plugin-name.plugin /path/to/outputs/plugin-name.plugin

Важно: всегда сначала создавай архив в /tmp/, а потом копируй в папку результатов. Запись прямо в папку результатов может не удаться из-за прав доступа.

Именование: для файла .plugin используй имя плагина из plugin.json (например, если имя code-reviewer, результат — code-reviewer.plugin).

Файл .plugin появится в чате как расширенный предпросмотр, где пользователь может просмотреть файлы и принять плагин нажатием кнопки.

Лучшие практики

  • Начинай с малого: начни с минимально достаточного набора компонентов. Плагин с одним хорошо сделанным скиллом полезнее, чем плагин с пятью недоделанными компонентами.
  • Постепенное раскрытие для скиллов: основные знания — в SKILL.md, подробные справочные материалы — в references/, рабочие примеры — в examples/.
  • Чёткие фразы-триггеры: описания скиллов должны содержать конкретные фразы, которые произносят пользователи. Описания агентов должны содержать блоки <example>.
  • Скиллы пишутся для Claude: пиши тело скилла как инструкции, которым Claude должен следовать, а не как документацию для чтения пользователем.
  • Повелительный стиль: в скиллах используй инструкции, начинающиеся с глагола («Разбери файл конфигурации», а не «Тебе следует разобрать файл конфигурации»).
  • Переносимость: для путей внутри плагина всегда используй ${CLAUDE_PLUGIN_ROOT}, никогда не прописывай пути жёстко.
  • Безопасность: используй переменные окружения для учётных данных, HTTPS для удалённых серверов, доступ к инструментам с минимумом прав.

Дополнительные материалы

  • **references/component-schemas.md** — подробные спецификации форматов каждого типа компонентов (скиллы, агенты, хуки, MCP, устаревшие команды, CONNECTORS.md)
  • **references/example-plugins.md** — три полных примера структур плагинов разной сложности

Перевод: iiuniversitet. Оригинал: https://github.com/anthropics/knowledge-work-plugins/tree/main/cowork-plugin-management/skills/create-cowork-plugin, лицензия Apache-2.0. Изменения: перевод на русский язык.

Оригинал на английском
---
name: create-cowork-plugin
description: >
  Guide users through creating a new plugin from scratch in a cowork session.
  Use when users want to create a plugin, build a plugin, make a new plugin, develop a plugin, scaffold a plugin, start a plugin from scratch, or design a plugin.
  This skill requires Cowork mode with access to the outputs directory for delivering the final .plugin file.
compatibility: Requires Cowork desktop app environment with access to the outputs directory for delivering .plugin files.
---

# Create Cowork Plugin

Build a new plugin from scratch through guided conversation. Walk the user through discovery, planning, design, implementation, and packaging — delivering a ready-to-install `.plugin` file at the end.

## Overview

A plugin is a self-contained directory that extends Claude's capabilities with skills, agents, hooks, and MCP server integrations. This skill encodes the full plugin architecture and a five-phase workflow for creating one conversationally.

The process:

1. **Discovery** — understand what the user wants to build
2. **Component Planning** — determine which component types are needed
3. **Design & Clarifying Questions** — specify each component in detail
4. **Implementation** — create all plugin files
5. **Review & Package** — deliver the `.plugin` file

> **Nontechnical output**: Keep all user-facing conversation in plain language. Do not expose implementation details like file paths, directory structures, or schema fields unless the user asks. Frame everything in terms of what the plugin will do.

## Plugin Architecture

### Directory Structure

Every plugin follows this layout:

```
plugin-name/
├── .claude-plugin/
│   └── plugin.json           # Required: plugin manifest
├── skills/                   # Skills (subdirectories with SKILL.md)
│   └── skill-name/
│       ├── SKILL.md
│       └── references/
├── agents/                   # Subagent definitions (.md files)
├── .mcp.json                 # MCP server definitions
└── README.md                 # Plugin documentation
```

> **Legacy `commands/` format**: Older plugins may include a `commands/` directory with single-file `.md` slash commands. This format still works, but new plugins should use `skills/*/SKILL.md` instead — the Cowork UI presents both as a single "Skills" concept, and the skills format supports progressive disclosure via `references/`.

**Rules:**

- `.claude-plugin/plugin.json` is always required
- Component directories (`skills/`, `agents/`) go at the plugin root, not inside `.claude-plugin/`
- Only create directories for components the plugin actually uses
- Use kebab-case for all directory and file names

### plugin.json Manifest

Located at `.claude-plugin/plugin.json`. Minimal required field is `name`.

```json
{
  "name": "plugin-name",
  "version": "0.1.0",
  "description": "Brief explanation of plugin purpose",
  "author": {
    "name": "Author Name"
  }
}
```

**Name rules:** kebab-case, lowercase with hyphens, no spaces or special characters.
**Version:** semver format (MAJOR.MINOR.PATCH). Start at `0.1.0`.

Optional fields: `homepage`, `repository`, `license`, `keywords`.

Custom component paths can be specified (supplements, does not replace, auto-discovery):

```json
{
  "commands": "./custom-commands",
  "agents": ["./agents", "./specialized-agents"],
  "hooks": "./config/hooks.json",
  "mcpServers": "./.mcp.json"
}
```

### Component Schemas

Detailed schemas for each component type are in `references/component-schemas.md`. Summary:

| Component                          | Location            | Format                      |
| ---------------------------------- | ------------------- | --------------------------- |
| Skills                             | `skills/*/SKILL.md` | Markdown + YAML frontmatter |
| MCP Servers                        | `.mcp.json`         | JSON                        |
| Agents (uncommonly used in Cowork) | `agents/*.md`       | Markdown + YAML frontmatter |
| Hooks (rarely used in Cowork)      | `hooks/hooks.json`  | JSON                        |
| Commands (legacy)                  | `commands/*.md`     | Markdown + YAML frontmatter |

This schema is shared with Claude Code's plugin system, but you're creating a plugin for Claude Cowork, a desktop app for doing knowledge work.
Cowork users will usually find skills the most useful. **Scaffold new plugins with `skills/*/SKILL.md` — do not create `commands/` unless the user explicitly needs the legacy single-file format.**

### Customizable plugins with `~~` placeholders

> **Do not use or ask about this pattern by default.** Only introduce `~~` placeholders if the user explicitly says they want people outside their organization to use the plugin.
> You can mention this is an option if it seems like the user wants to distribute the plugin externally, but do not proactively ask about this with AskUserQuestion.

When a plugin is intended to be shared with others outside their company, it might have parts that need to be adapted to individual users.
You might need to reference external tools by category rather than specific product (e.g., "project tracker" instead of "Jira").
When sharing is needed, use generic language and mark these as requiring customization with two tilde characters such as `create an issue in ~~project tracker`.
If used any tool categories, write a `CONNECTORS.md` file at the plugin root to explain:

```markdown
# Connectors

## How tool references work

Plugin files use `~~category` as a placeholder for whatever tool the user
connects in that category. Plugins are tool-agnostic — they describe
workflows in terms of categories rather than specific products.

## Connectors for this plugin

| Category        | Placeholder         | Options                         |
| --------------- | ------------------- | ------------------------------- |
| Chat            | `~~chat`            | Slack, Microsoft Teams, Discord |
| Project tracker | `~~project tracker` | Linear, Asana, Jira             |
```

### ${CLAUDE_PLUGIN_ROOT} Variable

Use `${CLAUDE_PLUGIN_ROOT}` for all intra-plugin path references in hooks and MCP configs. Never hardcode absolute paths.

## Guided Workflow

When you ask the user something, use AskUserQuestion. Don't assume "industry standard" defaults are correct. Note: AskUserQuestion always includes a Skip button and a free-text input box for custom answers, so do not include `None` or `Other` as options.

### Phase 1: Discovery

**Goal**: Understand what the user wants to build and why.

Ask (only what is unclear — skip questions if the user's initial request already answers them):

- What should this plugin do? What problem does it solve?
- Who will use it and in what context?
- Does it integrate with any external tools or services?
- Is there a similar plugin or workflow to reference?

Summarize understanding and confirm before proceeding.

**Output**: Clear statement of plugin purpose and scope.

### Phase 2: Component Planning

**Goal**: Determine which component types the plugin needs.

Based on the discovery answers, determine:

- **Skills** — Does it need specialized knowledge that Claude should load on-demand, or user-initiated actions? (domain expertise, reference schemas, workflow guides, deploy/configure/analyze/review actions)
- **MCP Servers** — Does it need external service integration? (databases, APIs, SaaS tools)
- **Agents (uncommon)** — Are there autonomous multi-step tasks? (validation, generation, analysis)
- **Hooks (rare)** — Should something happen automatically on certain events? (enforce policies, load context, validate operations)

Present a component plan table, including component types you decided not to create:

```
| Component | Count | Purpose |
|-----------|-------|---------|
| Skills    | 3     | Domain knowledge for X, /do-thing, /check-thing |
| Agents    | 0     | Not needed |
| Hooks     | 1     | Validate writes |
| MCP       | 1     | Connect to service Y |
```

Get user confirmation or adjustments before proceeding.

**Output**: Confirmed list of components to create.

### Phase 3: Design & Clarifying Questions

**Goal**: Specify each component in detail. Resolve all ambiguities before implementation.

For each component type in the plan, ask targeted design questions. Present questions grouped by component type. Wait for answers before proceeding.

**Skills:**

- What user queries should trigger this skill?
- What knowledge domains does it cover?
- Should it include reference files for detailed content?
- If the skill represents a user-initiated action: what arguments does it accept, and what tools does it need? (Read, Write, Bash, Grep, etc.)

**Agents:**

- Should each agent trigger proactively or only when requested?
- What tools does it need?
- What should the output format be?

**Hooks:**

- Which events? (PreToolUse, PostToolUse, Stop, SessionStart, etc.)
- What behavior — validate, block, modify, add context?
- Prompt-based (LLM-driven) or command-based (deterministic script)?

**MCP Servers:**

- What server type? (stdio for local, SSE for hosted with OAuth, HTTP for REST APIs)
- What authentication method?
- What tools should be exposed?

If the user says "whatever you think is best," provide specific recommendations and get explicit confirmation.

**Output**: Detailed specification for every component.

### Phase 4: Implementation

**Goal**: Create all plugin files following best practices.

**Order of operations:**

1. Create the plugin directory structure
2. Create `plugin.json` manifest
3. Create each component (see `references/component-schemas.md` for exact formats)
4. Create `README.md` documenting the plugin

**Implementation guidelines:**

- **Skills** use progressive disclosure: lean SKILL.md body (under 3,000 words), detailed content in `references/`. Frontmatter description must be third-person with specific trigger phrases. Skill bodies are instructions FOR Claude, not messages to the user — write them as directives about what to do.
- **Agents** need a description with `<example>` blocks showing triggering conditions, plus a system prompt in the markdown body.
- **Hooks** config goes in `hooks/hooks.json`. Use `${CLAUDE_PLUGIN_ROOT}` for script paths. Prefer prompt-based hooks for complex logic.
- **MCP configs** go in `.mcp.json` at plugin root. Use `${CLAUDE_PLUGIN_ROOT}` for local server paths. Document required env vars in README.

### Phase 5: Review & Package

**Goal**: Deliver the finished plugin.

1. Summarize what was created — list each component and its purpose
2. Ask if the user wants any adjustments
3. Run `claude plugin validate <path-to-plugin-json>` to check the plugin structure. If this command is unavailable (e.g., when running inside Cowork), verify the structure manually:
   - `.claude-plugin/plugin.json` exists and contains valid JSON with at least a `name` field
   - The `name` field is kebab-case (lowercase letters, numbers, and hyphens only)
   - Any component directories referenced by the plugin (`commands/`, `skills/`, `agents/`, `hooks/`) actually exist and contain files in the expected formats — `.md` for commands/skills/agents, `.json` for hooks
   - Each skill subdirectory contains a `SKILL.md`
   - Report what passed and what didn't, the same way the CLI validator would

   Fix any errors before proceeding.
4. Package as a `.plugin` file:

```bash
cd /path/to/plugin-dir && zip -r /tmp/plugin-name.plugin . -x "*.DS_Store" && cp /tmp/plugin-name.plugin /path/to/outputs/plugin-name.plugin
```

> **Important**: Always create the zip in `/tmp/` first, then copy to the outputs folder. Writing directly to the outputs folder may fail due to permissions.

> **Naming**: Use the plugin name from `plugin.json` for the `.plugin` file (e.g., if name is `code-reviewer`, output `code-reviewer.plugin`).

The `.plugin` file will appear in the chat as a rich preview where the user can browse the files and accept the plugin by pressing a button.

## Best Practices

- **Start small**: Begin with the minimum viable set of components. A plugin with one well-crafted skill is more useful than one with five half-baked components.
- **Progressive disclosure for skills**: Core knowledge in SKILL.md, detailed reference material in `references/`, working examples in `examples/`.
- **Clear trigger phrases**: Skill descriptions should include specific phrases users would say. Agent descriptions should include `<example>` blocks.
- **Skills are for Claude**: Write skill body content as instructions for Claude to follow, not documentation for the user to read.
- **Imperative writing style**: Use verb-first instructions in skills ("Parse the config file," not "You should parse the config file").
- **Portability**: Always use `${CLAUDE_PLUGIN_ROOT}` for intra-plugin paths, never hardcoded paths.
- **Security**: Use environment variables for credentials, HTTPS for remote servers, least-privilege tool access.

## Additional Resources

- **`references/component-schemas.md`** — Detailed format specifications for every component type (skills, agents, hooks, MCP, legacy commands, CONNECTORS.md)
- **`references/example-plugins.md`** — Three complete example plugin structures at different complexity levels

Источник: anthropics/knowledge-work-plugins / cowork-plugin-management / create-cowork-plugin ↗. Ссылка проверена 2026-10-10.