Bridge the active plan to Claude Code's /goal primitive.
Steps:
- Resolve the active plan: prefer
${PLAN_ID}env var, then.planning/.active_plan, then newest.planning/<dir>/, then legacy./task_plan.md. - Read the resolved
task_plan.md. - Derive a goal condition from the plan content:
- Default: "all phases in task_plan.md report Status: complete and check-complete.sh reports ALL PHASES COMPLETE"
- If user passed an argument: use that as an additional clause (e.g.,
/plan-goal until all tests pass)
- Issue Claude Code's
/goal <condition>with the derived text. - Confirm to the user: print the goal condition + the active plan ID + remind that
/goal clearcancels.
If task_plan.md does not exist, refuse and direct user to run /plan first.
Why this exists:
/goal runs the agent until a small fast model confirms the condition is met. It evaluates the transcript only, not files. By deriving the condition from the plan file, this command turns the file-based plan into a measurable termination criterion for /goal, so the loop terminates when the plan is actually done, not when the conversation looks done.
Notes:
/plan-goaldoes not replace/goal. It composes with it. Users can still run/goal "any text"directly.- The derived condition stays under the 4000-char limit
/goalenforces by quoting only phase headers + acceptance criteria, not full task body. - Combine with
/plan-loopfor a "babysit until done" workflow:/plan-loopcadence +/plan-goaltermination.