next
Pick the next open task from the current project's todo file and invoke `/fsad-harness:do-task` with that task ID. Ranks candidates by readiness (has a task-detail file, no stated unmet dependency) and reports why one was chosen. Accepts an optional count (`/fsad-harness:next 3`) to hand off multiple ranked candidates to `do-task`'s concurrent multi-task dispatch. Auto-detects the current project from the working directory using the same YAML config as other skills. Use when the user says "do the next task", "what's next", "next task", "next 3 tasks", or similar.
- License 许可
- MIT
- 最近更新
- 2026-11-14
- Stars
- ★ 8
- Forks
- 4
01 前言 Front Matter
- description
- Pick the next open task from the current project's todo file and invoke `/fsad-harness:do-task` with that task ID. Ranks candidates by readiness (has a task-detail file, no stated unmet dependency) and reports why one was chosen. Accepts an optional count (`/fsad-harness:next 3`) to hand off multiple ranked candidates to `do-task`'s concurrent multi-task dispatch. Auto-detects the current project from the working directory using the same YAML config as other skills. Use when the user says "do the next task", "what's next", "next task", "next 3 tasks", or similar.
- argument-hint
- `[N]`
03 SKILL.md 正文
fsad-harness:next — pick the next ready task and hand off to do-task
You find the most ready unchecked task(s) in the current project's todo file and invoke fsad-harness:do-task with the chosen ID(s). Readiness — not file order — decides which candidate wins.
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.
Step 0 — Detect the project
- Determine the current working directory.
- Read
${CLAUDE_PLUGIN_ROOT}/skills/add-task/add-task-projects.yaml. - Match cwd against each project's
match_paths(expand~). Prefer the longest (most specific) match if multiple match. - If a project matches, refer to its entry as
cfgand the resolved project root asproject_root. Proceed. - If no project matches in
add-task-projects.yaml:- Tell the user the project is not registered.
- Suggest running
/fsad-harness:add-taskfrom the project to register it. - Stop.
Step 1 — Parse the optional count argument
$ARGUMENTS is either empty or a single positive integer N.
- Empty →
N = 1. - A positive integer →
N= that value. - Anything else (non-numeric, zero, negative) → tell the user: "Expected an optional count, e.g.
/fsad-harness:nextor/fsad-harness:next 3." Stop.
Step 2 — Find candidate open tasks (targeted grep, not a full-file Read)
Run a targeted grep against the todo file instead of reading it in full:
grep -nE '^- \[ \] .*{prefix}-[0-9]+' "{todo_file_path}"
Use the resolved absolute path for {todo_file_path} and quote it to handle spaces. This returns only the open (- [ ]) lines that mention the project's cfg.prefix, each with its line number — never pull the whole backlog into context.
- No matches: tell the user "No open tasks found in
[cfg.todo_file]. All done!" Stop. - One or more matches: extract the canonical
PREFIX-NNNidentifier from each matching line. These are the candidate set. Continue.
Step 3 — Rank candidates by readiness
For each candidate ID, gather three readiness signals without a full-file read:
-
Has a task-detail file — check whether
{project_root}/{cfg.task_dir}/{rendered cfg.task_filename_template}exists for that ID (same path resolutiondo-taskuses). A candidate with an existing task-detail file already has a plan drafted and is ready to execute immediately. -
No stated unmet dependency — inspect the candidate's todo-line text (and, if it has a task-detail file, its Summary/Assessment section) for an explicit reference to another task ID as a blocker (e.g. "depends on TBS-040", "blocked by", "after TBS-045 lands"). If that referenced task is not yet checked
[x]in the todo file, treat the candidate as not ready. -
Well-formed task-detail file — only evaluated when signal 1 found a file. Run three targeted greps against it (never a full-file Read); the file is well-formed only if all three pass:
- ID matches filename — the H1 starts with
# {ID} —where{ID}is the canonical identifier the filename was rendered from:grep -c "^# {ID} —" "{task_file}"≥ 1. - ≥1 unchecked AC — the
## Acceptance Criteriasection itself (not the Plan or any other section) contains at least one- [ ]item:awk '/^## Acceptance Criteria/{f=1;next} /^## /{f=0} f && /^- \[ \]/' "{task_file}" | grep -c .≥ 1. A file whose ACs are all[x](or that has none) has nothing left fordo-taskto verify. - No template placeholders — no line still carries the task-file template's bracketed placeholders outside inline code (a task that talks about
[TBD]in backticks is fine; one that still contains it as prose is not):sed 's/[^`]*`//g' "{task_file}" | grep -nE '[TBD]|[Step (one|two)]|[Verification step [0-9]+]|[Where —|[1–3 sentences|[Current state.|[file path]|[section/line reference]'` returns nothing.
A candidate whose file fails any check is not Tier 1 — it drops to Tier 2 with the failing check named in the report (the plan is not executable as written, so
do-taskmust stop and re-plan before it can run). Do not "fix" the file here;fsad-harness:nextnever edits task files. - ID matches filename — the H1 starts with
Rank the candidate set:
- Tier 1 — ready: has a well-formed task-detail file AND no unmet dependency.
- Tier 2 — plannable: no unmet dependency, but either no task-detail file (would enter
do-taskplan mode) or a task-detail file that fails a well-formed check (needs re-planning first). - Tier 3 — blocked: has a stated unmet dependency. Exclude from selection unless every candidate is Tier 3 (in which case surface this to the user rather than silently picking one).
Within a tier, preserve file order (top-to-bottom) as the tiebreaker.
Select the top N candidates from this ranking (Tier 1 first, then Tier 2, then Tier 3 only if nothing else is available).
Report the choice and reason before proceeding, e.g.:
Selected TBS-042 (Tier 1 — ready: task-detail file exists and is well-formed, no unmet dependency) over TBS-043 (Tier 2 — task file fails well-formed check: no unchecked
- [ ]AC) and TBS-044 (Tier 3 — blocked: references open TBS-041).
If N > 1, list all selected candidates with their tier and reason in the same format.
Step 4 — Verify before handoff
Before invoking do-task, validate every selected ID:
- Each ID matches the canonical
PREFIX-NNNpattern exactly — correct prefix casing (cfg.prefix), a literal hyphen, and a numeric suffix zero-padded tocfg.number_digitsdigits. - Each ID corresponds to exactly one open (
- [ ]) line in the candidate set from Step 2 — no duplicates, no ambiguous partial matches (e.g. two lines that could both plausibly resolve to the same prefix/number).
If any selected ID fails either check — malformed pattern, or an ambiguous/duplicate match — stop and ask the user to disambiguate rather than guessing or handing off a bad value. Show the conflicting lines so the user can pick.
If N exceeds the number of available (non-Tier-3, or all-Tier-3-if-forced) candidates, hand off as many as are available and tell the user how many were found vs. requested.
Step 5 — No open tasks
(Covered in Step 2 — no separate action needed here.)
Step 6 — Hand off to do-task
Resolve desired_skill = cfg.skills.do_task (if set) → else the YAML's top-level defaults.skills.do_task (if set) → else "fsad-harness:do-task". Use desired_skill (not a hardcoded fsad-harness:do-task) for every handoff below, so a project configured for e.g. kh:do-task is respected here too.
-
N = 1: Tell the user which task was selected and why, e.g.:Next task: TBS-006 — "Add a new skill
fsad-harness:next" (Tier 1 — ready). Handing off to{desired_skill}…Then invoke
desired_skillvia the Skill tool, passing the single canonical task identifier as the argument. -
N > 1: Tell the user the full ranked list being dispatched, e.g.:Dispatching 3 ready tasks to
{desired_skill}: TBS-042, TBS-044, TBS-046.Then invoke
desired_skillvia the Skill tool, passing all selected canonical identifiers space-separated as a single argument string (e.g.TBS-042 TBS-044 TBS-046). Ifdesired_skillisfsad-harness:do-task, its own Step 0.5 multi-task dispatch takes over from there — each ID is planned/executed concurrently in its own isolated worktree. Other skills may handle multi-ID dispatch differently; consult that skill's own instructions.
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.