--- name: plugin-creator description: Scaffold a complete cave plugin bundle — generates .cave-plugin/plugin.json manifest and the standard directory structure (commands/, skills/, agents/, themes/, hooks/). Use when a user wants to create, publish, or package a cave plugin for the marketplace. Triggered by "create a plugin", "scaffold a plugin", "/plugin create", or "new cave plugin". allowed-tools: - read - write - edit - bash effort: low --- # Plugin Creator You scaffold new cave plugins. A cave plugin is a directory published to GitHub (or any zip URL) with a `.cave-plugin/plugin.json` manifest and optional sub-directories for commands, skills, agents, themes, and hooks. ## Manifest Schema ```json { "name": "my-plugin", "version": "0.1.0", "description": "A short, clear description of what this plugin does.", "author": "your-github-handle", "license": "MIT", "homepage": "https://github.com/your-handle/my-plugin", "caveVersion": ">=0.65.0", "tags": ["productivity", "git"], "capabilities": { "commands": true, "skills": true, "agents": false, "themes": false, "mcp": false, "hooks": [] } } ``` ### Field Rules - `name`: kebab-case, a-z0-9 and hyphens only. Must be unique in the marketplace. - `version`: semver ("major.minor.patch"). - `description`: one sentence, plain text. - `tags`: free-form strings for `caveman plugin search` matching. - `capabilities.commands`: set `true` if `commands/` directory is present. - `capabilities.skills`: set `true` if `skills/` directory is present. - `capabilities.agents`: set `true` if `agents/` directory is present. - `capabilities.themes`: set `true` if `themes/` directory is present. - `capabilities.mcp`: set `true` if `.mcp.json` is present. - `capabilities.hooks`: array of hook entries (see below). ### Hook Entry Shape ```json { "event": "PostToolUse", "command": "hooks/post-tool-use.sh", "matcher": "Bash" } ``` ## Directory Structure ``` my-plugin/ ├── .cave-plugin/ │ └── plugin.json ← required ├── commands/ │ └── my-command.md ← markdown slash commands ├── skills/ │ └── my-skill/ │ └── SKILL.md ← skill with frontmatter ├── agents/ │ └── my-agent.md ← agent definition markdown ├── themes/ │ └── my-theme.json ← theme JSON (cave theme format) ├── hooks/ │ └── post-tool-use.sh ← hook scripts (chmod +x) ├── .mcp.json ← optional MCP server definitions └── README.md ``` ## Scaffolding Steps When the user asks to create a plugin, follow these steps: 1. **Ask for plugin details** (name, description, which capabilities are needed). 2. **Create `.cave-plugin/plugin.json`** using the schema above. 3. **Create only the sub-directories that are needed** (do not create empty dirs). 4. **Add placeholder files** for each enabled capability: - `commands/example.md` with frontmatter `---\ndescription: Example command.\n---\n\n# Example\n\nDescribe what this command does.\n` - `skills/example/SKILL.md` with the standard skill frontmatter. - `agents/example.md` with agent frontmatter. - `hooks/example.sh` with `#!/bin/bash\n# Hook: \n` and `chmod +x`. 5. **Create a `README.md`** with install instructions and a short description. 6. **Validate the manifest** by echoing it back and checking all required fields. ## Publishing After scaffolding, instruct the user to: 1. Push the plugin to a public GitHub repository. 2. Submit it to a marketplace by adding an entry to a `marketplace.json`: ```json { "plugins": [ { "ref": "your-handle/my-plugin", "name": "my-plugin", "description": "...", "tags": ["..."], "version": "0.1.0" } ] } ``` 3. Users install it with: `caveman plugin install your-handle/my-plugin` ## Example Interaction User: "Create a plugin that adds a /summarize command and a post-save hook." You: 1. Create `.cave-plugin/plugin.json` with `"commands": true, "hooks": [{ "event": "PostToolUse", "command": "hooks/post-save.sh", "matcher": "Write" }]`. 2. Create `commands/summarize.md` with a summarize slash command description. 3. Create `hooks/post-save.sh` with a stub hook script. 4. Create `README.md`. 5. Report the file tree created.