plugins

Manage and track installed plugins, skills, and extensions across all sources

Best use case

plugins is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Manage and track installed plugins, skills, and extensions across all sources

Teams using plugins should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/plugins/SKILL.md --create-dirs "https://raw.githubusercontent.com/stevengonsalvez/agents-in-a-box/main/toolkit/packages/skills/plugins/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/plugins/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How plugins Compares

Feature / AgentpluginsStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Manage and track installed plugins, skills, and extensions across all sources

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# /plugins - Extension Manager

Unified view and management of all external dependencies across the toolkit ecosystem.

## Subcommands

- `/plugins` or `/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

```markdown
# 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

```bash
# Read Claude plugins
jq -r '.plugins | to_entries[] | "\(.key): \(.value[0].version)"' \
  /.claude/plugins/installed_plugins.json

# Read marketplaces
jq -r 'to_entries[] | "\(.key): \(.value.source.repo)"' \
  /.claude/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

```bash
# 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):

1. Copy skill directory to `packages/skills/<name>/`
2. Add entry to `external-dependencies.yaml` under `bundled-skills`
3. Re-run `node toolkit/bootstrap.js` for each tool
4. Verify skill appears in `~/.{tool}/skills/<name>/`

**Agent-skill** (external git repo):

1. Create stub `packages/skills/<name>/SKILL.md` with `external-source:` frontmatter
2. Add entry to `external-dependencies.yaml` under `agent-skills` with repo URL
3. Re-run `node toolkit/bootstrap.js` for each tool
4. Run `setup-external.sh` for each tool (or just git clone directly)
5. Verify skill cloned into `~/.{tool}/skills/<name>/`

**External plugin/tool-native** (already installed via tool command):

1. Add entry to appropriate manifest section (`claude-plugins`, `codex-skills`, `copilot-skills`)
2. Record version and install command
3. No bootstrap needed — already installed by tool

#### Step 4: Report

```markdown
# 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

```bash
# Skill discovered in /.claude/skills/ during /plugins list drift check
/plugins add remotion-best-practices
# → Detects in /.claude/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

1. **Read Current State**
   - Parse `{{HOME_TOOL_DIR}}/plugins/installed_plugins.json`
   - Parse `{{HOME_TOOL_DIR}}/plugins/known_marketplaces.json`
   - Scan `packages/skills/*/SKILL.md`

2. **Compare with Manifest**
   - Identify new installations
   - Identify removed plugins
   - Identify version changes

3. **Generate Diff Report**
   ```markdown
   # 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]
   ```

4. **Update Manifest**
   - Merge changes into `external-dependencies.yaml`
   - Preserve comments and formatting
   - Update `updated` timestamp

### Implementation

```bash
#!/bin/bash
# Sync Claude plugins to manifest

MANIFEST="toolkit/external-dependencies.yaml"
PLUGINS_JSON="/.claude/plugins/installed_plugins.json"
MARKETPLACES_JSON="/.claude/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

```bash
#!/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

```bash
# 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

```markdown
# 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

```bash
# 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)"' \
  /.claude/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:

```markdown
## 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

1. **Run `/plugins sync` after installing new plugins** - Keep manifest up to date
2. **Commit manifest changes** - Track extension history in git
3. **Use `/plugins export` for onboarding** - New team members can reproduce setup
4. **Check `/plugins status` periodically** - 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)
```

Related Skills

workflow

8
from stevengonsalvez/agents-in-a-box

Guide through structured delivery workflow with plan, implement, validate phases

webapp-testing

8
from stevengonsalvez/agents-in-a-box

Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.

validate

8
from stevengonsalvez/agents-in-a-box

Verify implementation against specifications

ui-ux-pro-max

8
from stevengonsalvez/agents-in-a-box

UI/UX design intelligence. 67 styles, 96 palettes, 57 font pairings, 25 charts, 13 stacks (React, Next.js, Vue, Svelte, Astro, Nuxt, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui, Jetpack Compose). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient.

tui-style-guide

8
from stevengonsalvez/agents-in-a-box

TUI style guide for consistent terminal interface design

token-usage

8
from stevengonsalvez/agents-in-a-box

Show Claude Code token usage across sessions — daily, weekly, per-project, and per-session breakdowns. Parses {{HOME_TOOL_DIR}}/projects/**/*.jsonl for consumption data. Use when the user asks about token usage, costs, how many tokens were used, session statistics, or wants a usage report.

tmux-status

8
from stevengonsalvez/agents-in-a-box

Show status of all tmux sessions including dev environments, spawned agents, and running processes

tmux-monitor

8
from stevengonsalvez/agents-in-a-box

Monitor and report status of all tmux sessions including dev environments, spawned agents, and running processes. Uses tmuxwatch for enhanced visibility.

tmux-message

8
from stevengonsalvez/agents-in-a-box

Reliable peer-to-peer message delivery to other Claude Code instances via tmux send-keys. Use as a fallback when claude-peers MCP send_message fails to surface in the receiver's inbox (delivered server-side but receiver never picks it up — observed behaviour). Also use when sending a directive to a known Claude Code TUI session by tmux session name or fuzzy hint, or when injecting a multi-line directive into a peer's prompt and submitting it. Trigger phrases — "claude-peers fallback", "tmux send-keys", "send to peer via tmux", "inject directive", "deliver to nanoclaw/hermes peer", "peer message". Tmux-only — won't reach peers running outside tmux.

test-driven-development

8
from stevengonsalvez/agents-in-a-box

Use when implementing any feature or bugfix, before writing implementation code. Enforces RED-GREEN-REFACTOR cycle with test-first approach.

test-ainb

8
from stevengonsalvez/agents-in-a-box

Run tests for the ainb (agents-in-a-box) Rust workspace via a 5-layer strategy — unit, insta snapshot, mock-plugin compositing, real-plugin spawn, vhs recording. Wraps cargo + insta + vhs into one CLI. Use when Stevie says "/test-ainb", "test ainb", "run ainb tests", "snapshot <component>", "regenerate vhs tapes", or any phrasing about validating ainb test layers. The skill autodetects which ainb-tui worktree the cwd sits in and dispatches to scripts/run.sh.

sync-learnings

8
from stevengonsalvez/agents-in-a-box

Sync user-level agent config changes back to toolkit repository (works for Claude, Codex, Copilot)