Крутецкая статья о том, как менялся подход. У меня откликается, ибо год назад я дергал ручку AI в попытке получить результат. В итоге, пришел примерно к тому же самому. Если кратко, как писать запрос
👉 Не сделай что-то, а конкретный контракт с условиями и требованиям (как-будто отдал задачку своему джуну)
👉 Выставляйте ограничения. Они могут быть как в самой задаче, так и в
AGENT.md файле. Просто попросить следовать паттернам вашего проекта поможет, но совсем чуть-чуть. Вы же не пишете код как попало? Да ведь?👉 Задавайте формат того, что вы хотите увидеть, если не хотите получить неподдерживаемый код. Расскажите агенту о ваших собственных стандартах качества
👉 FAILURE CONDITIONS. Это что-то новенькое, но в целом соглашусь. Говорить что НЕ делать очень помогает в финальной фазе
❌ Так не делай
Add a dashboard for my app
✔️ Так делай
> Build the /dashboard page.
>
> GOAL: Display user's active projects with real-time updates.
> First meaningful paint under 1 second. User can create, archive,
> and rename projects inline.
>
> CONSTRAINTS: Convex useQuery for data, no polling, no SWR.
> Clerk useUser() for auth check. Redirect to /sign-in if
> unauthenticated. Max 150 lines per component file.
>
> FORMAT: Page component in app/dashboard/page.tsx (server component
> wrapper), client component in components/dashboard/ProjectList.tsx,
> Convex query in convex/projects.ts. Tailwind only.
>
> FAILURE CONDITIONS:
> - Uses useState for data that should be in Convex
> - Any component exceeds 150 lines
> - Fetches data client-side when it could be server-side
> - Uses any UI library besides Tailwind utility classes
> - Missing loading and error states
> - Missing TypeScript types on any function parameter
