Getting it into your agent
This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.
/plugin marketplace add testdouble/han/plugin install han-planningWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/testdouble/han/plan-a-feature)<a href="https://agentmods.dev/skills/testdouble/han/plan-a-feature"><img src="https://agentmods.dev/badge/skills/testdouble/han/plan-a-feature.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00135 | $0.08104 |
| Opus 5 | $0.00068 | $0.04052 |
| Sonnet 5 | $0.00027 | $0.01621 |
| Haiku 4.5 | $0.00014 | $0.00810 |
Grade A, and why
plan-a-feature scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 502 lines — stays where its author put it; the contents beside it link to each section on GitHub.
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" - project .han/config.md: !
cat .han/config.md 2>/dev/null || echo ""
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 aT#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-implementationwill find them from the code. Mechanics that do not affect observable behavior are pure implementation and belong in the implementation plan, not here. - YAGNI is a first-class operating principle. Apply the evidence-based YAGNI rule in
yagni-rule.md to every commitment the spec carries. An item with no accepted
evidence is demoted to
## Deferred (YAGNI)with its reopening trigger, never silently dropped and never silently kept. An item with evidence gets the simpler-version test. - Evidence quality is the companion principle. Apply evidence-rule.md alongside YAGNI. YAGNI gates inclusion; this one characterizes the quality of what each commitment rests on, through trust classes, the corroboration gate on web claims, and a distinct label for no evidence at any tier.
- The run stays inside the boundary it descends from. The skill records the work item's stated scope and exclusions before the interview, per planning-boundary-rule.md. Every commitment is checked against it, and anything the boundary excludes lands in a visible cut list, per scope-justification-rule.md.
- Visual material the user supplies is kept, and reaches every reviewer. Persist it beside the spec as it arrives, never at document-write time, and pass its paths in every reviewer's brief. The session context is the only copy until it reaches disk, and a compaction destroys it. The boundary rule owns the convention.
- Questions to the user arrive one at a time, led by the consequence. Per operator-escalation-rule.md. The opening confirmation turn is the one exception, and the one turn that carries more than one ask.
What ships with it
10 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- references/artifact-invariants.md 3.5 KB
- references/decision-log-template.md 5.4 KB
- references/feature-specification-template.md 13 KB
- references/feature-technical-notes-template.md 3.4 KB
- references/finding-resolution.md 6.6 KB
- references/mechanic-routing.md 1.5 KB
- references/review-team-briefs.md 10 KB
- references/team-findings-template.md 5.2 KB
- scripts/verify-design-images.bats 8.3 KB
- scripts/verify-design-images.sh 5.5 KB runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 502 lines · 135 tokens per session scan A 08e48e122a77
plan-a-feature is a skill published in the GitHub repository testdouble/han (256 stars, last pushed 4d ago), licensed MIT. It adds 135 tokens to every session and 8,104 once invoked, about $0.0007 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other skills, from other repositories
meta-tags-optimizer
Optimize title tags, meta descriptions, Open Graph, and Twitter cards for maximum click-through rate. Generates multiple A/B test variations with character counting and SERP preview. Use when asked to "optimize title tag", "write meta description", "improve CTR", "Open Graph tags", "fix my meta tags", "social media…
golden-chat-topics
Use when testing the goldenchattopics golden build.
golden-chat-single
Use when testing the goldenchatsingle golden build.
google-ads-audit
Google Ads account audit and business context setup. Run this first — it gathers business information, analyzes account health, and saves context that all other ads skills reuse. Trigger on "audit my ads", "ads audit", "set up my ads", "onboard", "account overview", "how's my account", "ads health check", "what should…
sxo
Search Experience Optimization (SXO) — the bridge between SEO and UX/CRO. Audits the full journey from the SERP click to the on-page goal: SERP click-through factors (title/meta/rich results that win the click), then post-click experience signals that keep users and drive conversions — above-the-fold relevance and…
elixir-idioms
OTP/BEAM patterns and Elixir idioms — GenServer, Supervisor, Task, Registry, pattern matching, with chains, pipes. Use when designing processes or debugging BEAM issues.