bundles/planning/skills/feature-intake/SKILL.md
Capture a client or stakeholder feature request, turn it into a planner-ready PRD epic with scoped sub-issues, check for duplicate work, and place approved issues on a GitHub Projects kanban. Use when a user invokes feature intake, asks to turn a rough client requirement into GitHub issues, or wants an idea written as a PRD and pushed to a board.
npx skillsauth add shipshitdev/library feature-intakeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Turn a rough client, sales, founder, or stakeholder requirement into a tracker artifact that agents can plan and implement without re-eliciting the same context. Create one parent PRD issue plus focused sub-issues unless the request is a single-layer change.
Inputs:
Outputs:
Creates/Modifies:
External Side Effects:
Confirmation Required:
Delegates To:
prd-writer for PRD structure and quality gatesprd-task-creator for issue and sub-issue creation mechanicsgh-project-board when the target board needs inspection or normalizationprd-quality-gate before marking the intake ready for planningCreate a small issue tree:
Use sub-issues to prevent dropped work. A full-stack feature normally needs at least:
[backend] for API, data model, business logic, jobs, integrations, auth, or
persistence.[frontend] for screens, state, routing, copy, forms, or user-visible flows.[e2e] for cross-layer wiring, contracts, and the test that proves the flow
works end to end.Allow a layer to be N/A only with a one-line reason in the parent PRD's
Layer Coverage section. If both backend and frontend are in scope, include an
e2e sub-issue.
Verify the target repository and GitHub auth before drafting:
gh auth status
gh repo view --json nameWithOwner,defaultBranchRef --jq '{repo:.nameWithOwner, default:.defaultBranchRef.name}'
git status --short --branch
If a GitHub Project target is known, inspect live project fields before assuming status or priority option names:
gh project view <project-number> --owner <owner> --format json
gh project field-list <project-number> --owner <owner> --format json
gh project item-list <project-number> --owner <owner> --limit 100 --format json
Use the repository's native board vocabulary. If the board is missing expected
Status or Priority fields, run gh-project-board before writing items.
Read the branch and dirty state so intake does not trample active work:
git status --short --branch
git branch --show-current
For read-only intake, dirty state is acceptable if reported. For workflows that require switching or pulling a branch, require a clean tree first. Never stash, reset, merge, rebase, or switch branches just to write intake unless the user explicitly asked for that repository workflow.
Search issues and the project board before drafting:
gh issue list --state all --limit 50 --search "<keywords>" --json number,state,labels,url,projectItems
Also search local planning and memory docs when available:
rg -n "<keywords>" .agents README.md docs 2>/dev/null
If a strong duplicate exists, recommend updating that issue. If nearby work
exists but the request is distinct, reference it in Dependencies or
Risks & Open Questions.
Prefer existing context over stakeholder interrogation:
.agents/memory/, product docs, roadmap docs, and recent issues.Ask questions only when the PRD would otherwise invent important facts. Ask no more than three focused questions at a time, and avoid implementation questions.
Cover these details:
If context is clear enough, draft with an explicit inference note:
I have enough context to draft this. I inferred the user, outcome, and initial
priority from existing repo context. I will keep uncertain assumptions in
Risks & Open Questions for confirmation.
Decide which slices are in scope before writing sub-issues:
| Layer | Mark IN when | Mark N/A when |
| --- | --- | --- |
| backend | APIs, data, jobs, auth, integrations, persistence, business rules change | Pure copy/static UI change |
| frontend | Any user-visible screen, form, state, route, or interaction changes | Internal job or backend-only operation |
| e2e | Frontend and backend must work together, or a critical workflow needs proof | Single-layer change with no integration path |
| docs/ops | Runbooks, migration notes, launch steps, support workflow, or monitoring are required | No operational handoff needed |
Default product features to backend + frontend + e2e unless the requirement is clearly narrower. Keep sub-issues small enough for one focused PR.
Testing bar (non-negotiable — encode in the PRD Verification Plan):
IN.Drop any single test type only with a one-line reason in Non-Functional Requirements; never silently. A pure copy/static change may scope to
coverage-only with that reason.
Use the issue body as the PRD. Do not add YAML frontmatter to issue bodies.
# PRD: <kebab-case-name>
## Executive Summary
<2-4 sentences: what this is, why now, and who benefits.>
## Problem Statement
<Concrete pain, missing capability, or customer promise. Name the user/workflow.>
## Goals
- <Measurable or verifiable goal>
## Non-Goals
- <Explicitly excluded scope>
## User Stories
- As a <role>, I want <capability> so that <outcome>.
**Acceptance:**
- WHEN <trigger> THE SYSTEM SHALL <observable response>.
## Functional Requirements
1. <Verifiable behavior, not implementation detail>
## Non-Functional Requirements
- <Only performance, accessibility, security, observability, or reliability requirements that matter>
## Acceptance Criteria
- WHEN <trigger> THE SYSTEM SHALL <observable response>.
- IF <failure or edge condition> THEN THE SYSTEM SHALL <handled response>.
- THE SYSTEM SHALL <invariant that must always hold>.
## Out of Scope
- <Boundary agents must not cross>
## Dependencies
- <Issue numbers, docs, services, packages, feature flags, or `None`>
## Layer Coverage
- **backend:** IN - sub-issue #<filled after creation> | or `N/A - <reason>`
- **frontend:** IN - sub-issue #<filled after creation> | or `N/A - <reason>`
- **e2e:** IN - sub-issue #<filled after creation> | or `N/A - <reason>`
- **docs/ops:** IN - sub-issue #<filled after creation> | or `N/A - <reason>`
## Sub-Issues
- [ ] `[backend]` <title> - #<n>
- [ ] `[frontend]` <title> - #<n>
- [ ] `[e2e]` <title> - #<n>
## Verification Plan
- integration tests: <boundaries covered; suites/files that must exist and pass>
- e2e tests: <workflow proven end to end; suite/file> | or `N/A - <reason>`
- coverage: ≥80% on added/changed code (<command/tool that reports it>)
- manual: <manual QA steps or stakeholder demo checks>
## Risks & Open Questions
- <Unresolved assumption or risk>
Each sub-issue should include:
[backend] boundaries, the e2e
test for [e2e], and the slice's share of the ≥80% coverage barUse titles like:
[backend] Add saved search automation API[frontend] Add saved search controls[e2e] Verify saved search workflowDo not create issues until the draft passes these checks:
None.WHEN/WHILE/WHERE/IF … THE SYSTEM SHALL …) and pass/fail.IN layer has a sub-issue.N/A layer has a reason.Risks & Open Questions.Show the parent and sub-issue draft. Wait for approval before writing to GitHub.
After approval, create the parent first, then sub-issues:
gh issue create --title "<short imperative title>" --body-file /tmp/parent-prd.md --label "type:feature"
gh issue create --title "[backend] <title>" --body-file /tmp/backend.md --label "type:feature"
Link sub-issues using the repository's supported GitHub sub-issue API or tracker convention. If native sub-issues are unavailable, link children in the parent body and each child body.
Add approved items to the configured project board and set native fields:
gh project item-add <project-number> --owner <owner> --url <issue-url>
Use live field IDs from gh project field-list and item IDs from
gh project item-list; do not hard-code project field IDs.
Return:
development
TypeScript refactoring and modernization guidelines from a principal specialist perspective. This skill should be used when refactoring, reviewing, or modernizing TypeScript code to ensure type safety, compiler performance, and idiomatic patterns. Triggers on tasks involving TypeScript type architecture, narrowing, generics, error handling, or migration to modern TypeScript features.
tools
Resolves TypeScript and JavaScript problems across type-level programming, performance, monorepo management, migration, and modern tooling. Invoke when diagnosing "type instantiation excessively deep" errors, migrating JS to TS, configuring strict tsconfig, debugging module resolution, or choosing between Biome/ESLint/Turborepo/Nx.
tools
Turborepo monorepo build system guidance. Triggers on: `turbo.json`, task pipelines, `dependsOn`, caching, remote cache, the `turbo` CLI, `--filter`, `--affected`, CI optimization, environment variables, internal packages, monorepo structure, and package boundaries. Use when the user configures tasks or workflows, creates packages, sets up a monorepo, shares code between apps, runs changed packages, debugs cache behavior, or works in an `apps/` plus `packages/` workspace.
tools
Provides Tailwind CSS v4 performance optimization and best practices guidelines. Triggers when writing, reviewing, or refactoring Tailwind CSS v4 code; when working with Tailwind configuration, @theme directive, utility classes, responsive design, dark mode, container queries, or CSS generation optimization.