Rule-based product method: scores an idea, finds its riskiest assumption, sequences the build.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Run the full Idea to Product method on one idea and its feature list and return a Scope and Sequence plan as a Markdown document, followed by a short JSON summary. The document covers the problem and buyer, the riskiest assumption with its risk table, this week's validation test with pass and kill lines, red flags, the MVP cut (must, should, not now, with reasons), the build sequence with builders and dates, milestones through Hand Off, the launch plan and success metric, kill criteria written before the work, build rules for the product type, and a Hand Off checklist. When there is no commitment-level evidence yet, the build is scheduled to start after the test's decision date.
The idea in plain words: what it does and for whom.
one_time, monthly, annual or per_use. Default one_time.
People building in parallel. Default 1.
What has been learned so far.
The person who pays, by role and niche, for example "owners of 2 to 10 truck plumbing companies".
The person who uses it, if different from who pays.
Intended price in US dollars.
Override the detected buyer type.
ISO date the work starts. Default today (UTC).
Build window in weeks. Default 6.
True if there is an existing list, following or customer base to test with.
Override the detected product type.
True if a working version is already in users' hands.
Days until a decision is needed. Default 7.
Effort points one builder clears in a week. Default 5.
Cash available for the validation test. Default 0.
True if buyers pay from launch. Default true.
How many named buyers can be contacted this week.
False if nobody on the team can build the hardest part. Default true.
What they use or do about the problem today, for example "spreadsheets and texts", "Jobber", or "nothing".
True if the founder is building this alongside a business they already run.
Run the full Idea to Product method on one idea and its feature list and return a Scope and Sequence plan as a Markdown document, followed by a short JSON summary. The document covers the problem and buyer, the riskiest assumption with its risk table, this week's validation test with pass and kill lines, red flags, the MVP cut (must, should, not now, with reasons), the build sequence with builders and dates, milestones through Hand Off, the launch plan and success metric, kill criteria written before the work, build rules for the product type, and a Hand Off checklist. When there is no commitment-level evidence yet, the build is scheduled to start after the test's decision date.
| Argument | Type | Description |
|---|---|---|
| idea* | string | The idea in plain words: what it does and for whom. |
| scope | string | |
| title | string | |
| billing | string | one_time, monthly, annual or per_use. Default one_time. |
| builders | integer | People building in parallel. Default 1. |
| evidence | array | What has been learned so far. |
| features* | array | |
| who_pays | string | The person who pays, by role and niche, for example "owners of 2 to 10 truck plumbing companies". |
| who_uses | string | The person who uses it, if different from who pays. |
| price_usd | number | Intended price in US dollars. |
| buyer_type | string | Override the detected buyer type. |
| start_date | string | ISO date the work starts. Default today (UTC). |
| build_weeks | integer | Build window in weeks. Default 6. |
| has_audience | boolean | True if there is an existing list, following or customer base to test with. |
| product_type | string | Override the detected product type. |
| audience_size | integer | |
| has_prototype | boolean | True if a working version is already in users' hands. |
| days_available | integer | Days until a decision is needed. Default 7. |
| success_metric | object | |
| points_per_week | number | Effort points one builder clears in a week. Default 5. |
| test_budget_usd | number | Cash available for the validation test. Default 0. |
| charge_at_launch | boolean | True if buyers pay from launch. Default true. |
| reachable_buyers | integer | How many named buyers can be contacted this week. |
| technical_builder | boolean | False if nobody on the team can build the hardest part. Default true. |
| current_alternative | string | What they use or do about the problem today, for example "spreadsheets and texts", "Jobber", or "nothing". |
| runs_another_business | boolean | True if the founder is building this alongside a business they already run. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"idea",
"features"
],
"properties": {
"idea": {
"type": "string",
"maxLength": 2000,
"minLength": 10,
"description": "The idea in plain words: what it does and for whom."
},
"scope": {
"enum": [
"mvp",
"launch",
"all"
],
"type": "string"
},
"title": {
"type": "string",
"maxLength": 90
},
"billing": {
"enum": [
"one_time",
"monthly",
"annual",
"per_use"
],
"type": "string",
"description": "one_time, monthly, annual or per_use. Default one_time."
},
"builders": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "People building in parallel. Default 1."
},
"evidence": {
"type": "array",
"items": {
"type": "object",
"required": [
"level",
"count"
],
"properties": {
"note": {
"type": "string",
"maxLength": 200
},
"count": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "How many instances, for example 4 interviews or 12 signups."
},
"level": {
"enum": [
"opinion",
"complaint_found",
"interview_pain",
"signup",
"meeting_booked",
"technical_proof",
"commitment",
"payment",
"repeat_usage"
],
"type": "string",
"description": "Rung on the evidence ladder: opinion, complaint_found, interview_pain, signup, meeting_booked, technical_proof, commitment, payment, repeat_usage."
},
"assumption": {
"enum": [
"problem",
"buyer_access",
"willingness_to_pay",
"solution_fit",
"feasibility",
"retention",
"supply",
"regulatory",
"unit_economics",
"operator_capacity"
],
"type": "string",
"description": "Limit this evidence to one assumption. Default: every assumption that rung lowers."
}
}
},
"maxItems": 20,
"description": "What has been learned so far."
},
"features": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"tags"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_-]*$",
"maxLength": 60,
"minLength": 1
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"tags": {
"type": "array",
"items": {
"enum": [
"core_job",
"revenue",
"compliance",
"trust_safety",
"onboarding",
"measurement",
"retention",
"integration",
"automation",
"admin",
"growth",
"analytics",
"customization",
"platform",
"scale",
"delight"
],
"type": "string"
},
"maxItems": 6,
"description": "What the feature does: core_job, revenue, compliance, trust_safety, onboarding, measurement, retention, integration, automation, admin, growth, analytics, customization, platform, scale, delight."
},
"effort": {
"enum": [
"xs",
"s",
"m",
"l",
"xl"
],
"type": "string",
"description": "xs (1 point), s (2), m (3, default), l (5), xl (8)."
},
"points": {
"type": "number",
"maximum": 40,
"minimum": 0.5,
"description": "Effort points, overrides effort. A builder clears 5 a week by default."
},
"depends_on": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_-]*$",
"maxLength": 60,
"minLength": 1
},
"maxItems": 20,
"description": "Ids of features that must exist first."
},
"requested_by": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "How many buyers asked for it."
},
"manual_alternative": {
"type": "boolean",
"description": "True if a person could do this by hand for the first buyers."
}
}
},
"maxItems": 60,
"minItems": 1
},
"who_pays": {
"type": "string",
"maxLength": 200,
"description": "The person who pays, by role and niche, for example \"owners of 2 to 10 truck plumbing companies\"."
},
"who_uses": {
"type": "string",
"maxLength": 200,
"description": "The person who uses it, if different from who pays."
},
"price_usd": {
"type": "number",
"maximum": 10000000,
"minimum": 0,
"description": "Intended price in US dollars."
},
"buyer_type": {
"enum": [
"consumer",
"prosumer",
"smb_owner",
"mid_market",
"enterprise",
"public_sector",
"nonprofit_ministry",
"developer",
"own_business"
],
"type": "string",
"description": "Override the detected buyer type."
},
"start_date": {
"type": "string",
"description": "ISO date the work starts. Default today (UTC)."
},
"build_weeks": {
"type": "integer",
"maximum": 52,
"minimum": 1,
"description": "Build window in weeks. Default 6."
},
"has_audience": {
"type": "boolean",
"description": "True if there is an existing list, following or customer base to test with."
},
"product_type": {
"enum": [
"b2b_saas",
"consumer_app",
"marketplace",
"productized_service",
"ai_agent",
"physical_product",
"hardware_device",
"content_community",
"developer_tool",
"internal_tool"
],
"type": "string",
"description": "Override the detected product type."
},
"audience_size": {
"type": "integer",
"maximum": 100000000,
"minimum": 1
},
"has_prototype": {
"type": "boolean",
"description": "True if a working version is already in users' hands."
},
"days_available": {
"type": "integer",
"maximum": 90,
"minimum": 1,
"description": "Days until a decision is needed. Default 7."
},
"success_metric": {
"type": "object",
"required": [
"name",
"target",
"unit",
"days_after_launch"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"unit": {
"type": "string",
"maxLength": 40,
"minLength": 1
},
"target": {
"type": "number",
"maximum": 1000000000,
"minimum": 0
},
"days_after_launch": {
"type": "integer",
"maximum": 365,
"minimum": 1
}
}
},
"points_per_week": {
"type": "number",
"maximum": 40,
"minimum": 1,
"description": "Effort points one builder clears in a week. Default 5."
},
"test_budget_usd": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "Cash available for the validation test. Default 0."
},
"charge_at_launch": {
"type": "boolean",
"description": "True if buyers pay from launch. Default true."
},
"reachable_buyers": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "How many named buyers can be contacted this week."
},
"technical_builder": {
"type": "boolean",
"description": "False if nobody on the team can build the hardest part. Default true."
},
"current_alternative": {
"type": "string",
"maxLength": 200,
"description": "What they use or do about the problem today, for example \"spreadsheets and texts\", \"Jobber\", or \"nothing\"."
},
"runs_another_business": {
"type": "boolean",
"description": "True if the founder is building this alongside a business they already run."
}
}
}Classify a product or business idea with fixed rules (no AI model): one of 10 product types and 9 buyer types with the words that matched, a 0 to 100 risk score on each of 10 assumptions (problem, buyer access, willingness to pay, solution fit, feasibility, retention, supply, regulatory, unit economics, operator capacity) with every rule that moved each score, the riskiest assumption written as a sentence a test can prove wrong, red flags, the stage of the Idea to Product method it is in, the build rules for its type, and the cheapest validation test for this week with pass and kill lines. Evidence already gathered (interviews, signups, deposits, payments) lowers risk along a fixed evidence ladder. The same input always gives the same answer.
| Argument | Type | Description |
|---|---|---|
| idea* | string | The idea in plain words: what it does and for whom. |
| billing | string | one_time, monthly, annual or per_use. Default one_time. |
| evidence | array | What has been learned so far. |
| who_pays | string | The person who pays, by role and niche, for example "owners of 2 to 10 truck plumbing companies". |
| who_uses | string | The person who uses it, if different from who pays. |
| price_usd | number | Intended price in US dollars. |
Sort a feature list into must, should and not now using 15 explicit rules on each feature's tags (core_job, revenue, compliance, trust_safety, onboarding, measurement, retention, integration, automation, admin, growth, analytics, customization, platform, scale, delight), whether it could be done by hand at first, and how many buyers asked for it. Dependencies of a must become must. Should-haves fill the build window by value per effort point in dependency order. Returns each feature with its tier, the rule and the reason, effort totals against capacity, and when the must-haves do not fit, the specific cuts that would make them fit. Rejects duplicate ids, unknown dependencies and cycles with the chain named.
| Argument | Type | Description |
|---|---|---|
| builders | integer | People building in parallel. Default 1. |
| features* | array | |
| build_weeks | integer | Build window in weeks. Default 6. |
| points_per_week | number | Effort points one builder clears in a week. Default 5. |
| charge_at_launch | boolean | True if buyers pay from launch. Default true. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"features"
],
"properties": {
"builders": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "People building in parallel. Default 1."
},
"features": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"tags"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_-]*$",
"maxLength": 60,
"minLength": 1
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"tags": {
"type": "array",
"items": {
"enum": [
"core_job",
"revenue",
"compliance",
"trust_safety",
"onboarding",
"measurement",
"retention",
"integration",
"automation",
"admin",
"growth",
"analytics",
"customization",
"platform",
"scale",
"delight"
],
"type": "string"
},
"maxItems": 6,
"description": "What the feature does: core_job, revenue, compliance, trust_safety, onboarding, measurement, retention, integration, automation, admin, growth, analytics, customization, platform, scale, delight."
},
"effort": {
"enum": [
"xs",
"s",
"m",
"l",
"xl"
],
"type": "string",
"description": "xs (1 point), s (2), m (3, default), l (5), xl (8)."
},
"points": {
"type": "number",
"maximum": 40,
"minimum": 0.5,
"description": "Effort points, overrides effort. A builder clears 5 a week by default."
},
"depends_on": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_-]*$",
"maxLength": 60,
"minLength": 1
},
"maxItems": 20,
"description": "Ids of features that must exist first."
},
"requested_by": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "How many buyers asked for it."
},
"manual_alternative": {
"type": "boolean",
"description": "True if a person could do this by hand for the first buyers."
}
}
},
"maxItems": 60,
"minItems": 1
},
"build_weeks": {
"type": "integer",
"maximum": 52,
"minimum": 1,
"description": "Build window in weeks. Default 6."
},
"points_per_week": {
"type": "number",
"maximum": 40,
"minimum": 1,
"description": "Effort points one builder clears in a week. Default 5."
},
"charge_at_launch": {
"type": "boolean",
"description": "True if buyers pay from launch. Default true."
}
}
}Return one of the method's reference tables: the four stages and their exit gates, the 10 assumptions, the evidence ladder, the 18 validation tests, the MVP cut rules, the feature tags, the 10 product types with their risk priors and build rules, the 9 buyer types, the decision rules, or the risk scoring rules. Static reference, no computation on user data.
| Argument | Type | Description |
|---|---|---|
| topic* | string | stages, assumptions, evidence_ladder, validation_tests, mvp_rules, feature_tags, product_types, buyer_types, decision_rules or risk_rules. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"topic"
],
"properties": {
"topic": {
"enum": [
"stages",
"assumptions",
"evidence_ladder",
"validation_tests",
"mvp_rules",
"feature_tags",
"product_types",
"buyer_types",
"decision_rules",
"risk_rules"
],
"type": "string",
"description": "stages, assumptions, evidence_ladder, validation_tests, mvp_rules, feature_tags, product_types, buyer_types, decision_rules or risk_rules."
}
}
}Make a push, iterate, park or kill call on 1 to 12 products from their metrics (target, actual, kill line, must-hit), evidence, stage, review date, last activity, and monthly revenue and cost, using 10 named decision rules: a must-hit metric past its kill line on the review date kills; a weighted score under 30 on the review date kills; more than 45 days idle parks; revenue under cost and falling kills or forces a price or cost change; 80 or more with the stage gate evidence pushes. Returns each call with its score, rule, reason, next action, next review date and what would flip it, then portfolio notes. Money and time already spent are recorded and deliberately ignored.
| Argument | Type | Description |
|---|---|---|
| as_of | string | Review as of this date. Default today (UTC). |
| builders | integer | People available to build across the portfolio. |
| products* | array |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"products"
],
"properties": {
"as_of": {
"type": "string",
"description": "Review as of this date. Default today (UTC)."
},
"builders": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "People available to build across the portfolio."
},
"products": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"stage",
"metrics"
],
"properties": {
"name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"stage": {
"enum": [
"idea",
"validating",
"building",
"launched",
"growing"
],
"type": "string"
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"target",
"actual"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"actual": {
"type": "number",
"maximum": 1000000000,
"minimum": 0
},
"target": {
"type": "number",
"maximum": 1000000000,
"minimum": 0
},
"weight": {
"type": "number",
"maximum": 10,
"minimum": 0.1
},
"kill_at": {
"type": "number",
"maximum": 1000000000,
"minimum": 0,
"description": "The pre-committed kill line. Default 30 percent of target (higher is better) or 170 percent (lower is better)."
},
"must_hit": {
"type": "boolean",
"description": "True if crossing the kill line on the review date ends the product."
},
"direction": {
"enum": [
"higher_better",
"lower_better"
],
"type": "string"
}
}
},
"maxItems": 10,
"minItems": 1
},
"evidence": {
"type": "array",
"items": {
"type": "object",
"required": [
"level",
"count"
],
"properties": {
"note": {
"type": "string",
"maxLength": 200
},
"count": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "How many instances, for example 4 interviews or 12 signups."
},
"level": {
"enum": [
"opinion",
"complaint_found",
"interview_pain",
"signup",
"meeting_booked",
"technical_proof",
"commitment",
"payment",
"repeat_usage"
],
"type": "string",
"description": "Rung on the evidence ladder: opinion, complaint_found, interview_pain, signup, meeting_booked, technical_proof, commitment, payment, repeat_usage."
},
"assumption": {
"enum": [
"problem",
"buyer_access",
"willingness_to_pay",
"solution_fit",
"feasibility",
"retention",
"supply",
"regulatory",
"unit_economics",
"operator_capacity"
],
"type": "string",
"description": "Limit this evidence to one assumption. Default: every assumption that rung lowers."
}
}
},
"maxItems": 20
},
"internal": {
"type": "boolean",
"description": "True for an internal tool, which has no outside buyer."
},
"review_date": {
"type": "string",
"description": "The decision date set in advance. Default: today, so the review counts as due."
},
"last_activity": {
"type": "string"
},
"revenue_trend": {
"enum": [
"up",
"flat",
"down"
],
"type": "string"
},
"months_invested": {
"type": "number",
"maximum": 600,
"minimum": 0,
"description": "Recorded and deliberately ignored: past time does not decide."
},
"monthly_cost_usd": {
"type": "number",
"maximum": 1000000000,
"minimum": 0
},
"already_spent_usd": {
"type": "number",
"maximum": 1000000000,
"minimum": 0,
"description": "Recorded and deliberately ignored: past spend does not decide."
},
"monthly_revenue_usd": {
"type": "number",
"maximum": 1000000000,
"minimum": 0
}
}
},
"maxItems": 12,
"minItems": 1
}
}
}Turn a feature list with dependencies into a dated build plan: applies the MVP cut, orders tasks by dependency, schedules them across the given number of builders on working days (weekends skipped), computes the critical path and each task's slack, adds the method's own tasks (record the success metric, take payment, launch kit, Hand Off) where missing, and dates the milestones: first core job end to end, MVP in real users' hands, launch, success metric review, and Hand Off. Every plan carries a success metric and a review date; a default per product type is used and flagged when none is given.
| Argument | Type | Description |
|---|---|---|
| scope | string | "mvp": must-haves only. "launch" (default): must-haves plus should-haves that fit the window. "all": everything. |
| builders | integer | People building in parallel. Default 1. |
| features* | array | |
| start_date | string | ISO date the build starts. Default today (UTC). Weekends are skipped. |
| build_weeks | integer | Build window in weeks. Default 6. |
| product_type | string | Used for the default success metric when none is given. |
| success_metric | object |
Pick the cheapest test that can prove one assumption about an idea wrong within the days available, from a library of 18 named tests (for example Five Past-Behavior Interviews, Pay Link Pre-sale, Smoke Test Landing Page, Letter of Intent Round, Concierge MVP, Wizard of Oz, Feasibility Spike, Hand-Seeded Supply, Unit Cost Teardown, Regulatory Read and One Call). Tests are filtered by the buyer type, the price, the audience, reachable buyers, budget and whether someone can build, then ranked by strength of evidence against cost and days. Returns the sample, steps, a pass line, a kill line and an inconclusive rule set before the test runs, the decision date, a backup test, and every ruled-out test with the reason. Defaults to the riskiest assumption; pass assumption to choose another.
| Argument | Type | Description |
|---|---|---|
| idea* | string | The idea in plain words: what it does and for whom. |
| billing | string | one_time, monthly, annual or per_use. Default one_time. |
| evidence | array | What has been learned so far. |
| who_pays | string | The person who pays, by role and niche, for example "owners of 2 to 10 truck plumbing companies". |
| who_uses | string | The person who uses it, if different from who pays. |
| price_usd | number | Intended price in US dollars. |
| buyer_type |
| string |
| Override the detected buyer type. |
| start_date | string | ISO date the work starts. Default today (UTC). |
| has_audience | boolean | True if there is an existing list, following or customer base to test with. |
| product_type | string | Override the detected product type. |
| audience_size | integer |
| has_prototype | boolean | True if a working version is already in users' hands. |
| days_available | integer | Days until a decision is needed. Default 7. |
| test_budget_usd | number | Cash available for the validation test. Default 0. |
| reachable_buyers | integer | How many named buyers can be contacted this week. |
| technical_builder | boolean | False if nobody on the team can build the hardest part. Default true. |
| current_alternative | string | What they use or do about the problem today, for example "spreadsheets and texts", "Jobber", or "nothing". |
| runs_another_business | boolean | True if the founder is building this alongside a business they already run. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"idea"
],
"properties": {
"idea": {
"type": "string",
"maxLength": 2000,
"minLength": 10,
"description": "The idea in plain words: what it does and for whom."
},
"billing": {
"enum": [
"one_time",
"monthly",
"annual",
"per_use"
],
"type": "string",
"description": "one_time, monthly, annual or per_use. Default one_time."
},
"evidence": {
"type": "array",
"items": {
"type": "object",
"required": [
"level",
"count"
],
"properties": {
"note": {
"type": "string",
"maxLength": 200
},
"count": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "How many instances, for example 4 interviews or 12 signups."
},
"level": {
"enum": [
"opinion",
"complaint_found",
"interview_pain",
"signup",
"meeting_booked",
"technical_proof",
"commitment",
"payment",
"repeat_usage"
],
"type": "string",
"description": "Rung on the evidence ladder: opinion, complaint_found, interview_pain, signup, meeting_booked, technical_proof, commitment, payment, repeat_usage."
},
"assumption": {
"enum": [
"problem",
"buyer_access",
"willingness_to_pay",
"solution_fit",
"feasibility",
"retention",
"supply",
"regulatory",
"unit_economics",
"operator_capacity"
],
"type": "string",
"description": "Limit this evidence to one assumption. Default: every assumption that rung lowers."
}
}
},
"maxItems": 20,
"description": "What has been learned so far."
},
"who_pays": {
"type": "string",
"maxLength": 200,
"description": "The person who pays, by role and niche, for example \"owners of 2 to 10 truck plumbing companies\"."
},
"who_uses": {
"type": "string",
"maxLength": 200,
"description": "The person who uses it, if different from who pays."
},
"price_usd": {
"type": "number",
"maximum": 10000000,
"minimum": 0,
"description": "Intended price in US dollars."
},
"buyer_type": {
"enum": [
"consumer",
"prosumer",
"smb_owner",
"mid_market",
"enterprise",
"public_sector",
"nonprofit_ministry",
"developer",
"own_business"
],
"type": "string",
"description": "Override the detected buyer type."
},
"start_date": {
"type": "string",
"description": "ISO date the work starts. Default today (UTC)."
},
"has_audience": {
"type": "boolean",
"description": "True if there is an existing list, following or customer base to test with."
},
"product_type": {
"enum": [
"b2b_saas",
"consumer_app",
"marketplace",
"productized_service",
"ai_agent",
"physical_product",
"hardware_device",
"content_community",
"developer_tool",
"internal_tool"
],
"type": "string",
"description": "Override the detected product type."
},
"audience_size": {
"type": "integer",
"maximum": 100000000,
"minimum": 1
},
"has_prototype": {
"type": "boolean",
"description": "True if a working version is already in users' hands."
},
"days_available": {
"type": "integer",
"maximum": 90,
"minimum": 1,
"description": "Days until a decision is needed. Default 7."
},
"test_budget_usd": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "Cash available for the validation test. Default 0."
},
"reachable_buyers": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "How many named buyers can be contacted this week."
},
"technical_builder": {
"type": "boolean",
"description": "False if nobody on the team can build the hardest part. Default true."
},
"current_alternative": {
"type": "string",
"maxLength": 200,
"description": "What they use or do about the problem today, for example \"spreadsheets and texts\", \"Jobber\", or \"nothing\"."
},
"runs_another_business": {
"type": "boolean",
"description": "True if the founder is building this alongside a business they already run."
}
}
}| The number that decides success, its target, and how many days after launch to read it. |
| points_per_week | number | Effort points one builder clears in a week. Default 5. |
| charge_at_launch | boolean | True if buyers pay from launch. Default true. |
| validate_first_days | integer | Working days of validation before the build starts. Default 0. |
| include_method_tasks | boolean | Add the method's own tasks: metric recording, payment, launch kit and Hand Off. Default true. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"features"
],
"properties": {
"scope": {
"enum": [
"mvp",
"launch",
"all"
],
"type": "string",
"description": "\"mvp\": must-haves only. \"launch\" (default): must-haves plus should-haves that fit the window. \"all\": everything."
},
"builders": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "People building in parallel. Default 1."
},
"features": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"tags"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_-]*$",
"maxLength": 60,
"minLength": 1
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"tags": {
"type": "array",
"items": {
"enum": [
"core_job",
"revenue",
"compliance",
"trust_safety",
"onboarding",
"measurement",
"retention",
"integration",
"automation",
"admin",
"growth",
"analytics",
"customization",
"platform",
"scale",
"delight"
],
"type": "string"
},
"maxItems": 6,
"description": "What the feature does: core_job, revenue, compliance, trust_safety, onboarding, measurement, retention, integration, automation, admin, growth, analytics, customization, platform, scale, delight."
},
"effort": {
"enum": [
"xs",
"s",
"m",
"l",
"xl"
],
"type": "string",
"description": "xs (1 point), s (2), m (3, default), l (5), xl (8)."
},
"points": {
"type": "number",
"maximum": 40,
"minimum": 0.5,
"description": "Effort points, overrides effort. A builder clears 5 a week by default."
},
"depends_on": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_-]*$",
"maxLength": 60,
"minLength": 1
},
"maxItems": 20,
"description": "Ids of features that must exist first."
},
"requested_by": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "How many buyers asked for it."
},
"manual_alternative": {
"type": "boolean",
"description": "True if a person could do this by hand for the first buyers."
}
}
},
"maxItems": 60,
"minItems": 1
},
"start_date": {
"type": "string",
"description": "ISO date the build starts. Default today (UTC). Weekends are skipped."
},
"build_weeks": {
"type": "integer",
"maximum": 52,
"minimum": 1,
"description": "Build window in weeks. Default 6."
},
"product_type": {
"enum": [
"b2b_saas",
"consumer_app",
"marketplace",
"productized_service",
"ai_agent",
"physical_product",
"hardware_device",
"content_community",
"developer_tool",
"internal_tool"
],
"type": "string",
"description": "Used for the default success metric when none is given."
},
"success_metric": {
"type": "object",
"required": [
"name",
"target",
"unit",
"days_after_launch"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"unit": {
"type": "string",
"maxLength": 40,
"minLength": 1
},
"target": {
"type": "number",
"maximum": 1000000000,
"minimum": 0
},
"days_after_launch": {
"type": "integer",
"maximum": 365,
"minimum": 1
}
},
"description": "The number that decides success, its target, and how many days after launch to read it."
},
"points_per_week": {
"type": "number",
"maximum": 40,
"minimum": 1,
"description": "Effort points one builder clears in a week. Default 5."
},
"charge_at_launch": {
"type": "boolean",
"description": "True if buyers pay from launch. Default true."
},
"validate_first_days": {
"type": "integer",
"maximum": 60,
"minimum": 0,
"description": "Working days of validation before the build starts. Default 0."
},
"include_method_tasks": {
"type": "boolean",
"description": "Add the method's own tasks: metric recording, payment, launch kit and Hand Off. Default true."
}
}
}| assumption | string | The assumption to test. Default: the riskiest one the classifier finds. |
| buyer_type | string | Override the detected buyer type. |
| start_date | string | ISO date the work starts. Default today (UTC). |
| has_audience | boolean | True if there is an existing list, following or customer base to test with. |
| product_type | string | Override the detected product type. |
| audience_size | integer |
| has_prototype | boolean | True if a working version is already in users' hands. |
| days_available | integer | Days until a decision is needed. Default 7. |
| test_budget_usd | number | Cash available for the validation test. Default 0. |
| reachable_buyers | integer | How many named buyers can be contacted this week. |
| technical_builder | boolean | False if nobody on the team can build the hardest part. Default true. |
| current_alternative | string | What they use or do about the problem today, for example "spreadsheets and texts", "Jobber", or "nothing". |
| runs_another_business | boolean | True if the founder is building this alongside a business they already run. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"idea"
],
"properties": {
"idea": {
"type": "string",
"maxLength": 2000,
"minLength": 10,
"description": "The idea in plain words: what it does and for whom."
},
"billing": {
"enum": [
"one_time",
"monthly",
"annual",
"per_use"
],
"type": "string",
"description": "one_time, monthly, annual or per_use. Default one_time."
},
"evidence": {
"type": "array",
"items": {
"type": "object",
"required": [
"level",
"count"
],
"properties": {
"note": {
"type": "string",
"maxLength": 200
},
"count": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "How many instances, for example 4 interviews or 12 signups."
},
"level": {
"enum": [
"opinion",
"complaint_found",
"interview_pain",
"signup",
"meeting_booked",
"technical_proof",
"commitment",
"payment",
"repeat_usage"
],
"type": "string",
"description": "Rung on the evidence ladder: opinion, complaint_found, interview_pain, signup, meeting_booked, technical_proof, commitment, payment, repeat_usage."
},
"assumption": {
"enum": [
"problem",
"buyer_access",
"willingness_to_pay",
"solution_fit",
"feasibility",
"retention",
"supply",
"regulatory",
"unit_economics",
"operator_capacity"
],
"type": "string",
"description": "Limit this evidence to one assumption. Default: every assumption that rung lowers."
}
}
},
"maxItems": 20,
"description": "What has been learned so far."
},
"who_pays": {
"type": "string",
"maxLength": 200,
"description": "The person who pays, by role and niche, for example \"owners of 2 to 10 truck plumbing companies\"."
},
"who_uses": {
"type": "string",
"maxLength": 200,
"description": "The person who uses it, if different from who pays."
},
"price_usd": {
"type": "number",
"maximum": 10000000,
"minimum": 0,
"description": "Intended price in US dollars."
},
"assumption": {
"enum": [
"problem",
"buyer_access",
"willingness_to_pay",
"solution_fit",
"feasibility",
"retention",
"supply",
"regulatory",
"unit_economics",
"operator_capacity"
],
"type": "string",
"description": "The assumption to test. Default: the riskiest one the classifier finds."
},
"buyer_type": {
"enum": [
"consumer",
"prosumer",
"smb_owner",
"mid_market",
"enterprise",
"public_sector",
"nonprofit_ministry",
"developer",
"own_business"
],
"type": "string",
"description": "Override the detected buyer type."
},
"start_date": {
"type": "string",
"description": "ISO date the work starts. Default today (UTC)."
},
"has_audience": {
"type": "boolean",
"description": "True if there is an existing list, following or customer base to test with."
},
"product_type": {
"enum": [
"b2b_saas",
"consumer_app",
"marketplace",
"productized_service",
"ai_agent",
"physical_product",
"hardware_device",
"content_community",
"developer_tool",
"internal_tool"
],
"type": "string",
"description": "Override the detected product type."
},
"audience_size": {
"type": "integer",
"maximum": 100000000,
"minimum": 1
},
"has_prototype": {
"type": "boolean",
"description": "True if a working version is already in users' hands."
},
"days_available": {
"type": "integer",
"maximum": 90,
"minimum": 1,
"description": "Days until a decision is needed. Default 7."
},
"test_budget_usd": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "Cash available for the validation test. Default 0."
},
"reachable_buyers": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "How many named buyers can be contacted this week."
},
"technical_builder": {
"type": "boolean",
"description": "False if nobody on the team can build the hardest part. Default true."
},
"current_alternative": {
"type": "string",
"maxLength": 200,
"description": "What they use or do about the problem today, for example \"spreadsheets and texts\", \"Jobber\", or \"nothing\"."
},
"runs_another_business": {
"type": "boolean",
"description": "True if the founder is building this alongside a business they already run."
}
}
}