/synthex:write-implementation-plan/synthex:write-implementation-plan
DiscoverPeer-reviewed plan from a PRD — Architect + Design System agent + Tech Lead.
Invocation
Run from inside Claude Code in any project where Synthex is installed:
/synthex:write-implementation-planSome commands accept parameters; see the source-of-truth file linked below for the full parameter list and workflow.
Lifecycle phase
Discover. From idea to a sharp PRD.
Related agents
- Product Manager · Interactive requirements gathering. Transforms PRDs into milestone-based plans.
- UX Researcher · Personas, journey maps, opportunity-solution trees, heuristic eval.
Source
The command's parameters, workflow, and sub-agent invocations are defined in markdown at bluminal/lumenai/blob/main/plugins/synthex/commands/write-implementation-plan.md.
Last modified:
What it does, end-to-end
/synthex:write-implementation-plan/synthex:write-implementation-plan is the Plan-phase entry point: the command that takes a PRD and produces a peer-reviewed, milestone-and-task implementation plan you can hand to /synthex:next-priority/synthex:next-priority.
Each invocation:
- Reads the PRD at
docs/reqs/main.md(configurable viarequirements_pathordocuments.requirements), plus technical context fromdocs/specs/, the project instruction file, and the codebase. The PRD is the input contract — every plan task points back to a PRD requirement. - PM interviews you. The Product Manager agent clarifies ambiguous requirements, priorities, scope, and constraints before drafting. Sub-agents can't ask you questions directly, so the PM returns its questions (3–5 at a time) and the command asks them for it, then hands your answers back. This repeats until the PM has no more questions.
- PM drafts the plan. The PM structures the work into phases → milestones → tasks,
assigns complexity estimates (S/M/L), surfaces dependencies, and tags acceptance criteria
with their type (
[T]/[H]/[O]). The draft is written to the plan path with a<!-- DRAFT -->marker. - Structural lint. A script (
lint-plan.mjs, no model call) checks the draft against the plan template before any reviewer runs; the PM fixes every critical and high finding. Runs once per draft. Without Node, the agent self-checks against the same rubric. - Parallel reviewer pass. The Architect, Design System Agent, and Tech Lead review the draft in parallel. Each emits structured findings; the Findings Consolidator deduplicates and ranks them by severity. When multi-model review is active, the Multi-Model Review Orchestrator runs these reviewers plus external CLI reviewers and consolidates them instead. Plans have no complexity gate: if multi-model is on, it always runs.
- PM iterates. The PM addresses every finding at or above
min_severity_to_address(defaulthigh), editing the plan directly and asking you when a trade-off or conflicting feedback needs your call. Each cycle spawns fresh reviewers. The cycle repeats up tomax_cyclestimes (default3for plans — one extra cycle since plan defects ripple downstream); anything unresolved lands in Open Questions. - Compactness pass, then save. The PM tightens the plan (it gets loaded into agent
context windows), removes the draft marker, and leaves the final plan at
docs/plans/main.md(configurable viaplan_pathordocuments.implementation_plan). The plan includes phases, milestones, tasks, decisions, open questions, and parallelizable batches per milestone.
Reviewer roster
Default reviewers (configurable in .synthex/config.yaml):
implementation_plan:
reviewers:
- agent: architect
enabled: true
focus: "Technical architecture, feasibility, NFR coverage, missing technical tasks"
- agent: design-system-agent
enabled: true
focus: "Design tasks, UX impact, visual/interaction design clarity"
- agent: tech-lead
enabled: true
focus: "Task clarity, acceptance criteria, parallelizability, dependency accuracy"Add specialists for project-specific concerns:
implementation_plan:
reviewers:
- agent: compliance-reviewer
enabled: true
focus: "Regulatory compliance, audit-trail requirements"An older config that lists agent: designer still works: there is no agent by that name, so
this command reads it as design-system-agent.
A reviewer can also be a markdown prompt file in your project instead of a Synthex agent —
- prompt: <path>, optionally with id:, enabled:, and focus:. Its feedback merges with
the agent reviewers'. See Prompt-file reviewers.
What makes a good plan
The reviewer prompts are tuned to surface the qualities a plan needs:
- Every task has acceptance criteria. No tag-less tasks. Each criterion is
[T],[H], or[O]. Most tasks have at least one[T]because untestable claims tend to indicate unclear scope. - Parallelizability is explicit. The plan calls out which tasks can run in parallel per milestone, and which sequence dependencies block which.
- Decisions are recorded. Plans include a Decisions table with rationale; the reviewers will flag implicit decisions made during planning that should have been surfaced explicitly.
- Open questions are named. A plan with no open questions is suspicious — most non-trivial work has at least one unresolved item. Calling it out lets future-you see what was unsolved and why a default was chosen.
Common failure modes
The reviewers are calibrated to catch:
- Vague tasks. "Improve search" is not a task. "Reduce p95 search latency from 800ms to ≤300ms on the documented dataset" is.
- Missing acceptance criteria. Every task gets at least one criterion. The reviewers reject tasks that ship without.
- Untestable
[T]s. A[T]tag commits the task to having a passing automated test. When the criterion is structurally untestable, the reviewers either downgrade it to[H]or split it. - Cross-phase boundary creep. Tasks that span two phases (e.g., "ship to prod and run a retrospective") get split — phase boundaries exist for a reason.
Parameters
| Parameter | Description | Default | Required |
|---|---|---|---|
requirements_path | Path to the PRD | docs/reqs/main.md | No |
plan_path | Where to write the plan | docs/plans/main.md | No |
specs_path | Path to the technical specs directory | docs/specs | No |
config_path | Path to the Synthex project config | .synthex/config.yaml | No |
concurrent_tasks | Maximum recommended parallel tasks per milestone | Value from implementation_plan.concurrent_tasks config (or 3) | No |
--multi-model / --no-multi-model | Force multi-model plan review on or off for this run, overriding multi_model_review config. No complexity gate applies. | From multi_model_review config | No |
--profile <tier> | Override models.profile (economy, balanced, premium) for the spawned reviewers | models.profile (balanced) | No |
--loop | Re-run until the completion promise is emitted (see Native looping) | Off | No |
--completion-promise <text> | Text that ends the loop | ALLDONE<session_id> (falls back to ALLDONE<loop_id>) | No |
--max-iterations <n> | Loop iteration cap (hard ceiling 200) | 20 | No |
--loop-isolated | Run each loop iteration in a fresh sub-agent | Off | No |
--name <slug> | Loop id slug (^[a-z0-9][a-z0-9-]{0,63}$) | write-implementation-plan-<4-char-hex> | No |
When to re-run it
Run /synthex:write-implementation-plan/synthex:write-implementation-plan once per PRD, then iterate the PRD and
plan together as the project progresses. For mid-project re-planning (new PRD addendum, new
constraint), re-running produces a new plan; preserve the old plan as docs/plans/<date>-archived.md
if the lineage matters.
You usually do NOT regenerate the plan after a single completed task. Appending completion notes to the existing plan is the job of /synthex:next-priority/synthex:next-priority.
Native looping
Pass --loop to iterate plan-writing until the plan stabilizes — useful when the PRD has
enough open ends that one invocation isn't enough to converge. Iteration state lives in
.synthex/loops/<loop-id>.json so a stalled or crashed session can be resumed cleanly.
See Native looping for the full framework contract.
Emission rule. The loop terminates when all of:
- The plan file has been written to disk.
- Every PRD requirement is reflected in at least one task.
- The plan contains no
TBD,<placeholder>,???, or open-question markers in task descriptions or acceptance criteria. - A follow-up iteration would not add new tasks or refine existing ones — typically when reviewers' suggested edits have been incorporated and no further drafts are pending.
The promise is not emitted while a review cycle is still in flight or unresolved markers remain.
Example. Drive a long PRD to a stable plan over many iterations:
/synthex:write-implementation-plan --loop \
--completion-promise "PLAN_STABLE" \
--max-iterations 15 \
requirements_path=docs/reqs/payments-v2.md