Product Team — Domain Orchestrator & Discovery Loop
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.
When to invoke
| 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) |
Routing logic (deterministic)
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.
The discovery loop (the domain's recurring agentic loop)
Modern discovery is a weekly habit, not a project phase (Torres). Run it as a bounded
loop with two machine gates:
- Observe — maintain
discovery_log.json (interviews, assumption tests; shape in
assets/sample_discovery_log.json) and score the cadence: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.
- Choose — the tracker's
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).
- Act — run the interview / assumption test with the routed sub-skill's tools.
- Verify — keep the tree structurally sound before it may drive a roadmap:
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).
- Record / Repeat-or-stop — update the log, keep the weekly streak alive. Stop
states: HEALTHY + validated assumption → graduate to
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.
Hard rules
- Evidence before conviction: no roadmap item cites the OST unless
ost_linter.py
exits 0; no insight is asserted from a single participant (anecdote, not insight).
- Outcome-first: every loop hangs from one measurable outcome — the linter's O1 rule
is the intake gate.
- Experiments are gated by math: sample size from
../experiment-designer/scripts/sample_size_calculator.py, never gut feel; report the
MDE with the verdict.
- Prioritization shows its framework: RICE for steady-state, WSJF/cost-of-delay when
time sensitivity dominates, opportunity scoring for underserved needs — name which and
why (see references/product_operating_model.md).
- AI features ship with evals: a golden set + rubric is the PRD's quality contract
for probabilistic features
(references/ai_product_evals.md).
- Never modify a gate you are judged by; exhausted budgets escalate to a named human,
never report as success.
Forcing-question library (grill-with-docs pattern)
One per turn, recommended answer, canon citation. Never run a sub-skill or start a loop
until the lane-defining decision is locked:
- DISCOVERY lane: "What is the single outcome this discovery serves, stated with a
number? Recommended: write it as the OST root first — opportunities without an outcome
are a feature factory. Canon: Torres, Continuous Discovery Habits; opportunity
solution trees (producttalk.org)."
- PRIORITIZE lane: "Does time sensitivity change this ranking — would delaying any
item a quarter erode its value? Recommended: if yes, run WSJF/cost-of-delay alongside
RICE and compare ranks; flag items whose rank flips on a one-step estimate change.
Canon: Reinertsen, Principles of Product Development Flow; SAFe WSJF false-precision
critique."
- EXPERIMENT lane: "What baseline rate and MDE justify this test's runtime?
Recommended: compute n first; if you can't reach it in 4 weeks, test a bigger lever.
Canon: statistical power analysis (experiment-designer)."
- ANALYTICS lane: "Is your North Star a leading indicator of value exchange, or
revenue/vanity? Recommended: leading value metric with an input tree. Canon: Amplitude,
The North Star Playbook."
- STRATEGY lane: "Are these OKRs outcomes or shipping lists? Recommended: outcomes —
output OKRs are the #1 operating-model failure. Canon: Cagan, Transformed (SVPG,
2024)."
- BUILD lanes (spec-to-repo / saas-scaffolder): "Which validated assumption says this
should be built at all? Recommended: link the OST test that survived; building is the
most expensive way to test an idea. Canon: Torres; Bland, Testing Business Ideas."
Assumptions
- The user owns (or advises the owner of) the product decision.
- Discovery data lives in the workspace as JSON logs — the loop is file-backed and
resumable; every tool ships
--sample so the shape is visible first.
- The four standalone plugins are installed alongside the bundle (the router still
routes to them by path if not).
Non-goals
- Not the delivery loop — sprint/flow/Jira work routes to
project-management.
- Not the generic loop engine — that is
engineering/agent-harness; this orchestrator is
the product-domain adapter (router + discovery gates).
- Not campaign marketing —
marketing/landing builds from-scratch marketing pages;
landing-page-generator here scaffolds product Next.js/TSX pages.
Output artifacts
| 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 |
Anti-patterns (do not)
- ❌ Run all 16 lanes "to be thorough" — route to one, digest, chain on confirmation
- ❌ Cite an OST that fails the linter, or promote a single-participant anecdote to insight
- ❌ Ship an AI feature whose PRD has no eval (golden set + rubric)
- ❌ Let the discovery streak die silently — DORMANT escalates by name
- ❌ Treat RICE as the only prioritization lens when deadlines dominate
References
- references/continuous_discovery_canon.md —
Torres, OST, assumption testing, JTBD switch interviews, story mapping
- references/product_operating_model.md — Cagan
Transformed, North Star framework, PLG benchmarks, WSJF/ODI vs RICE
- references/ai_product_evals.md — evals-as-PRD, model
cards, evaluator-optimizer loops
- Loop engine:
engineering/agent-harness · Loop vocabulary: loop-library
Source: alirezarezvani/claude-skills → product-team/skills/product-skills/SKILL.md
1---2name: product-skills3description: Use when coordinating product work across the 12 bundled product sub-skills (RICE, OKRs, UX research, design tokens, competitive teardown, analytics, experiments, discovery, roadmaps, spec-to-repo, landing pages, SaaS scaffolding) or the 4 standalone product-team plugins (user stories, Apple HIG, code-to-PRD, research summarizer). Triggers on 'help me prioritize', 'plan a product experiment', 'we ship features nobody uses', 'run the discovery loop', 'is our OST sound'. Forks context to route to one sub-skill via a deterministic signal router and returns a digest; can also drive a continuous-discovery loop (Torres cadence tracker + OST linter as machine gates) or a full goal→plan→execute→verify→close run through the repo-wide agent-harness. Distinct from project-management (how to deliver vs what to build), marketing/landing (from-scratch pages), and engineering/agent-harness (the...4---5
6
7# Product Team — Domain Orchestrator & Discovery Loop
8
9This orchestrator does two jobs. **Routing:** fork context, classify a product inquiry
10with `scripts/product_goal_router.py` across all 16 product-team lanes (12 bundled + 4
11standalone plugins), run exactly one, return a digest. **Looping:** run product work as
12bounded agentic loops with machine-checkable gates — the continuous-discovery loop
13(weekly cadence scored by `discovery_cadence_tracker.py`, tree structure enforced by
14`ost_linter.py`) and goal-scale runs through the repo-wide agent-harness.
15
16## When to invoke
17
18| Symptom | Sub-skill |
19|---|---|
20| "Prioritize features / RICE / PRD" | `product-manager-toolkit` |
21| "OKRs, strategy cascade" | `product-strategist` |
22| "Personas, usability, research synthesis" | `ux-researcher-designer` |
23| "Design tokens, WCAG contrast" | `ui-design-system` |
24| "Competitor matrix, teardown" | `competitive-teardown` |
25| "Retention, cohorts, funnels, KPIs" | `product-analytics` |
26| "A/B test, sample size, hypothesis" | `experiment-designer` |
27| "Discovery, assumptions, opportunity trees" | `product-discovery` |
28| "Roadmap comms, release notes, changelog" | `roadmap-communicator` |
29| "Spec → runnable repo" | `spec-to-repo` |
30| "Landing page (Next.js/Tailwind)" | `landing-page-generator` |
31| "SaaS boilerplate" | `saas-scaffolder` |
32| "User stories, sprint capacity" | `agile-product-owner` (standalone) |
33| "Apple HIG audit" | `apple-hig-expert` (standalone) |
34| "PRD from an existing codebase" | `code-to-prd` (standalone) |
35| "Summarize papers/articles" | `research-summarizer` (standalone) |
36
37## Routing logic (deterministic)
38
39```bash
40python3 scripts/product_goal_router.py --text "<the goal>" --output json
41```
42
43Exit 0 → `route_to` names the skill (with `skill_path`, including the standalone
44plugins): load its SKILL.md and follow its workflow. Exit 2 → ask ONE clarifying question
45naming the listed candidates, with a recommended answer. Exit 3 → no signal: ask the user
46to restate the goal with the deliverable named. Never guess silently; never silently
47chain — digest first, confirm, then chain.
48
49## The discovery loop (the domain's recurring agentic loop)
50
51Modern discovery is a weekly habit, not a project phase (Torres). Run it as a bounded
52loop with two machine gates:
53
541. **Observe** — maintain `discovery_log.json` (interviews, assumption tests; shape in
55 `assets/sample_discovery_log.json`) and score the cadence:
56 ```bash
57 python3 scripts/discovery_cadence_tracker.py --input discovery_log.json
58 ```
59 Refuses on < 2 interviews (exit 5) — there is no cadence to measure yet. Output:
60 health 0–100, verdict HEALTHY/AT-RISK/DORMANT, named gaps, and `next_loop_action`.
612. **Choose** — the tracker's `next_loop_action` IS the choice: book the touchpoint,
62 re-anchor the guide on the outcome, or test the top untested assumption (route to
63 `product-discovery`'s assumption_mapper for prioritization).
643. **Act** — run the interview / assumption test with the routed sub-skill's tools.
654. **Verify** — keep the tree structurally sound before it may drive a roadmap:
66 ```bash
67 python3 scripts/ost_linter.py --input ost.json # exit 2 = NEEDS-REWORK, fix before citing the tree
68 ```
69 Rules: one measurable outcome root (O1), opportunities are needs not features (O2),
70 targeted opportunities compare ≥ 2 solutions (O3), every solution has an assumption
71 test (O4), no orphan solutions (O5 — the feature-factory tell).
725. **Record / Repeat-or-stop** — update the log, keep the weekly streak alive. Stop
73 states: HEALTHY + validated assumption → graduate to `experiment-designer` (build the
74 A/B gate) or `product-manager-toolkit` (PRD); DORMANT for 4+ weeks → escalate to the
75 product lead by name — do not quietly let discovery die.
76
77For build-scale goals ("turn this validated spec into a repo and verify it"), compile
78through the repo-wide harness instead:
79
80```bash
81python3 engineering/agent-harness/skills/agent-harness/scripts/goal_compiler.py \
82 --goal "<goal>" --manifest engineering/agent-harness/skills/agent-harness/assets/harnesses/product-team.json \
83 --out .agent-harness/plan.json
84```
85
86The domain's three strongest close-out gates plug in as task verifications:
87`../spec-to-repo/scripts/validate_project.py` (exit 0), `code-to-prd`'s golden
88`expected_outputs/`, and `research-summarizer`'s citation-count check.
89
90## Hard rules
91
921. **Evidence before conviction**: no roadmap item cites the OST unless `ost_linter.py`
93 exits 0; no insight is asserted from a single participant (anecdote, not insight).
942. **Outcome-first**: every loop hangs from one measurable outcome — the linter's O1 rule
95 is the intake gate.
963. **Experiments are gated by math**: sample size from
97 `../experiment-designer/scripts/sample_size_calculator.py`, never gut feel; report the
98 MDE with the verdict.
994. **Prioritization shows its framework**: RICE for steady-state, WSJF/cost-of-delay when
100 time sensitivity dominates, opportunity scoring for underserved needs — name which and
101 why (see [references/product_operating_model.md](references/product_operating_model.md)).
1025. **AI features ship with evals**: a golden set + rubric is the PRD's quality contract
103 for probabilistic features
104 ([references/ai_product_evals.md](references/ai_product_evals.md)).
1056. **Never modify a gate you are judged by**; exhausted budgets escalate to a named human,
106 never report as success.
107
108## Forcing-question library (grill-with-docs pattern)
109
110One per turn, recommended answer, canon citation. Never run a sub-skill or start a loop
111until the lane-defining decision is locked:
112
113- **DISCOVERY lane**: "What is the single outcome this discovery serves, stated with a
114 number? Recommended: write it as the OST root first — opportunities without an outcome
115 are a feature factory. Canon: Torres, *Continuous Discovery Habits*; opportunity
116 solution trees (producttalk.org)."
117- **PRIORITIZE lane**: "Does time sensitivity change this ranking — would delaying any
118 item a quarter erode its value? Recommended: if yes, run WSJF/cost-of-delay alongside
119 RICE and compare ranks; flag items whose rank flips on a one-step estimate change.
120 Canon: Reinertsen, *Principles of Product Development Flow*; SAFe WSJF false-precision
121 critique."
122- **EXPERIMENT lane**: "What baseline rate and MDE justify this test's runtime?
123 Recommended: compute n first; if you can't reach it in 4 weeks, test a bigger lever.
124 Canon: statistical power analysis (experiment-designer)."
125- **ANALYTICS lane**: "Is your North Star a leading indicator of value exchange, or
126 revenue/vanity? Recommended: leading value metric with an input tree. Canon: Amplitude,
127 *The North Star Playbook*."
128- **STRATEGY lane**: "Are these OKRs outcomes or shipping lists? Recommended: outcomes —
129 output OKRs are the #1 operating-model failure. Canon: Cagan, *Transformed* (SVPG,
130 2024)."
131- **BUILD lanes (spec-to-repo / saas-scaffolder)**: "Which validated assumption says this
132 should be built at all? Recommended: link the OST test that survived; building is the
133 most expensive way to test an idea. Canon: Torres; Bland, *Testing Business Ideas*."
134
135## Assumptions
136
1371. The user owns (or advises the owner of) the product decision.
1382. Discovery data lives in the workspace as JSON logs — the loop is file-backed and
139 resumable; every tool ships `--sample` so the shape is visible first.
1403. The four standalone plugins are installed alongside the bundle (the router still
141 routes to them by path if not).
142
143## Non-goals
144
145- Not the delivery loop — sprint/flow/Jira work routes to `project-management`.
146- Not the generic loop engine — that is `engineering/agent-harness`; this orchestrator is
147 the product-domain adapter (router + discovery gates).
148- Not campaign marketing — `marketing/landing` builds from-scratch marketing pages;
149 `landing-page-generator` here scaffolds product Next.js/TSX pages.
150
151## Output artifacts
152
153| Mode | Artifact |
154|---|---|
155| Route | Sub-skill's own artifact + ≤ 200-word digest with one canon-cited challenge |
156| Discovery loop | `discovery_log.json` + cadence report + linted `ost.json` |
157| Harness run | `.agent-harness/plan.json` + `state.json` + close handoff |
158
159## Anti-patterns (do not)
160
161- ❌ Run all 16 lanes "to be thorough" — route to one, digest, chain on confirmation
162- ❌ Cite an OST that fails the linter, or promote a single-participant anecdote to insight
163- ❌ Ship an AI feature whose PRD has no eval (golden set + rubric)
164- ❌ Let the discovery streak die silently — DORMANT escalates by name
165- ❌ Treat RICE as the only prioritization lens when deadlines dominate
166
167## References
168
169- [references/continuous_discovery_canon.md](references/continuous_discovery_canon.md) —
170 Torres, OST, assumption testing, JTBD switch interviews, story mapping
171- [references/product_operating_model.md](references/product_operating_model.md) — Cagan
172 *Transformed*, North Star framework, PLG benchmarks, WSJF/ODI vs RICE
173- [references/ai_product_evals.md](references/ai_product_evals.md) — evals-as-PRD, model
174 cards, evaluator-optimizer loops
175- Loop engine: `engineering/agent-harness` · Loop vocabulary: `loop-library`
176
177---
178
179**Source:** [`alirezarezvani/claude-skills`](https://github.com/alirezarezvani/claude-skills) → `product-team/skills/product-skills/SKILL.md`