Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions plugin/skills/do-v2/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
name: do-v2
description: Execute a phased implementation plan using subagents. Use when asked to execute, run, or carry out a plan — especially one created by make-plan-v2.
---

# Do Plan

You are an ORCHESTRATOR. Deploy subagents to execute *all* work. Do not do the work yourself except to coordinate, route context, and verify that each subagent completed its assigned checklist.

## Plan File

- Read the plan from `plan.md` in the project root at start.
- If the plan file cannot be read or is missing, tell the user to run make-plan-v2 first and stop.
- Check staleness: compare the plan's `branch` and `commit_sha` frontmatter against the current git branch and HEAD. If they differ, warn the user before proceeding.
Comment on lines +13 to +14
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Staleness check silently no-ops on v1 plans

When do-v2 is invoked against a plan file produced by the original make-plan (which has no YAML frontmatter), the branch and commit_sha fields will be absent. The instruction only says "warn the user before proceeding" when the values differ, but it does not specify what to do when the fields are missing entirely. In practice the staleness check will be skipped silently, giving the user no indication that the plan is a v1 format. Consider adding an explicit check: if frontmatter fields are absent, surface a warning that this plan may not be a make-plan-v2 plan and prompt the user to confirm.

Fix in Claude Code

Comment on lines +12 to +14
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Specify handling for missing staleness fields.

Line 14 instructs checking staleness by comparing branch and commit_sha frontmatter against current git state, but doesn't specify what to do if these fields are missing from the frontmatter. Given that make-plan-v2/SKILL.md doesn't explicitly instruct populating these fields (see my comment on that file), this is a likely scenario.

Additionally, no guidance is provided for handling git command failures (e.g., when executed in a non-git directory).

🔍 Suggested addition after line 13
 - If the plan file cannot be read or is missing, tell the user to run make-plan-v2 first and stop.
-- Check staleness: compare the plan's `branch` and `commit_sha` frontmatter against the current git branch and HEAD. If they differ, warn the user before proceeding.
+- Check staleness (if git is available and frontmatter includes `branch` and `commit_sha`):
+  - Run `git branch --show-current` and `git rev-parse HEAD`
+  - If these differ from the frontmatter values, warn the user that the plan may be stale before proceeding
+  - If `branch` or `commit_sha` fields are missing from frontmatter, warn the user that staleness cannot be verified
+  - If git commands fail (e.g., not a git repository), skip staleness check and log a warning
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Read the plan from `plan.md` in the project root at start.
- If the plan file cannot be read or is missing, tell the user to run make-plan-v2 first and stop.
- Check staleness: compare the plan's `branch` and `commit_sha` frontmatter against the current git branch and HEAD. If they differ, warn the user before proceeding.
- Read the plan from `plan.md` in the project root at start.
- If the plan file cannot be read or is missing, tell the user to run make-plan-v2 first and stop.
- Check staleness (if git is available and frontmatter includes `branch` and `commit_sha`):
- Run `git branch --show-current` and `git rev-parse HEAD`
- If these differ from the frontmatter values, warn the user that the plan may be stale before proceeding
- If `branch` or `commit_sha` fields are missing from frontmatter, warn the user that staleness cannot be verified
- If git commands fail (e.g., not a git repository), skip staleness check and log a warning
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugin/skills/do-v2/SKILL.md` around lines 12 - 14, Update the staleness
check guidance to handle missing frontmatter and git errors: when comparing
plan.md frontmatter fields "branch" and "commit_sha" in the SKILL.md staleness
step, specify that if either field is missing treat the plan as "unknown/stale"
and warn the user to run make-plan-v2 (or re-generate the plan) before
proceeding; likewise instruct to run git commands (git rev-parse --abbrev-ref
HEAD and git rev-parse HEAD) in a try/catch manner and, on failure (e.g., not a
git repo or git error), surface a clear error telling the user to run the skill
from a git repository or provide branch/commit info, and abort/ask for
confirmation instead of proceeding silently.

- After each phase, update the plan file:
- Set `current_phase` to the next phase number
- Set `overall_status` to `in-progress` (or `complete` when all phases are done)
- Check off completed tasks (`- [ ]` to `- [x]`)
Comment on lines +15 to +18
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Specify error handling for plan file updates.

This section instructs updating plan.md after each phase but doesn't specify what to do if the file write fails (e.g., due to permissions, disk space, or file locks). Should execution stop, continue with a warning, or retry?

📝 Suggested addition
 - After each phase, update the plan file:
   - Set `current_phase` to the next phase number
   - Set `overall_status` to `in-progress` (or `complete` when all phases are done)
   - Check off completed tasks (`- [ ]` to `- [x]`)
+  - If the plan file cannot be written, warn the user but continue execution (plan state will be stale)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- After each phase, update the plan file:
- Set `current_phase` to the next phase number
- Set `overall_status` to `in-progress` (or `complete` when all phases are done)
- Check off completed tasks (`- [ ]` to `- [x]`)
- After each phase, update the plan file:
- Set `current_phase` to the next phase number
- Set `overall_status` to `in-progress` (or `complete` when all phases are done)
- Check off completed tasks (`- [ ]` to `- [x]`)
- If the plan file cannot be written, warn the user but continue execution (plan state will be stale)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugin/skills/do-v2/SKILL.md` around lines 15 - 18, The SKILL.md section that
tells users to update plan.md after each phase lacks guidance for write
failures; update the documentation around the plan file update steps
(references: plan.md, current_phase, overall_status) to specify a clear
error-handling policy: attempt a configurable number of retries (e.g., 3) with
exponential backoff on transient errors, log a clear error including the file
path and error details if a write fails, and on persistent failure either (a)
halt further execution and mark the plan/update as failed (recommended) or (b)
provide an explicit optional flag to continue with a warning—describe the
default behavior, retry parameters, and required manual remediation steps so
implementers know how to handle permission/disk/lock errors.


## Execution Protocol

### Rules

- Each phase uses fresh subagents where noted (or when context is large/unclear)
- Assign one clear objective per subagent and require evidence (commands run, outputs, files changed)
- Do not advance to the next step until the assigned subagent reports completion and the orchestrator confirms it matches the plan

### During Each Phase

Deploy an "Implementation" subagent to:
1. Execute the implementation as specified
2. COPY patterns from documentation, don't invent
3. Cite documentation sources in code comments when using unfamiliar APIs
4. If an API seems missing, STOP and verify — don't assume it exists

### After Each Phase

Deploy subagents for each post-phase responsibility:
1. **Verify must-be-true conditions** — Deploy a "Verification" subagent to check each must-be-true condition using the executable verification commands from the plan
2. **Anti-pattern check** — Deploy an "Anti-pattern" subagent to grep for known bad patterns from the plan
3. **Code quality review** — Deploy a "Code Quality" subagent to review changes
4. **Human gate** — Before deploying the Commit subagent, briefly show the user what changed in this phase (files modified, key changes) and confirm they want to commit
5. **Commit only if verified** — Deploy a "Commit" subagent *only after* verification passes and user confirms; otherwise, do not commit

### Between Phases

Deploy a "Branch/Sync" subagent to:
- Push to working branch after each verified phase
Comment on lines +47 to +48
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Specify error handling for git push failures.

Line 48 instructs pushing to the working branch but doesn't specify what to do if the push fails (e.g., network errors, permission issues, or merge conflicts). Should execution stop, continue with a warning, or retry?

🔄 Suggested addition
 Deploy a "Branch/Sync" subagent to:
-- Push to working branch after each verified phase
+- Push to working branch after each verified phase:
+  - If push fails, report DONE_WITH_CONCERNS and show the error to the user
+  - User decides whether to retry, continue without pushing, or stop
 - Prepare the next phase handoff so the next phase's subagents start fresh but have plan context
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Deploy a "Branch/Sync" subagent to:
- Push to working branch after each verified phase
Deploy a "Branch/Sync" subagent to:
- Push to working branch after each verified phase:
- If push fails, report DONE_WITH_CONCERNS and show the error to the user
- User decides whether to retry, continue without pushing, or stop
- Prepare the next phase handoff so the next phase's subagents start fresh but have plan context
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugin/skills/do-v2/SKILL.md` around lines 47 - 48, The doc instructs the
"Branch/Sync" subagent to "Push to working branch after each verified phase" but
lacks error-handling guidance; update SKILL.md to specify an explicit policy for
git push failures: detect common failure classes (network, permission, merge
conflict), implement a retry strategy with exponential backoff for transient
errors, abort the current phase and surface an error (stop execution) for
permission/auth errors, and on merge conflicts require human intervention (mark
as failed, create issue/notification) rather than continuing; document the
expected behavior of the "Branch/Sync" subagent on each failure type, the retry
limit, and where it should log/notify (e.g., CI logs and issue tracker).

- Prepare the next phase handoff so the next phase's subagents start fresh but have plan context

## Subagent Status Protocol

Each subagent must report one of these statuses:

- **DONE** — Advance to the next step
- **DONE_WITH_CONCERNS** — Show concerns to the user. User decides whether to advance or fix.
- **NEEDS_CONTEXT** — Provide additional context and retry once. If still NEEDS_CONTEXT after retry, treat as BLOCKED.
- **BLOCKED** — Stop execution and ask the user for guidance.

## Failure Modes to Prevent

- Don't invent APIs that "should" exist — verify against docs
- Don't add undocumented parameters — copy exact signatures
- Don't skip verification — deploy a verification subagent and run the checklist
- Don't commit before verification passes (or without explicit orchestrator approval)
- Don't ignore DONE_WITH_CONCERNS — surface every concern to the user before advancing
- Don't check task completion — check whether the must-be-true conditions actually hold
90 changes: 90 additions & 0 deletions plugin/skills/make-plan-v2/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
---
name: make-plan-v2
description: Create a detailed, phased implementation plan with documentation discovery. Use when asked to plan a feature, task, or multi-step implementation — especially before executing with do-v2.
---

# Make Plan v2

You are an ORCHESTRATOR. Create an LLM-friendly plan in phases that can be executed consecutively in new chat contexts.

## Delegation Model

Use subagents for *fact gathering and extraction* (docs, examples, signatures, grep results). Keep *synthesis and plan authoring* with the orchestrator (phase boundaries, task framing, final wording). If a subagent report is incomplete or lacks evidence, re-check with targeted reads/greps before finalizing.

### Subagent Reporting Contract (MANDATORY)

Each subagent response must include:
1. Sources consulted (files/URLs) and what was read
2. Concrete findings (exact API names/signatures; exact file paths/locations)
3. Copy-ready snippet locations (example files/sections to copy)
4. "Confidence" note + known gaps (what might still be missing)
5. **Status** — one of:
- **DONE** — Task completed successfully with evidence
- **DONE_WITH_CONCERNS** — Completed, but with concerns the orchestrator should surface to the user. User decides whether to advance or fix.
- **NEEDS_CONTEXT** — Cannot complete without additional context. Orchestrator provides context and retries once. If still NEEDS_CONTEXT after retry, escalate to BLOCKED.
- **BLOCKED** — Cannot proceed. Orchestrator stops and asks the user for help.

Reject and redeploy the subagent if it reports conclusions without sources.

## Plan Structure

### Phase 0: Documentation Discovery (ALWAYS FIRST)

Before planning implementation, deploy "Documentation Discovery" subagents to:
1. Search for and read relevant documentation, examples, and existing patterns
2. Identify the actual APIs, methods, and signatures available (not assumed)
3. Create a brief "Allowed APIs" list citing specific documentation sources
4. Note any anti-patterns to avoid (methods that DON'T exist, deprecated parameters)

The orchestrator consolidates findings into a single Phase 0 output.

Each phase must be self-contained enough that a fresh subagent with only the plan file and the codebase can execute it without needing context from prior phases.

### Each Implementation Phase Must Include

1. **What to implement** — Frame tasks to COPY from docs, not transform existing code
- Good: "Copy the V2 session pattern from docs/examples.ts:45-60"
- Bad: "Migrate the existing code to V2"
2. **Documentation references** — Cite specific files/lines for patterns to follow
3. **Must-be-true conditions** — What observable conditions must be true for this phase to be considered complete? Frame as outcomes ("the API returns 200 on POST /foo"), not tasks ("the route file was created").
4. **Executable verification commands** — Specific commands to run that prove the must-be-true conditions hold (tests, curl commands, grep checks).
5. **Anti-pattern guards** — What NOT to do (invented APIs, undocumented params)
Comment on lines +43 to +51
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Task sizing constraints not reflected in skill body

The PR description lists "task sizing constraints" as one of the five headline enhancements, but neither make-plan-v2 nor do-v2 contains any guidance on task size limits (e.g., max lines changed per task, time budget, or context-window fit). If task sizing was intentionally deferred, the PR description and test plan checklist should be updated to reflect that; if it was meant to be included, a guideline like "each task should be small enough to complete in a single subagent context" belongs in the Each Implementation Phase Must Include section here.

Fix in Claude Code


### Final Phase: Verification

1. Verify all implementations match documentation
2. Check for anti-patterns (grep for known bad patterns)
3. Run tests to confirm functionality

## Plan Output Format

Write the plan to `plan.md` in the project root. Add `plan.md` to `.gitignore` if not already present.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 plan.md filename collision with original make-plan

Both make-plan and make-plan-v2 write to the same plan.md in the project root. If a developer runs make-plan to create a v1 plan and then later runs make-plan-v2 for a different task (or vice versa), the second invocation will silently overwrite the first plan. Since do-v2 relies on the YAML frontmatter that only make-plan-v2 produces, running do-v2 against an overwritten v1 plan will hit the staleness check immediately with no frontmatter to compare against. Consider writing to a distinct filename (e.g. plan-v2.md) or prompting the user if a plan.md already exists.

Fix in Claude Code

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Clarify the .gitignore update procedure.

The instruction "Add plan.md to .gitignore if not already present" is ambiguous. It doesn't specify:

  • How to check if the entry already exists (exact match? pattern match?)
  • What to do if .gitignore doesn't exist (create it?)
  • How to handle existing patterns that might cover plan.md (e.g., *.md)

This could lead to duplicate entries, failed file operations, or inconsistent behavior.

📋 Suggested clarification
-Write the plan to `plan.md` in the project root. Add `plan.md` to `.gitignore` if not already present.
+Write the plan to `plan.md` in the project root. After writing the plan, check if `.gitignore` exists in the project root. If it exists, check whether it contains a line matching `plan.md` (exact match or pattern like `/plan.md` or `*.md`). If no such entry exists, append a new line `plan.md` to `.gitignore`. If `.gitignore` doesn't exist, create it with the single entry `plan.md`.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Write the plan to `plan.md` in the project root. Add `plan.md` to `.gitignore` if not already present.
Write the plan to `plan.md` in the project root. After writing the plan, check if `.gitignore` exists in the project root. If it exists, check whether it contains a line matching `plan.md` (exact match or pattern like `/plan.md` or `*.md`). If no such entry exists, append a new line `plan.md` to `.gitignore`. If `.gitignore` doesn't exist, create it with the single entry `plan.md`.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugin/skills/make-plan-v2/SKILL.md` at line 61, Clarify and harden the
".gitignore" update: when writing the plan to plan.md in the project root, first
ensure the project root file plan.md is created/overwritten as intended, then
handle .gitignore by (1) creating .gitignore if it does not exist, (2) reading
existing lines and ignoring blank lines and comments, (3) checking whether
plan.md is already ignored either by an exact entry "plan.md" or by a broader
pattern that would match it (e.g., "*.md", "/*.md", "docs/*.md", or path entries
that match "plan.md"), and only append the literal "plan.md" entry if no
existing line or pattern would already ignore it; avoid adding duplicate entries
and trim whitespace when comparing.


The plan file must start with YAML frontmatter:

---
name: add-user-auth
date: 2026-03-28
branch: feature/user-auth
commit_sha: abc1234
current_phase: 1
overall_status: in-progress
---
Comment on lines +63 to +72
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Add instructions for populating git-dependent frontmatter fields.

The frontmatter example includes branch and commit_sha fields that do-v2 uses for staleness checking (line 14 in do-v2/SKILL.md), but this section doesn't instruct the orchestrator to populate these fields from the current git state. Without explicit instructions, an LLM might use placeholder values or omit them, breaking the staleness check feature.

Additionally, current_phase: 1 lacks guidance on the correct initial value—should it be 0 (for Phase 0: Documentation Discovery) or 1 (for the first implementation phase)?

📝 Suggested addition after line 62
 Write the plan to `plan.md` in the project root. Add `plan.md` to `.gitignore` if not already present.
 
+Populate the frontmatter fields as follows:
+- `name`: A short kebab-case identifier for the plan (e.g., `add-user-auth`)
+- `date`: Current date in YYYY-MM-DD format
+- `branch`: Current git branch name (run `git branch --show-current`)
+- `commit_sha`: Current git HEAD commit (run `git rev-parse HEAD`)
+- `current_phase`: Set to `0` initially (Phase 0: Documentation Discovery)
+- `overall_status`: Set to `not-started` initially
+
 The plan file must start with YAML frontmatter:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugin/skills/make-plan-v2/SKILL.md` around lines 63 - 72, Update the
SKILL.md frontmatter example to instruct the orchestrator/LLM to populate
git-dependent fields by reading the repo state: set branch to the current branch
name (e.g., from git rev-parse --abbrev-ref HEAD) and commit_sha to the current
commit hash (e.g., from git rev-parse HEAD), and ensure these values are
inserted into the plan frontmatter for staleness checks (fields "branch" and
"commit_sha"); also clarify the initial "current_phase" value (use 0 for Phase
0: Documentation Discovery as the default for newly created plans, and describe
when/ how to increment it to 1+ for implementation phases).


Each phase is a markdown section with checkbox tasks (`- [ ]` for pending, `- [x]` for complete).

If the plan file cannot be written, tell the user and stop.

## Key Principles

- Documentation Availability ≠ Usage: Explicitly require reading docs
- Task Framing Matters: Direct agents to docs, not just outcomes
- Verify > Assume: Require proof, not assumptions about APIs
- Session Boundaries: Each phase should be self-contained with its own doc references

## Anti-Patterns to Prevent

- Inventing API methods that "should" exist
- Adding parameters not in documentation
- Skipping verification steps
- Assuming structure without checking examples
Loading