Orchestrates product management workflows by routing specific requests to one of 16 specialized sub-skills (e.g., RICE, UX research, analytics) or executing continuous discovery loops with machine-checkable gates. It ensures evidence-based decision-making by validating opportunity trees and experiment designs before execution.
Say it in your own words; the assistant finds this recipe by itself. Examples:
Use this skill when a user needs to coordinate complex product work that spans multiple disciplines, such as combining user research with prioritization or analytics. It is ideal for running continuous discovery loops, validating opportunity solution trees, or determining which specific product sub-skill (like RICE or A/B testing) should handle a particular task. It is also appropriate when the user wants to turn a validated spec into a runnable repository or needs a high-level product strategy digest.
This orchestrator does two jobs. Routing: fork context, classify a product inquiry
with scripts/product_goal_router.py across all 16 product-team lanes (12 bundled + 4
standalone plugins), run exactly one, return a digest. Looping: run product work as
bounded agentic loops with machine-checkable gates — the continuous-discovery loop
(weekly cadence scored by discovery_cadence_tracker.py, tree structure enforced by
ost_linter.py) and goal-scale runs through the repo-wide agent-harness.
| Symptom | Sub-skill |
|---|---|
| "Prioritize features / RICE / PRD" | product-manager-toolkit |
| "OKRs, strategy cascade" | product-strategist |
| "Personas, usability, research synthesis" | ux-researcher-designer |
| "Design tokens, WCAG contrast" | ui-design-system |
| "Competitor matrix, teardown" | competitive-teardown |
| "Retention, cohorts, funnels, KPIs" | product-analytics |
| "A/B test, sample size, hypothesis" | experiment-designer |
| "Discovery, assumptions, opportunity trees" | product-discovery |
| "Roadmap comms, release notes, changelog" | roadmap-communicator |
| "Spec → runnable repo" | spec-to-repo |
| "Landing page (Next.js/Tailwind)" | landing-page-generator |
| "SaaS boilerplate" | saas-scaffolder |
| "User stories, sprint capacity" | agile-product-owner (standalone) |
| "Apple HIG audit" | apple-hig-expert (standalone) |
| "PRD from an existing codebase" | code-to-prd (standalone) |
| "Summarize papers/articles" | research-summarizer (standalone) |
python3 scripts/product_goal_router.py --text "<the goal>" --output json
Exit 0 → route_to names the skill (with skill_path, including the standalone
plugins): load its SKILL.md and follow its workflow. Exit 2 → ask ONE clarifying question
naming the listed candidates, with a recommended answer. Exit 3 → no signal: ask the user
to restate the goal with the deliverable named. Never guess silently; never silently
chain — digest first, confirm, then chain.
Modern discovery is a weekly habit, not a project phase (Torres). Run it as a bounded loop with two machine gates:
discovery_log.json (interviews, assumption tests; shape in
assets/sample_discovery_log.json) and score the cadence:
bash
python3 scripts/discovery_cadence_tracker.py --input discovery_log.json
Refuses on < 2 interviews (exit 5) — there is no cadence to measure yet. Output:
health 0–100, verdict HEALTHY/AT-RISK/DORMANT, named gaps, and next_loop_action.next_loop_action IS the choice: book the touchpoint,
re-anchor the guide on the outcome, or test the top untested assumption (route to
product-discovery's assumption_mapper for prioritization).bash
python3 scripts/ost_linter.py --input ost.json # exit 2 = NEEDS-REWORK, fix before citing the tree
Rules: one measurable outcome root (O1), opportunities are needs not features (O2),
targeted opportunities compare ≥ 2 solutions (O3), every solution has an assumption
test (O4), no orphan solutions (O5 — the feature-factory tell).experiment-designer (build the
A/B gate) or product-manager-toolkit (PRD); DORMANT for 4+ weeks → escalate to the
product lead by name — do not quietly let discovery die.For build-scale goals ("turn this validated spec into a repo and verify it"), compile through the repo-wide harness instead:
python3 engineering/agent-harness/skills/agent-harness/scripts/goal_compiler.py \
--goal "<goal>" --manifest engineering/agent-harness/skills/agent-harness/assets/harnesses/product-team.json \
--out .agent-harness/plan.json
The domain's three strongest close-out gates plug in as task verifications:
../spec-to-repo/scripts/validate_project.py (exit 0), code-to-prd's golden
expected_outputs/, and research-summarizer's citation-count check.
ost_linter.py
exits 0; no insight is asserted from a single participant (anecdote, not insight).../experiment-designer/scripts/sample_size_calculator.py, never gut feel; report the
MDE with the verdict.One per turn, recommended answer, canon citation. Never run a sub-skill or start a loop until the lane-defining decision is locked:
--sample so the shape is visible first.project-management.engineering/agent-harness; this orchestrator is
the product-domain adapter (router + discovery gates).marketing/landing builds from-scratch marketing pages;
landing-page-generator here scaffolds product Next.js/TSX pages.| Mode | Artifact |
|---|---|
| Route | Sub-skill's own artifact + ≤ 200-word digest with one canon-cited challenge |
| Discovery loop | discovery_log.json + cadence report + linted ost.json |
| Harness run | .agent-harness/plan.json + state.json + close handoff |
engineering/agent-harness · Loop vocabulary: loop-libraryLICENSESKILL.mdassets/sample_discovery_log.jsonassets/sample_ost.jsonreferences/ai_product_evals.mdreferences/continuous_discovery_canon.mdreferences/product_operating_model.mdscripts/discovery_cadence_tracker.pyscripts/ost_linter.pyscripts/product_goal_router.pyVendored from alirezarezvani/claude-skills, commit 27cfcd0fb0a4, path product-team/skills/product-skills, licence MIT. The upstream licence file ships inside the skill.