skills/planning-tasks/SKILL.md
Breaks an ambiguous goal into an ordered, concrete, executable task list with acceptance criteria and dependencies. Use when: the goal has 3+ distinct steps, multiple areas of the codebase will be touched, or scope is unclear enough that wrong assumptions could waste significant effort. Do not use when: task is a single well-defined action or the user has already provided a step-by-step breakdown.
npx skillsauth add maestria-co/ai-playbook planning-tasksInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Turn an ambiguous goal into an ordered list of concrete, executable tasks — each with a clear input, output, and testable acceptance criteria. The plan becomes the shared source of truth for implementation. Write it before writing code.
Do not invoke this pattern for a single well-defined task. If you already know exactly what to do and how, start doing it. Planning is overhead; plan only when it reduces more risk than it creates.
Check 1 — Understand the project context
Read .context/project-overview.md if it exists.
Check 2 — Check for existing plans
Check .context/plans/ for any existing plan for this feature or goal.
Restate the goal in your own words. Include:
If the goal is still unclear after restating, ask one focused question before proceeding. State your assumption if you proceed without asking.
Scan the relevant parts of the codebase and .context/ files. Identify:
Do not read files you do not need. Search specifically, not broadly.
List any questions that would block planning or execution. Separate them:
Never assume unknowns away silently. State them explicitly in the plan.
Write each task using this format:
### Task N: [Verb + Noun] (S/M/L)
Depends on: Task N-1 | none
Input: [specific files or prior task outputs]
Output: [named file or artifact — be specific]
Acceptance criteria:
- [ ] [Testable condition — verifiable, not vague]
- [ ] [Another condition]
Scope out: [what this task explicitly does NOT include]
Rules for tasks:
create, validate, configure, migrate — not handle, manage, updateIdentify tasks that have no dependency on each other and can run in parallel.
Mark them explicitly: (can run parallel with Task N).
Write the complete plan to .context/plans/[feature-name].md.
Use kebab-case for the filename: oauth-implementation.md, not OAuth Implementation.md.
Plan: [Feature name]
Saved: .context/plans/[feature-name].md
Tasks: N total (S: x, M: y, L: z)
Unknowns flagged: [description] | none
Parallel opportunities: Task N and Task M can run together | none
Depends on: none Input: .context/decisions/ADR-003-auth-strategy.md, current auth middleware Output: .context/research/oauth-refresh-tokens.md Acceptance criteria:
Depends on: Task 1 Input: .context/research/oauth-refresh-tokens.md, src/models/User.js (style reference) Output: src/models/OAuthProvider.js, db/migrations/YYYYMMDD-create-oauth-provider.js Acceptance criteria:
Depends on: Task 2 Input: OAuthProvider model, .context/decisions/ADR-003-auth-strategy.md Output: src/routes/auth/google.js, src/middleware/oauth.js Acceptance criteria:
Tasks: 5 total (S: 1, M: 2, L: 2) Unknowns flagged: refresh token strategy — blocked until Task 1 research complete Parallel: Task 4 (tests) and Task 5 (GitHub) can run parallel after Task 3 </output> </example>
<example> <scenario>Planning a database migration with risk of data loss</scenario> <input> <task>Rename the `user_name` column to `username` across the entire application.</task> <context> - PostgreSQL database, ~50k rows in users table - Column referenced in 12 files (found via grep) - Production deployment happens Friday </context> </input> <output> Plan: Rename user_name to usernameDepends on: none Input: codebase grep results Output: .context/plans/username-migration-audit.md (list of all files + line numbers) Acceptance criteria:
Depends on: Task 1 Input: audit document Output: db/migrations/YYYYMMDD-rename-user-name.js Acceptance criteria:
Tasks: 3 total (S: 1, M: 1, M: 1) Unknowns flagged: zero-downtime strategy for column rename — resolve in Task 2 </output> </example>
<example> <scenario>Simple feature that does NOT need this pattern</scenario> <input> <task>Add a `last_login` timestamp field to the User model.</task> </input> <output> This task is a single well-defined action. Do not plan — implement directly using the implementing-features pattern.If you want to note it: "Add last_login (timestamp, nullable) to User model and migration. Update login handler to set it on successful auth." </output> </example>
</examples>designing-systems task.context/plans/ — do not deliver plans only in chatdevelopment
Writes and runs a test suite for a piece of code, covering happy path, edge cases, error cases, and security cases. Use when: implementation is complete and needs test coverage, a bug needs a reproduction test and fix validation, or code needs coverage before a refactor. Do not use when: the code under test is not yet implemented, or the spec is still unclear.
testing
Use when creating a new skill, editing an existing skill, or helping a user author a skill for this system. Covers structure, discoverability, quality, and discipline hardening.
development
Evidence-based verification process to run before marking any task complete. Use this skill every time you're about to report that work is done — for features, bug fixes, refactoring, or any code change. This catches the most common failure mode: declaring "done" without proof. If you're finishing up and about to tell the user the task is complete, run this checklist first.
development
Teaches agents how to discover, select, and invoke skills from the skill library. Use this skill whenever you're uncertain which skill applies to a task, when composing multiple skills for complex work, or when you need to understand what skills are available. This is your go-to when facing an ambiguous task and need to figure out the right approach before diving into implementation.