From harness-loom
Use when `/harness-pair-dev` is invoked to author, revise, position, or remove a target project's producer-reviewer pair in `.harness/loom/`.
How this skill is triggered — by the user, by Claude, or both
Slash command
/harness-loom:harness-pair-dev --add <pair-slug> "<purpose>" [--from <source>] [--reviewer <slug> ...] [--before <pair-slug> | --after <pair-slug>] | --improve <pair-slug> "<purpose>" [--before <pair-slug> | --after <pair-slug>] | --remove <pair-slug>--add <pair-slug> "<purpose>" [--from <source>] [--reviewer <slug> ...] [--before <pair-slug> | --after <pair-slug>] | --improve <pair-slug> "<purpose>" [--before <pair-slug> | --after <pair-slug>] | --remove <pair-slug>The summary Claude sees in its skill listing — used to decide when to auto-load this skill
`harness-pair-dev` is the target's pair-authoring layer. `harness-init` installs the shared runtime foundation; this skill adds the project-specific producer-reviewer pairs that the orchestrator can actually dispatch.
examples/agents/harness-api-designer.mdexamples/agents/harness-api-reviewer.mdexamples/agents/harness-blog-editor.mdexamples/agents/harness-blog-writer.mdexamples/agents/harness-research-reviewer.mdexamples/agents/harness-research-synthesizer.mdexamples/agents/harness-test-reviewer.mdexamples/agents/harness-test-writer.mdreferences/authoring/agent-authoring.mdreferences/authoring/from-overlay.mdreferences/authoring/oversized-split.mdreferences/authoring/skill-authoring.mdscripts/pair-dev.tsscripts/register-pair.tstemplates/pair-skill.mdtemplates/producer-agent.mdtemplates/reviewer-agent.mdharness-pair-dev is the target's pair-authoring layer. harness-init installs the shared runtime foundation; this skill adds the project-specific producer-reviewer pairs that the orchestrator can actually dispatch.
Write only in canonical staging under <target>/.harness/loom/. Pair files live under .harness/loom/{agents,skills}/. Pair order lives in .harness/loom/registry.md ## Registered pairs, and register-pair.ts is the only writer for that section. Derived platform trees are refreshed later by the target-local node .harness/loom/sync.ts --provider <list> command.
Cycle task and review history under .harness/cycle/ is runtime evidence, not pair-authoring state. Pair authoring may inspect active-cycle references for safety, but it must not edit or delete cycle history.
Use ./scripts/pair-dev.ts (resolved from this skill's directory) for deterministic command validation, registered-pair source preparation, and guarded removal. The helper returns preparation JSON for --add and --improve; it does not claim to author pair bodies unless files are actually written.
harness-* slugs before invoking ./scripts/pair-dev.ts; the helper accepts canonical slugs only.## Registered pairs.--split and --hint as unsupported v0.3.0 surface. Split is a manual sequence of --add, --improve, and --remove; intent is passed as positional <purpose>.node .harness/loom/sync.ts --provider <list> from the target root./harness-pair-dev --add <pair-slug> "<purpose>" [--from <source>] [--reviewer <slug> ...] [--before <pair-slug> | --after <pair-slug>]
/harness-pair-dev --improve <pair-slug> "<purpose>" [--before <pair-slug> | --after <pair-slug>]
/harness-pair-dev --remove <pair-slug>
All slug-bearing arguments must be canonical before the deterministic helper or registry/files are touched. If the user says document, use harness-document for the pair slug, --from, reviewer slugs, and placement anchors.
--add<purpose> is missing or the target does not yet contain the installed runtime foundation.--from <source> is present, resolve it from one of:
.harness/loom/registry.mdsnapshot:<ts>/<pair-slug> under .harness/_snapshots/auto-setup/<ts>/loom/archive:<ts>/<pair-slug> under .harness/_archive/<ts>/loom/--from values that are arbitrary filesystem paths, derived platform paths, missing registry entries, planner/finalizer slugs, or foundation skill names.--from is present, follow references/authoring/from-overlay.md: start from current templates, enforce current runtime shape, then overlay compatible source-pair domain material.<purpose> override the source pair's old intent whenever the two conflict. <purpose> remains required even with --from.--reviewer flags -> default 1:1 pair--reviewer <slug> -> 1:M pair--from, ground them directly in repo evidence; with --from, apply template-first overlay../scripts/register-pair.ts to update ## Registered pairs in .harness/loom/registry.md. Pass --before <slug> or --after <slug> whenever the right workflow position is known; omit anchors only when a true append is intended.--improve<purpose> is missing.<purpose> as the primary improvement axis, then fold in rubric hygiene and codebase drift.--add + --improve + --remove sequence instead of automating a split.--remove.harness/loom/registry.md and resolve its producer, reviewer slug(s), and skill slug from that registry line.registry.md, missing pairs, and anything outside .harness/loom/agents/ or .harness/loom/skills/..harness/cycle/state.md when it exists. If ## Next references the pair, or if any non-terminal EPIC roster/current field references the pair, abort before mutating files../scripts/register-pair.ts --unregister --target <target> --pair <pair-slug> to remove only the roster entry from ## Registered pairs..harness/loom/ after unregistering..harness/cycle/, .harness/cycle/epics/, task files, review files, or events.md. Historical task/review evidence stays intact after pair removal.node .harness/loom/sync.ts --provider <list> after removal so derived platform trees drop stale pair files.register-pair.ts updates <target>/.harness/loom/registry.md ## Registered pairs. That section is the project's sole roster SSOT: the orchestrator reads it at dispatch time, and the planner receives it through the dispatch envelope.
Its placement semantics are load-bearing:
--before / --after + existing pair -> move the pair to the new anchor--before / --after + new pair -> insert at the anchorFor removal, register-pair.ts --unregister deletes only the matching roster line. File deletion and active-cycle safety checks belong to /harness-pair-dev --remove, not to the registry helper.
Treat that section as workflow order, not as a changelog.
--add receives a required positional <purpose> and uses it as the main axis for the pair.--add --from accepts a current live pair slug or a target-local snapshot: / archive: locator and applies template-first overlay, never arbitrary path/provider import or blind copy.--improve receives a required positional <purpose> and uses it as the main axis for revision..harness/loom/.--add and --improve start from actual codebase evidence.--remove refuses planner/finalizer/foundation targets and active-cycle references before mutating .harness/loom/.--remove preserves .harness/cycle/ task and review history.## Registered pairs lists at least one reviewer slug (1:1 or 1:M).--add before harness-init.harness-finalizer agent body, not in ## Registered pairs.--improve.--hint; intent belongs in positional <purpose>.--split; split is a user-directed multi-command sequence, not a single pair-dev command.--from as an arbitrary snapshot path, file path, derived platform path, or blind-copy import.skills: wholesale during --from; the new pair skill plus harness-context are mandatory template authority, while extra domain skills are preservation candidates.Next or live EPIC roster..harness/cycle/ history during pair removal.register-pair.ts../scripts/pair-dev.ts — deterministic command helper for validation, --from source preparation, and guarded --remove./scripts/register-pair.ts — deterministic registration helper (writes .harness/loom/registry.md)templates/producer-agent.md, templates/reviewer-agent.md, templates/pair-skill.md — skeletons copied and filled in for each new pairexamples/agents/ — completed producer/reviewer exemplars to reference for tone and structurereferences/authoring/agent-authoring.md — agent frontmatter, five principles, Task shape, Output Format rubricreferences/authoring/skill-authoring.md — pair-skill body rules (section order, 200-line cap, description-as-trigger)references/authoring/from-overlay.md — --add --from template-first overlay rules and source preservation boundariesreferences/authoring/oversized-split.md — when and how to split an oversized SKILL.md body into references/; this is not the removed pair-level --split commandGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub kinggyusuh/harness-loom --plugin harness-loom