Plan Feature — From Issue (internal)
SkillDev toolsInternal step of plan-feature: turn a feature-request issue into a scoped, sized, roadmap-mapped SPEC **product half** (capability closure satisfied) with Closes #N traceability.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Plan Feature — From Issue (internal) skill
What this skill tells your AI
The instructions your AI receives, as published by gtrabanco/agentic-workflow in skills/plan-feature-from-issue/SKILL.md and read by ahel’s review.
Convert a feature-request issue into the project's planning artifacts, keeping a
clean issue → SPEC → PR(Closes #n) trace. Writes the SPEC's product half
(same two-halves convention design-feature uses) and must satisfy capability
closure before handing off — a thin issue does not get a shortcut around it.
This skill stops at the Product half. It designs, then the unit goes to
review-spec for an independent Product review; engineering planning is a
different authority's turn. Composing plan-feature-scaffold in the same breath
as the design it just wrote is the bypass this separation exists to close — the
author of a Product half cannot be the one who decides it is ready to build on.
When to use
- The
plan-featurerouter calls this when the input is a GitHub issue (or--from-issue N) that describes new product capability.
If the issue is a bug or tech-debt, stop and route it: triage-issue to
classify, then plan-fix + execute-phase --fix. This skill is for
genuine features only.
Step 0 — Discover the project (always first)
Per the agent guide's Workflow conventions + documentation map, then read
what THIS skill needs: the feature SPEC template, the roadmap, and the issue/PR
templates (.github/ISSUE_TEMPLATE/, .github/PULL_REQUEST_TEMPLATE.md) so the
SPEC mirrors the fields reviewers expect. Then read the issue (forge CLI per the
project's Workflow conventions — examples use gh):
gh issue view <N> --json number,title,body,labels,state,comments
Process
-
Classify first. Confirm it is a feature. Not a feature if it describes a defect, regression, duplicated code, perf debt, or carries a "when to fix / trigger" clause → hand to
triage-issue. State the verdict explicitly. -
Normalize language. If not in the project's docs language (this repo: English), translate before drafting any artifact.
-
Map to the roadmap. Assign the next number + slug. Identify dependencies and conflicts with existing features, coupling/migration risks, and whether it should instead extend an existing feature.
-
Close product-half gaps proactively. Compare the issue against what a complete SPEC product half needs (goals, scope in/out, business goals, i18n/SEO/a11y/pricing per the docs map, a UI design reference when the feature has a UI surface), probing the same fixed vagueness rubric
design-feature's interview uses: affected users/roles · error & edge states · data shape · boundaries & limits · out of scope · success criteria — each slot filled or explicitn/a: <reason>. For each genuine gap you can't safely default, ask the user one question per turn, never batched, each with a recommended default; never ask what the issue or docs already answer. Structural hand-off threshold: if ≥ 3 rubric slots remain unfillable from the issue plus the answers so far, stop and hand the feature todesign-feature(the thin-issue rule below, now with a fixed trigger) instead of continuing to interview here. -
Satisfy capability closure. Walk the same fixed checklist
design-featureuses (per entity: CRUD + state transitions, each with UI + API + test, or explicitn/a: <reason>; per capability: entry point + ACL; per role: assigned/revoked/viewed where) into the SPEC's## Capability closureand## Acceptance criteria. A thin issue that doesn't carry enough to fill it is not a shortcut around the gate — hand it todesign-feature(compose in-turn only at ≥ this skill's tier, per Guardrails; otherwise hand off withrun /design-feature <slug>and stop here) rather than stampingdesignedon a hollow closure. -
Size it. Estimate
XS / S / M / L(scale defined in the SPEC template) and record it in the SPEC. XS/S → the SPEC is the only planning artifact (single-pass execution); M/L → full artifact set. If L, propose splitting. -
Produce the SPEC product half. Fill it and stamp
## Design status: designedonce closure is complete; set the roadmap row (added atideafirst if it didn't exist) todefinedin the same edit — the sameidea → definedtransitiondesign-featureowns, performed here when this skill is the one that satisfies closure. Then run thestage: specreadiness preflight from the internalevidence-groundingcapability, mint the currentartifactRevisionId, and stop: this skill never continues into the engineering half, never promotes the row pastdefined, and never composesplan-feature-scaffoldin this turn. Theplan-featurerouter may scaffold only afterreview-specreturns a currentspec-review-passreceipt bound to these exact bytes. -
Wire traceability. Record
#Nin the SPEC; the PR body must includeCloses #Nso the issue closes on merge. -
Hand off — return exactly (fixed completion report, back to the router):
ISSUE #<N> → SPEC <slug> — size: <XS|S|M|L> Verdict: feature (not bug/debt — else this would have routed to triage-issue) Gaps closed: <n> asked / <n> defaulted (logged) Closure: designed | handed to design-feature Readiness: READY-FOR-REVIEW | NEEDS-EVIDENCE | NEEDS-DESIGN Artifact revision: <id> Traceability: Closes #<N> wired → review-spec next (engineering planning is gated on its receipt; do not scaffold here)
Guardrails
- Don't silently expand scope beyond the issue — surface additions as proposals.
- Don't open the feature branch or write code here.
- Don't plan engineering work here. No Engineering half, no phases, no
defined → plannedpromotion, no in-turnplan-feature-scaffoldcomposition: the Product half this skill writes must be reviewed byreview-specfirst, and readinessREADY-FOR-REVIEWis not that review. - Keep the
Closes #Nlink; an issue-born feature must close it. - Never stamp
## Design status: designedwith a blank Capability closure row — the same ruledesign-featurefollows; a thin issue hands off instead of faking closure. - Composition tier. Composing
design-featurein-turn for a thin issue is allowed only when this skill is running at ≥design-feature's tier (planning-class — strongest model / highest effort); otherwise hand off (run /design-feature <slug>) rather than under-power it. - Otherwise honor the project's Workflow conventions (branch/PR, docs-language).
Architectural invariants
The planning preflight owns the normalized
repository state read and the ONE final architectural classification for the
whole plan. Consume it here before writing the product half: for each applicable
invariant rule, cite its ID and repository evidence and classify the issue
proposal as preserves, violates, introduces, or changes. Only
preserves can be stamped designed; every other classification stops for an
explicit architectural decision through the project-declared authority — never
before the full plan exists, and never inferred from the issue body, SPEC, or
passing test.
Relationship to other skills
triage-issue— decides bug vs feature vs defer; call it if unsure.plan-fix— the fix-side sibling for bug/debt issues.design-feature— receives thin issues this skill cannot safely close capability closure for; both write the SPEC's product half in the same format.review-spec— the mandatory next hop for every issue-derived feature: it reviews and receipts the Product half this skill produced.plan-feature-scaffold— fills the engineering half later, only oncereview-specpassed. This skill never invokes it.execute-phase— executes the phases; its PR carriesCloses #N.
Done when
- A filled SPEC product half exists, roadmap-registered at
defined, with thestage: specreadiness block printed and the currentartifactRevisionIdrecorded. - Capability closure is satisfied (or the issue was handed off to
design-featureinstead of faking it) and## Design statusis accurate. - The roadmap row status is
defined(added atideafirst if new) whenever## Design status: designedwas stamped — neverdefinedon a hollow closure, never left atideaoncedesignedis stamped. - Nothing was scaffolded: no Engineering half, no phases, no
plannedwrite, and the fixed report hands off to/review-spec. #Nis recorded and the PR plan includesCloses #N.- Scope gaps were resolved with the user, not assumed.
Signals
- GitHub stars
- 21
- Forks
- 3
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
plan-feature-from-issue- Source
- github.com/gtrabanco/agentic-workflow