Skip to content
Skill Authoring
Skill

/product-planner

Plan a product from idea to sprint tasks in one run: idea-validator, prd-generator, tad-generator, tasks-generator, resuming from existing files. Don't use for one document alone (PRD, TAD, tasks) or only validating an idea.

BOOST
From plugin
luongnv89-skills
13645 skills4 agents
Install
$ npx -y skills add luongnv89/skills --skill product-planner --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/product-planner

Context preview

The summary Claude sees to decide when to auto-load this skill.

Plan a product from idea to sprint tasks in one run: idea-validator, prd-generator, tad-generator, tasks-generator, resuming from existing files. Don't use for one document alone (PRD, TAD, tasks) or only validating an idea.

SKILL.md

product-planner.SKILL.md
name: product-planner
description: "Plan a product from idea to sprint tasks in one run: idea-validator, prd-generator, tad-generator, tasks-generator, resuming from existing files. Don't use for one document alone (PRD, TAD, tasks) or only validating an idea."
license: MIT
effort: high
dependencies:
  - idea-validator
  - prd-generator
  - tad-generator
  - tasks-generator
  - brand-name-checker
metadata:
  version: 1.1.0
  author: "Luong NGUYEN <luongnv89@gmail.com>"
  architecture: "orchestrator (detect artifacts → pick range → verdict gate → preflight → chain unedited members via file handoffs → one Final Report)"

Product Planner

One invocation takes an idea to a sprint plan by chaining four existing skills, unedited, in a fixed order. Each member owns its workflow, questions, approval gates and commits; this skill only decides **which members run**, hands each its input, and never repeats a stage whose file exists. Member detail stays in `references/` to protect the context budget.

idea-validator → idea.md + validate.md → prd-generator → prd.md → [brand-name-checker] → tad-generator → tad.md → tasks-generator → tasks.md

When to Use

  • "Take this idea all the way to a task list" / "plan this product end to end".
  • "Validate this idea and write the PRD, then stop" (partial range).
  • "Continue my project in `<folder>`" when some of the files already exist (resume).

Single-document requests go to the member directly: `prd-generator`, `idea-validator`, `tad-generator` or `tasks-generator`.

Terms

  • **`PROJECT_DIR`**: the absolute path of the project folder. Resolve it with

`PROJECT_DIR="$(cd "$PROJECT_DIR" && pwd)"`; if the `cd` fails, ask for the path.

  • **Range**: the stages this run invokes, from the start stage to the end stage.
  • **Member report**: the Final Report each member prints last. Its `Result:` line starts with

`COMPLETE`, `PARTIAL` or `BLOCKED`; its `Evidence:` line carries the commit hash and GitHub links.

  • **Status**: this skill's own `COMPLETE`, `PARTIAL` or `BLOCKED`, chosen by the rules in *Final Report*.

Stages

| # | Member | Input (`$ARGUMENTS`) | Writes | Requires | |---|---|---|---|---| | 1 | `idea-validator` | the idea text | `idea.md`, `validate.md` in `YYYY_MM_DD_<name>/` (a same-day folder with the same name is reused) | an idea description | | 2 | `prd-generator` | `PROJECT_DIR` | `prd.md` | `idea.md`, `validate.md` | | 2b | `brand-name-checker` (opt-in) | product name from `prd.md` | nothing (inline report) | `prd.md` | | 3 | `tad-generator` | `PROJECT_DIR` | `tad.md` | `prd.md` | | 4 | `tasks-generator` | `PROJECT_DIR/prd.md` (a file, not the folder) | `tasks.md` | `prd.md` (reads `tad.md` if present) |

Per-member gates, push behavior, existing-file modes and stop conditions: `references/member-contracts.md`. Read it before the first member runs.

Dependency Preflight (mandatory)

This skill **invokes** the five skills declared in frontmatter `dependencies`. Run this at Workflow step 4, after the range is fixed and before any member writes a file:

if command -v asm >/dev/null && asm deps --help >/dev/null 2>&1; then
  asm deps discover product-planner --json || echo "discover failed; acquire still runs" >&2
  echo "pp_mode=lease"
else
  echo "asm deps unavailable: npm install -g agent-skill-manager@latest" >&2
  echo "pp_mode=installed"
fi
printf 'pp_session=%s\n' "product-planner-$(date +%s)-$$"   # record it; reuse it verbatim

1. With `pp_mode=lease`, run `asm deps acquire <member> --session <pp_session> --json` for each **chain** member in range, in Stages order. Record each returned `skillMdPath`. 2. With `pp_mode=installed`, check each chain member in range with `test -f "$HOME/.claude/skills/<member>/SKILL.md" || test -f "$HOME/.agents/skills/<member>/SKILL.md"`. Record the path that exists. 3. If any chain member fails step 1 or 2, print one line per missing member, `Missing skill: <member> — install: asm install github:luongnv89/skills:skills/<member> -p claude --yes`, then stop before any file is written. The status is `BLOCKED`. Never imitate a member inline. 4. Check `brand-name-checker` the same way only when the user opts into the brand check. If it is missing, skip the brand check and list the skip under `Uncertainty:`. This miss is fail-soft. 5. **Release in `finally`.** If any acquire ran, run `asm deps release --session <pp_session> --json` once at every terminal outcome, stops included, before the Final Report. List a failed release under `Uncertainty:`.

Chain members in range are acquired at preflight, not at their stage: the range fixes that each one runs, and a miss found at stage 3 would leave a half-built plan. The brand check is an optional branch, so it is acquired only when reached.

Repo Sync Before Edits (mandatory)

The members write files into `PROJECT_DIR`. Run this once at Workflow step 5, before the first member. The sync target is `PROJECT_DIR`, or the ideas root when stage 1 has not created the folder yet.

1. Run `repo="$(git -C "<sync target>" rev-parse --show-toplevel)"`. If it fails, skip the sync and record `sync: skipped (not a git repo)`. 2. Run `git -C "$repo" remote get-url origin`. If it fails, skip steps 3–6 and record `sync: skipped (no origin)`. 3. Run `branch="$(git -C "$repo" rev-parse --abbrev-ref HEAD)"`. If it prints `HEAD`, skip steps 4–6 and record `sync: skipped (detached HEAD)`. 4. Run `git -C "$repo" status --porcelain`. If the output is empty, run `git -C "$repo" fetch origin && git -C "$repo" pull --rebase origin "$branch"`. 5. If the output is not empty, run `git -C "$repo" stash push -u -m "product-planner pre-sync"`, then the same fetch and pull, then `git -C "$repo" stash pop`. 6. If the rebase conflicts, run `git -C "$repo" rebase --abort`, then `git -C "$repo" stash pop` when step 5 stashed. If the stash pop conflicts, leave the stash in place. In both cases stop and ask the user how

Read more
Ships withluongnv89-skills

One command drops a tested, versioned skill into your agent. No more ad-hoc prompts. The same rigorous steps run every time. Skills are independent files.

Get the whole plugin

Other skills on luongnv89-skills.