Builds a feature specification from scratch through a relentless, evidence-based interview that walks the design tree decision-by-decision, resolving dependencies as it goes.
SkillScore43Maintained
Automatic
◆Product Management pack
Last verified 9/26/2026
What it changes
Passed 4 of 10 test cases with the skill, and 1 of 10 without it.
Without skill13%
With skill43%
Checks it passed that the model alone missed
Specifies an explicit reopening trigger for every deferred item.
Lists all decisions under full decisions during the initial draft in Step 5.
Prohibits unverified findings from leading an escalation turn as a build blocker.
and 10 more in the full report
8 fixed2 passed either way12 still failing1 broke
Pass-rate lift
+30 pp
Tokens
+461%
Agent turns
0%
Response time
+7%
Model gemini-3.6-flashMeasured 9/26/2026v310 of 23 cases passed with skill · 10 comparable
Tokens, turns and time describe resource use, not a dollar price.
See it in action
One of 8 test cases the skill fixed. Same model, same prompt, with and without the skill.
1 of 8
Prompt
A user starts a session in `docs/features/quick-search/` saying only 'plan a feature' without any description. What exact response should be given before proceeding with directory creation or codebase discovery?
What was checked, without and with the skill
Checked
Without skill
With skill
Prompts the user for a one-to-two-sentence description of the feature's function and expected outcome.
Missed
Passed
Pauses further design tree questions until the initial feature description is provided.
Passed
Passed
case-14 · gemini-3.6-flash · 9/26/2026 · answers are capped and redacted
What's inside
The instructions your model reads when the skill loads.
SKILL.md474 lines12 filesincludes scripts
Project Context
CLAUDE.md: !find . -maxdepth 1 -name "CLAUDE.md" -type f
project-discovery.md: !find . -maxdepth 3 -name "project-discovery.md" -type f
personal config directory: !bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh" 2>/dev/null || echo "$HOME/.claude"
As your first action, use the Read tool on .han/config.md inside the personal config directory path above. A read
that returns no file is no personal configuration: continue silently. When that file or the project .han/config.md
probe supplies content, apply it per config-rule.md, which governs precedence
between the two files, relative-path resolution, and what to do with a file that reads but cannot be used.
Operating Principles
Interview relentlessly, but explore first. If a question can be answered by reading the codebase, project docs,
coding standards, ADRs, or existing feature specs — or by querying a read-only tool already available to this session
that authoritatively answers it (for example a connected schema or data-source tool) — explore instead of asking. Only
surface questions that genuinely require the user's judgment. The connected-tool path is gated on availability, not on
a fresh judgment: use it only when such a read-only tool is actually permitted to this skill; if none is available,
ask the user as today (see Step 4).
Walk the design tree. Decisions have dependencies. Resolve foundational decisions first (what the feature does,
who uses it, what outcome it produces). Then descend into dependent decisions (flow, states, edge cases, coordination
points). Never ask a dependent question before its parent is settled.
Recommend, then ask. For every question surfaced to the user, provide a recommended answer with rationale grounded
in evidence (code, docs, conventions, or stated goals). The user can accept, redirect, or provide a nuanced response.
Behavior, not implementation, in the spec. The specification captures WHAT the feature does, for WHOM, and WHY —
at a level a reader who has never opened the codebase can understand. Language primitives, file/line references,
function or class names, library mechanics, implementation patterns, and internal env/flag names DO NOT appear in
feature-specification.md. Product-level subsystem names ("events processing system", "backend service"), user-facing
UI vocabulary (popover, modal, toast), URL paths, behavioral verbs, and user-observable states DO. Technology brand
names generalize one level up (NATS → "events processing system"; PostgreSQL → "database"; Redis → "cache"). This rule
is language-agnostic — it applies equally to Go, Rails, Node, Python, Swift, Kotlin, and frontend JavaScript code. Any
examples given in references or templates are illustrative, not an exhaustive deny-list.
Load-bearing mechanics go in feature-technical-notes.md, not the spec. When a mechanic is load-bearing for a
behavior — meaning the behavioral commitment in the spec is only correct because of that mechanic (ordering,
durability, consistency, visibility timing) — the behavioral consequence goes in the spec sentence, and the mechanic
goes in a T# note linked inline from that sentence. The tech-notes file is LAZILY created — it exists only when at
least one load-bearing mechanic qualified. Mechanics that are discoverable from the code repo (an existing pattern, an
in-use library, a documented convention) do NOT belong in the tech-notes file either — plan-implementation will find
them from the code. Mechanics that do not affect observable behavior are pure implementation and belong in the
Break a trusted implementation plan (or other provided context) into independently-grabbable, atomic work items, written to a single work-items.md file. Use when the user wants to convert a plan into work items, create implementation tickets or tasks, divide a plan into work units, or break the plan down into grabbable pieces. Do not use when there is no implementation plan yet or the plan is not yet trusted — use plan-implementation to produce the plan or iterative-plan-review to harden it firs