From harness-loom
Produces the goal markdown that `/harness-orchestrate` consumes as the original user request. Use when `/harness-goal-interview` is invoked, when the user is starting a harness cycle on a new feature or initiative and needs to articulate requirements precisely (e.g. 'write down what we're trying to do' before running the harness), or when an earlier `/harness-orchestrate` invocation failed because the goal file was vague or plan-shaped. Runs a full user interview focused on requirements precision and user-side technical decisions — implementation detail is the planner's and producer pairs' job, not the goal file's — then writes the five canonical sections (Why / Goal / Constraints / Out of scope / Completion criteria) to the target project root. Apply this skill whenever the user is about to hand a goal file to `/harness-orchestrate` even without an explicit interview ask; a ten-minute structured elicitation pays back across every EPIC, task, and review the cycle produces.
How this skill is triggered — by the user, by Claude, or both
Slash command
/harness-loom:harness-goal-interview [--out <path>][--out <path>]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
`/harness-orchestrate <file.md>` treats the trimmed body of its argument file as the original user request and anchors every downstream dispatch envelope to it (see `harness-orchestrate` `§Request-anchored entry`). The quality of that file sets the ceiling for every EPIC, task, and review the harness produces.
/harness-orchestrate <file.md> treats the trimmed body of its argument file as the original user request and anchors every downstream dispatch envelope to it (see harness-orchestrate §Request-anchored entry). The quality of that file sets the ceiling for every EPIC, task, and review the harness produces.
This skill exists because users tend to either under-specify goals ("fix the auth stuff") or over-specify them into plans ("add refreshToken() to AuthService in src/auth/service.ts"). Both cripple the planner:
The interview elicits exactly the two things the planner cannot supply on its own:
Everything else — file layout, function names, library picks that follow from repo evidence, task ordering, EPIC shape, review axes — belongs to planner and producer turns. Leaving those decisions to the harness is a feature of the design, not a gap in the goal file.
Cycle scope is the user's intent, not an interview filter. When the user names a goal that spans several surfaces (a new API endpoint plus a DB migration plus a UI screen for the same feature, for example), the interview's job is to capture that breadth precisely, not to negotiate it down. Cascade size, file count, and "this feels like a lot" are planner concerns — the planner is the right surface to decompose breadth into EPICs, and how much fits in one cycle is the planner's call once the goal is anchored. Splitting those surfaces across cycles on cost grounds — i.e. asking the user to drop some surfaces and run them as a follow-up cycle later — collapses each cycle into something a single producer-reviewer pair could already handle, which is the failure mode the harness is designed to avoid. Multi-surface goals that share one motivation are the harness's strong suit, not a smell.
Files always land at the target project root so the user can run /harness-orchestrate ./<file>.md directly. The skill does not touch .harness/loom/ or .harness/cycle/; those are orchestrator territory.
/harness-goal-interview [--out <path>]
No positional topic. The interview's first move elicits the topic — forcing the user to name something upfront often gets a generic label ("improve notifications") when the real trigger is specific ("last week's customer complaints about missed order confirmations"). Let the conversation surface the concrete thing.
--out is optional. Choose the filename during the interview once the goal's shape is clear when it is omitted. Resolve --out relative to the current working directory (target project root) and refuse paths under .harness/, .claude/, .codex/, .gemini/, or outside the project root.
Before the first question, skim enough repo context that the interview does not ask what the repo already answers:
README.md, AGENTS.md / CLAUDE.md, top-level pointer docs.harness/loom/registry.md and .harness/loom/agents/harness-finalizer.md when present (pair roster + cycle-end duty).harness/cycle/state.md when present (what the harness is currently chewing on)This is not a codebase audit. The aim is to avoid duplicate or contradictory goals and to ground follow-ups — not to write the goal file for the user.
Drive the interview along these axes, roughly in this order. Stop an axis the moment the user's answer is citable; polishing past "clear enough" burns trust for no quality gain.
Full prompts and push-back patterns per axis live in references/interview-axes.md. The axes:
Ask one axis per turn unless several are tightly coupled. Summarize captured answers back to the user before axes 5 and 6 so early misunderstandings are cheap to correct.
The judgment line between "goal material" and "planner material" is the most important call this skill makes. These questions do not belong in the interview:
They are off-limits not because they're unimportant but because the planner and producer pairs make better decisions about them with the repo open in front of them. Premature commitment in the goal file becomes a constraint the planner has to work around instead of an outcome it can freely decompose.
When the user volunteers such detail, capture it as a constraint only when it is genuinely load-bearing (e.g., "must keep the existing /v1/ endpoints working"). Otherwise acknowledge it in conversation and do not write it into the goal file.
Once the axes are covered, draft the goal file in this exact section order:
# <one-line outcome-noun title>
## Why
<2–5 sentences: trigger, who is affected, why now>
## Goal
<externally visible outcome, in user-observable verbs>
## Constraints
- <hard requirement, budget, deadline, compliance rule>
## Out of scope
- <explicit non-goal or deferral>
## Completion criteria
- <observable signal: behavior, artifact, metric>
Per-section guidance and a longer skeleton are in references/output-template.md. Show the draft inline, then ask the user for a final confirmation or edits before writing anything to disk.
Resolve the filename at confirmation time:
--out was supplied, use it verbatimgoal-<slug>.md at the project root where <slug> is a short kebab-case derivation of the title, and confirm with the user before writingWhen a file already exists at the target path, show a diff-style summary and require explicit user confirmation before overwriting.
Write the final body to the chosen path and stop. End the turn with the exact next command the user should run, substituting the path you actually wrote:
/harness-orchestrate ./<the-file-you-just-wrote>.md
For example, after writing ./goal-notification-center.md, the line reads /harness-orchestrate ./goal-notification-center.md. Do not echo that example filename when the file you wrote was named something else.
Do not invoke /harness-orchestrate automatically. The harness cycle is a separate decision point — the user may want to review the file, git add it, or have a teammate look at it first.
Re-invoking the skill with the same --out path is a revision request, not a clean write: read the existing file, incorporate the user's new input as amendments, and ask before overwriting. Silent mutation of a previously authored goal file destroys evidence the user may rely on.
A short trace, to calibrate voice and depth:
User: "I want to run the harness on the new notification thing."
Skill: "What happened recently that made that feel worth doing now?"
User: "Ops team got three tickets last week about missed order confirmations. The emails went out, but the in-app banner didn't."
Skill: "So the missed surface is the in-app banner specifically — email is fine. Who's affected?"
User: "End customers on the order detail page. They refresh and see no banner, so they think the order didn't go through and contact support."
From which the skill extracts:
## Why
Customers who place orders and then refresh the order detail page currently see no in-app confirmation banner, leading them to contact support believing the order failed. Three such tickets arrived in the last week.
## Goal
After placing an order, a customer visiting the order detail page sees an in-app confirmation banner that survives page refresh until the order transitions to its next state.
No file paths, no library picks, no React/backend choice spelled out — the planner decides that. The goal file records what success looks like and why it matters.
## Out of scope is explicit, not absent; at least one non-goal is present unless the user explicitly declined and that refusal is recorded.## Completion criteria is observable (behavior, artifact, metric), not process-based./harness-orchestrate invocation for the new file..harness/loom/, .harness/cycle/, .claude/, .codex/, .gemini/, or outside the target project root. Those trees belong to the orchestrator or provider derivation, not to request-anchor authoring./harness-orchestrate, node .harness/loom/sync.ts, or editing the pair registry. The handoff is the user's move.references/output-template.md — canonical five-section skeleton with per-section guidancereferences/interview-axes.md — prompts, probes, and push-back patterns per axis; anti-patterns for what not to ask../harness-init/references/runtime/harness-orchestrate/SKILL.template.md — §Request-anchored entry, the contract this skill's output must satisfy../harness-init/references/runtime/harness-planning/SKILL.template.md — planner's EPIC decomposition rubric (primary consumer of this file)npx claudepluginhub kinggyusuh/harness-loom --plugin harness-loomGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.