Add /craftsman:discover requirements interview (0.10.0) - #8
Merged
Conversation
The SessionStart reminder announced "Seven skills" and "Five commands" when the plugin has had eight and six since 0.9.0, and its lists omitted ui-craft and /craftsman:orchestrate entirely — so every session started without being told two components existed. CI never caught this. The count validator skips any line containing "commands" when checking skill counts, and only matches the literal phrase "N slash commands" for command counts. The whole reminder is a single line reading "Five commands", so it evaded both checks. The PR template's example output was stale on two counts as well (5 commands, 2 hook events; actual: 6 and 4). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Turning a vague idea into something plannable had only one path: the
shallow end of ideation-first — 3-5 questions and a three-line brief,
with no way to invoke it deliberately. A substantially open request
("build a notifications system") got the same treatment as a merely
fuzzy one, and the planner ran against guesses either way.
Split across two surfaces because of a hard constraint: a subagent
cannot conduct an interview. It gets one cold prompt and returns one
result, which is why orchestrator already has to bounce underspecified
features back to its caller. So the interview runs in the main thread as
/craftsman:discover, and only the half a subagent is genuinely good at —
reading the codebase — is delegated to the new read-only
requirements-analyst, which drafts questions grounded in file:line
evidence with an assumption default each, so the interview never stalls.
ideation-first now runs at two depths. Quick is unchanged and still the
default. Deep asks in 3-4 sequenced rounds of 2-4 questions rather than
one per turn — one at a time is right for five questions and punishing
for fifteen, and what that rule protects (later questions adapting to
earlier answers) survives in sequenced rounds. It ends by writing a
numbered spec, proposed and confirmed first, per the same
ask-before-writing rule /craftsman:init follows.
Deep mode carries an explicit "expand the questions, bound the scope"
rule. Without it, raising error states and migration paths would have
quietly contradicted smallest-change-first: a deep interview should end
with the same scope as a quick one, held with more confidence and a
longer out-of-scope list.
The Scope brief is still emitted at both depths and remains the machine
handoff the planner and the ideation gate consume; the spec file is
additive.
Verified: claude plugin validate --strict -> "Validation passed";
counts check reports 15 agents, 8 skills, 7 commands with no mismatches;
frontmatter parses for every agent/skill/command; codespell clean;
bash -n on both hooks; router emits one nudge naming /craftsman:discover;
testbed checks 7 passed, 0 failed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds
/craftsman:discover <vague idea>— a requirements-discovery interview that turns an underspecified request into a numbered, testable spec — plus the read-onlyrequirements-analystagent that grounds its questions in the codebase, and a deep mode for theideation-firstskill.Why
Turning a vague idea into something plannable had only one path: the shallow end of
ideation-first— 3–5 questions and a three-line brief, with no way to invoke it deliberately. A substantially open request ("build a notifications system") got the same treatment as a merely fuzzy one, and the planner ran against guesses either way.The work is split across two surfaces because of a hard constraint: a subagent cannot conduct an interview. It gets one cold prompt and returns one result — which is why
orchestratoralready has to bounce underspecified features back to its caller. So the interview runs in the main thread as a command, and only the half a subagent is genuinely good at (reading the codebase) is delegated.ideation-firstnow runs at two depths. Quick is unchanged and still the default. Deep asks in 3–4 sequenced rounds of 2–4 questions rather than one per turn — one at a time is right for five questions and punishing for fifteen, and what that rule protects (later questions adapting to earlier answers) survives in sequenced rounds.Deep mode carries an explicit "expand the questions, bound the scope" rule. Without it, raising error states and migration paths would have quietly contradicted
smallest-change-first: a deep interview should end with the same scope as a quick one, held with more confidence and a longer out-of-scope list.The Scope brief is still emitted at both depths and remains the machine handoff the planner and the ideation gate consume; the spec file is additive.
Also fixes a pre-existing bug in a separate commit:
session-startannounced "Seven skills" and "Five commands" (actual: 8 and 6) and omittedui-craftand/craftsman:orchestratefrom its lists, so every session started without being told two components existed. CI missed it — the count validator skips any line containing "commands" when checking skills, and only matches the literal phrase "N slash commands" for commands; the whole reminder is one line reading "Five commands", so it evaded both checks.Tested
One real failure caught during verification: the new
ideation-firstdescription contained an unquotedtwo depths:colon, which broke the YAML. That silently drops all frontmatter at runtime rather than erroring — the exact failure the README warns about. Quoted and re-verified.Checklist
claude plugin validate --strict ./craftsman-pluginpasses locallyvalidate.yml) is green🤖 Generated with Claude Code