estimate
Produce an honest, validated estimate: confirmed scope split from assumptions,
a technique that fits the evidence, AI-assisted staffing scenarios, and an
interactive what-if page served on localhost.
Hard rules
- Every estimate row carries confidence + assumptions. A row nobody estimated
renders
not estimated — never 0.
- Every scope item is labeled
stated or proposed — no unlabeled scope.
- Agent judges, script computes: every number in a deliverable comes from
scripts/compute.mjs. Never total, average, or price by hand.
- Never apply one blanket AI multiplier to a whole project — per-task
category only (
references/ai-multipliers.md).
node scripts/validate.mjs must exit 0 before the page renders.
- Agentic estimates: baselines and confidence come from scripts reading
measurements.jsonl — the agent never writes a duration, confidence, or
evidence row.
Flow
- Detect evidence: requirements/RFP? ARCHITECTURE.md? codebase? none?
State findings; the user can override. (
references/interview.md §1)
- Depth and delivery mode: ask QUICK / STANDARD / DEEP, then TRADITIONAL
/ AGENTIC (
references/interview.md §2b). Delivery mode decides step 4.
- Interview: follow
references/interview.md — pre-fill from evidence,
ask only holes, run the clear-vs-assumed gate before sizing. Before
proposing milestones, read references/slicing.md — slices are judged
there, not computed.
- Technique: TRADITIONAL-only — recommend from
references/techniques.md,
state why, cite the method's sources (its §Sources — attribution + link,
never quoted text), confirm. AGENTIC reads
references/agentic-estimation.md and references/task-shapes.md
instead: no technique to recommend, shape + scope + seed minutes per task.
- Size: write judgments to
estimation-inputs.json
(references/writing.md — the booking fixture is the canonical shape).
- Compute:
node scripts/compute.mjs --inputs estimation-inputs.json --out estimation.json
- Write: estimation.md per
references/writing.md.
- Validate:
node scripts/validate.mjs --md estimation.md --json estimation.json
— fix findings, re-run until clean.
- Render + serve:
node scripts/render.mjs --json estimation.json --md estimation.md --out <dir>
(add --client-only for a client-safe file) — render re-runs the validation
checks itself and refuses on findings, so an unvalidated page cannot ship.
deliveryMode: "agentic" routes rendering to the agentic HTML template
automatically; nothing to choose here. Then serve with the
analyze-requirements skill's serve.mjs; report the URL.
Companion mode
When ARCHITECTURE.md exists: §6 components seed the WBS, §15 risks seed the
risk register, seed the components roster from §6 rows (use the LikeC4
model's container and component ids where one exists — dotted ids like
atlas.goldStore) and tag every feature with the component it implements,
flip the electedDocs estimation entry to elected: true,
place estimation.md beside ARCHITECTURE.md so the analyze-requirements viewer picks it
up as a companion page; link the interactive page from it. Render
estimate.html into <dir>/dist/ — the same folder the viewer renders
into. When a rendered viewer exists, add --viewer index.html for the
back-link (internal view only; the client render strips it) — index.html and
estimate.html then ship as one self-contained folder, and the viewer's
estimation tab links the copy inside it.
Dependency
Node ≥ 20. No npm install needed — the scripts are dependency-free.
1---2name: estimate3description: Interview-driven project estimation with AI-aware delivery scenarios. Use when the user asks for an estimate, effort sizing, a quote, a timeline, staffing, or "how long would this take" — with or without existing architecture docs.4---56# estimate78Produce an honest, validated estimate: confirmed scope split from assumptions,9a technique that fits the evidence, AI-assisted staffing scenarios, and an10interactive what-if page served on localhost.1112## Hard rules13141. Every estimate row carries confidence + assumptions. A row nobody estimated15 renders `not estimated` — never `0`.162. Every scope item is labeled `stated` or `proposed` — no unlabeled scope.173. Agent judges, script computes: every number in a deliverable comes from18 `scripts/compute.mjs`. Never total, average, or price by hand.194. Never apply one blanket AI multiplier to a whole project — per-task20 category only (`references/ai-multipliers.md`).215. `node scripts/validate.mjs` must exit 0 before the page renders.226. Agentic estimates: baselines and confidence come from scripts reading23 measurements.jsonl — the agent never writes a duration, confidence, or24 evidence row.2526## Flow27281. **Detect evidence**: requirements/RFP? ARCHITECTURE.md? codebase? none?29 State findings; the user can override. (`references/interview.md` §1)302. **Depth and delivery mode**: ask QUICK / STANDARD / DEEP, then TRADITIONAL31 / AGENTIC (`references/interview.md` §2b). Delivery mode decides step 4.323. **Interview**: follow `references/interview.md` — pre-fill from evidence,33 ask only holes, run the clear-vs-assumed gate before sizing. Before34 proposing milestones, read `references/slicing.md` — slices are judged35 there, not computed.364. **Technique**: TRADITIONAL-only — recommend from `references/techniques.md`,37 state why, cite the method's sources (its §Sources — attribution + link,38 never quoted text), confirm. AGENTIC reads39 `references/agentic-estimation.md` and `references/task-shapes.md`40 instead: no technique to recommend, shape + scope + seed minutes per task.415. **Size**: write judgments to `estimation-inputs.json`42 (`references/writing.md` — the booking fixture is the canonical shape).436. **Compute**: `node scripts/compute.mjs --inputs estimation-inputs.json --out estimation.json`447. **Write**: estimation.md per `references/writing.md`.458. **Validate**: `node scripts/validate.mjs --md estimation.md --json estimation.json`46 — fix findings, re-run until clean.479. **Render + serve**:48 `node scripts/render.mjs --json estimation.json --md estimation.md --out <dir>`49 (add `--client-only` for a client-safe file) — render re-runs the validation50 checks itself and refuses on findings, so an unvalidated page cannot ship.51 `deliveryMode: "agentic"` routes rendering to the agentic HTML template52 automatically; nothing to choose here. Then serve with the53 analyze-requirements skill's `serve.mjs`; report the URL.5455## Companion mode5657When ARCHITECTURE.md exists: §6 components seed the WBS, §15 risks seed the58risk register, seed the `components` roster from §6 rows (use the LikeC459model's container and component ids where one exists — dotted ids like60`atlas.goldStore`) and tag every feature with the component it implements,61flip the `electedDocs` estimation entry to `elected: true`,62place estimation.md beside ARCHITECTURE.md so the analyze-requirements viewer picks it63up as a companion page; link the interactive page from it. Render64estimate.html **into `<dir>/dist/`** — the same folder the viewer renders65into. When a rendered viewer exists, add `--viewer index.html` for the66back-link (internal view only; the client render strips it) — index.html and67estimate.html then ship as one self-contained folder, and the viewer's68estimation tab links the copy inside it.6970## Dependency7172Node ≥ 20. No npm install needed — the scripts are dependency-free.