toolkit/packages/skills/plugins/SKILL.md
Manage and track installed plugins, skills, and extensions across all sources
npx skillsauth add stevengonsalvez/agents-in-a-box pluginsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Unified view and management of all external dependencies across the toolkit ecosystem.
/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 manifestSkills 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
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 |
| 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 |
Display all installed extensions grouped by category.
# 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
# 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
Add a new skill to the toolkit ecosystem. Handles all three skill types.
/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
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
# 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
Bundled skill (we own it — copy into repo):
packages/skills/<name>/external-dependencies.yaml under bundled-skillsnode toolkit/bootstrap.js for each tool~/.{tool}/skills/<name>/Agent-skill (external git repo):
packages/skills/<name>/SKILL.md with external-source: frontmatterexternal-dependencies.yaml under agent-skills with repo URLnode toolkit/bootstrap.js for each toolsetup-external.sh for each tool (or just git clone directly)~/.{tool}/skills/<name>/External plugin/tool-native (already installed via tool command):
claude-plugins, codex-skills, copilot-skills)# 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.
# 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
Update toolkit/external-dependencies.yaml from current installed state.
Read Current State
{{HOME_TOOL_DIR}}/plugins/installed_plugins.json{{HOME_TOOL_DIR}}/plugins/known_marketplaces.jsonpackages/skills/*/SKILL.mdCompare with Manifest
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
external-dependencies.yamlupdated timestamp#!/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"
Generate a shell script to reproduce the current setup on a new machine.
#!/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/"
# Generate and save script
/plugins export > setup-plugins.sh
# Make executable and run
chmod +x setup-plugins.sh
./setup-plugins.sh
Check if installed versions match manifest and highlight available updates.
# 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.
# 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
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 | 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 |
/plugins sync after installing new plugins - Keep manifest up to date/plugins export for onboarding - New team members can reproduce setup/plugins status periodically - Ensure consistencyUser: /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)
documentation
Report reflect drain spend over a time window — tokens split by cached (cache_read), uncached writes (cache_creation), and io (input+output), with a $ estimate, grouped by day / outcome / model / transcript. Reads the drainer's cost log and surfaces outlier runs and cache-reuse health (the 41.5M-token failure mode = low cache reuse + high cache writes). Use to answer "what is reflection costing me" for the last day / week.
development
Show fleet status — every claude session running on the host, merged across ainb + claude-peers broker + background jobs. Use when you need to enumerate sessions before composing an action, see which sessions have a peer registered (broker-routable) vs tmux-only, check the `summary` of each session, or pipe the list into jq for filtering. Default output: text table. Pass --format json for LLM consumption.
testing
Ordered multi-step prompts to fleet targets, ack-gated between steps via JSONL assistant-turn-end detection. Use for cycles like disconnect→reconnect→verify, or any flow where step N+1 requires step N to have completed first. The skill BLOCKS until each target's transcript shows the next assistant turn finishing OR per-step timeout fires (default 300s).
development
Center control panel — enumerate every claude session that is blocked waiting on something: a user answer (AskUserQuestion fired), an API error retry, an idle assistant turn-end with no follow-up, or an explicit WAITING: marker. Returns rich JSON with signal kind + context per session. Use this when you've stepped away from the fleet and want one place to see everything that wants your attention and answer it.