May 26, 2025•24 min read••
Tags ▼
- ai/tools
- coding
- prd
- cursor
- mcp
- model-context-protocol
- ryan-carson
- claude
- codex
- chatgpt
Ryan Carson demonstrates structured AI-driven product development processes, emphasizing patience, context, and iterative task management.
This transcript explains a structured workflow for using Cursor as an AI-assisted development environment to build features more reliably than “vibe coding” alone. The core skill is turning a vague product idea into a reproducible implementation plan using PRDs, task lists, Cursor rules, and controlled context management. The main example is a small CRM tool for a yacht club, where the user wants to add a report showing boat names of members and how many emails they have been sent.
The primary technology is Cursor, a VS Code fork with AI agent capabilities. The workflow also references Claude 3.7 Sonnet, Gemini 2.5 Pro, OpenAI o3, Prisma, Postgres, SQLite, Vercel, Browserbase, Stagehand, MCP servers, Repo Prompt, and Taskmaster.
The main implementation lesson is: do not ask the AI to build large features from vague prompts. Instead, create structured context files, generate a Product Requirements Document, convert that PRD into a task list, then have the AI complete one subtask at a time while the human reviews progress.
Open the project in Cursor.
The transcript uses a small example project:
Project type: basic CRM-style application Example app: yacht club CRM Feature request: add a report showing:
The speaker describes Cursor as a VS Code fork, so the workflow assumes familiarity with a standard code editor layout: file explorer, editor pane, terminal or chat pane, and project folders.
Assumption: Standard/Typical Setup
The transcript does not provide a full installation procedure. A typical setup would include:
The speaker creates three files inside a Cursor rules folder.
The transcript does not give the exact folder path, but it refers to a “cursor rules folder.” In modern Cursor projects, this is commonly implemented using a folder such as:
Assumption: Standard/Typical Setup
.cursor/rules/
The three rule files described are:
generate-prd generate-tasks task-list
The transcript’s names are approximate because the speaker refers to them conversationally. The important part is their purpose:
PRD generation rule
Task generation rule
Task execution / task list management rule
The first rule instructs the AI to create a Product Requirements Document.
Implementation-critical instruction from the transcript:
“Create a PRD suitable for a junior developer to understand and implement this feature.”
This matters because the AI may otherwise over-assume knowledge or skip obvious implementation detail. By specifying junior developer, the prompt biases the output toward clarity, explicitness, and reproducibility.
The PRD-generation rule should instruct the AI to ask clarifying questions before writing the PRD.
The transcript specifically highlights using dot notation for questions:
1.1 1.2 2.1 2.2
This avoids messy multi-question bullets and makes it easier for the human to answer individual questions.
A practical version of the PRD rule would include instructions like:
You are an expert product manager. Your goal is to help the user create a Product Requirements Document suitable for a junior developer to understand and implement. Before writing the PRD, ask clarifying questions using numbered dot notation. Use this question format: 1.1 Question text 1.2 Question text 2.1 Question text 2.2 Question text Do not combine multiple questions into one bullet. After the user answers, create a PRD in Markdown with sections for: - Overview - Problem Statement - Goals - Non-Goals - User Stories - Functional Requirements - Design Considerations - Technical Considerations - Success Metrics - Open Questions
In Cursor, open the AI chat panel and use Agent Mode.
The speaker tags or includes the PRD rule file in the context window. In Cursor, this is typically done with an @ reference.
Example prompt pattern:
@generate-prd I'd like to add a report that shows me all the boat names of members and how many emails they've been sent.
The transcript notes that the speaker was using:
No exact Cursor configuration values are provided beyond those model names.
The AI asks clarifying questions before writing the PRD.
Example questions from the transcript:
1. What problem is this report trying to solve? 2. Who specifically will be using the report? 3. Where should this report be accessible?
Example answers from the speaker:
We're trying to give visibility into how many emails people are getting.
Admins.
You pick.
For the remaining questions, the speaker says:
The rest, make your best judgment.
This is an important workflow pattern: answer the high-value questions, then delegate low-risk decisions to the AI.
The AI writes the PRD into a tasks folder.
The transcript refers to a task folder where the PRD is placed.
Assumption: Standard/Typical Setup
A likely structure would be:
tasks/ prd-email-report.md
The PRD includes sections such as:
The purpose of this file is not just documentation. It becomes structured context for the next AI operation.
Next, use the second rule file: generate tasks.
The prompt pattern is:
@generate-tasks Please generate tasks for @prd-email-report.md
This gives the AI two important pieces of context:
The task-generation rule should instruct the AI to create a step-by-step Markdown checklist.
A practical task format would look like:
# Tasks: Email Report ## Relevant Files - `prisma/schema.prisma` - `app/reports/page.tsx` - `components/email-report-table.tsx` - `lib/email-service.ts` - `lib/db.ts` ## Tasks - [ ] 1.0 Update database model/query support - [ ] 1.1 Review existing member, boat, and email-related schema - [ ] 1.2 Define or update Prisma query for email counts - [ ] 1.3 Confirm required joins or relationships - [ ] 2.0 Add report backend logic - [ ] 2.1 Create report query function - [ ] 2.2 Return boat name and email count per member - [ ] 3.0 Add UI - [ ] 3.1 Create report page - [ ] 3.2 Render report table - [ ] 3.3 Add empty and loading states - [ ] 4.0 Test and validate - [ ] 4.1 Verify counts against database records - [ ] 4.2 Run lint/type checks - [ ] 4.3 Manually test as admin
The transcript specifically mentions that the generated task list includes:
The task-generation rule uses a checkpoint.
The AI first generates basic tasks, then asks whether to proceed.
The transcript says the AI outputs something like:
Ready to generate the subtasks. Respond with go to proceed.
The user then responds:
go
This is an important control mechanism. It prevents the AI from producing a large implementation plan before the human has validated the direction.
After accepting the generated file, inspect the task list.
The transcript highlights a Relevant Files section at the top of the task list.
This section is used to keep the AI focused on the implementation surface area. It reminds the model which files matter most for the feature.
Example:
## Relevant Files - `prisma/schema.prisma` - `app/admin/reports/page.tsx` - `lib/db.ts` - `components/reports/email-report.tsx`
The speaker says this is useful even when files are manually tagged later, because it helps the LLM “remember” the main implementation files.
The third rule controls how the AI works through the task list.
It tells the AI:
The key behavior is not letting Cursor attempt the full feature in one long autonomous run.
A practical task-list rule would include:
You are managing implementation from a Markdown task list. Rules: - Work on only one subtask at a time. - Do not start the next subtask until the user confirms. - After completing a subtask, immediately update the task list and mark the checkbox complete. - Explain what changed. - Mention any files modified. - Stop and ask whether to continue.
Prompt Cursor with the task-list rule and the generated task file:
@task-list Let's start @tasks-email-report.md
The AI begins with the first subtask.
The transcript’s example first subtask is approximately:
Define Prisma schema email campaign
The AI reads the existing Prisma schema and begins implementation.
After completing the subtask, it marks the task complete in the Markdown file:
- [x] 1.1 Define Prisma schema email campaign
Then it asks whether to continue:
Shall I proceed with subtask 1.2?
The user can respond:
yes
or, as the speaker jokes:
y
The transcript strongly emphasizes human review after each subtask.
The speaker notes that AI coding tools can introduce:
The workflow is intentionally slower than a single huge prompt, but more reliable.
Recommended review after each subtask:
npm run lint
npm run typecheck
npm test
npm run dev
The transcript does not mention these exact commands, but they are typical validation steps for a modern JavaScript or TypeScript project.
Assumption: Standard/Typical Setup
Use the commands appropriate to the project’s package manager:
npm run lint npm run test npm run build
or:
pnpm lint pnpm test pnpm build
or:
yarn lint yarn test yarn build
The host asks whether the workflow is connected to Git.
The speaker says he typically commits after finishing a parent task if the app is in a workable state.
Commit strategy from transcript:
Example Git workflow:
git status
git diff
git add .
git commit -m "Add email report data model support"
For larger features, commit after each stable parent task:
git commit -m "Add admin email report page"
git commit -m "Add email count query for members"
git commit -m "Add report table UI"
The transcript mentions Taskmaster, an open-source CLI tool.
Purpose:
The speaker says Taskmaster was “too much” for his preferred workflow. He wanted:
Implementation takeaway:
Use Taskmaster when you want a fuller CLI-based task-management system. Use simple Markdown files when you want transparent, editable, low-overhead control.
The transcript then moves into MCP, or Model Context Protocol, servers.
The speaker uses MCP to give Cursor access to external tools and systems.
Mentioned MCP use cases:
Postgres MCP
Browserbase MCP
Stagehand
Prisma
SQLite
The speaker opens Cursor Settings, then goes to the MCP section.
There he has a Browserbase MCP configured.
The transcript does not provide the exact JSON config, API key names, or install command.
Assumption: Standard/Typical Setup
A typical MCP configuration in Cursor may involve adding a server definition that includes:
Example conceptual structure:
{ "mcpServers": { "browserbase": { "command": "npx", "args": ["some-browserbase-mcp-package"], "env": { "BROWSERBASE_API_KEY": "your-api-key", "BROWSERBASE_PROJECT_ID": "your-project-id" } } } }
This is a generic example only. The transcript does not specify the exact package name or config.
The speaker starts a new Cursor chat in Agent Mode and asks:
Navigate to ChatPRD and take a screen grab.
Cursor uses the Browserbase MCP to control a cloud browser.
Then the speaker asks:
Navigate to pricing.
The browser moves to the pricing page.
Implementation use case:
The speaker uses Postgres MCP most often.
Example natural-language prompt:
Use the Postgres tool and tell me if this value is in the database.
Practical use cases:
The transcript says the startup uses Postgres on Vercel.
The speaker then demonstrates Repo Prompt, a Mac application.
Purpose:
The speaker contrasts this with Cursor, where context management can feel like a black box unless files are explicitly tagged.
The transcript describes selecting too much context first:
Whole repo: 395,000 tokens
Then reducing it:
324,000 tokens
After excluding generated content:
12,000 tokens
The speaker selects relevant directories/files such as:
app/ components/ lib/ prisma/schema.prisma scripts/
The exact files are not fully enumerated, but Prisma schema, components, lib, and scripts are explicitly referenced.
The speaker enters a prompt such as:
How can I improve the maintainability of this code?
Then includes a stored prompt called something like:
architect
The architect prompt tells the model to reason more like a software architect than a developer.
Repo Prompt copies:
It packages the context using XML-style tags.
The transcript describes sections like:
<user_instructions> How can I improve the maintainability of this code? </user_instructions>
<meta_prompt> ... </meta_prompt>
<file_contents> <file path="app/..."> ... </file> </file_contents>
The speaker pastes this into o3 or previously o1 Pro for heavy reasoning.
The speaker jokingly says an important part of the stack is listening to Tiësto’s live set from New York City while coding.
This is not an implementation requirement, but it reflects the working environment.
Cursor Primary AI coding environment. Described as a VS Code fork with AI agent capabilities.
VS Code Referenced because Cursor is based on or forked from it.
Claude 3.7 Sonnet Used in Max Mode during the demo.
Gemini 2.5 Pro The speaker’s usual preferred model for Cursor work.
OpenAI o3 Mentioned by the host as her default model.
o1 Pro Previously used by the speaker for heavy reasoning with carefully selected context.
ChatGPT Used frequently by the speaker, including with his children and for AI coaching.
ChatPRD / Chat PRD An AI product-management copilot mentioned by the host. Used for PRDs, product docs, coordination work, and strategic product coaching.
PRD Product Requirements Document. Used as the first major planning artifact before coding.
Markdown Used for PRDs and task lists.
Cursor rules Custom project-level instruction files that define repeatable AI behavior.
Taskmaster Open-source CLI tool for task management and AI-assisted task breakdown.
MCP / Model Context Protocol Mechanism for connecting Cursor/AI tools to external capabilities such as browsers and databases.
Browserbase Cloud browser automation backend used through MCP.
Stagehand Referenced as another browser automation-related MCP/tool.
Postgres Database used by the speaker in his startup.
Vercel Platform where the speaker uses Postgres for the startup.
Prisma Database ORM/schema tool used in the play project.
SQLite Used in the play project.
Repo Prompt Mac app for selecting repository files and packaging precise context for LLM prompts.
Git Used for change management and commits after stable implementation units.
Asana MCP Mentioned as something the speaker considered but decided was more overhead than simple Markdown task files.
Notion AI Mentioned in sponsorship context, especially AI meeting notes, enterprise search, and research mode.
Linear, Confluence, Google Drive, Slack, v0.dev, Dev Mentioned as integrations for ChatPRD.
The transcript explicitly refers to:
Cursor rules folder tasks folder PRD markdown file task list markdown file Prisma schema app folder components folder lib folder scripts folder generated folder
Common practical approximation:
.cursor/ rules/ generate-prd.md generate-tasks.md task-list.md tasks/ prd-email-report.md tasks-email-report.md prisma/ schema.prisma app/ components/ lib/ scripts/
PRD generation:
@generate-prd I'd like to add a report that shows me all the boat names of members and how many emails they've been sent.
Delegating unanswered details:
The rest, make your best judgment.
Task generation:
@generate-tasks Please generate tasks for @prd-email-report.md
Proceeding after task outline:
go
Starting implementation:
@task-list Let's start @tasks-email-report.md
Continuing one subtask:
yes
or:
y
Browserbase MCP example:
Navigate to ChatPRD and take a screen grab.
Navigate to pricing.
Postgres MCP example:
Use the Postgres tool and tell me if this value is in the database.
Repo Prompt architecture prompt:
How can I improve the maintainability of this code?
The transcript characterizes LLMs as very capable but prone to missing simple obvious context.
The practical solution is to:
Tell the AI the PRD should be suitable for a junior developer. This forces the model to avoid hand-wavy assumptions and produce clearer implementation detail.
Example:
Create a PRD suitable for a junior developer to understand and implement.
Require question numbering like:
1.1 1.2 2.1 2.2
This makes it easier to answer questions selectively and prevents the AI from bundling multiple questions into a single bullet.
When the AI asks too many questions, answer the important ones and say:
For the rest, make your best judgment.
This prevents planning from becoming a bottleneck.
The speaker considered using tools like Asana MCP, but decided that plain Markdown was easier.
Benefits of Markdown task files:
This helps the AI focus.
Example:
## Relevant Files - `prisma/schema.prisma` - `app/admin/reports/page.tsx` - `lib/db.ts` - `components/email-report-table.tsx`
This is one of the most important implementation controls.
Required behavior:
Complete one subtask. Mark it done. Stop. Ask for permission to continue.
This reduces runaway code generation and makes debugging easier.
The speaker commits after parent tasks or when the app is workable.
A practical rule:
Do not commit broken intermediate states unless intentionally saving a debugging branch.
Database lookups, browser navigation, and screenshots can be performed directly from Cursor when MCP servers are configured.
This reduces engineering toil because the developer does not have to constantly switch between:
Cursor’s context management can be convenient but opaque. For high-stakes reasoning, use Repo Prompt to explicitly include only the files that matter.
Best use cases:
The transcript shows why this matters:
395,000 tokens 324,000 tokens 12,000 tokens
The goal is not to include the entire repo. The goal is to include the smallest sufficient set of files.
The biggest mistake identified in the transcript is rushing through context.
Bad pattern:
Build this feature.
Better pattern:
Create a PRD. Ask clarifying questions. Generate tasks. Implement one subtask at a time.
Letting the AI implement an entire feature in one pass can lead to:
Unless files are explicitly tagged, the user may not know exactly what Cursor has included in context.
For precise work, use:
The transcript demonstrates Browserbase MCP, Postgres MCP, Stagehand, Prisma, and SQLite, but it does not provide exact installation commands, API keys, environment variables, or Cursor config JSON.
Any setup beyond the conceptual workflow requires consulting the official documentation for those tools.
The speaker prefers Gemini 2.5 Pro, demonstrates Claude 3.7 Sonnet Max Mode, and the host prefers o3. The transcript implies that different models have different strengths, and developers should learn the behavior of the model they use most.
The speaker estimates spending roughly several hundred dollars per month on premium AI coding usage. This is not a required cost, but advanced models and Max Mode can increase usage costs.
The transcript explicitly says the human-in-the-loop part is important. Even with a task list, the AI may introduce small problems.
Recommended checks:
git diff npm run lint npm run typecheck npm test npm run build
Use equivalents for your stack.
The yacht club CRM is used as a demo. The workflow generalizes, but production systems need stricter review, testing, security validation, and deployment controls.
Use the official Cursor docs to learn:
Study MCP to understand how AI coding environments connect to tools such as:
Useful for:
Relevant for implementing schema changes, migrations, and database queries in the kind of app shown in the transcript.
Focus areas:
schema.prismaRelevant for the database-inspection workflow described through MCP.
Focus areas:
Useful for learning:
The transcript relies on Git as a safety mechanism.
Focus areas:
Designing Data-Intensive Applications — Martin Kleppmann This book is highly relevant to the transcript’s database-heavy workflow involving Postgres, Prisma, reporting, and data visibility. It helps developers reason about schemas, queries, consistency, data modeling, and system reliability when AI-generated code starts touching real application data.
Refactoring — Martin Fowler The transcript repeatedly emphasizes maintainability, stepwise implementation, and avoiding uncontrolled AI-generated changes. This book provides practical techniques for safely improving existing codebases, reviewing diffs, restructuring logic, and keeping AI-assisted development from turning into messy, fragile code.
Clean Architecture — Robert C. Martin This is useful for the Repo Prompt architecture-review workflow shown in the transcript. It helps developers evaluate whether generated code has appropriate boundaries between UI, business logic, database access, and external integrations, especially when building features through iterative AI tasks.
The Pragmatic Programmer — David Thomas and Andrew Hunt This book supports the transcript’s core engineering mindset: use tools thoughtfully, control complexity, automate repetitive work, and maintain human judgment. It is especially relevant to combining Cursor, Git, MCP, Markdown task files, and manual review into a disciplined development workflow.
Software Engineering at Google — Titus Winters, Tom Manshreck, and Hyrum Wright The transcript focuses on scaling from quick AI-assisted coding toward reliable engineering practice. This book deepens understanding of code review, maintainability, testing, ownership, and long-term code health, which are essential when using AI agents to generate large volumes of production code.
Follow on your preferred channel for new articles, notes, and experiments.