plugin-creator
GitHub用于创建、生成和维护 DotCraft 插件目录,支持 .NET 托管插件、桌面插件及本地捆绑包。通过脚本自动化生成 plugin.json 清单、技能结构、MCP 配置及钩子等文件。
Trigger Scenarios
Install
npx skills add DotHarness/dotcraft --skill plugin-creator -g -y
SKILL.md
Frontmatter
{
"name": "plugin-creator",
"description": "Create and scaffold DotCraft local plugins, including project-local managed .NET plugins, Desktop Plugins, plugin-contained skills, MCP configuration, hooks, and assets. Use when developing or maintaining a DotCraft plugin bundle."
}
Plugin Creator
Use this skill when the user wants to create, scaffold, or maintain a DotCraft plugin directory.
For a managed .NET plugin, read references/dotnet-authoring.md and use the .NET authoring mode.
For a Desktop Plugin, read references/desktop-authoring.md and use --with-desktop.
When one plugin needs both, read both references and use --dotnet --with-desktop; the creator generates one bundle and one plugin id.
For other plugin contributions, use the local bundle workflow below.
Quick Start
Default to a workspace-local plugin under <workspace>/.craft/plugins/<plugin-id>:
python .craft/skills/plugin-creator/scripts/create_basic_plugin.py "My Plugin"
If reading the skill from the source tree instead of a deployed workspace skill, use the source-tree script path from the repo root:
python src/DotCraft.Core/Skills/BuiltIn/plugin-creator/scripts/create_basic_plugin.py "My Plugin"
Use --path when the user asks for another parent directory, such as a user-global plugin container:
python .craft/skills/plugin-creator/scripts/create_basic_plugin.py "My Plugin" --path "$HOME/.craft/plugins"
Defaults
- Normalize plugin ids to lowercase hyphen-case, max 64 characters.
- Create
<parent>/<plugin-id>/.craft-plugin/plugin.json. - Create a skill plugin by default with
skills: "./skills/". - Create
skills/<skill-name>/SKILL.md;--skill-namedefaults to the plugin id. - Add
--with-mcpto create a plugin-bundled.mcp.jsonplaceholder. - Add
--with-hooksto create a plugin-bundledhooks/hooks.jsonplaceholder. - Add
--with-desktopto create a source-based Desktop Plugin with one main view, including alongside--dotnet. - Add
--with-assetsto create plugin-level icon/logo placeholders.
Manifest Rules
DotCraft schema version 1 allows a plugin to contribute skills, MCP servers, lifecycle hooks, Desktop UI, interface metadata, or a combination of these.
- Skill-only plugins are valid when
skillspoints to a plugin-contained skills directory. - MCP-only plugins are valid when
mcpServerspoints to a plugin-bundled MCP config or a root.mcp.jsonexists. - Hooks-only plugins are valid when
hookspoints to plugin hook files or a roothooks/hooks.jsonexists. - Desktop Plugins declare one inline
desktopentry and optional styles inside./desktop/dist/. - Interface-only plugins are valid for catalog or UI metadata.
- Managed plugins declare
dotnetmetadata and contribute native Tools from their C# implementation. - Manifest fields
tools,functions, andprocessesare unsupported and must not be generated. - Out-of-process executable capabilities can be exposed through MCP.
- Thread-scoped AppServer client callbacks should use Runtime Dynamic Tools, not plugin manifest fields.
- Manifest-relative paths must start with
./, stay inside the plugin root, and never contain...
For exact examples, read references/plugin-json-spec.md.
MCP Plugin Template
Use this when creating a plugin that bundles MCP configuration:
python .craft/skills/plugin-creator/scripts/create_basic_plugin.py review-tools --with-mcp
After generation, replace placeholder descriptions and edit .mcp.json to point at the real MCP server command or HTTPS endpoint.
Hooks Plugin Template
Use this when creating a plugin that bundles lifecycle hooks:
python .craft/skills/plugin-creator/scripts/create_basic_plugin.py audit-hooks --without-skill --with-hooks
After generation, replace placeholder descriptions, edit hooks/hooks.json, and update helper scripts under hooks/. Plugin hook commands can use ${DOTCRAFT_PLUGIN_ROOT} and ${DOTCRAFT_PLUGIN_DATA}. First run still requires user trust through Desktop Hooks settings or hooks/setState.
Validation
After scaffolding:
- Inspect
.craft-plugin/plugin.jsonand replace TODO placeholders. - Confirm every manifest-relative path starts with
./. - If the plugin has skills, confirm each child skill has
SKILL.md. - If the plugin has MCP servers, confirm
.mcp.jsonuses the same schema as workspaceMcpServers. - If the plugin has hooks, confirm
hooks/hooks.jsonuses the same shape as.craft/hooks.json. - If the plugin has Desktop source, run its
buildscript and confirm the declared files exist underdesktop/dist/. - If the plugin is managed .NET, use
DotNetPlugin.Buildand address its compiler or preflight diagnostics. - Run relevant DotCraft tests when changing the runtime, or start DotCraft and confirm the expected contributions are active.
Version History
-
268f3b7
Current 2026-08-28 02:22
新增对 Desktop Plugin 的支持,包括运行时和 SDK,允许同时使用 --dotnet 和 --with-desktop 标志创建包含桌面 UI 的插件。
-
92a2dd0
2026-08-27 13:42
新增 Roslyn 驱动的 .NET 插件编写功能,支持托管 .NET 插件模式。
- f8e839e 2026-07-05 15:31


