Skip to content

PRD Workflow in Cursor

Your PM drops a Slack message: “We need a notification system. Email, push, SMS. User preferences. Delivery tracking. Can you scope it?” You open Cursor and start typing code. Three hours later, you have half an email service, no tests, and a growing realization that you never thought through how SMS delivery confirmations would work. The PRD-to-Plan-to-Todo workflow exists to prevent exactly this. It forces you to think before you code, and it uses Cursor’s Plan mode to make that thinking fast and structured.

  • A repeatable 3-phase workflow: PRD, then Plan, then Todo — each using a different Cursor mode
  • Cursor-specific shortcuts for switching between Plan mode and Agent mode at the right moments
  • A PRD template you can paste into any new feature conversation
  • The ability to save plans to .cursor/plans/ for team reference and future context

The PRD does not need to be a 20-page document. It needs to be specific enough that you (and the AI) agree on what “done” looks like before any code gets written.

Open Agent mode (Cmd+I) and start by asking the AI to help you draft the requirements.

The key instruction at the end — “Ask me clarifying questions” — prevents the AI from making assumptions. It will ask about your existing infrastructure, authentication model, database setup, and volume expectations. Answer these questions. Every answer you provide here is context the AI uses to generate better code later.

Before moving to Phase 2, make sure your PRD includes:

  • Specific acceptance criteria, not vague goals. “Users can toggle email/SMS/push per notification type” not “users manage preferences”
  • Error scenarios. What happens when SendGrid is down? When a phone number is invalid?
  • Non-functional requirements. How many notifications per second? What is the acceptable delivery latency?
  • Out of scope. Explicitly stating what you are not building prevents scope creep during implementation

Now switch from Agent mode to Plan mode. Press Shift+Tab in the agent input to toggle to Plan mode. Cursor also auto-suggests Plan mode when it detects complex tasks.

In Plan mode, the agent will:

  1. Research your codebase to understand existing patterns
  2. Ask clarifying questions about implementation details
  3. Generate a detailed technical plan
  4. Wait for your approval before writing any code

Once the plan looks right, save it to your workspace. Click “Save to workspace” in the plan output. This stores the plan in .cursor/plans/, which serves two purposes:

  1. Team documentation — other developers can read the plan before reviewing your PR
  2. Future context — you can reference the plan with @ in later conversations if you need to resume work

This is the most underused step. Review the plan critically:

  • Does the implementation order make sense? Can you start the frontend before the API is ready, or is there a hard dependency?
  • Are there simpler alternatives the AI missed?
  • Does the plan align with your existing architecture, or is it introducing new patterns unnecessarily?

Edit the plan in chat. Tell the agent what to change. Only move to Phase 3 when the plan is something you would confidently hand to a colleague.

Switch back to Agent mode (press Shift+Tab or select from the mode picker with Cmd+.). Now work through the plan systematically.

  1. Ask the agent to create a todo list from the plan

    Convert the implementation plan into a markdown todo list with checkboxes.
    Group tasks by phase. Each task should be completable in 1-4 hours.
    Include acceptance criteria for each task.
  2. Start with the first task

    Let's implement the first task: Create database migrations for the
    notification tables. Follow our existing migration patterns in src/db/migrations/.
  3. Verify before moving on

    Run the migration and show me the resulting schema.
    Then run our existing tests to make sure nothing is broken.
  4. Commit at milestones

    After completing each phase, commit your changes. Cursor creates checkpoints automatically, but git commits give you a named, shareable restoration point.

  5. Reference the plan for context

    If the agent loses track of the bigger picture in a long conversation, start a new chat and reference the plan:

    @.cursor/plans/notification-system.md
    We've completed phases 1 and 2. Let's start phase 3: implementing the
    delivery workers. Begin with the EmailWorker.

Cursor creates a checkpoint before every set of changes the agent makes. If a task goes off the rails:

  1. Press Escape to stop the agent mid-execution
  2. Click the Restore button next to the checkpoint in the conversation
  3. Refine your prompt and try again

This is faster than manually reverting files. Use it aggressively — there is no penalty for restoring a checkpoint.

Here is what a real session looks like, compressed:

[Plan Mode] "I need to add Stripe webhook handling for subscription events.
Our existing payment code is in src/services/billing/. Generate a plan."
[Plan Mode] Agent asks: "Do you want idempotent webhook handling?
Do you already have a webhook_logs table?"
[Plan Mode] You answer: "Yes to idempotent handling. No webhook_logs
table yet -- include that in the plan."
[Plan Mode] Agent generates plan with 4 phases, 12 tasks.
You review, adjust the order of two tasks, approve.
[Agent Mode] "Start with task 1: create the webhook_logs migration."
Agent creates migration, runs it, shows schema.
[Agent Mode] "Task 2: create the webhook endpoint with signature verification."
Agent implements, writes tests, runs them. Two tests fail.
Agent fixes implementation, reruns. All green.
[Agent Mode] Repeat for remaining tasks...

The plan is too generic: This usually means your PRD lacked specifics. Go back to Phase 1 and add concrete acceptance criteria, technology choices, and constraints.

The agent diverges from the plan during implementation: Start a new chat, reference the plan with @, and give it a specific task from the todo list. Long conversations cause drift — short, focused conversations with explicit context produce better results.

The plan does not fit your architecture: The agent can only match patterns it has seen. If your architecture is unusual, add a project rule describing it (see Project Rules) and regenerate the plan.

Tasks take longer than estimated: The todo list is a guide, not a contract. If a task is larger than expected, ask the agent to break it into sub-tasks.