Plan
Purpose
Turn a ticket, feature request, or rough idea into a plan that is clear enough to implement against.
For smaller work, that means a short working plan.
For larger multi-hour work, that means a longer living execution plan in the style of PLANS.md.
When to use
- Starting a new feature or meaningful change
- A Linear ticket is good, but still needs cleaner implementation intent
- Requirements, scope, or success criteria are unclear
- The change touches multiple files, interfaces, config, schema, or data flow
- The task is large enough that you want a document to guide several implementation passes
Choose the right level of planning
1. Lightweight plan
Use this when:
- the ticket is already fairly descriptive
- the change is small or medium
- you mainly need clearer scope, steps, and verification
Output:
- a short Markdown plan
- usually 5-20 lines
- enough for one focused implementation session
2. Full execution plan
Use this when:
- the task may take multiple hours
- the work spans multiple milestones
- you need a living document during implementation
- another engineer or agent should be able to continue from the plan alone
Output:
- a self-contained plan in the style of
PLANS.md
- prose-first, explicit, and updateable during implementation
Process
- Read the ticket, product context,
AGENTS.md, and relevant code before planning.
- Restate the goal in plain English.
- Decide whether this needs a lightweight plan or a full execution plan.
- If a material decision is missing, ask a concise question or state an explicit assumption.
- Write the plan so someone could implement from it without relying on hidden context.
What a lightweight plan should contain
- Goal
- Context
- Scope
- Non-goals
- Proposed steps
- Risks
- Verification
Example:
# GRA-141 Plan
Goal: persist scraped jobs into Postgres while keeping CSV export.
Context:
- Current scraper exports CSV.
- We want minimal persistence without broadening scope into UI or API work.
Scope:
- Add DB configuration.
- Define a minimal jobs table.
- Persist jobs from the scraper flow.
Non-goals:
- No new UI.
- No API endpoints.
- No broad data model redesign.
Steps:
1. Add DB configuration and connection setup.
2. Define minimal `jobs` table.
3. Implement job upsert logic.
4. Wire scraper CLI to persist jobs.
5. Keep CSV export optional.
6. Add tests for upsert and rerun behavior.
7. Run review and cleanup.
Verification:
- Targeted tests pass.
- Existing CLI flow still works.
What a full execution plan should contain
A full execution plan should be self-contained and readable by someone with only the working tree and the plan.
Required sections:
- Purpose
- Progress
- Surprises & Discoveries
- Decision Log
- Outcomes & Retrospective
- Context and Orientation
- Plan of Work
- Concrete Steps
- Validation and Acceptance
- Rollback or Safety Notes, if relevant
For larger tasks:
- write in plain English
- explain non-obvious terms immediately
- name files by path
- keep the plan updated as work progresses
Rules
- Keep the plan as short as the task allows.
- Do not write a greenfield design if the codebase already has patterns to follow.
- Call out schema, config, CLI, API, or file-format changes explicitly.
- Make requirements specific enough that someone can review the implementation against them.
- If the request is tiny and obvious, skip the long plan and move straight to a lightweight plan or direct implementation.
- If the task is long-running, treat the plan as a living document and update it during execution.
- If the plan starts getting large because the task is actually several tasks, split the work.
Resources
For this repo, use:
resources/plan-template.md for a short working plan
resources/execplan-template.md for a longer PLANS.md-style execution plan
1---2name: plan-23description: Write a short implementation plan or a longer execution plan before coding. Use when starting new work, when a ticket needs clearer boundaries, when a change spans multiple files or interfaces, or when a multi-hour task needs a living plan.4---56# Plan78## Purpose910Turn a ticket, feature request, or rough idea into a plan that is clear enough to implement against.1112For smaller work, that means a short working plan.1314For larger multi-hour work, that means a longer living execution plan in the style of `PLANS.md`.1516## When to use1718- Starting a new feature or meaningful change19- A Linear ticket is good, but still needs cleaner implementation intent20- Requirements, scope, or success criteria are unclear21- The change touches multiple files, interfaces, config, schema, or data flow22- The task is large enough that you want a document to guide several implementation passes2324## Choose the right level of planning2526### 1. Lightweight plan2728Use this when:2930- the ticket is already fairly descriptive31- the change is small or medium32- you mainly need clearer scope, steps, and verification3334Output:3536- a short Markdown plan37- usually 5-20 lines38- enough for one focused implementation session3940### 2. Full execution plan4142Use this when:4344- the task may take multiple hours45- the work spans multiple milestones46- you need a living document during implementation47- another engineer or agent should be able to continue from the plan alone4849Output:5051- a self-contained plan in the style of `PLANS.md`52- prose-first, explicit, and updateable during implementation5354## Process55561. Read the ticket, product context, `AGENTS.md`, and relevant code before planning.572. Restate the goal in plain English.583. Decide whether this needs a lightweight plan or a full execution plan.594. If a material decision is missing, ask a concise question or state an explicit assumption.605. Write the plan so someone could implement from it without relying on hidden context.6162## What a lightweight plan should contain6364- Goal65- Context66- Scope67- Non-goals68- Proposed steps69- Risks70- Verification7172Example:7374```md75# GRA-141 Plan7677Goal: persist scraped jobs into Postgres while keeping CSV export.7879Context:80- Current scraper exports CSV.81- We want minimal persistence without broadening scope into UI or API work.8283Scope:84- Add DB configuration.85- Define a minimal jobs table.86- Persist jobs from the scraper flow.8788Non-goals:89- No new UI.90- No API endpoints.91- No broad data model redesign.9293Steps:941. Add DB configuration and connection setup.952. Define minimal `jobs` table.963. Implement job upsert logic.974. Wire scraper CLI to persist jobs.985. Keep CSV export optional.996. Add tests for upsert and rerun behavior.1007. Run review and cleanup.101102Verification:103- Targeted tests pass.104- Existing CLI flow still works.105```106107## What a full execution plan should contain108109A full execution plan should be self-contained and readable by someone with only the working tree and the plan.110111Required sections:112113- Purpose114- Progress115- Surprises & Discoveries116- Decision Log117- Outcomes & Retrospective118- Context and Orientation119- Plan of Work120- Concrete Steps121- Validation and Acceptance122- Rollback or Safety Notes, if relevant123124For larger tasks:125126- write in plain English127- explain non-obvious terms immediately128- name files by path129- keep the plan updated as work progresses130131## Rules132133- Keep the plan as short as the task allows.134- Do not write a greenfield design if the codebase already has patterns to follow.135- Call out schema, config, CLI, API, or file-format changes explicitly.136- Make requirements specific enough that someone can review the implementation against them.137- If the request is tiny and obvious, skip the long plan and move straight to a lightweight plan or direct implementation.138- If the task is long-running, treat the plan as a living document and update it during execution.139- If the plan starts getting large because the task is actually several tasks, split the work.140141## Resources142143For this repo, use:144145- `resources/plan-template.md` for a short working plan146- `resources/execplan-template.md` for a longer `PLANS.md`-style execution plan