Reference: packs and plugins
Reference: packs and plugins
Section titled “Reference: packs and plugins”This page is the exhaustive reference for the harness’s extension surface: the plugin shape, the pack taxonomy, the manifest fields, the control plane that toggles them, and the bundled inventory. For the rationale behind the model see Explanation: pack structure and ADR 0005.
Model: one plugin per skill
Section titled “Model: one plugin per skill”Every optional capability ships as a Claude Code plugin, and each plugin contains exactly one skill. Plugins are grouped into pack families by directory, but the plugin boundary is the individual skill — a clone enables exactly the skills it wants without adopting a whole family.
packs/├── reports/ # family: deliverable genres (18 plugins)│ ├── exec-summary/ # a plugin (one skill)│ ├── academic/│ ├── briefing/│ └── … # 15 more — see the Bundled inventory below├── market-research/ # family: methodologies (5 plugins)│ ├── competitive-analysis/│ ├── customer-research/│ ├── financial-analysis/│ ├── market-sizing/│ └── regulatory-review/├── channels/ # family: render adapters (9 plugins)│ ├── book/│ ├── diataxis/│ ├── pdf/│ └── … # 6 more — see the Bundled inventory below├── trend-modeling/ # family: scenario methodology (1 plugin)│ └── trend-modeling/└── ontologies/ # family: MIF entity/relationship extensions (12 plugins) ├── scientific/ └── … # 11 more — see the Bundled inventory belowThe harness bundles 45 pack plugins across five families: 9 channels, 5 market-research methodologies, 12 ontologies, 18 report genres, and 1 trend-modeling methodology. The Packs reference and the per-family pages document every one — its use, constraints, and goals.
Each packs/<family>/<plugin>/ is self-contained: a .claude-plugin/plugin.json
(validated against schemas/pack.schema.json), a flat skills/<skill>/SKILL.md,
and that skill’s evals/.
Pack taxonomy
Section titled “Pack taxonomy”The kind field classifies what a pack contributes to the core. It is an enum
in schemas/pack.schema.json.
kind | Family directory | Contributes |
|---|---|---|
methodology | market-research/, trend-modeling/ | Research dimensions and analyst skills |
genre | reports/ | Deliverable templates for the report channel |
channel | channels/ | Render adapters (blog, book, PDF, NotebookLM, GitHub) |
ontology | ontologies/ | MIF entity, relationship, and trait extensions |
Manifest fields (schemas/pack.schema.json)
Section titled “Manifest fields (schemas/pack.schema.json)”A pack’s plugin.json is a Claude Code plugin manifest plus the harness-local
classification fields below. additionalProperties is true, so standard
plugin keys are preserved.
| Field | Required | Meaning |
|---|---|---|
name | yes | Pack name and skill namespace (^[a-z][a-z0-9-]*$); skills resolve as pack:skill. |
version | yes | Semantic version (MAJOR.MINOR.PATCH). |
kind | yes | One of methodology, genre, channel, ontology. |
description | no | Short human description. |
mif | no | MIF output-conformance declaration (see below). |
provides | no | What the pack adds, namespaced: skills, agents, commands, dimensions, genres, channels, ontologies. |
license, author, keywords | no | Standard metadata. |
MIF conformance and exemption
Section titled “MIF conformance and exemption”A channel pack whose target format is orthogonal to MIF (PDF, audio, an external
service body) declares mif.exempt: true with a required mif.reason, so the
MIF Level-3 output-conformance gate logs its outputs instead of requiring an L3
projection. Genre packs are L3 by default and must not declare exemption —
exemption is for orthogonal formats, never for genres (see
ADR 0007).
Control plane
Section titled “Control plane”harness.config.json packs[] is the single control plane. Each entry names a
plugin with an enabled flag and a source (bundled, or an external
git/marketplace plugin).
{ "name": "engineering", "enabled": true, "source": "bundled" }| Operation | Command |
|---|---|
| Flip one plugin | scripts/pack-toggle.sh <plugin> on (or off) |
| Materialize the enabled set | scripts/sync-packs.sh |
sync-packs.sh resolves each enabled plugin’s directory from the marketplace
source and writes the result into two places:
- Claude Code’s native
enabledPluginsin.claude/settings.local.json(the mechanism the runtime reads —<plugin>@research-harness: true). This is instance-local materialized state: it derives from this repo’sharness.config.jsonpacks[], so it is gitignored and never lives in the template-managed, byte-identical.claude/settings.json. Claude Code deep-mergesenabledPluginsacrosssettings.jsonandsettings.local.json, so the runtime sees these enablements alongside the shared hooks. - A sidecar
.claude/enabled-packs.jsonrecording each enabled plugin’s source and resolved skills, for tooling and the conformance gate (also gitignored).
Disabled plugins appear in neither, so their skills are not active. By default
the five reports genres are enabled; every other plugin is disabled and opt-in.
Template-managed vs instance-local config
Section titled “Template-managed vs instance-local config”.claude/settings.json is template-managed: it carries the harness hooks and
is kept byte-identical template-and-instance so copier update never conflicts on
it. Anything instance-local — the materialized enabledPlugins
(settings.local.json), the enabled-packs.json sidecar, and personal overrides
like skillOverrides — lives in .claude/settings.local.json (gitignored,
deep-merged by the runtime) and is rebuilt by sync-packs.sh. The Copier answers
file .copier-answers.yml is the one instance-specific file that is committed:
it records the template commit copier update uses as its merge base.
Marketplace registration
Section titled “Marketplace registration”.claude-plugin/marketplace.json is the marketplace manifest (name,
research-harness). Its plugins[] array maps each plugin name to its
source path under packs/ and a description. A plugin must be registered here
before harness.config.json can reference it by name.
Bundled inventory
Section titled “Bundled inventory”The harness bundles 45 pack plugins across five families. Each family has a
dedicated reference page documenting every component’s purpose, constraints, and
goals; the counts below match ls packs/<family>/ exactly.
Channels — render adapters (packs/channels/, 9 plugins):
book, diataxis, ectd, github-discuss, github-issues, jats,
notebooklm, pdf, xbrl.
Report genres — deliverable templates (packs/reports/,
18 plugins; academic, briefing, engineering, exec-summary, and
trend-analysis are enabled by default, the rest are opt-in):
academic, briefing, clinical-submission, competitive-quadrant,
compliance-audit, computing-paper, engineering, exec-summary,
humanities-chicago, humanities-mla, legal-memo, market-research-report,
nist-sp, regulatory-disclosure, security-pentest, sustainability-report,
systematic-review, trend-analysis.
Market-research methodologies — research dimensions
(packs/market-research/, 5 plugins):
competitive-analysis, customer-research, financial-analysis,
market-sizing, regulatory-review.
Trend-modeling — three-valued scenario methodology
(packs/trend-modeling/, 1 plugin): trend-modeling.
Ontologies — MIF entity/relationship/trait vocabularies
(packs/ontologies/, 12 plugins):
biology-research-lab, data-engineering, market-research, observability,
psycholinguistics, regenerative-agriculture, regenerative-agriculture-research,
regulatory-legal, scientific, software-engineering, software-security,
trend-analysis.
The blog channel is a first-class, always-on harness output (not a pack). The report channel is the canonical MIF Level-3 source of truth.
Adding a pack
Section titled “Adding a pack”- Create
packs/<family>/<plugin>/with.claude-plugin/plugin.json(valid againstschemas/pack.schema.json) andskills/<skill>/SKILL.md. - Register the plugin
name→sourcein.claude-plugin/marketplace.json. - Add
{ "name": "<plugin>", "enabled": false, "source": "bundled" }toharness.config.jsonpacks[]. - Enable it with
scripts/pack-toggle.sh <plugin> onand runscripts/sync-packs.sh.
Nothing in the core changes — the extension surface is uniform across all families.