05 / 06 · Best Practices

⚙️ IndyDevDan

Тактический подход к агентному кодингу: три фундаментальных кита качества, правильный порядок работы с задачами и прагматичный взгляд на выбор модели. Конкретные паттерны для ежедневной работы с CC.

⚙️
IndyDevDan
Tactical Agentic Coding Educator
⚠️
Частая ошибка новичков: фокусируются только на улучшении промпта, когда качество не устраивает. IndyDevDan's триада напоминает: если контекст слабый (нет CLAUDE.md, нет примеров кода, нет схемы БД) — никакой промпт не спасёт. Если модель неправильная (Haiku для сложной архитектурной задачи) — промпт не компенсирует. Когда CC даёт плохой результат, первый вопрос: «какой из трёх китов провалился?», а не «как переформулировать промпт?».
⚙️ Ключевой принцип

"Три кита: Context + Prompt + Model. Провалился один — провалится всё." Недостаточно иметь хороший промпт или правильную модель — все три элемента должны быть сильными одновременно. Слабое звено определяет качество результата, а не самое сильное.

💡
Тонкость для опытных: диагностика «какой кит провалился» у IndyDevDan имеет конкретную методику. Контекст-нога: дайте CC тот же промпт но добавьте один ключевой файл — если результат резко улучшился, провалился контекст. Модель-нога: переключитесь на Opus для того же запроса — если качество выросло, провалилась модель. Промпт-нога: только если первые два не помогли. Эта последовательность диагностики экономит время и деньги.
1
Три кита: Context, Prompt, Model

IndyDevDan строит свою методологию вокруг трёх равнозначных элементов. Ошибка большинства разработчиков — концентрация на одном (обычно промпте) при игнорировании остальных.

📄
Context
Что видит Claude: CLAUDE.md, файлы проекта, история разговора, @ссылки
Слабый context: "напиши сервис"
Сильный context: @UserService.php @examples/
💬
Prompt
Как ты формулируешь задачу: конкретность, ограничения, ожидаемый результат
Слабый: "сделай авторизацию"
Сильный: "добавь JWT middleware для API роутов с 401 при истекшем токене"
🤖
Model
Правильная модель для типа задачи: сложность, цена, скорость
Haiku для форматирования
Sonnet для кода
Opus для архитектуры

Практический тест: если получаете плохой результат — диагностируйте какой из трёх китов слаб:

  • Claude нарушает конвенции проекта → слабый Context (нет примеров)
  • Claude делает что-то похожее, но не то → слабый Prompt (недостаточно конкретно)
  • Claude не справляется с задачей → неправильная Model (нужна мощнее)
2
CLAUDE.md как "project constitution"

IndyDevDan называет CLAUDE.md не просто инструкциями, а "конституцией проекта". Этот файл — единственный источник истины для генерации кода. Всё остальное вторично.

"Claude читает CLAUDE.md как конституцию — она выше всего. Если в CLAUDE.md написано 'нет Eloquent в Controller' — это закон, не рекомендация."

Три ключевых правила для "конституции":

  • Конкретность важнее полноты. "Используй readonly классы в сервисах" лучше чем три абзаца про архитектуру
  • Обновляй после каждой ошибки Claude. Если Claude нарушил правило — добавь явный запрет в CLAUDE.md
  • Явные "нельзя" эффективнее "можно". "Нет прямых запросов к БД в контроллерах" работает лучше чем "используй репозитории"
## Архитектурные законы (не нарушать)

1. Controller — только HTTP: принять запрос, вернуть ответ
   - Нет бизнес-логики в Controller
   - Нет прямых Eloquent запросов в Controller
   - Все операции через соответствующий Service

2. Service — только бизнес-логика:
   - Все классы readonly
   - DI через конструктор
   - Нет HTTP знания в Service

3. Тесты — обязательно:
   - Feature тест для каждого endpoint
   - Unit тест для сложной бизнес-логики
   - Pest, не PHPUnit

## После изменений — всегда запускать:
./vendor/bin/pint && php artisan test
3
Native Tasks system — правильный порядок

IndyDevDan использует встроенную систему задач CC (Task tool) для управления сложными многошаговыми задачами. Ключевое правило: никогда "сделай всё сразу".

Правильная decomposition задач:

A
Задача A: Схема БД
Создать миграции, базовые модели с fillable/casts
Нет зависимостей — можно начать сразу
B
Задача B: Репозитории
Создать Repository классы для каждой модели
Зависит от A: нужны модели
C
Задача C: Сервисный слой
Бизнес-логика через Repositories, не напрямую
Зависит от B: нужны Repositories
D
Задача D: Controllers + Routes
Thin controllers, делегируют в Services
Зависит от C: нужны Services
E
Задача E: Feature тесты
HTTP тесты через routes, unit тесты через Services
Зависит от D: нужна полная цепочка

Правила системы задач:

  • Явные зависимости: задача B не начинается до завершения A
  • Атомарный коммит после каждой задачи: всегда зелёное состояние в git
  • Верификация перед переходом: тесты зелёные, lint чистый
  • Откат по одной задаче: если B сломана, откатываем только B, не всё
4
Context прежде всего

Центральный тезис IndyDevDan, который противоречит интуиции многих разработчиков:

"Плохой prompt + хороший context > хороший prompt + плохой context. Контекст важнее формулировки."

Практические следствия этого принципа:

Перед задачей — добавь контекст явно:

// Неправильно — рассчитывать что Claude "знает" проект:
"Добавь функцию экспорта в UserController"

// Правильно — дать Claude весь нужный контекст:
@app/Http/Controllers/UserController.php
@app/Services/UserService.php
@examples/controller.example.php

Добавь метод exportCsv(): возвращает CSV всех активных пользователей.
Использует UserService->getActive(), стриминговый ответ для больших наборов.

Перед новой задачей — удали нерелевантный контекст:

// После завершения работы над AuthController:
/clear   ← очистить весь контекст

// Или очистить историю но сохранить CLAUDE.md:
/reset

// Тогда добавить только контекст для новой задачи:
@app/Http/Controllers/PaymentController.php

Почему это важно: накопленный нерелевантный контекст не просто не помогает — он активно мешает. Claude начинает строить связи между несвязанными частями кода, что приводит к неожиданным решениям.

Практическое правило

Используй @файл для явного добавления контекста перед задачей. Используй /clear между несвязанными задачами. Не позволяй контексту накапливаться неконтролируемо — это снижает качество результатов.

5
Model = инструмент, не оракул

Третий кит — правильный выбор модели — напрямую влияет на стоимость и скорость разработки. IndyDevDan лечит "ошибку оракула": использование самой мощной модели для всех задач.

Модель Задачи Примеры Скорость/Цена
Haiku Механические задачи: форматирование, переименование, шаблонный код Добавить docblocks, переименовать переменные, создать CRUD по схеме Быстро / Дёшево
Sonnet Обычная разработка: новые фичи, рефакторинг, тесты, дебаггинг Реализовать SubscriptionService, написать Feature тесты, исправить баг Средне / Средне
Opus Архитектурные решения: дизайн системы, сложные trade-offs, ревью Как структурировать модуль оплат, review архитектуры, критический рефакторинг Медленно / Дорого

Признаки неправильного выбора модели:

  • Haiku для сложной логики → галлюцинации, неправильные архитектурные решения
  • Opus для форматирования → трата денег в 10× без улучшения результата
  • Sonnet для архитектурного ревью большого проекта → недостаточная глубина анализа

Экономический аргумент: Если 80% ваших задач — обычная разработка на Sonnet, а 15% — механические задачи которые мог бы делать Haiku, вы переплачиваете. Знать когда переключиться = реальная экономия.

# Указать модель при запуске:
claude --model claude-haiku-4-5 "добавь docblocks к этим функциям"
claude --model claude-sonnet-5 "реализуй SubscriptionService"
claude --model claude-opus-4-8 "review архитектуры модуля платежей"

# Или сменить в середине сессии через /model:
/model claude-haiku-4-5

Диагностическая матрица: где слабое звено?

Используй эту таблицу когда получаешь плохой результат:

Симптом Слабый кит Решение
Нарушает стиль кода проекта Context Добавить @examples/ в промпт
Делает похожее, но не то Prompt Уточнить конкретные требования
Не справляется со сложностью Model Перейти на более мощную модель
"Забывает" правила из CLAUDE.md Context Обновить CLAUDE.md с явным запретом
Слишком медленно/дорого Model Использовать Haiku для этой задачи

Источник

Методология Tactical Agentic Coding описана на сайте agenticengineer.com/tactical-agentic-coding. IndyDevDan специализируется на практических паттернах агентного кодинга для реальных проектов — без теоретических конструкций, только то что проверено в production. Сайт регулярно обновляется с новыми тактиками по мере развития CC.