--- title: "Claude Plugins Personal Marketplace" description: "Reference for the cal/claude-plugins Gitea repo — personal Claude Code plugin marketplace with 20 plugins (10 agents, 10 skills), including installation, adding new plugins, and maintenance." type: reference domain: development tags: [claude-code, plugins, gitea, marketplace] --- # Claude Plugins Personal Marketplace **Repo:** `cal/claude-plugins` on Gitea ([https://git.manticorum.com/cal/claude-plugins](https://git.manticorum.com/cal/claude-plugins)) **Local clone:** `/mnt/NV2/Development/claude-plugins/` **License:** AGPL-3.0 ## What It Is A self-hosted Claude Code plugin marketplace containing 20 plugins (10 agents, 10 skills) extracted from local `~/.claude/` definitions. Registered via `claude plugin marketplace add https://git.manticorum.com/cal/claude-plugins.git` (stored in `~/.claude/settings.json` under `extraKnownMarketplaces`). ## Plugin Inventory ### Agents (10) | Name | Description | |------|-------------| | architect | PRD creation, system design, technical specs | | claude-researcher | Web research with multi-query decomposition | | designer | UX/UI design review, visual design, accessibility | | engineer | Code implementation, debugging, optimization, testing | | issue-worker | Autonomous Gitea issue fixer — creates PRs | | pentester | Penetration testing and vulnerability assessments | | pr-reviewer | Automated Gitea PR reviewer | | swarm-coder | Implementation agent for orchestrated swarms | | swarm-reviewer | Code reviewer for orchestrated swarms | | swarm-validator | Spec validator for orchestrated swarms | ### Skills (10) | Name | Description | |------|-------------| | backlog | Surface next Gitea issue or TODO to work on | | create-scheduled-task | Manage headless Claude scheduled tasks on systemd timers | | json-pretty | JSON prettifier CLI tool | | optimise-claude | Guide for writing effective CLAUDE.md files | | playwright-cli | Browser automation for testing and screenshots | | project-plan | Generate PROJECT_PLAN.json for task tracking | | resume-tailoring | Tailored resume generation with company research | | save-doc | Save documentation to KB with proper frontmatter | | youtube-transcriber | Transcribe YouTube videos via OpenAI GPT-4o-transcribe | | z-image | Local GPU image generation with Z-Image Turbo | ## Installation ```bash # Marketplace is already registered. To install a plugin: claude plugin install @cal-claude-plugins --scope user # Enable/disable: claude plugin enable @cal-claude-plugins claude plugin disable @cal-claude-plugins # Update marketplace cache (pulls latest from Gitea): claude plugin marketplace update cal-claude-plugins ``` ## Adding a New Plugin ### Directory Structure Each plugin lives under `plugins//` with this layout: ``` plugins// .claude-plugin/ plugin.json # name, description, version commands/ # user-facing slash commands (preferred) .md # shows as /plugin-name:verb in autocomplete skills// # alternative to commands (legacy) SKILL.md # skill definition with frontmatter scripts/ # helper scripts referenced by commands/skills tool.py agents/ # for agent plugins .md # agent definition ``` ### Commands vs Skills **Commands** (`.md` files in `commands/`) are preferred for user-facing slash commands. They appear in autocomplete as `/plugin-name:command-name`, giving a clean grouped prefix (e.g., `/json-pretty:format`). **Skills** (`SKILL.md` in `skills//`) are the older pattern. They work but don't group as cleanly in autocomplete. Commands reference scripts via `${CLAUDE_PLUGIN_ROOT}/scripts/` — no symlinks needed. ### plugin.json ```json { "name": "my-plugin", "description": "One-line description of what it does.", "version": "1.0.0" } ``` ### Command Frontmatter ```yaml --- description: "What this command does" allowed-tools: Bash --- ``` ### SKILL.md Frontmatter (legacy) ```yaml --- allowed-tools: Read,Write,Edit,Glob,Grep,Bash description: What this skill does user-invocable: true --- ``` ### Register in marketplace.json Add an entry to `.claude-plugin/marketplace.json` in the `plugins` array: ```json { "name": "my-plugin", "source": "./plugins/my-plugin", "description": "One-line description." } ``` ### Commit and Push ```bash cd /mnt/NV2/Development/claude-plugins git add plugins/my-plugin .claude-plugin/marketplace.json git commit -m "feat: add my-plugin skill" git push origin main ``` Then update the cache: `claude plugin marketplace update cal-claude-plugins` ## Important Notes - **Commands use `${CLAUDE_PLUGIN_ROOT}`** — reference scripts via `${CLAUDE_PLUGIN_ROOT}/scripts/` instead of absolute paths or symlinks - **SSH remote** — uses `git@git.manticorum.com:cal/claude-plugins.git` via SSH config alias (`~/.ssh/config` maps `git.manticorum.com` → `10.10.0.225` as user `git`) - **No secrets** — repo is public; plugins are just prompt definitions, no credentials - **Plugins requiring MCP servers** — `backlog`, `issue-worker`, and `pr-reviewer` require `gitea-mcp`; they install fine without it but those tool calls won't execute - **sync-kb does NOT apply here** — this is a standalone repo, not part of claude-home. Changes require manual commit/push