Testing Claude Code Harnesses with Plugins (2026)
Goal: try different Claude Code “harnesses” — agent suites, command sets, skill packs — without committing to any one of them, and switch in seconds.
The clean way to do this is native plugins. No copying CLAUDE.md, no
swapping .claude/ folders, no profile scripts to maintain. Plugins install
once and toggle on and off in-session.
What changed (read this first)
If you’re working from older advice that says to copy a repo’s CLAUDE.md and
.claude/ into a “profile” and swap them with a script, that predates plugins:
- Claude Code has plugins (public beta since Oct 2025). A plugin bundles skills, agents, commands, hooks, and MCP servers.
wshobson/agentsis a plugin marketplace, not a CLAUDE.md drop-in. You add the marketplace and install plugins — nothing to copy.- Plugins toggle live. Enable when you need a capability, disable when you don’t, no restart.
Net effect: harness swapping is now a toggle, not a file swap.
The model
A marketplace is a registry. It exposes plugins. Each plugin bundles components that load into context only when the plugin is enabled.
flowchart LR M["Marketplace<br/>wshobson/agents"] --> P1["python-development"] M --> P2["backend-development"] M --> P3["comprehensive-review"] P1 --> C1["agents"] P1 --> C2["commands"] P1 --> C3["skills"] P2 --> C4["agents + skills"] P3 --> C5["review agents"]
Two facts that make this work as a harness switcher:
- Installing a plugin loads only that plugin’s components, not the whole marketplace — so context cost stays low.
enable/disableflips a plugin without uninstalling it, so a “harness” is just a set of enabled plugins you can flip as a group.
Step 1 — Add a marketplace
A marketplace source can be a repo slug, a git URL, or a local path.
/plugin marketplace add wshobson/agents
This registers the marketplace and makes its plugins available. It does not load anything into context yet.
/plugin marketplace list # see configured marketplaces
/plugin marketplace update <name> # refresh a marketplace catalog
Step 2 — Install only what you want to try
# interactive: browse and install
/plugin
# or install by name
/plugin install python-development
/plugin install backend-development
Choose a scope when installing:
| Scope | File | Use for |
|---|---|---|
| project | .claude/settings.json | team-shared, committed to git |
| local | .claude/settings.local.json | personal experiments, not committed |
| user | ~/.claude/settings.json | applies across all your projects |
For harness testing, local is the right scope — it keeps your experiments out of the repo and off your teammates.
# CLI form uses plugin@marketplace and an explicit scope
claude plugin install python-development@claude-code-workflows --scope project
claude plugin list # copy exact plugin@marketplace ids from here
Step 3 — Toggle to switch harnesses
This is the whole point. Turn capabilities on and off without reinstalling.
flowchart TD
A["Add marketplace (once)"] --> B["Install candidate plugins"]
B --> C{"Testing this harness?"}
C -->|yes| D["/plugin enable name@mkt"]
C -->|no| E["/plugin disable name@mkt"]
D --> F["/reload-plugins"]
E --> F
F --> G{"Keep it?"}
G -->|yes| H["Leave enabled / pin in settings.local.json"]
G -->|no| E
/plugin disable backend-development@claude-code-workflows
/plugin enable backend-development@claude-code-workflows
/reload-plugins # required after any install/enable/disable change
/reload-plugins applies changes without a restart. It has a one-time token cost
on the next request because newly loaded components announce themselves; the rest
of the conversation still reads from cache.
Step 4 — Pin a harness as a named set (optional)
enabledPlugins in a settings file is a map of plugin@marketplace to a
boolean. A plugin with no entry falls back to its defaultEnabled. That map is
your harness definition — version a few of them and switch by swapping the file.
.claude/settings.local.json for an “agents” harness:
{
"enabledPlugins": {
"python-development@claude-code-workflows": true,
"backend-development@claude-code-workflows": true,
"comprehensive-review@claude-code-workflows": false
}
}
Keep one JSON file per harness under a folder, then flip with a one-liner. There is no native “auto-activate a plugin set when I open this repo” yet, so this tiny helper fills that gap:
#!/usr/bin/env bash
# harness — activate a named enabledPlugins set for this project.
#
# WHY: Claude Code can't auto-switch a plugin set per project yet, so this pins
# one with a single command. The components come from already-installed plugins;
# this only flips which are on. It overwrites the whole local settings file, so
# keep project-specific local settings elsewhere if that matters to you.
set -euo pipefail
name="${1:?usage: ./harness <set-name>}"
src=".claude-harnesses/${name}.json"
dst=".claude/settings.local.json"
[[ -f "$src" ]] || { echo "no such set: $src" >&2; exit 1; }
mkdir -p .claude
[[ -f "$dst" ]] && cp "$dst" "$dst.bak" # one-level backup before overwrite
cp "$src" "$dst"
echo "activated: $name"
echo "next: run /reload-plugins, or relaunch claude"
Layout and use:
.claude-harnesses/
baseline.json
agents.json
minimal.json
chmod +x harness
./harness agents # then /reload-plugins
./harness baseline # revert
Keep it local-only:
.claude-harnesses/
.claude/settings.local.json
A full walkthrough with wshobson/agents
# 1. add the marketplace
/plugin marketplace add wshobson/agents
# 2. install candidates (each loads only its own components)
/plugin install python-development
/plugin install full-stack-orchestration
# 3. confirm exact ids
claude plugin list
# 4. run with the harness on, then turn it off when comparing
/plugin disable full-stack-orchestration@claude-code-workflows
/reload-plugins
python-development loads a few Python agents and a scaffolding command, and
makes its skills available — not the other ~80 plugins in the marketplace. That
granularity is why toggling is cheap.
If you need stronger isolation
Plugin toggling shares your account, history, and global config. When you need a
clean room instead — separate account, separate plugin set, separate memory — use
CLAUDE_CONFIG_DIR to point Claude Code at a fully separate config directory:
alias claude-baseline='CLAUDE_CONFIG_DIR=$HOME/.claude claude'
alias claude-agents='CLAUDE_CONFIG_DIR=$HOME/.claude-agents claude'
First launch of each alias starts fresh. Note it isolates the global
(~/.claude) config, not a project’s ./CLAUDE.md or ./.claude/. For most
harness testing this is more than you need — start with plugin toggling.
Where Skills Manager fits
xingkongliang/skills-manager
is a desktop app that keeps a central skill library and syncs skills into
15+ tools. It’s a reasonable cross-tool skill organizer, but it’s the wrong
layer for harness testing:
- Harnesses like
wshobson/agentsship agents + commands + hooks + MCP + skills as plugins. Skills Manager handles only the skills slice, so you’d still need plugins for the rest — two systems doing one job. - It syncs into the same skill directories Claude Code uses, so it can collide with plugin-installed skills.
Use native plugins for harnesses. Reach for Skills Manager only if you have a separate need to share hand-authored skills across several different tools.
Gotchas
- Marketplace name in ids.
plugin@marketplaceuses the registered marketplace name, not the repo slug.wshobson/agentsregisters asclaude-code-workflows. Copy exact ids fromclaude plugin list. - Reload after toggling.
/reload-pluginspicks up changes; expect a small one-time token cost on the next request. - MCP plugins cost more on reload. If a plugin provides MCP servers whose tools aren’t deferred, reloading invalidates the cache and re-reads the conversation. Toggle those deliberately.
defaultEnabledfallback. A plugin absent fromenabledPluginsuses its own default, which may be “on.” Set it explicitly in a pinned set if you care.- VS Code extension. It has not reliably honored
CLAUDE_CONFIG_DIR; verify before relying on it in the IDE.
References
- Plugins (discover/install): https://code.claude.com/docs/en/discover-plugins
- Plugins announcement: https://claude.com/blog/claude-code-plugins
- Settings (
enabledPlugins, scopes): https://code.claude.com/docs/en/settings wshobson/agentsmarketplace: https://github.com/wshobson/agents- Skills Manager: https://github.com/xingkongliang/skills-manager