plugins
/plugins - Extension Manager
Unified view and management of all external dependencies across the toolkit ecosystem.
Subcommands
/pluginsor/plugins list- Show all installed extensions/plugins add <name>- Add a new skill to the ecosystem/plugins sync- Update manifest from current installed state/plugins export- Generate reproducible install script/plugins status- Check versions against manifest
Universal Skill Lifecycle
Skills follow a single universal format (SKILL.md) across all agents. The toolkit provides a closed-loop system: skills enter from any tool, get canonicalized, and deploy everywhere.
SKILL ENTRY POINTS
==================
Claude Code Codex CLI Copilot CLI
─────────── ───────── ───────────
claude plugin install $skill-installer npx add-skill
npx add-skill npx add-skill gh copilot skill
manual copy manual copy manual copy
│ │ │
▼ ▼ ▼
{{HOME_TOOL_DIR}}/skills/ ~/.codex/skills/ ~/.copilot/skills/
│ │ │
└───────────┬───────────┘───────────────────────┘
│
▼
/sync-learnings ◄── syncs new skills TO toolkit
│
▼
┌───────────────────────┐
│ packages/skills/ │ ◄── CANONICAL SOURCE (git-tracked)
│ (toolkit repo) │
└───────────┬───────────┘
│
▼
┌───────────────────────┐
│ external-dependencies │ ◄── /plugins add or /plugins sync
│ .yaml │ updates the manifest
└───────────┬───────────┘
│
▼
bootstrap.js ◄── generates tool-specific output
│
┌──────────┼──────────┐
▼ ▼ ▼
{{HOME_TOOL_DIR}}/ ~/.codex/ ~/.copilot/
skills/ skills/ skills/ ◄── ALL tools get ALL skills
│ │ │
▼ ▼ ▼
setup-external.sh ◄── git clone for agent-skills (external repos)
SKILL TYPES
===========
┌─────────────────┬────────────────────┬──────────────────────┐
│ Bundled │ Agent-Skill │ External (plugins) │
│ (we own it) │ (3rd-party git repo)│ (tool-native) │
├─────────────────┼────────────────────┼──────────────────────┤
│ Lives in │ SKILL.md stub in │ Tracked in manifest │
│ packages/skills/ │ packages/skills/ │ only (not in repo) │
│ │ + external-source │ │
│ Deployed by │ Deployed by │ Installed by │
│ bootstrap copy │ setup-external.sh │ tool-native command │
│ │ (git clone) │ │
└─────────────────┴────────────────────┴──────────────────────┘
CLOSED LOOP
===========
1. Install skill via ANY tool ──► lands in ~/.{tool}/skills/
2. /sync-learnings ──────────────► copies to packages/skills/ (canonical)
3. /plugins sync ────────────────► updates external-dependencies.yaml
4. bootstrap.js ─────────────────► deploys to ALL tools universally
5. Repeat from any tool
Skill Type Decision
When adding a new skill, determine its type:
| Question | If YES | If NO |
|---|---|---|
| Do we own/maintain the source? | Bundled | next question |
| Is it a public git repo with SKILL.md? | Agent-skill | next question |
| Installed via tool-native command? | External (manifest-only) | copy as bundled |
Data Sources
| Source | Location | Format |
|---|---|---|
| Claude Plugins | {{HOME_TOOL_DIR}}/plugins/installed_plugins.json |
JSON |
| Marketplaces | {{HOME_TOOL_DIR}}/plugins/known_marketplaces.json |
JSON |
| Bundled Skills | packages/skills/*/SKILL.md |
Markdown |
| Unified Manifest | toolkit/external-dependencies.yaml |
YAML |
/plugins list
Display all installed extensions grouped by category.
Output Format
# Installed Extensions
## Bundled Skills (5)
| Name | Path | Purpose |
|------|------|---------|
| webapp-testing | packages/skills/webapp-testing | Playwright-based testing |
| crypto-research | packages/skills/crypto-research | Cryptocurrency analysis |
| frontend-design | packages/skills/frontend-design | UI/UX generation |
| tmux-monitor | packages/skills/tmux-monitor | Session monitoring |
| retro-pdf | packages/skills/retro-pdf | Markdown to PDF |
## Claude Plugins (4)
| Name | Marketplace | Version | Installed |
|------|-------------|---------|-----------|
| beads | steveyegge/beads | 0.49.0 | 2026-01-24 |
| debug-bridge | stevengonsalvez/agent-bridge | 0.2.0 | 2026-01-11 |
| ralph-loop | anthropics/claude-plugins-official | e30768372b41 | 2026-01-11 |
| code-review | anthropics/claude-plugins-official | e30768372b41 | 2026-01-15 |
## MCP Servers (1)
| Name | Purpose |
|------|---------|
| context7 | Documentation lookup |
## npx Skills (0)
None installed
## Codex Skills (0)
None installed
Implementation
# Read Claude plugins
jq -r '.plugins | to_entries[] | "\(.key): \(.value[0].version)"' \
$HOME/{{TOOL_DIR}}/plugins/installed_plugins.json
# Read marketplaces
jq -r 'to_entries[] | "\(.key): \(.value.source.repo)"' \
$HOME/{{TOOL_DIR}}/plugins/known_marketplaces.json
# Read bundled skills
for skill in packages/skills/*/SKILL.md; do
dirname "$skill" | xargs basename
done
/plugins add
Add a new skill to the toolkit ecosystem. Handles all three skill types.
Usage
/plugins add <name> # interactive — detects source
/plugins add <name> --from {{HOME_TOOL_DIR}}/skills/<name> # from installed skill
/plugins add <name> --from https://github.com/org/repo # from git repo
Workflow
Step 1: Detect Source and Type
Source provided?
├─ Local path (~/.*skills/<name>/) ──► check for .git/
│ ├─ Has .git/ ──► Agent-skill (external repo)
│ └─ No .git/ ──► Bundled (copy to packages/)
│
├─ Git URL ──► Agent-skill
│
└─ No source ──► Scan all tool skill dirs for <name>:
{{HOME_TOOL_DIR}}/skills/<name>/
~/.codex/skills/<name>/
~/.copilot/skills/<name>/
If found: use that path and re-enter detection
If not found: error — provide --from
Step 2: Validate SKILL.md
# Must have valid SKILL.md with frontmatter
SKILL_FILE="<source>/SKILL.md"
# Check: name and description fields present
# Check: no syntax errors in YAML frontmatter
# Extract: name, description, features for manifest entry
Step 3: Execute by Type
Bundled skill (we own it — copy into repo):
- Copy skill directory to
packages/skills/<name>/ - Add entry to
external-dependencies.yamlunderbundled-skills - Re-run
node toolkit/bootstrap.jsfor each tool - Verify skill appears in
~/.{tool}/skills/<name>/
Agent-skill (external git repo):
- Create stub
packages/skills/<name>/SKILL.mdwithexternal-source:frontmatter - Add entry to
external-dependencies.yamlunderagent-skillswith repo URL - Re-run
node toolkit/bootstrap.jsfor each tool - Run
setup-external.shfor each tool (or just git clone directly) - Verify skill cloned into
~/.{tool}/skills/<name>/
External plugin/tool-native (already installed via tool command):
- Add entry to appropriate manifest section (
claude-plugins,codex-skills,copilot-skills) - Record version and install command
- No bootstrap needed — already installed by tool
Step 4: Report
# Skill Added: <name>
| Field | Value |
|-------|-------|
| Type | Bundled / Agent-skill / External |
| Source | <path or URL> |
| Manifest | external-dependencies.yaml updated |
| Deployed to | claude, codex, copilot |
Run `/plugins status` to verify.
Examples
# Skill discovered in $HOME/{{TOOL_DIR}}/skills/ during /plugins list drift check
/plugins add remotion-best-practices
# → Detects in $HOME/{{TOOL_DIR}}/skills/, no .git → copies to packages/skills/ as bundled
# Skill from a public git repo
/plugins add ui-ux-pro-max --from https://github.com/nextlevelbuilder/ui-ux-pro-max-skill
# → Creates stub SKILL.md with external-source, adds to agent-skills manifest
# Skill just installed via claude plugin install
/plugins add code-review --type external
# → Reads installed_plugins.json for version, adds to claude-plugins manifest
/plugins sync
Update toolkit/external-dependencies.yaml from current installed state.
Workflow
-
Read Current State
- Parse
{{HOME_TOOL_DIR}}/plugins/installed_plugins.json - Parse
{{HOME_TOOL_DIR}}/plugins/known_marketplaces.json - Scan
packages/skills/*/SKILL.md
- Parse
-
Compare with Manifest
- Identify new installations
- Identify removed plugins
- Identify version changes
-
Generate Diff Report
# Plugin Sync Report ## Changes Detected | Plugin | Status | Details | |--------|--------|---------| | new-plugin | NEW | Installed from marketplace X | | old-plugin | REMOVED | No longer in installed_plugins.json | | beads | UPDATED | 0.48.0 -> 0.49.0 | Update manifest? [Y/n] -
Update Manifest
- Merge changes into
external-dependencies.yaml - Preserve comments and formatting
- Update
updatedtimestamp
- Merge changes into
Implementation
#!/bin/bash
# Sync Claude plugins to manifest
MANIFEST="toolkit/external-dependencies.yaml"
PLUGINS_JSON="$HOME/{{TOOL_DIR}}/plugins/installed_plugins.json"
MARKETPLACES_JSON="$HOME/{{TOOL_DIR}}/plugins/known_marketplaces.json"
# Extract plugin data
jq -r '.plugins | to_entries[] | {
name: (.key | split("@")[0]),
marketplace_id: (.key | split("@")[1]),
version: .value[0].version,
installed_at: .value[0].installedAt
}' "$PLUGINS_JSON"
# Match with marketplace repos
jq -r 'to_entries[] | {
id: .key,
repo: .value.source.repo
}' "$MARKETPLACES_JSON"
/plugins export
Generate a shell script to reproduce the current setup on a new machine.
Output
#!/bin/bash
# Generated by /plugins export
# Reproduces toolkit extension setup
# Generated: 2026-01-24
set -e
echo "Installing Claude Code plugins..."
# Add marketplaces
claude plugin marketplace add steveyegge/beads
claude plugin marketplace add stevengonsalvez/agent-bridge
claude plugin marketplace add anthropics/claude-plugins-official
# Install plugins
claude plugin install beads
claude plugin install debug-bridge
claude plugin install ralph-loop
claude plugin install code-review
echo "Plugin installation complete!"
echo ""
echo "Note: MCP servers must be configured manually in claude_desktop_config.json"
echo "Note: Bundled skills are included in toolkit/packages/skills/"
Usage
# Generate and save script
/plugins export > setup-plugins.sh
# Make executable and run
chmod +x setup-plugins.sh
./setup-plugins.sh
/plugins status
Check if installed versions match manifest and highlight available updates.
Output Format
# Extension Status Report
## Version Check
| Plugin | Manifest | Installed | Status |
|--------|----------|-----------|--------|
| beads | 0.49.0 | 0.49.0 | OK |
| debug-bridge | 0.2.0 | 0.2.0 | OK |
| ralph-loop | e30768372b41 | e30768372b41 | OK |
| code-review | e30768372b41 | e30768372b41 | OK |
## Not in Manifest
- (none)
## In Manifest but Not Installed
- (none)
All extensions are in sync.
Implementation
# Compare manifest versions with installed
yq '.claude-plugins[] | "\(.name)=\(.version)"' toolkit/external-dependencies.yaml > /tmp/manifest_versions
jq -r '.plugins | to_entries[] | "\(.key | split("@")[0])=\(.value[0].version)"' \
$HOME/{{TOOL_DIR}}/plugins/installed_plugins.json > /tmp/installed_versions
diff /tmp/manifest_versions /tmp/installed_versions
Integration with /sync-learnings
The /sync-learnings command can optionally include plugin manifest sync:
## During /sync-learnings
If plugin changes detected:
1. Show plugin diff alongside file diff
2. Ask: "Also sync plugin manifest? [Y/n]"
3. If yes, run `/plugins sync` logic
File Locations
| File | Purpose |
|---|---|
toolkit/external-dependencies.yaml |
Unified manifest (versioned) |
{{HOME_TOOL_DIR}}/plugins/installed_plugins.json |
Claude's plugin state |
{{HOME_TOOL_DIR}}/plugins/known_marketplaces.json |
Registered marketplaces |
packages/skills/*/SKILL.md |
Bundled skill definitions |
Best Practices
- Run
/plugins syncafter installing new plugins - Keep manifest up to date - Commit manifest changes - Track extension history in git
- Use
/plugins exportfor onboarding - New team members can reproduce setup - Check
/plugins statusperiodically - Ensure consistency
Example Session
User: /plugins
Claude: # Installed Extensions
## Bundled Skills (5)
| Name | Purpose |
|------|---------|
| webapp-testing | Playwright-based testing |
| crypto-research | Cryptocurrency analysis |
| frontend-design | UI/UX generation |
| tmux-monitor | Session monitoring |
| retro-pdf | Markdown to PDF |
## Claude Plugins (4)
| Name | Version | Marketplace |
|------|---------|-------------|
| beads | 0.49.0 | steveyegge/beads |
| debug-bridge | 0.2.0 | stevengonsalvez/agent-bridge |
| ralph-loop | e30768372b41 | anthropics/claude-plugins-official |
| code-review | e30768372b41 | anthropics/claude-plugins-official |
## MCP Servers (1)
| Name | Purpose |
|------|---------|
| context7 | Documentation lookup |
Total: 10 extensions tracked
Manifest: toolkit/external-dependencies.yaml (last updated: 2026-01-24)
More from stevengonsalvez/agents-in-a-box
frontend-design
Frontend design skill for UI/UX implementation - generates distinctive, production-grade interfaces
31commit
Create well-formatted git commits for changes made during the session
14reflect
|
2plan-tdd
Create a test-driven development plan for the project
1oracle
Best practices for using the oracle CLI (prompt + file bundling, engines, sessions, and file attachment patterns).
1gh-issue
Analyze and fix the specified GitHub issue
1