Objective
Restore the /plan-agent:planning skill's HTML output guarantee by adding an unconditional ExitPlanMode self-bootstrap step — so the harness can never force the skill into .md output mode regardless of how the session was entered.
File
fix-planning-html-output.html
Path
docs/plans/fix-planning-html-output.html
Acceptance Criteria
0 / 3 done
Context
When the harness sees a command named planning it can independently enter plan mode, which forces a .md plan file with a random slug path — overriding the skill's own “always write HTML” guarantee. v0.8.0 deliberately removed ExitPlanMode from allowed-tools as part of the plan-mode handshake removal, but that also removed the escape hatch. The git-agent skills solve this with an unconditional self-bootstrap: call ExitPlanMode as the very first action — a no-op when plan mode is already off, a fix when it is on.
Steps
doneAdd
ExitPlanMode to allowed-tools in SKILL.mdWithout it in
allowed-tools, the model cannot call the tool — the schema is deferred and the call fails silently or triggers a permission prompt.Verify
Grep the
allowed-tools line in kit/plugins/plan-agent/skills/planning/SKILL.md and confirm ExitPlanMode appears. ToolSearch must also be present (already was).doneAdd Step 0 (Self-bootstrap) as the unconditional first workflow step
The step must run before any read, write, or clarify action — including
--quick — so there is no code path where the skill executes inside harness plan mode. The step text explains the two-part load pattern: ToolSearch select:ExitPlanMode first, then ExitPlanMode.Verify
Read the
## Workflow section of SKILL.md and confirm Step 0 appears before Step 1 (Clarify) and explicitly states it is unconditional and must not be skipped for any flag.doneBump version to
0.11.2 and update CHANGELOGPatch bump signals a bug fix to downstream consumers. The CHANGELOG entry documents the root cause so the v0.8.0 reasoning is not accidentally re-applied in a future cleanup.
Verify
grep "plan-agent" .claude-plugin/marketplace.json shows 0.11.2. CHANGELOG.md has entries for both v0.11.1 (ExitPlanMode fix) and v0.11.2 (scope constraint) with root-cause context.Verification
Invoke /plan-agent:planning test objective --quick in a session where the harness has entered plan mode. Confirm:
- The first tool call is
ToolSearch(loadingExitPlanMode), followed immediately byExitPlanMode. - The skill writes a
.htmlfile underdocs/plans/— not a.mdfile. - The filename follows
verb-targetkebab-case (e.g.test-objective.html).