На днях у Кирилла Мокевнина вышел пост про то, как он разлюбил динамическую типизацию. Мысль понятная: на больших кодовых базах отсутствие типов начинает дорого стоить.

Хочу дополнить аргументом, который в 2026 году уже стал прям must-have: статанализ и типы — это лучший self-check для AI-агента.

Современные агенты для разработки (Claude Code на Opus 4.5 и ChatGPT Codex 5.2 High) хорошо пишут код. Ошибок уровня «переменная не объявлена», «импорт забыл», «опечатка в имени метода» по сути уже почти нет. 

Основные промахи чаще про другое:

  • недостаточный контекст

  • неверные предположения про интерфейсы/контракты

  • расхождения в понимании с тем, как устроен проект

И вот тут типы + статанализ дают хорошую первую обратную связь.

1. Быстрый фидбэк = быстрые итерации агента

Если у вас в правилах агента прописано «после любого изменения прогоняй линтер и статанализ», агент тут же видит, что нарушил контракт, и чинит это сразу, не таща ошибку дальше по треду.

В Go вообще идеально: проект просто не соберётся, и это мгновенный сигнал, что «что-то не так».

2. Типы — это огромный слой метаинформации для агента

Даже в Python, где аннотации типов не влияют на рантайм, они всё равно работают как контракт и карта проекта:

  • что за объект мы передаём

  • какие поля/методы у него есть

  • что возвращает функция

  • как объекты, методы и классы взаимодействуют между собой

Для агента это важно: по типам он быстрее «распаковывает» связи между слоями и точнее встраивает изменения в существующую архитектуру.

3. Это быстро и «дёшево»

Статанализ не отменяет написание тестов: тесты всё равно нужны, потому что они проверяют бизнес-логику, сценарии, граничные случаи, интеграции и поведение системы целиком, в общем то, что статикой не покрыть.

Но статанализ прогоняется быстро, стоит «дёшево» с точки зрения ресурсов и отлично подходит для постоянного применения, буквально после каждого небольшого изменения в рамках одной большой итерации. Агент может регулярно получать быстрый сигнал «всё ли окей по контрактам», а под конец уже прогонять тесты и закрывать задачу более уверенно.

Что я рекомендую, если вы разрабатываете в связке с AI-агентами

Если проект на динамическом языке, сразу настраивайте:

  • линтер / форматтер

  • статанализ / проверку типов

И самое важное, описывайте workflow одной итерации в файлах для агентов (AGENTS.md, CLAUDE.md) в виде:

  • внёс изменения

  • прогнал линтер

  • прогнал статанализ

  • починил всё до «зелёного»

  • в конце работы над задачей прогнал профильные тесты

Также обязательно указывайте агенту писать на максимально поддерживаемой вашим проектом версии языка и максимально типизировано. Работы агенту от этого не прибавляется, зато современный синтаксис, свежие возможности языка и явные типы резко снижают вероятность кейсов «не так понял контракт» и повышают качество результата.

У нас в RetailCRM это базовая гигиена:

  • PHP: PHP-CS-Fixer + PHPStan (стараемся на максимальных level'ах)

  • Python: ruff + ty

  • Go: строго типизированный «из коробки»

Если AI-агент умеет проверять себя, качество конечного результата ожидаемо выше. И это сейчас, кажется, одна из самых «дешёвых», но полезных инвестиций в инфраструктуру разработки.


Эту и другие статьи можно читать в моем канале @dev_salikhov.