[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C464DMPVA3RTXG0RGGZB3T":3,"skill-same:01M6C464DMPVA3RTXG0RGGZB3T":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":57,"ownerDescription":12,"updatedAt":58,"install":59,"resources":72},"01M6C464DMPVA3RTXG0RGGZB3T","create-plugin",null,"Create a Vibe plugin package — the Agent Plugins 1.0 format with optional Vibe extensions for skills, MCP servers, hooks, knowledge, agents, libraries, and connectors. Use when the user wants to create, scaffold, or author a plugin for Mistral Vibe.","mistralai\u002Fmistral-vibe","mistralai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F132372032?v=4","01M6C456ET86MBBTS4RMX0NDRS","Mistral","01M6C456K44X5W8TJX4T023KRV",5362,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fcreate-plugin\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,12,40,41,42,43,44,45],"plugin","create","create plugin","format","when","servers","author","agent plugins","for","extensions","with","hooks","use","user","MCP","knowledge","plugins","package","mcp servers","libraries","connectors","scaffold","2026-11-10 10:12:30",false,"---\nname: create-plugin\ndescription: Create a Vibe plugin package — the Agent Plugins 1.0 format with optional Vibe extensions for skills, MCP servers, hooks, knowledge, agents, libraries, and connectors. Use when the user wants to create, scaffold, or author a plugin for Mistral Vibe.\n---\n\n# Create a Vibe Plugin\n\nA plugin is a directory containing a `plugin.json` manifest (Agent Plugins 1.0\nschema) plus optional component directories and config files. Vibe discovers\nplugins under `.vibe\u002Fplugins\u002F` (project scope, requires trusted folder) and\n`~\u002F.vibe\u002Fplugins\u002F` (user global).\n\n## Plugin discovery locations\n\n| Scope | Path | When |\n|---|---|---|\n| Project | `\u003Cproject>\u002F.vibe\u002Fplugins\u002F\u003Cname>\u002F` | trusted folder only |\n| User global | `~\u002F.vibe\u002Fplugins\u002F\u003Cname>\u002F` | always |\n\nEach subdirectory under a plugins root is one plugin package. The first match\nwins: project plugins take precedence over user plugins with the same name.\n\n## Plugin directory structure\n\n```\nmy-plugin\u002F\n  plugin.json                 # required — Agent Plugins 1.0 manifest\n  mcp.json                    # optional — MCP server definitions\n  libraries.json              # optional — Node\u002FPython library dependencies\n  connectors.json             # optional — managed connector requirements\n  skills\u002F                     # optional — one subdirectory per skill\n    my-skill\u002F\n      SKILL.md\n  ai.mistral.vibe\u002F            # optional — Vibe-specific extensions\n    hooks.toml                # Vibe extension only\n    knowledge\u002F                # one subdirectory per knowledge folder\n      topic-name\u002F\n        KNOWLEDGE.md\n    agents\u002F                   # one .toml per subagent\n      researcher.toml\n    INSTRUCTIONS.md           # optional plugin-wide instructions (not loaded)\n```\n\n## Step 1 — plugin.json (required)\n\nThe manifest is a JSON file with `$schema` and `name` as required fields.\n\n```json\n{\n  \"$schema\": \"https:\u002F\u002Fagent-plugins.org\u002Fschemas\u002F1.0.0\u002Fplugin.schema.json\",\n  \"name\": \"my-plugin\",\n  \"version\": \"1.0.0\",\n  \"description\": \"What this plugin provides.\",\n  \"author\": {\n    \"name\": \"Author Name\",\n    \"email\": \"author@example.com\",\n    \"url\": \"https:\u002F\u002Fexample.com\"\n  },\n  \"homepage\": \"https:\u002F\u002Fexample.com\u002Fmy-plugin\",\n  \"repository\": \"https:\u002F\u002Fgithub.com\u002Fexample\u002Fmy-plugin\",\n  \"license\": \"MIT\",\n  \"keywords\": [\"productivity\", \"finance\"],\n  \"extensions\": {}\n}\n```\n\nRules:\n- `name` must match `^[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$` (1-64 chars), no `--`\n  or `..`.\n- `$schema` must be exactly\n  `https:\u002F\u002Fagent-plugins.org\u002Fschemas\u002F1.0.0\u002Fplugin.schema.json`. Any other\n  schema URL produces a fatal `plugin.schema.version_unsupported` error.\n- Agent Plugins 1.0 defines no other top-level fields. Vibe ignores one with a\n  `plugin.manifest.unknown_field` warning and loads the rest; put Vibe settings\n  in the `ai.mistral.vibe` extension instead.\n\n## Step 2 — Vibe extension (optional)\n\nTo use Vibe-specific components (hooks, knowledge, agents, libraries,\nconnectors), add an `ai.mistral.vibe` extension to `plugin.json`:\n\n```json\n{\n  \"extensions\": {\n    \"ai.mistral.vibe\": {\n      \"schemaVersion\": 1,\n      \"displayName\": \"My Plugin\",\n      \"toolNamespace\": \"myPlugin\",\n      \"toolOverrides\": {\n        \"lookup\": {\n          \"name\": \"search\",\n          \"exposure\": \"direct_and_programmatic\"\n        }\n      }\n    }\n  }\n}\n```\n\nWithout this extension, Vibe only loads `plugin.json`, `skills\u002F`, and\n`mcp.json`. The `toolNamespace` defaults to a TypeScript identifier derived\nfrom the plugin name. It must not be one of the reserved namespaces:\n`file_system`, `self`, `process`, `skill`, `subagent`, `vibe`.\n\n`vibe` is reserved for built-in plugins shipped with the CLI; user plugins\nmust choose a different namespace.\n\n`displayName` is an optional title of 1 to 100 characters; the plugin `name`\nstays its identity.\n\n`toolOverrides` rename or restrict tool exposure. Each key matches a discovered\ntool name from MCP servers or connectors. `exposure` is one of\n`programmatic`, `direct`, or `direct_and_programmatic`.\n\nVibe ignores a key the extension's schema does not define, with a\n`plugin.extension.unknown_field` warning, and keeps the rest of the extension.\nAn invalid value for a defined key drops the whole extension, and with it the\nplugin's hooks, knowledge, agents, libraries, and connectors.\n\n## Step 3 — Skills (optional)\n\nPlace skills under `skills\u002F` — one subdirectory per skill, each containing a\n`SKILL.md`. The skill name in `SKILL.md` frontmatter must match the directory\nname.\n\n```\nskills\u002F\n  format-reports\u002F\n    SKILL.md\n```\n\nSkills follow the standard SKILL.md format with YAML frontmatter (`name`,\n`description`, `user-invocable`, `allowed-tools`). Plugin skills are named\n`\u003Cplugin-name>:\u003Cskill-name>` at runtime, with the plugin's name as written (for\nexample `my-plugin:review`). Only tools use the `toolNamespace`.\n\n## Step 4 — MCP servers (optional)\n\nDefine MCP servers in `mcp.json`. Three transport types are supported:\n\n```json\n{\n  \"$schema\": \"https:\u002F\u002Fagent-plugins.org\u002Fschemas\u002F1.0.0\u002Fmcp.schema.json\",\n  \"mcpServers\": {\n    \"lookup\": {\n      \"type\": \"stdio\",\n      \"command\": \"node\",\n      \"args\": [\"${PLUGIN_ROOT}\u002Fserver\u002Findex.js\"],\n      \"env\": {\n        \"DEBUG\": \"true\"\n      },\n      \"cwd\": \".\"\n    },\n    \"remote-api\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https:\u002F\u002Fapi.example.com\u002Fmcp\",\n      \"headers\": {\n        \"X-Custom-Header\": \"value\"\n      }\n    }\n  }\n}\n```\n\nRules:\n- `command`, `args`, and `env` values support `${PLUGIN_ROOT}` and\n  `${PLUGIN_DATA}` variable expansion.\n- `PLUGIN_ROOT` and `PLUGIN_DATA` are also injected automatically into `env`;\n  do not set them yourself (rejected with an error).\n- `env` variable names `PLUGIN_ROOT` and `PLUGIN_DATA` are reserved.\n- `cwd` of `.` means the plugin root.\n- `streamable-http` servers support static `headers` only; use OAuth at the\n  Vibe config level for authenticated remote servers.\n- `sse` transport is detected but not supported — it produces a diagnostic.\n- The `command` for stdio servers is resolved relative to the plugin root\n  when it is a bare filename; absolute paths are used as-is.\n\n## Step 5 — Hooks (optional, Vibe extension only)\n\nPlace hooks in `ai.mistral.vibe\u002Fhooks.toml`. Format is identical to the Vibe\nhooks.toml format, but hooks run in the plugin root directory with\n`PLUGIN_ROOT` and `PLUGIN_DATA` in the environment. The session folder is the\n`cwd` field of the JSON the hook reads on stdin: read it to act on the user's\nproject.\n\nAs for MCP servers, the plugin root is the session's read-only copy of the\nplugin, so editing the installed plugin does not change a running session, and\n`PLUGIN_DATA` is the session's data directory, shared with the plugin's MCP\nservers. Write state to `PLUGIN_DATA`, never next to the hook script.\n\n```toml\n[[hooks]]\nname = \"guard-lookup\"\ntype = \"pre_tool\"\nmatch = \"myPlugin.lookup\"\ncommand = \"python guard.py\"\nstrict = true\n\n[[hooks]]\nname = \"post-agent-lint\"\ntype = \"post_agent\"\ncommand = \"python lint_session.py\"   # reads `cwd` from stdin, then lints it\n```\n\nPlugin hooks run after the project's own `hooks.toml` and before the user's\n`~\u002F.vibe\u002Fhooks.toml` (project plugins), or after it (user plugins).\n\nLimits:\n- Maximum 128 hooks per plugin.\n- File size limit: 64 KB.\n- Hook names must be unique within the plugin. Runtime names are prefixed as\n  `\u003Cplugin-name>:\u003Chook-name>`.\n\n## Step 6 — Knowledge (optional, Vibe extension only)\n\nPlace knowledge folders under `ai.mistral.vibe\u002Fknowledge\u002F`. Each folder\ncontains a `KNOWLEDGE.md` with YAML frontmatter:\n\n```\nai.mistral.vibe\u002F\n  knowledge\u002F\n    accounting-policy\u002F\n      KNOWLEDGE.md\n      reference.md\n```\n\n`KNOWLEDGE.md` frontmatter:\n\n```yaml\n---\nname: accounting-policy\ndescription: How revenue is recognized and reported.\ndisplay_name: Accounting Policy\nicon: book\n---\n```\n\nRules:\n- `name` must match the directory name (`^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$`).\n- `description` is 5-300 characters.\n- Maximum 100 knowledge folders per plugin.\n- `KNOWLEDGE.md` entrypoint limit: 256 KB.\n- No symbolic links inside knowledge directories.\n- Knowledge is named `\u003Cplugin-name>:\u003Cname>`.\n\n## Step 7 — Agents (optional, Vibe extension only)\n\nPlace subagent definitions under `ai.mistral.vibe\u002Fagents\u002F`. Each `.toml` file\ndefines one subagent:\n\n```\nai.mistral.vibe\u002F\n  agents\u002F\n    researcher.toml\n```\n\n`researcher.toml`:\n\n```toml\nschemaVersion = 1\nagentType = \"subagent\"\ndisplayName = \"Researcher\"\ndescription = \"Searches the knowledge base and summarizes findings.\"\nsafety = \"safe\"\nactiveModel = \"mistral-medium-3.5\"\ninstructions = \"You are a research assistant.\"\n\nenabledTools = [\"read_file\", \"grep\"]\ndisabledTools = [\"bash\"]\n\n[tools.bash]\npermission = \"never\"\nallowlist = [\"ls\"]\ndenylist = [\"rm\"]\n```\n\nRules:\n- `schemaVersion` must be 1.\n- `agentType` must be `\"subagent\"` (the only supported type).\n- Filename must be lowercase kebab-case (`^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$`).\n- `safety` is one of `\"safe\"`, `\"neutral\"`, `\"destructive\"`, `\"yolo\"`.\n- Maximum 128 agents per plugin, 64 KB per file.\n- Tool lists cannot contain duplicates or empty names.\n- Agent names are `\u003Cplugin-name>:\u003Cfilename-stem>`.\n\n## Step 8 — Libraries (optional, Vibe extension only)\n\nDeclare Node and Python library dependencies in `libraries.json`:\n\n```json\n{\n  \"schemaVersion\": 1,\n  \"node\": {\n    \"@productivity\u002Ffinance\": \".\u002Fnode\u002Ffinance\",\n    \"lodash\": \".\u002Fnode\u002Flodash\"\n  },\n  \"python\": {\n    \"vibe_finance\": \".\u002Fpython\u002Fvibe_finance\",\n    \"utils\": \".\u002Fpython\u002Futils.py\"\n  }\n}\n```\n\nRules:\n- Node aliases must match `^(?:@[a-z0-9][a-z0-9._-]*\u002F)?[a-z0-9][a-z0-9._-]*$`\n  (max 214 chars).\n- Python aliases must match `^[A-Za-z_][A-Za-z0-9_]*$` (max 128 chars).\n- Source paths are relative to the plugin root, using forward slashes only.\n  No `..` or absolute paths.\n- Python library sources can be a directory (package) or a single `.py` file.\n- Node library sources must be directories.\n- No symbolic links inside library directories.\n- Library aliases that collide across plugins are all dropped.\n- Maximum 128 entries per language.\n\n## Step 9 — Connectors (optional, Vibe extension only)\n\nDeclare required managed connectors in `connectors.json`:\n\n```json\n{\n  \"schemaVersion\": 1,\n  \"connectors\": [\n    {\n      \"id\": \"github\",\n      \"tools\": [\"create_issue\", \"list_issues\"]\n    },\n    {\n      \"id\": \"linear\",\n      \"tools\": [\"create_issue\"]\n    }\n  ]\n}\n```\n\nRules:\n- Connector IDs must be unique within the plugin.\n- Tool names per connector must be unique, 1-256 characters.\n- Maximum 128 connector requirements.\n- A connector requirement is a declaration: it appears whether or not the\n  account has the connector. Availability is reported as a diagnostic.\n\n## Diagnostic codes\n\nWhen a plugin fails to load or has issues, Vibe emits typed diagnostics. The\nmost common ones:\n\n| Code | Fatal | Meaning |\n|---|---|---|\n| `plugin.manifest.invalid` | yes | `plugin.json` missing, unreadable, or invalid |\n| `plugin.schema.version_unsupported` | yes | unsupported schema version |\n| `plugin.compatibility.format_unrecognized` | yes | no supported manifest found |\n| `plugin.namespace.reserved` | yes | namespace is reserved |\n| `plugin.namespace.collision` | yes | two plugins claim one namespace |\n| `plugin.name.collision` | yes | two plugins share a name at the same scope |\n| `plugin.path.outside_root` | yes | a declared path escapes the plugin root |\n| `plugin.manifest.unknown_field` | no | `plugin.json` has a field Agent Plugins 1.0 does not define; it is ignored |\n| `plugin.extension.unknown_field` | no | the `ai.mistral.vibe` extension has a key its schema does not define; it is ignored |\n| `plugin.skill.invalid` | no | one `SKILL.md` failed to parse |\n| `plugin.hooks.invalid` | no | one hook entry failed validation |\n| `plugin.knowledge.invalid` | no | one knowledge folder failed validation |\n| `plugin.agent.invalid` | no | one agent document failed validation |\n| `plugin.libraries.invalid` | no | `libraries.json` failed to load |\n| `plugin.library.invalid` | no | one library path is invalid |\n| `plugin.library.alias_collision` | no | library alias shared across plugins |\n| `plugin.connectors.invalid` | no | `connectors.json` failed to load |\n| `plugin.mcp.connection_failed` | no | an MCP server did not answer |\n| `plugin.mcp.authorization_required` | no | an MCP server needs authorization |\n| `plugin.tool_override.unused` | no | a `toolOverrides` key matched no tool |\n\nFatal diagnostics drop the entire plugin. Non-fatal diagnostics drop only the\noffending component; the rest of the plugin survives.\n\n## Compatibility with other plugin formats\n\nVibe also detects and adapts plugins authored for other agents:\n\n| Format | Marker | Adapted as |\n|---|---|---|\n| Claude Code | `.claude-plugin\u002Fplugin.json` | skills, MCP servers, hooks |\n| Codex | `.codex-plugin\u002Fplugin.json` | skills, MCP servers |\n| Kimi Code | `kimi.plugin.json` or `.kimi-plugin\u002Fplugin.json` | skills, MCP servers, hooks |\n| OpenCode | `.opencode\u002F` directory | skills only (executable modules unsupported) |\n\nIf markers for more than one format are present, the plugin is rejected as\nambiguous. Native Agent Plugins 1.0 (a valid `plugin.json` with the correct\n`$schema`) always takes precedence.\n\nWhen creating a new plugin, always use the native Agent Plugins 1.0 format.\n\n## Workflow\n\n1. Determine the plugin name, scope (project vs user global), and which\n   components the user needs.\n2. Create the directory at `.vibe\u002Fplugins\u002F\u003Cname>\u002F` (project) or\n   `~\u002F.vibe\u002Fplugins\u002F\u003Cname>\u002F` (user).\n3. Write `plugin.json` with the required `$schema` and `name` fields.\n4. Add the `ai.mistral.vibe` extension to `plugin.json` if any Vibe-specific\n   components (hooks, knowledge, agents, libraries, connectors) are needed.\n5. Add component directories and files per the instructions above.\n6. Tell the user to run `\u002Freload` to pick up the new plugin without\n   restarting.\n","# Create a Vibe Plugin\n\nA plugin is a directory containing a `plugin.json` manifest (Agent Plugins 1.0\nschema) plus optional component directories and config files. Vibe discovers\nplugins under `.vibe\u002Fplugins\u002F` (project scope, requires trusted folder) and\n`~\u002F.vibe\u002Fplugins\u002F` (user global).\n\n## Plugin discovery locations\n\n| Scope | Path | When |\n|---|---|---|\n| Project | `\u003Cproject>\u002F.vibe\u002Fplugins\u002F\u003Cname>\u002F` | trusted folder only |\n| User global | `~\u002F.vibe\u002Fplugins\u002F\u003Cname>\u002F` | always |\n\nEach subdirectory under a plugins root is one plugin package. The first match\nwins: project plugins take precedence over user plugins with the same name.\n\n## Plugin directory structure\n\n```\nmy-plugin\u002F\n  plugin.json                 # required — Agent Plugins 1.0 manifest\n  mcp.json                    # optional — MCP server definitions\n  libraries.json              # optional — Node\u002FPython library dependencies\n  connectors.json             # optional — managed connector requirements\n  skills\u002F                     # optional — one subdirectory per skill\n    my-skill\u002F\n      SKILL.md\n  ai.mistral.vibe\u002F            # optional — Vibe-specific extensions\n    hooks.toml                # Vibe extension only\n    knowledge\u002F                # one subdirectory per knowledge folder\n      topic-name\u002F\n        KNOWLEDGE.md\n    agents\u002F                   # one .toml per subagent\n      researcher.toml\n    INSTRUCTIONS.md           # optional plugin-wide instructions (not loaded)\n```\n\n## Step 1 — plugin.json (required)\n\nThe manifest is a JSON file with `$schema` and `name` as required fields.\n\n```json\n{\n  \"$schema\": \"https:\u002F\u002Fagent-plugins.org\u002Fschemas\u002F1.0.0\u002Fplugin.schema.json\",\n  \"name\": \"my-plugin\",\n  \"version\": \"1.0.0\",\n  \"description\": \"What this plugin provides.\",\n  \"author\": {\n    \"name\": \"Author Name\",\n    \"email\": \"author@example.com\",\n    \"url\": \"https:\u002F\u002Fexample.com\"\n  },\n  \"homepage\": \"https:\u002F\u002Fexample.com\u002Fmy-plugin\",\n  \"repository\": \"https:\u002F\u002Fgithub.com\u002Fexample\u002Fmy-plugin\",\n  \"license\": \"MIT\",\n  \"keywords\": [\"productivity\", \"finance\"],\n  \"extensions\": {}\n}\n```\n\nRules:\n- `name` must match `^[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$` (1-64 chars), no `--`\n  or `..`.\n- `$schema` must be exactly\n  `https:\u002F\u002Fagent-plugins.org\u002Fschemas\u002F1.0.0\u002Fplugin.schema.json`. Any other\n  schema URL produces a fatal `plugin.schema.version_unsupported` error.\n- Agent Plugins 1.0 defines no other top-level fields. Vibe ignores one with a\n  `plugin.manifest.unknown_field` warning and loads the rest; put Vibe settings\n  in the `ai.mistral.vibe` extension instead.\n\n## Step 2 — Vibe extension (optional)\n\nTo use Vibe-specific components (hooks, knowledge, agents, libraries,\nconnectors), add an `ai.mistral.vibe` extension to `plugin.json`:\n\n```json\n{\n  \"extensions\": {\n    \"ai.mistral.vibe\": {\n      \"schemaVersion\": 1,\n      \"displayName\": \"My Plugin\",\n      \"toolNamespace\": \"myPlugin\",\n      \"toolOverrides\": {\n        \"lookup\": {\n          \"name\": \"search\",\n          \"exposure\": \"direct_and_programmatic\"\n        }\n      }\n    }\n  }\n}\n```\n\nWithout this extension, Vibe only loads `plugin.json`, `skills\u002F`, and\n`mcp.json`. The `toolNamespace` defaults to a TypeScript identifier derived\nfrom the plugin name. It must not be one of the reserved namespaces:\n`file_system`, `self`, `process`, `skill`, `subagent`, `vibe`.\n\n`vibe` is reserved for built-in plugins shipped with the CLI; user plugins\nmust choose a different namespace.\n\n`displayName` is an optional title of 1 to 100 characters; the plugin `name`\nstays its identity.\n\n`toolOverrides` rename or restrict tool exposure. Each key matches a discovered\ntool name from MCP servers or connectors. `exposure` is one of\n`programmatic`, `direct`, or `direct_and_programmatic`.\n\nVibe ignores a key the extension's schema does not define, with a\n`plugin.extension.unknown_field` warning, and keeps the rest of the extension.\nAn invalid value for a defined key drops the whole extension, and with it the\nplugin's hooks, knowledge, agents, libraries, and connectors.\n\n## Step 3 — Skills (optional)\n\nPlace skills under `skills\u002F` — one subdirectory per skill, each containing a\n`SKILL.md`. The skill name in `SKILL.md` frontmatter must match the directory\nname.\n\n```\nskills\u002F\n  format-reports\u002F\n    SKILL.md\n```\n\nSkills follow the standard SKILL.md format with YAML frontmatter (`name`,\n`description`, `user-invocable`, `allowed-tools`). Plugin skills are named\n`\u003Cplugin-name>:\u003Cskill-name>` at runtime, with the plugin's name as written (for\nexample `my-plugin:review`). Only tools use the `toolNamespace`.\n\n## Step 4 — MCP servers (optional)\n\nDefine MCP servers in `mcp.json`. Three transport types are supported:\n\n```json\n{\n  \"$schema\": \"https:\u002F\u002Fagent-plugins.org\u002Fschemas\u002F1.0.0\u002Fmcp.schema.json\",\n  \"mcpServers\": {\n    \"lookup\": {\n      \"type\": \"stdio\",\n      \"command\": \"node\",\n      \"args\": [\"${PLUGIN_ROOT}\u002Fserver\u002Findex.js\"],\n      \"env\": {\n        \"DEBUG\": \"true\"\n      },\n      \"cwd\": \".\"\n    },\n    \"remote-api\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https:\u002F\u002Fapi.example.com\u002Fmcp\",\n      \"headers\": {\n        \"X-Custom-Header\": \"value\"\n      }\n    }\n  }\n}\n```\n\nRules:\n- `command`, `args`, and `env` values support `${PLUGIN_ROOT}` and\n  `${PLUGIN_DATA}` variable expansion.\n- `PLUGIN_ROOT` and `PLUGIN_DATA` are also injected automatically into `env`;\n  do not set them yourself (rejected with an error).\n- `env` variable names `PLUGIN_ROOT` and `PLUGIN_DATA` are reserved.\n- `cwd` of `.` means the plugin root.\n- `streamable-http` servers support static `headers` only; use OAuth at the\n  Vibe config level for authenticated remote servers.\n- `sse` transport is detected but not supported — it produces a diagnostic.\n- The `command` for stdio servers is resolved relative to the plugin root\n  when it is a bare filename; absolute paths are used as-is.\n\n## Step 5 — Hooks (optional, Vibe extension only)\n\nPlace hooks in `ai.mistral.vibe\u002Fhooks.toml`. Format is identical to the Vibe\nhooks.toml format, but hooks run in the plugin root directory with\n`PLUGIN_ROOT` and `PLUGIN_DATA` in the environment. The session folder is the\n`cwd` field of the JSON the hook reads on stdin: read it to act on the user's\nproject.\n\nAs for MCP servers, the plugin root is the session's read-only copy of the\nplugin, so editing the installed plugin does not change a running session, and\n`PLUGIN_DATA` is the session's data directory, shared with the plugin's MCP\nservers. Write state to `PLUGIN_DATA`, never next to the hook script.\n\n```toml\n[[hooks]]\nname = \"guard-lookup\"\ntype = \"pre_tool\"\nmatch = \"myPlugin.lookup\"\ncommand = \"python guard.py\"\nstrict = true\n\n[[hooks]]\nname = \"post-agent-lint\"\ntype = \"post_agent\"\ncommand = \"python lint_session.py\"   # reads `cwd` from stdin, then lints it\n```\n\nPlugin hooks run after the project's own `hooks.toml` and before the user's\n`~\u002F.vibe\u002Fhooks.toml` (project plugins), or after it (user plugins).\n\nLimits:\n- Maximum 128 hooks per plugin.\n- File size limit: 64 KB.\n- Hook names must be unique within the plugin. Runtime names are prefixed as\n  `\u003Cplugin-name>:\u003Chook-name>`.\n\n## Step 6 — Knowledge (optional, Vibe extension only)\n\nPlace knowledge folders under `ai.mistral.vibe\u002Fknowledge\u002F`. Each folder\ncontains a `KNOWLEDGE.md` with YAML frontmatter:\n\n```\nai.mistral.vibe\u002F\n  knowledge\u002F\n    accounting-policy\u002F\n      KNOWLEDGE.md\n      reference.md\n```\n\n`KNOWLEDGE.md` frontmatter:\n\n```yaml\n---\nname: accounting-policy\ndescription: How revenue is recognized and reported.\ndisplay_name: Accounting Policy\nicon: book\n---\n```\n\nRules:\n- `name` must match the directory name (`^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$`).\n- `description` is 5-300 characters.\n- Maximum 100 knowledge folders per plugin.\n- `KNOWLEDGE.md` entrypoint limit: 256 KB.\n- No symbolic links inside knowledge directories.\n- Knowledge is named `\u003Cplugin-name>:\u003Cname>`.\n\n## Step 7 — Agents (optional, Vibe extension only)\n\nPlace subagent definitions under `ai.mistral.vibe\u002Fagents\u002F`. Each `.toml` file\ndefines one subagent:\n\n```\nai.mistral.vibe\u002F\n  agents\u002F\n    researcher.toml\n```\n\n`researcher.toml`:\n\n```toml\nschemaVersion = 1\nagentType = \"subagent\"\ndisplayName = \"Researcher\"\ndescription = \"Searches the knowledge base and summarizes findings.\"\nsafety = \"safe\"\nactiveModel = \"mistral-medium-3.5\"\ninstructions = \"You are a research assistant.\"\n\nenabledTools = [\"read_file\", \"grep\"]\ndisabledTools = [\"bash\"]\n\n[tools.bash]\npermission = \"never\"\nallowlist = [\"ls\"]\ndenylist = [\"rm\"]\n```\n\nRules:\n- `schemaVersion` must be 1.\n- `agentType` must be `\"subagent\"` (the only supported type).\n- Filename must be lowercase kebab-case (`^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$`).\n- `safety` is one of `\"safe\"`, `\"neutral\"`, `\"destructive\"`, `\"yolo\"`.\n- Maximum 128 agents per plugin, 64 KB per file.\n- Tool lists cannot contain duplicates or empty names.\n- Agent names are `\u003Cplugin-name>:\u003Cfilename-stem>`.\n\n## Step 8 — Libraries (optional, Vibe extension only)\n\nDeclare Node and Python library dependencies in `libraries.json`:\n\n```json\n{\n  \"schemaVersion\": 1,\n  \"node\": {\n    \"@productivity\u002Ffinance\": \".\u002Fnode\u002Ffinance\",\n    \"lodash\": \".\u002Fnode\u002Flodash\"\n  },\n  \"python\": {\n    \"vibe_finance\": \".\u002Fpython\u002Fvibe_finance\",\n    \"utils\": \".\u002Fpython\u002Futils.py\"\n  }\n}\n```\n\nRules:\n- Node aliases must match `^(?:@[a-z0-9][a-z0-9._-]*\u002F)?[a-z0-9][a-z0-9._-]*$`\n  (max 214 chars).\n- Python aliases must match `^[A-Za-z_][A-Za-z0-9_]*$` (max 128 chars).\n- Source paths are relative to the plugin root, using forward slashes only.\n  No `..` or absolute paths.\n- Python library sources can be a directory (package) or a single `.py` file.\n- Node library sources must be directories.\n- No symbolic links inside library directories.\n- Library aliases that collide across plugins are all dropped.\n- Maximum 128 entries per language.\n\n## Step 9 — Connectors (optional, Vibe extension only)\n\nDeclare required managed connectors in `connectors.json`:\n\n```json\n{\n  \"schemaVersion\": 1,\n  \"connectors\": [\n    {\n      \"id\": \"github\",\n      \"tools\": [\"create_issue\", \"list_issues\"]\n    },\n    {\n      \"id\": \"linear\",\n      \"tools\": [\"create_issue\"]\n    }\n  ]\n}\n```\n\nRules:\n- Connector IDs must be unique within the plugin.\n- Tool names per connector must be unique, 1-256 characters.\n- Maximum 128 connector requirements.\n- A connector requirement is a declaration: it appears whether or not the\n  account has the connector. Availability is reported as a diagnostic.\n\n## Diagnostic codes\n\nWhen a plugin fails to load or has issues, Vibe emits typed diagnostics. The\nmost common ones:\n\n| Code | Fatal | Meaning |\n|---|---|---|\n| `plugin.manifest.invalid` | yes | `plugin.json` missing, unreadable, or invalid |\n| `plugin.schema.version_unsupported` | yes | unsupported schema version |\n| `plugin.compatibility.format_unrecognized` | yes | no supported manifest found |\n| `plugin.namespace.reserved` | yes | namespace is reserved |\n| `plugin.namespace.collision` | yes | two plugins claim one namespace |\n| `plugin.name.collision` | yes | two plugins share a name at the same scope |\n| `plugin.path.outside_root` | yes | a declared path escapes the plugin root |\n| `plugin.manifest.unknown_field` | no | `plugin.json` has a field Agent Plugins 1.0 does not define; it is ignored |\n| `plugin.extension.unknown_field` | no | the `ai.mistral.vibe` extension has a key its schema does not define; it is ignored |\n| `plugin.skill.invalid` | no | one `SKILL.md` failed to parse |\n| `plugin.hooks.invalid` | no | one hook entry failed validation |\n| `plugin.knowledge.invalid` | no | one knowledge folder failed validation |\n| `plugin.agent.invalid` | no | one agent document failed validation |\n| `plugin.libraries.invalid` | no | `libraries.json` failed to load |\n| `plugin.library.invalid` | no | one library path is invalid |\n| `plugin.library.alias_collision` | no | library alias shared across plugins |\n| `plugin.connectors.invalid` | no | `connectors.json` failed to load |\n| `plugin.mcp.connection_failed` | no | an MCP server did not answer |\n| `plugin.mcp.authorization_required` | no | an MCP server needs authorization |\n| `plugin.tool_override.unused` | no | a `toolOverrides` key matched no tool |\n\nFatal diagnostics drop the entire plugin. Non-fatal diagnostics drop only the\noffending component; the rest of the plugin survives.\n\n## Compatibility with other plugin formats\n\nVibe also detects and adapts plugins authored for other agents:\n\n| Format | Marker | Adapted as |\n|---|---|---|\n| Claude Code | `.claude-plugin\u002Fplugin.json` | skills, MCP servers, hooks |\n| Codex | `.codex-plugin\u002Fplugin.json` | skills, MCP servers |\n| Kimi Code | `kimi.plugin.json` or `.kimi-plugin\u002Fplugin.json` | skills, MCP servers, hooks |\n| OpenCode | `.opencode\u002F` directory | skills only (executable modules unsupported) |\n\nIf markers for more than one format are present, the plugin is rejected as\nambiguous. Native Agent Plugins 1.0 (a valid `plugin.json` with the correct\n`$schema`) always takes precedence.\n\nWhen creating a new plugin, always use the native Agent Plugins 1.0 format.\n\n## Workflow\n\n1. Determine the plugin name, scope (project vs user global), and which\n   components the user needs.\n2. Create the directory at `.vibe\u002Fplugins\u002F\u003Cname>\u002F` (project) or\n   `~\u002F.vibe\u002Fplugins\u002F\u003Cname>\u002F` (user).\n3. Write `plugin.json` with the required `$schema` and `name` fields.\n4. Add the `ai.mistral.vibe` extension to `plugin.json` if any Vibe-specific\n   components (hooks, knowledge, agents, libraries, connectors) are needed.\n5. Add component directories and files per the instructions above.\n6. Tell the user to run `\u002Freload` to pick up the new plugin without\n   restarting.\n",{"name":5,"description":7},"main","97e31350d2adc15c8a33a091566e897cbe9f41bc","vibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fcreate-plugin",794,"https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe","https:\u002F\u002Fgithub.com\u002Fmistralai","mistral.ai","2026-11-11 00:56:57",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add mistralai\u002Fmistral-vibe --skill create-plugin",{"tool":65,"command":66},"bunx","bunx skills add mistralai\u002Fmistral-vibe --skill create-plugin",{"tool":68,"command":69},"pnpm","pnpm dlx skills add mistralai\u002Fmistral-vibe --skill create-plugin","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fcreate-plugin\u002FSKILL.md",true,[],[74,95,115,140,160,166],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":81,"publishedAt":46},"01M71709JBNSMH1MJ71NRGRBFM","import","Import the user's setup from other coding CLIs (Claude Code, Codex, OpenCode) into Vibe — instructions, skills, subagents, commands, hooks, MCP servers, permissions, and plugins. Load when the user wants to switch to Vibe, import or reuse another CLI's configuration, or asks whether a file from another CLI works in Vibe.","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fimport\u002FSKILL.md",[80],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[76,82,35,83,38,84,28,85,86,87,88,89,90,91,92,40,29,42,93,94],"switch","reuse","load","file","code","permissions","codex","cli","opencode","instructions","commands","configuration","setup",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":46},"01M6C46D6AE5JDVJTFTXH9RZ5Q","worktree","Create, reuse, and clean up git worktrees under $VIBE_HOME\u002Fworktrees. Use when the user wants to work in an isolated git worktree, create a worktree for a task, or list\u002Fremove existing worktrees.","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fworktree\u002FSKILL.md",[],[97,102,25,103,104,105,36,106,107,37,108,109,32,110,111,112,83,113,28,114],"git","work","list","git worktree","remove","git worktrees","up","home","worktrees","clean","true","Existing","task",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":122,"publishedAt":46},"01M6C46A11K3H7D6F7ATSBRYKJ","vibe","Authoritative reference for Mistral Vibe — the CLI agent you (the model) are running inside.\n\nLOAD when the user:\n- asks anything about Vibe itself, even by indirect name (\"this CLI\", \"this tool\", \"you\");\n- wants to change, inspect, or reset their setup;\n- asks why the agent did or did not act;\n- asks how to make the CLI do X, where X lives, or what a flag\u002Fcommand\u002Fsetting does;\n- asks any meta question about your own behavior;\n- is unsure whether a command, flag, env var, or file is in scope — this skill is the source of truth.\n\nSCOPE: config under `~\u002F.vibe\u002F` and project-local `.vibe\u002F`; `VIBE_*` and `LOG_*` env vars; models and providers; agents and subagents; skills; tools and their permission model; every slash command and CLI flag; hooks; MCP servers; connectors; plugins; trusted folders; `@`-file mentions; logs; themes; voice.","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fvibe\u002FSKILL.md",[121],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[117,123,124,38,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,32],"Meta","question","logs","change","command","how","why","config","subagents","project","inspect","local","themes","you","log","act","do",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":147,"publishedAt":46},"01M6C467E56WQ8PXEZT1Q0VP23","skill-creator","Load this skill before creating, updating, or deleting a Vibe skill, or whenever you plan to add or modify SKILL.md files under a skills directory. It explains Vibe's SKILL.md frontmatter, discovery order, support files, and the permission flow.","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fskill-creator\u002FSKILL.md",[146],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[148,149,150,151,152,153,154,155,156,84,157,136,158,159,117],"skill creator","creator","flow","plan","support","discovery","directory","permission","files","frontmatter","it","add",{"skillNo":161,"name":162,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":46},"01M6C4620AT7K4999KR0YY86KH","prompts","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fcore\u002Ftools\u002Fbuiltins\u002Fprompts\u002Fskill.md",[],[162],{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":179,"publishedAt":46},"01M6C45Z8KES5ZQ0RA198EVMPA","write-vibe-tests","Write or refactor Mistral Vibe tests with proper decoupling. Use when adding behavior coverage, testing ports\u002Fadapters, replacing brittle mocks, creating fakes, adding characterization tests before refactors, or changing tests under tests\u002F for vibe\u002Fcore, vibe\u002Fapp_server, vibe\u002Facp, tools, config, sessions, skills, hooks, MCP, or setup.","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002F.vibe\u002Fskills\u002Fwrite-vibe-tests\u002FSKILL.md",[172,175,178],{"categoryNo":173,"categoryName":174,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":176,"categoryName":177,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[180,181,182,117,183,184,185,186,187,188,130,189,35,190,38,36,191,94,192,12,193,32,194,28,34],"write","write vibe tests","tests","coverage","ports","server","core","behavior","acp","testing","sessions","refactor","Tools","app","decoupling"]