cowork-plugin-customizer by anthropics/knowledge-work-plugins
npx skills add https://github.com/anthropics/knowledge-work-plugins --skill cowork-plugin-customizer为特定组织定制插件——无论是首次设置通用插件模板,还是调整和优化已配置的插件。
查找插件:要查找插件的源文件,请运行
find mnt/.local-plugins mnt/.plugins -type d -name "*<plugin-name>*"来定位插件目录,然后在进行更改前阅读其文件以了解其结构。如果找不到插件目录,用户很可能在远程容器中运行此对话。中止并告知用户:“插件定制目前仅在桌面应用的协作者模式下可用。”
找到插件后,检查以 ~~ 为前缀的占位符:grep -rn '~~\w' /path/to/plugin --include='*.md' --include='*.json'
默认规则:如果存在
~~占位符,则默认采用通用插件设置,除非用户明确要求定制插件的特定部分。
1. 通用插件设置 — 插件包含以 ~~ 为前缀的占位符。这些是模板中的定制点,需要用实际值替换(例如,~~Jira → , → )。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
Asana~~your-team-channel#engineering2. 范围限定定制 — 不存在 ~~ 占位符,且用户要求定制插件的特定部分(例如,“定制连接器”、“更新站会命令”、“更改工单工具”)。阅读插件文件以找到相关部分,并仅关注这些部分。不要扫描整个插件或呈现不相关的定制项。
3. 通用定制 — 不存在 ~~ 占位符,且用户希望广泛修改插件。阅读插件的文件以了解其当前配置,然后询问用户希望更改什么。
重要提示:切勿更改正在定制的插件或技能的名称。不要重命名目录、文件或插件/技能名称字段。
非技术性输出:所有面向用户的输出(待办事项列表项、问题、摘要)必须使用简单、非技术性的语言编写。切勿向用户提及
~~前缀、占位符或定制点。一切都应从插件的功能和组织的工具角度来表述。
对于范围限定定制和通用定制(非通用插件设置),检查用户是否在其请求中提供了自由格式的上下文(例如,“定制站会命令——我们每天早上在 #eng-updates 进行异步站会”)。
如果用户提供了上下文:记录下来,并在阶段 3 中用它来预填答案——跳过用户已在此回答的问题。
如果用户未提供上下文:在继续之前,使用 AskUserQuestion 提出一个开放性问题。根据他们要求定制的内容来定制问题——例如,“您对简报命令有什么更改想法?”或“您希望如何更改此插件的工作方式?”保持简短并针对他们的请求。
在后续阶段中,使用他们的回答(如果有)作为额外上下文。
使用公司内部的知识 MCP 收集与定制范围相关的信息。有关按类别划分的详细查询模式,请参阅 references/search-strategies.md。
收集内容(限定在相关范围内):
搜索来源:
记录所有发现,供阶段 3 使用。
构建一个待办事项列表,列出需要进行的更改,范围适当限定:
grep -rn '~~\w' /path/to/plugin --include='*.md' --include='*.json' 以查找所有占位符定制点。按主题分组。使用用户友好的描述,专注于插件的用途:
使用阶段 0 和阶段 1 的上下文来处理每个项目。
如果用户的自由格式输入(阶段 0)或知识 MCP(阶段 1)提供了明确答案:直接应用,无需确认。
否则:使用 AskUserQuestion。不要假设“行业标准”默认值是正确的——如果用户的输入和知识 MCP 都没有提供具体答案,请询问。注意:AskUserQuestion 始终包含一个“跳过”按钮和一个用于自定义答案的自由文本输入框,因此不要包含 None 或 Other 作为选项。
更改类型:
~~Jira → Asana,~~your-org-channel → #engineeringtickets.example.com/your-team/123 → app.asana.com/0/PROJECT_ID/TASK_ID如果用户不知道或跳过,则保持值不变(对于通用设置,保持 ~~ 前缀的占位符不变)。
定制项目解决后,为任何已识别或更改的工具连接 MCP。有关完整工作流程、类别到关键词的映射以及配置文件格式,请参阅 references/mcp-servers.md。
对于定制过程中识别的每个工具:
search_mcp_registry(keywords=[...]),使用 references/mcp-servers.md 中的类别关键词,或者如果已知特定工具名称,则搜索该名称suggest_connectors(directoryUuids=["chosen-uuid"]) — 用户完成身份验证plugin.json 以获取自定义位置,否则为根目录的 .mcp.json)收集所有 MCP 结果,并在摘要输出中一起呈现(见下文)——不要在此阶段逐个呈现 MCP。
应用所有定制后,将插件打包为 .plugin 文件供用户使用:
压缩插件目录(排除 setup/,因为它不再需要):
cd /path/to/plugin && zip -r /tmp/plugin-name.plugin . -x "setup/*" && cp /tmp/plugin-name.plugin /path/to/outputs/plugin-name.plugin
将文件呈现给用户,使用 .plugin 扩展名,以便他们可以直接安装。(呈现 .plugin 文件将向用户显示为富预览,他们可以浏览插件文件,并通过按按钮接受定制。)
重要提示:始终先在
/tmp/中创建 zip,然后复制到输出文件夹。直接写入输出文件夹可能会因权限问题而失败,并留下临时文件。
命名:使用原始插件目录名称作为
.plugin文件名(例如,如果插件目录是coder,则输出文件应为coder.plugin)。在定制过程中不要重命名插件或其文件——仅替换占位符值并更新内容。
定制完成后,向用户呈现按来源分组的所学内容摘要。始终包含 MCP 部分,显示在设置过程中连接了哪些 MCP,以及用户仍应连接哪些 MCP:
## 从搜索 Slack 中
- 您使用 Asana 进行项目管理
- 冲刺周期为 2 周
## 从搜索文档中
- 故事点使用 T 恤尺码
## 从您的回答中
- 工单状态为:待办、进行中、审核中、已完成
然后呈现设置过程中连接的 MCP 以及用户仍应连接的任何 MCP,并提供如何连接它们的说明。
如果阶段 1 中没有可用的知识 MCP,并且用户必须手动回答至少一个问题,请在末尾包含一个注释:
顺便说一句,连接 Slack 或 Microsoft Teams 等来源可以让我在您下次定制插件时自动找到答案。
references/mcp-servers.md — MCP 发现工作流程、类别到关键词的映射、配置文件位置references/search-strategies.md — 用于查找工具名称和组织值的知识 MCP 查询模式examples/customized-mcp.json — 完全配置的 .mcp.json 示例每周安装数
139
代码仓库
GitHub 星标数
8.8K
首次出现
2026 年 1 月 31 日
安全审计
安装于
opencode123
codex119
gemini-cli116
claude-code113
github-copilot110
cursor106
Customize a plugin for a specific organization — either by setting up a generic plugin template for the first time, or by tweaking and refining an already-configured plugin.
Finding the plugin : To find the plugin's source files, run
find mnt/.local-plugins mnt/.plugins -type d -name "*<plugin-name>*"to locate the plugin directory, then read its files to understand its structure before making changes. If you cannot find the plugin directory, the user is likely running this conversation in a remote container. Abort and let them know: "Customizing plugins is currently only available in the desktop app's Cowork mode."
After locating the plugin, check for ~~-prefixed placeholders: grep -rn '~~\w' /path/to/plugin --include='*.md' --include='*.json'
Default rule : If
~~placeholders exist, default to Generic plugin setup unless the user explicitly asks to customize a specific part of the plugin.
1. Generic plugin setup — The plugin contains ~~-prefixed placeholders. These are customization points in a template that need to be replaced with real values (e.g., ~~Jira → Asana, ~~your-team-channel → #engineering).
2. Scoped customization — No ~~ placeholders exist, and the user asked to customize a specific part of the plugin (e.g., "customize the connectors", "update the standup command", "change the ticket tool"). Read the plugin files to find the relevant section(s) and focus only on those. Do not scan the entire plugin or present unrelated customization items.
3. General customization — No ~~ placeholders exist, and the user wants to modify the plugin broadly. Read the plugin's files to understand its current configuration, then ask the user what they'd like to change.
Important : Never change the name of the plugin or skill being customized. Do not rename directories, files, or the plugin/skill name fields.
Nontechnical output : All user-facing output (todo list items, questions, summaries) must be written in plain, nontechnical language. Never mention
~~prefixes, placeholders, or customization points to the user. Frame everything in terms of the plugin's capabilities and the organization's tools.
For scoped customization and general customization (not generic plugin setup), check whether the user provided free-form context alongside their request (e.g., "customize the standup command — we do async standups in #eng-updates every morning").
If the user provided context : Record it and use it to pre-fill answers in Phase 3 — skip asking questions that the user already answered here.
If the user did not provide context : Ask a single open-ended question using AskUserQuestion before proceeding. Tailor the question to what they asked to customize — e.g., "What changes do you have in mind for the brief command?" or "What would you like to change about how this plugin works?" Keep it short and specific to their request.
Use their response (if any) as additional context throughout the remaining phases.
Use company-internal knowledge MCPs to collect information relevant to the customization scope. See references/search-strategies.md for detailed query patterns by category.
What to gather (scope to what's relevant):
Sources to search:
Record all findings for use in Phase 3.
Build a todo list of changes to make, scoped appropriately:
grep -rn '~~\w' /path/to/plugin --include='*.md' --include='*.json' to find all placeholder customization points. Group them by theme.Use user-friendly descriptions that focus on the plugin's purpose:
Work through each item using context from Phase 0 and Phase 1.
If the user's free-form input (Phase 0) or knowledge MCPs (Phase 1) provided a clear answer : Apply directly without confirmation.
Otherwise : Use AskUserQuestion. Don't assume "industry standard" defaults are correct — if neither the user's input nor knowledge MCPs provided a specific answer, ask. 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.
Types of changes:
~~Jira → Asana, ~~your-org-channel → #engineeringtickets.example.com/your-team/123 → app.asana.com/0/PROJECT_ID/TASK_IDIf user doesn't know or skips, leave the value unchanged (or the ~~-prefixed placeholder, for generic setup).
After customization items have been resolved, connect MCPs for any tools that were identified or changed. See references/mcp-servers.md for the full workflow, category-to-keywords mapping, and config file format.
For each tool identified during customization:
search_mcp_registry(keywords=[...]) using category keywords from references/mcp-servers.md, or search for the specific tool name if already knownsuggest_connectors(directoryUuids=["chosen-uuid"]) — user completes authplugin.json for custom location, otherwise .mcp.json at root)Collect all MCP results and present them together in the summary output (see below) — don't present MCPs one at a time during this phase.
After all customizations are applied, package the plugin as a .plugin file for the user:
Zip the plugin directory (excluding setup/ since it's no longer needed):
cd /path/to/plugin && zip -r /tmp/plugin-name.plugin . -x "setup/*" && cp /tmp/plugin-name.plugin /path/to/outputs/plugin-name.plugin
Present the file to the user with the .plugin extension so they can install it directly. (Presenting the .plugin file will show to the user as a rich preview where they can look through the plugin files, and they can accept the customization by pressing a button.)
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 and leave behind temporary files.
Naming : Use the original plugin directory name for the
.pluginfile (e.g., if the plugin directory iscoder, the output file should becoder.plugin). Do not rename the plugin or its files during customization — only replace placeholder values and update content.
After customization, present the user with a summary of what was learned grouped by source. Always include the MCPs sections showing which MCPs were connected during setup and which ones the user should still connect:
## From searching Slack
- You use Asana for project management
- Sprint cycles are 2 weeks
## From searching documents
- Story points use T-shirt sizes
## From your answers
- Ticket statuses are: Backlog, In Progress, In Review, Done
Then present the MCPs that were connected during setup and any that the user should still connect, with instructions on how to connect them.
If no knowledge MCPs were available in Phase 1, and the user had to answer at least one question manually, include a note at the end:
By the way, connecting sources like Slack or Microsoft Teams would let me find answers automatically next time you customize a plugin.
references/mcp-servers.md — MCP discovery workflow, category-to-keywords mapping, config file locationsreferences/search-strategies.md — Knowledge MCP query patterns for finding tool names and org valuesexamples/customized-mcp.json — Example fully configured .mcp.jsonWeekly Installs
139
Repository
GitHub Stars
8.8K
First Seen
Jan 31, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode123
codex119
gemini-cli116
claude-code113
github-copilot110
cursor106
AI Elements:基于shadcn/ui的AI原生应用组件库,快速构建对话界面
56,200 周安装