Skip to content
berry.sh
Go back

Testing Claude Code Harnesses with Plugins

Edit page

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:

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:


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:

ScopeFileUse for
project.claude/settings.jsonteam-shared, committed to git
local.claude/settings.local.jsonpersonal experiments, not committed
user~/.claude/settings.jsonapplies 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:

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


References


Edit page
Share this post:

Next Post
A Simple Guide to Managing and Publishing Articles with Obsidian