Get personalized tech stack recommendations based on your project idea using the suggest-stack AI mode
The suggest-stack feature is a specialized chat mode that recommends a minimal tech stack tailored to your project idea. It’s designed specifically for “vibe coders” who use AI coding agents rather than writing code directly.
User: I want to build a todo appAI: Do users need to log in and save their todos, or is this just for you?User: Just for me, no login neededAI: Keep the first version lean. Start with Cursor (Plan Mode).- Start with a planning tool: use Cursor to outline your todo app structure before coding- Vercel (deployment): Deploy instantly when ready- Later if needed: Add Supabase for cloud sync across devices- To get started: Open Cursor and ask it to create a simple todo app with local storage
'- Prefer planning-centric AI coding tools such as Cursor (Plan Mode), Claude Code, or Codex-style web agents.''- Default to these planning tools when in doubt, so the user builds a planning habit.''- Only choose a different dev tool when the user clearly wants something else (for example a no-/low-code visual builder).''- Never recommend bare frameworks such as "use React" or "use Spring Boot" as the primary dev_tool.'
When a stack recommendation is returned, it’s converted to markdown (shared/chatPolicy.ts:272-287):
function formatSuggestStackMarkdown(stack: SuggestStackStack): string { const lines: string[] = [stack.summary, ''] lines.push( '- Start with a planning tool: Cursor (local repo & deep code work), ' + 'Claude Code (browser-based multi-file editing), Codex web (fast experiments). ' + `For you, **${stack.dev_tool}** is a good default choice.` ) for (const t of stack.core_tools) { lines.push(`- **${t.name}** (${t.category}): ${t.reason}`) } if (stack.optional_later.length > 0) { const later = stack.optional_later.map((t) => `${t.name} for ${t.reason}`).join('; ') lines.push(`- Later if needed: ${later}`) } lines.push(`- To get started: ${stack.setup_note}`) return lines.join('\n')}
If the OpenAI response can’t be parsed as valid JSON, suggest-stack falls back to local tool ranking (shared/chatPolicy.ts:289-305):
function buildSuggestStackFallbackResponse(latestUserMessage: string): string { const ranked = rankGuideToolsByQuery(latestUserMessage, 5) const devTool = ranked.find((t) => t.category === 'development') ?? ranked[0] if (!devTool) { return [ 'Start with your preferred AI dev tool and ask it to build a minimal version of your idea.', '- Open Cursor, Codex, or Replit and describe what you want to build.', '- Keep the first version to one core flow; add more after it works.', ].join('\n') } return [ `Keep the first version lean. Start with **${devTool.name}** – ${devTool.tagline}.`, `- Open ${devTool.name} and ask it to build a minimal version of your idea.`, '- Use the agent for everything; no need to write code yourself.', '- Add a database or auth later only if you need saved data or user accounts.', ].join('\n')}
This ensures users always get a helpful response, even if the structured AI output fails.
The response follows the standard chat completion format but with markdown-formatted stack recommendations:
{ "id": "chatcmpl-clarify", "object": "chat.completion", "created": 1234567890, "model": "gpt-5.2", "choices": [ { "index": 0, "finish_reason": "stop", "message": { "role": "assistant", "content": "Do users need accounts to share recipes, or is it a public feed anyone can post to?" } } ]}