Claude-executable plans have a specific format. This reference defines what makes a plan executable vs. vague.
**Core principle:** A plan is Claude-executable when Claude can read PLAN.md and immediately start implementing without clarifying questions. If Claude has to guess or interpret - the task is too vague.
Every task has four required fields:
**files** - Exact paths created/modified
- Good: `src/app/api/auth/login/route.ts`
- Bad: "the auth files"
**action** - Specific implementation with pitfalls to avoid
- Good: "POST endpoint accepting {email, password}. Query User by email, compare with bcrypt. Return JWT in httpOnly cookie (15-min expiry). Use jose (not jsonwebtoken - CommonJS issues with Edge)."
- Bad: "Add authentication"
**verify** - Executable proof of completion
- Good: `curl -X POST /api/auth/login` returns 200 with Set-Cookie header
- Bad: "It works"
**done** - Measurable acceptance criteria
- Good: "Valid credentials → 200 + cookie. Invalid → 401."
- Bad: "Authentication complete"
**type="auto"** (default) - Claude executes autonomously
```xml
Task 1: Create login endpointsrc/app/api/auth/login/route.tsPOST accepting {email, password}. bcrypt compare, JWT via jose, httpOnly cookie.curl returns 200 with Set-CookieValid → 200 + cookie. Invalid → 401.
```
**type="checkpoint:human-verify"** - Human confirms Claude's work
```xml
Responsive dashboard at /dashboard1. npm run dev 2. Visit localhost:3000/dashboard 3. Test mobile/tablet/desktopType "approved" or describe issues
```
**type="checkpoint:decision"** - Human makes implementation choice
```xml
Select auth providerNeed user auth with different tradeoffs.Select: supabase or clerk
```
**type="checkpoint:human-action"** - Rare, only for NO API/CLI actions (email links, 2FA)
**Golden rule:** If Claude CAN automate it, Claude MUST automate it.
See `./checkpoints.md` for comprehensive checkpoint guidance.
**Too vague:**
```xml
Add authentication???Implement auth???Users can authenticate
```
Claude: "How? What type? What library? Where?"
**Just right:**
```xml
Create login endpoint with JWTsrc/app/api/auth/login/route.tsPOST accepting {email, password}. Query User by email, bcrypt compare. On match: JWT via jose, httpOnly cookie (15-min). Return 200. Mismatch: 401. Use jose not jsonwebtoken (Edge compatibility).curl -X POST localhost:3000/api/auth/login -d '{"email":"test@test.com","password":"test123"}' returns 200 with Set-CookieValid → 200 + cookie. Invalid → 401. Missing fields → 400.
```
**Vague actions:**
- "Set up infrastructure" - what infrastructure?
- "Handle edge cases" - which ones?
- "Add proper error handling" - what's proper?
**Unverifiable completion:**
- "It works correctly" - how to test?
- "Code is clean" - subjective
- "Tests pass" - which tests? do they exist?
**Missing context:**
- "Use standard approach" - which standard?
- "Like the other endpoints" - Claude doesn't know your patterns
Good task size: 15-60 minutes of Claude work.
- Too small: "Add import for bcrypt" → combine with related task
- Just right: "Create login endpoint with JWT" → focused, specific
- Too big: "Implement full auth system" → split into multiple plans
If phase has >3 tasks or spans multiple subsystems, split into multiple plans: `{phase}-{plan}-PLAN.md`