plan-task
Skill45 starsChanged 4 days agoMITView on GitHub
Plans a task or feature - loads context, optionally clarifies requirements, spawns Plan agent, persists plan to the project-scoped .groundwork-plans/
12 other projects use a version of this.
Adopted by
Most recently taken up by
- rumotion/ai-agent-project-templatetheir own version, first seen Nov 1, 2026
- griffinhilly/claude-code-synthesistheir own version, first seen Nov 1, 2026
- fitlab-ai/agent-infratheir own version, first seen Oct 27, 2026
- anaidenko/claude-notify-resumetheir own version, first seen Oct 15, 2026
- Yesterday-AI/ytstacktheir own version, first seen Oct 13, 2026
- jezweb/vite-flare-startertheir own version, first seen Oct 9, 2026
Used with
Projects with it also use code-review.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
GoogleSkillcode-review
Adversarial systems, concurrency, memory-model, and architecture code review protocol. Use this skill whenever asked to review code, PRs, diffs, or branches in Filament.
Also in 3 projects that use this
Other versions12 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 12
- ModelEngine-Group/fit-framework★ 2.1ksame name
- mattolson/agent-sandbox★ 212same name
- fitlab-ai/agent-infra★ 87same name
- griffinhilly/claude-code-synthesis★ 67same name
- jezweb/vite-flare-starter★ 49same name
- LevNas/ccmemo★ 4same name
- Yesterday-AI/ytstack★ 2same name
- anaidenko/claude-notify-resume★ 1same name
- NAVNAV221/ai-native-codebase★ 1same name
- rumotion/ai-agent-project-template★ 1same name
2 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository43 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- build-unplannedSkill
- check-specs-alignmentSkill
- create-tasksSkill
- debugSkill
- design-architectureSkill
- design-it-twiceSkill
- design-productSkill
- domain-modelingSkill
- doubt-driven-developmentSkill
- finalize-taskSkill
- groundwork-checkSkill
- groundwork-helpSkill
- handoffSkill
- implement-taskSkill
- instrument-observabilitySkill
- just-do-itSkill
- just-do-it-swarmingSkill
- review-prSkill
- select-projectSkill
- setup-repoSkill
- shipSkill
- skillsSkill
- source-architecture-from-codeSkill
- source-product-specs-from-codeSkill
- source-ux-design-from-codeSkill
- split-architectureSkill
- split-specsSkill
- staged-rolloutSkill
- statuslineSkill
- swarm-debugSkill
- swarm-design-architectureSkill
- task-validation-loopSkill
- test-driven-developmentSkill
- understanding-feature-requestsSkill
- use-git-worktreeSkill
- using-groundworkSkill
- ux-designSkill
- validateSkill
- vertical-sliceSkill
- work-on-next-taskSkill
- work-onSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
34 rules. 0 are common, 16 are distinctive, and 18 are very specific to this project.
0
Common
Most of the 10 edited versions we read keep these.
16
Distinctive
This author's own choices. Worth a look.
18
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 14
If arguments include --project <name>, resolve that project directly from the repository's .groundwork.yml for this invocation.
- Very specific: line 18
If session context contains GROUNDWORK_RUNNER_MODE=true:
- Very specific: line 21
Treat GROUNDWORK_BATCH_MODE=true as authoritative: do not call AskUserQuestion.
- Very specific: line 22
When information or a decision is missing, return RESULT: FAILURE instead of asking.
- Very specific: line 23
Do not modify .gitignore; the runner keeps .groundwork-plans/ out of Git state.
- Very specific: line 24
Keep the existing terminal RESULT: PLANNED contract unchanged.
- Distinctive: line 30
No narration turns: Do not output text-only turns like "Let me load the task" or "Now I'll spawn the plan agent." Combine text with a tool …
- Distinctive: line 31
Batch tool calls: When multiple tool calls are independent, issue them all in one turn.
- Distinctive: line 32
No waiting updates: Do not output "Waiting for results..." turns.
- Distinctive: line 33
Keep context lean: Do not read file contents you won't use directly.
- Very specific: line 40
If effort is low or medium (i.e.
- Distinctive: line 41
If you are not Sonnet or Opus, you MUST show the recommendation prompt — regardless of effort level.
- Distinctive: line 59
If the user selects "Cancel — I'll switch first": output the switching commands and stop.
- Very specific: line 66
If yes → Is {{project_name}} non-empty?
- Very specific: line 67
If empty → Invoke Skill(skill="groundwork:select-project") to select a project, then restart this skill.
- Very specific: line 68
If set → Project is {{project_name}}, specs at {{specs_dir}}/.
- Distinctive: line 69
If no → Continue (single-project repo).
- Distinctive: line 72
If CWD is the repo root → fine, proceed.
- Very specific: line 73
Check which project's path CWD falls inside (compare against all projects in .groundwork.yml).
- Distinctive: line 74
If CWD is inside the selected project's path → fine, proceed.
- Very specific: line 75
If CWD is inside a different project's path → warn via AskUserQuestion:
- Very specific: line 79
If the user switches, invoke Skill(skill="groundwork:select-project").
- Distinctive: line 80
If CWD doesn't match any project → proceed without warning (shared directory).
- Very specific: line 99
Search for ### TASK-NNN: pattern.
- Very specific: line 107
Resume guard: Run node ${CLAUDE_PLUGIN_ROOT}/lib/task-resume.js check TASK-NNN (add --project <name> in monorepos).
- Distinctive: line 128
If none exist, that's fine — proceed without them.
- Very specific: line 130
Clarify requirements: Call Skill(skill="groundwork:understanding-feature-requests")
- Distinctive: line 132
Do NOT attempt to gather requirements yourself.
- Distinctive: line 134
If existing specs were loaded, provide them as context so the clarification skill can:
- Distinctive: line 139
Follow the skill to gather: problem being solved, target user/persona, expected outcome, edge cases and scope boundaries.
- Distinctive: line 225
After the plan is validated, persist it to disk in the same turn as receiving the Plan agent's output:
- Distinctive: line 227
Create the plans directory and ensure it's gitignored:
- Very specific: line 235
Use the Write tool to save the plan.
- Very specific: line 261
Do NOT restate, summarize, or re-quote the plan in any subsequent turn.
“Common” is measured: kept by at least 6 in 10 of the 10 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Task Planning Skill
Plans a task or feature by loading context, optionally clarifying requirements, spawning a Plan agent, and persisting the validated plan to the project-scoped .groundwork-plans/ directory.
Explicit Project Input
If arguments include --project <name>, resolve that project directly from the repository's .groundwork.yml for this invocation. Treat it as authoritative; do not depend on or change persisted project selection. In runner mode, GROUNDWORK_PROJECT and GROUNDWORK_PROJECT_ROOT provide the same invocation-local selection.
Runner Mode
If session context contains GROUNDWORK_RUNNER_MODE=true:
- Skip the model recommendation pre-flight.
- Treat
GROUNDWORK_BATCH_MODE=trueas authoritative: do not callAskUserQuestion. - When information or a decision is missing, return
RESULT: FAILUREinstead of asking. - Do not modify
.gitignore; the runner keeps.groundwork-plans/out of Git state. - Keep the existing terminal
RESULT: PLANNEDcontract unchanged.
Token Discipline
This skill orchestrates planning workflows. Every turn re-reads the full context window, so unnecessary turns are expensive.
- No narration turns. Do not output text-only turns like "Let me load the task" or "Now I'll spawn the plan agent." Combine text with a tool call in the same turn, or skip the text entirely.
- Batch tool calls. When multiple tool calls are independent, issue them all in one turn.
- No waiting updates. Do not output "Waiting for results..." turns. Wait silently until results arrive.
- Keep context lean. Do not read file contents you won't use directly. Pass file paths to subagents and let them read in their own context windows.
Pre-flight: Model Recommendation
Your current effort level is {{effort_level}}.
Skip this step silently if effort is high, xhigh, or max (the scale is low < medium < high < xhigh < max, so xhigh and max are already above high) AND you are Sonnet or Opus.
If effort is low or medium (i.e. below high), you MUST show the recommendation prompt — regardless of model.
If you are not Sonnet or Opus, you MUST show the recommendation prompt — regardless of effort level.
Otherwise → use AskUserQuestion:
{
"questions": [{
"question": "Planning benefits from consistent multi-domain reasoning.\n\nTo switch: cancel, run `/effort high` (and `/model sonnet` if on Haiku), then re-invoke.",
"header": "Effort check",
"options": [
{ "label": "Continue" },
{ "label": "Cancel — I'll switch first" }
],
"multiSelect": false
}]
}If the user selects "Cancel — I'll switch first": output the switching commands and stop. Do not proceed with the skill.
Step 0: Resolve Project Context
Before loading specs, ensure project context is resolved:
- Monorepo check: Does
.groundwork.ymlexist at the repo root?- If yes → Is
{{project_name}}non-empty?- If empty → Invoke
Skill(skill="groundwork:select-project")to select a project, then restart this skill. - If set → Project is
{{project_name}}, specs at{{specs_dir}}/.
- If empty → Invoke
- If no → Continue (single-project repo).
- If yes → Is
- CWD mismatch check (monorepo only):
- Skip if not in monorepo mode or if the project was just selected in item 1 above.
- If CWD is the repo root → fine, proceed.
- Check which project's path CWD falls inside (compare against all projects in
.groundwork.yml). - If CWD is inside the selected project's path → fine, proceed.
- If CWD is inside a different project's path → warn via
AskUserQuestion:"You're working from
<cwd>(inside [cwd-project]), but the selected Groundwork project is [selected-project] ([selected-project-path]/). What would you like to do?"- "Switch to [cwd-project]"
- "Stay with [selected-project]"
If the user switches, invoke
Skill(skill="groundwork:select-project").
- If CWD doesn't match any project → proceed without warning (shared directory).
- Proceed with the resolved project context. All
{{specs_dir}}/paths will resolve to the correct location.
Step 1: Detect Input Mode
Parse the input from the caller's conversation context. Three modes:
- Task ID (numeric like
4, or full format likeTASK-004): Setmode=task,task_id=TASK-NNN(zero-padded to 3 digits). - Blurb (free text, no task ID): Set
mode=feature,blurb=<text>. - Task ID + blurb (both present): Set
mode=task+blurb,task_id=TASK-NNN,blurb=<text>. - Neither (no argument, no context): Output
RESULT: FAILURE | No task ID or feature description provided.and stop.
Step 2: Load Context (mode-dependent)
Task ID mode (mode=task or mode=task+blurb)
- Locate task file:
- Single file:
{{specs_dir}}/tasks.md - Directory:
{{specs_dir}}/tasks/Search for### TASK-NNN:pattern. Error: Task not found → OutputRESULT: FAILURE | TASK-NNN not found in {{specs_dir}}/tasks/and stop.
- Single file:
- Read task definition — only the
### TASK-NNN:section (goal, action items, acceptance criteria, dependencies, status). Do NOT read full specs/architecture/design files. - Validate task is workable:
- Status
Complete→ OutputRESULT: FAILURE | TASK-NNN is already Complete.and stop. - Blocked by incomplete tasks → Output
RESULT: FAILURE | TASK-NNN is blocked by: [list].and stop. - Resume guard: Run
node ${CLAUDE_PLUGIN_ROOT}/lib/task-resume.js check TASK-NNN(add--project <name>in monorepos). If the check reports existing implementation work (resume_atisimplement,validate,finalize, ordone), re-planning would invalidate a resumable run — outputRESULT: FAILURE | TASK-NNN has existing in-flight work (resume_at: <value>). Resume it via work-on instead of re-planning.and stop, surfacing the check'sevidence.
- Status
Verify spec paths exist (use Glob, not Read):
{{specs_dir}}/product_specs.mdor{{specs_dir}}/product_specs/{{specs_dir}}/architecture.mdor{{specs_dir}}/architecture/{{specs_dir}}/design_system.md- Tasks file (already found above)
If specs missing: Report which are missing and suggest running
/groundwork:design-productor/groundwork:design-architecturefirst. In runner mode, returnRESULT: FAILUREinstead of asking. Otherwise useAskUserQuestionto confirm proceeding without them. If design system missing: Proceed without it.- Set
identifier=TASK-NNN,branch_prefix=task.
Blurb mode (mode=feature)
Load existing specs (check for and read if they exist):
{{specs_dir}}/product_specs.md(or{{specs_dir}}/product_specs/directory) →PRD_CONTEXT{{specs_dir}}/architecture.md(or{{specs_dir}}/architecture/directory) →ARCHITECTURE_CONTEXT{{specs_dir}}/design_system.md→DESIGN_CONTEXT
For each, check single file first, then directory. If a directory, aggregate all
.mdfiles. If none exist, that's fine — proceed without them.Clarify requirements: Call
Skill(skill="groundwork:understanding-feature-requests")Do NOT attempt to gather requirements yourself. The skill handles this.
If existing specs were loaded, provide them as context so the clarification skill can:
- Detect contradictions with existing PRD requirements
- Identify overlap with existing features
- Understand architectural constraints
Follow the skill to gather: problem being solved, target user/persona, expected outcome, edge cases and scope boundaries. Continue until requirements are clear and internally consistent.
- Generate feature identifier:
- Format:
FEATURE-<slug> - Slug rules: lowercase, hyphen-separated, 2-4 words max, derived from core functionality
- Examples: "Add user login" →
FEATURE-user-login, "Export reports to PDF" →FEATURE-pdf-export
- Format:
- Set
identifier=FEATURE-<slug>,branch_prefix=feature.
Step 3: Spawn Plan Agent
Spawn a Plan agent with mode-appropriate context:
Task ID mode
Agent(
subagent_type="Plan",
description="Plan TASK-NNN",
prompt="Plan the implementation of a task.
TASK DEFINITION:
[Paste the task section read in Step 2 — goal, action items, acceptance criteria]
[If mode=task+blurb, add:]
ADDITIONAL CONTEXT FROM USER:
[blurb text]
SPEC PATHS (read these yourself for full context):
- Product specs: [path or 'not found']
- Architecture: [path or 'not found']
- Design system: [path or 'not found']
- Tasks file: [path]
CONSTRAINTS:
1. Work happens in an isolated git worktree — the plan must instruct the implementer to resolve it with `node ${CLAUDE_PLUGIN_ROOT}/lib/worktree-identity.js <task-id>` and use the returned `path` and `branch` verbatim (never hand-derived `.worktrees/TASK-NNN` paths)
2. Implementation must follow TDD — write failing tests first, then make them pass
3. Plan covers implementation only — validation and merge are handled separately by the caller
4. If a design system is present, the plan must reference design tokens, colors, and component patterns from it
"
)Blurb mode (feature)
Agent(
subagent_type="Plan",
description="Plan FEATURE-slug",
prompt="Plan the implementation of a feature.
FEATURE DEFINITION:
- Identifier: [FEATURE-slug]
- Description: [1-2 sentence summary from clarification]
REQUIREMENTS:
[Bulleted list of clarified requirements]
ACCEPTANCE CRITERIA:
[Bulleted list of acceptance criteria]
OUT OF SCOPE:
[Bulleted list of exclusions, or 'None specified']
SPEC PATHS (read these yourself for full context):
- Product specs: [path or 'not found']
- Architecture: [path or 'not found']
- Design system: [path or 'not found']
CONSTRAINTS:
1. Work happens in an isolated git worktree — the plan must instruct the implementer to resolve it with `node ${CLAUDE_PLUGIN_ROOT}/lib/worktree-identity.js <feature-id>` and use the returned `path` and `branch` verbatim (never hand-derived `.worktrees/FEATURE-slug` paths)
2. Implementation must follow TDD — write failing tests first, then make them pass
3. Plan covers implementation only — validation and merge are handled separately by the caller
4. If a design system is present, the plan must reference design tokens, colors, and component patterns from it
"
)Validate the plan:
- Plan states work happens in a worktree
- Plan includes TDD cycle
If ANY unchecked: Reject plan, state what's missing, re-invoke Plan agent.
Step 4: Persist Plan
After the plan is validated, persist it to disk in the same turn as receiving the Plan agent's output:
- Create the plans directory and ensure it's gitignored:
mkdir -p {{plans_dir}} grep -qxF '.groundwork-plans/' .gitignore 2>/dev/null || printf '.groundwork-plans/\n' >> .gitignore{{plans_dir}}resolves inside the selected project's root (mirroring{{specs_dir}}), so overlapping identifiers across monorepo projects cannot collide. The.gitignorepattern is unanchored, so it covers plan directories at any project depth. Setplan_file_path={{plans_dir}}/{identifier}-plan.md(substitute the actual identifier). One plan per identifier — re-running planning on the same identifier overwrites the previous plan, which is intentional. The.gitignoreappend is idempotent so it is safe to run on every invocation. Use the
Writetool to save the plan. Format the file as:# Implementation Plan: {identifier} [Title] ## Context - Mode: task | feature | task+blurb - Identifier: {identifier} - Branch prefix: {branch_prefix} - Specs dir: {{specs_dir}} - Tasks path: {path to tasks file, or N/A for features} ## Requirements (blurb/feature mode only) [Clarified requirements, acceptance criteria, out-of-scope — omit this section in task mode] ## Plan <verbatim Plan agent output>This is the only turn where the plan content appears in orchestrator context.
- Output exactly:
RESULT: PLANNED | plan_file_path={plan_file_path} | identifier={identifier} | branch_prefix={branch_prefix} - Do NOT restate, summarize, or re-quote the plan in any subsequent turn. Refer to
plan_file_pathonly.
DO NOT proceed past this step. The caller handles implementation.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

