estimate
Estimate story points for epics, stories, and tasks using Fibonacci scale
- License 许可
- MIT
- 最近更新
- 2026-11-13
- Stars
- ★ 8
- Forks
- 4
01 前言 Front Matter
- description
- Estimate story points for epics, stories, and tasks using Fibonacci scale
03 SKILL.md 正文
Story Point Estimator
Estimate story points for work items using a Fibonacci scale (1, 2, 3, 5, 8, 13, 21) and a three-factor rubric: Complexity, Effort, and Risk.
Asking the user
This rule covers every question this skill asks the user: a confirmation, a choice, a missing value, a numbered decision list, or a stop-and-ask. It applies even where a later step says "ask the user" or "ask exactly once". The user may watch the decisions pane rather than the chat, so a question that only goes to chat can go unanswered.
- When
mcp__decision-tracker__decisionis in your tool list (loaded, or named as a deferred tool; load a deferred one withToolSearchfirst), log each question before you ask it:- Call it with
action: "open", the question (ending in?), andoptionswhen the answers are a closed set. Setrequired: falsewhen the work can go on without an answer. A numbered list of questions opens one decision per item. Keep each returnedid. - Ask the question in chat as this skill says. The open call does not replace the chat question.
- When the user answers, in chat or as a
Decision Dn: <answer>message from the plugin, call the tool withaction: "close", theidand the answer. - When the change the answer asked for is in place, call it with
action: "implement", theidand apath:line.
- Call it with
- When the tool is absent, ask in chat only.
- An
AskUserQuestioncall is logged on its own. Do not open it again. - This rule changes where a question is logged. It does not change when this skill asks, or how many times.
Goal
The point of an estimation pass is relative consistency within the batch, not absolute accuracy against some external truth. Two comparably-scoped items should land on comparable point values, and the process should surface — not hide — the cases where that's genuinely hard to call. Everything below (the judge panel, the spread flag, the adversarial consistency pass) exists in service of that one goal.
Input
The user provides work items after invoking /fsad-harness:estimate. Items can be in any format:
- Bullet list
- Numbered list
- Paragraphs
- Mixed formats
Each item needs at minimum a title. Descriptions are optional but improve accuracy.
If no work items are provided after the command, ask the user to provide them.
Optional flag: --show-factors — surface the per-factor Complexity/Effort/Risk breakdown for each item (see Output Format). Omit for the default, concise output.
Estimation Rubric
For each work item, evaluate three factors independently:
| Points | Complexity | Effort | Risk |
|---|---|---|---|
| 1 | Trivial, well-understood | < 1 hour of focused work | Near-zero unknowns |
| 2 | Simple, minor logic | A few hours | Minimal unknowns |
| 3 | Moderate, some moving parts | Half a day to a day | Some unknowns, manageable |
| 5 | Significant, multiple components | 1-3 days | Notable unknowns or dependencies |
| 8 | Complex, cross-cutting concerns | 3-5 days | Significant unknowns or external dependencies |
| 13 | Very complex, architectural impact | 1-2 weeks | High uncertainty, consider breaking down |
| 21 | Extremely complex, system-wide | 2+ weeks | Very high uncertainty, must break down |
Scoring method: The highest individual factor score becomes an item's point value from that pass. The riskiest/hardest dimension dominates.
Process
1. Determine batch size
Count the distinct work items. This determines which estimation mode to use:
- ≤ 5 items — single-pass mode (step 2a).
- > 5 items — 3-judge panel mode (step 2b). The extra passes are worth the cost once there's enough of a batch to actually need cross-item consistency.
2a. Single-pass mode (batches of ≤5 items)
For each item, silently evaluate Complexity, Effort, and Risk against the rubric and assign the highest factor score as the point value. Retain the per-factor scores internally (needed for --show-factors; see Output Format). No panel, no spread flag — skip straight to step 3.
2b. 3-judge panel mode (batches of >5 items)
Dispatch three independent Agent tool calls, each scoring the full item list fresh against the rubric using step 2a's method. This is what makes the judges genuinely independent rather than a same-context roleplay: each spawned agent's context contains only the item list (titles + descriptions) and the Estimation Rubric — never the other judges' scores, never this conversation's history — so a judge's numbers can't be anchored on another judge's numbers, and correlated bias across "judges" isn't left to an instruction to imagine independence. Send all three Agent calls in a single message so they run concurrently.
Each agent's prompt:
Score each of the following work items against this rubric. For each item, evaluate Complexity, Effort, and Risk independently and assign the highest factor score as its point value — the riskiest/hardest dimension dominates. If an item is ambiguous, make a reasonable assumption and score it anyway; don't ask questions back. Return, for each item:
{item_name, complexity, effort, risk, points}.[paste the Estimation Rubric table]
Items: [paste the item list — titles and descriptions, nothing else from this conversation]
Collect the three structured returns (judge_1, judge_2, judge_3). For each item:
- Record all three judges' point values (and their underlying Complexity/Effort/Risk scores, for
--show-factors). - Final point value = the median of the three judge scores. (For three values, median is the middle value once sorted — not the mean, so it isn't pulled toward outliers.)
- Spread = max judge score − min judge score, measured in Fibonacci steps (position in the 1,2,3,5,8,13,21 sequence, not raw arithmetic difference). If spread ≥ 2 steps, flag the item as low-confidence in the output — the judges genuinely disagreed and that disagreement is signal, not noise to be silently averaged away.
- If one agent's return doesn't parse as the expected structure for a given item (missing, malformed, or the agent call itself failed), treat that judge's score for that item as missing: use the average of the two remaining valid scores, rounded to the nearest Fibonacci step, as the final value, and flag the item as low-confidence regardless of spread — a missing judge is itself a confidence-reducing event, not something to silently paper over by falling back to single-pass scoring.
3. Adversarial consistency pass
After the estimate table is finalized (median values assigned, low-confidence flags set), run one more pass that reads only the finished table — item names/descriptions and their final point values, not the scoring conversation or intermediate judge numbers. Compare items pairwise for comparable scope (similar description length, similar keywords, similar apparent surface area) and flag any pair that landed 5+ points apart (by sequence position, e.g. one at 3 and another comparably-scoped one at 13) with no stated reason in either item's description. Report flagged pairs as a note below the table: "Possible inconsistency: '[Item A]' (N pts) vs '[Item B]' (M pts) — comparable scope, no stated reason for the gap."
This pass runs regardless of batch size or which mode (2a/2b) produced the table — it's a check on the output, not on how the output was produced.
4. Handle 13+ point items — offer, don't just note
If any item's final point value is 13 or higher, don't just print a suggestion and move on. Ask the user directly: "[Item name] scored [N] — that's high enough to suggest breaking it down. Want me to split it into sub-items and re-estimate each?"
- If the user accepts: work with them to break the item into smaller sub-items, then estimate each sub-item using the mode (2a/2b) determined by the sub-item count, and replace the original item's row with the sub-items' rows in the output table.
- If the user declines or doesn't respond: keep the item as-is in the table with the original note ("Consider breaking this down into smaller stories.") and move on. Don't ask again for the same item in this session.
Output Format
Default output — a simple markdown table:
| Item | Points |
|---|---|
| [Item name] | [N] |
| [Item name] | [N] |
| Total | [sum] |
Add a low-confidence marker (e.g. ⚠ next to the point value, or a Confidence column) for any item flagged in step 2b. Add adversarial-pass notes (step 3) below the table.
With --show-factors, add a per-item factor breakdown beneath the table (or as extra columns — pick whichever stays readable for the batch size):
| Item | Points | Complexity | Effort | Risk | Judges (panel mode only) |
|---|---|---|---|---|---|
| [Item name] | [N] | [score] | [score] | [score] | [j1, j2, j3] |
In panel mode, the Complexity/Effort/Risk columns show the factors from the judge pass that produced the median point value.
Rules
- If any item scores 13 or higher, follow the offer-and-loop in Process step 4 — do not just print advice and stop.
- If an item is too vague to estimate (e.g., "improve performance" with no context), ask the user to clarify before estimating that specific item. Estimate the rest normally.
- Treat epics, stories, and tasks the same — estimate whatever is provided regardless of hierarchy labels.
- Per-factor Complexity/Effort/Risk scores are always computed and retained internally, never discarded — they're required for
--show-factorsand for the panel's median/spread logic. Only the default output stays terse; the underlying evidence stays available on request. - Without
--show-factors, keep output concise — final point value (plus confidence flag / adversarial notes where applicable), no lengthy justifications.
04 同仓库更多 Skills
sync
Pre-flight sync check for registered projects. Fetches from remote, reports uncommitted changes, and handles four states — up-to-date, ahead, behind (warns + pulls), or diverged (warns, no pull). Supports single-project (cwd detection), named-project (fsad-harness:sync key1 key2), and full-sync (fsad-harness:sync ALL) modes.
spec-review
Run a detailed, adversarial multi-agent review of a written proposal or specification (spec.md, PRD, RFC, design doc, architecture proposal, business case) — reviews the document, not code. Runs a steelman/inventory pass, then up to 10 specialist lenses (logic, assumptions, evidence, completeness, feasibility, alternatives, consistency, stakeholders, testability, risk), then adversarial validation that defaults to refuting each finding unless it survives, then a loop-until-dry completeness pass. Writes a single severity-ranked SPEC-REVIEW.md next to the document. Use when the user says "review this spec", "adversarial review", "poke holes in this proposal", "red team this PRD", "critique this design doc", "what's wrong with this RFC", "stress test this plan", or similar. Review-only — never edits the document.
ship
Short alias for /fsad-harness:ship-it. Wrap up finished work, cut a version, commit, push, and open a PR.
ship-it
Wrap up a finished round of work — verify README and CHANGELOG are current, cut a version if warranted, move completed task files into the completed/ folder, then create a feature branch if needed, commit, push, and open a PR. Run after `/fsad-harness:do-task` has marked one or more tasks done. Takes no arguments.
set-context
Gather codebase and initiative context before planning starts — runs a graphify build or query when graphify is available locally, falls back to a manual repo sweep otherwise, then asks targeted questions and writes a single context.md. Invocable standalone or as fsad-harness:plan's mandatory Phase 0. Use when the user says "set context", "gather context", or as the first step of fsad-harness:plan.
sec-review-team
Run a multi-agent security review TEAM over a codebase or recent diff. Picks a specialist roster based on detected stack signals (webapp / desktop / iac / llm-agent / container / backend / mobile / etc.) from a library of 13 specialists. Each specialist writes structured JSONL + prose findings in parallel; input-validation-auditor and auth-authz-auditor run a loop-until-dry consensus fan-out (2-8 passes); every deduped finding is adversarially verified by a dedicated validator agent before it can appear in the report. Orchestrator consolidates into a single severity-ranked REPORT.md with deduped root issues, archived per-run under a known-findings.jsonl ledger that drives auto re-review. Distinct from the built-in `/security-review` (which is a single-pass branch review). Use when the user says "multi-agent security review", "security review team", "sec-review team", "audit this branch with a team", "pre-release hardening team pass", or similar. Review-only — no fixes.