Экосистема линтеров для AI-агентов: контроль качества, стоимости и безопасности

Пять open-source инструментов, которые работают вместе: archlint проверяет архитектуру, promptlint выбирает модель, costlint считает затраты, seclint фильтрует контент. Все на Go, без LLM, менее 10ms на запрос.

Проблема

AI-агенты генерируют код быстро, но за скорость приходится платить. В прямом смысле - токены стоят денег. И в переносном - качество кода деградирует без контроля.

Я столкнулся с тремя проблемами одновременно:

  1. Архитектура деградирует - агент пишет код, который работает, но нарушает слоевую архитектуру, создает циклические зависимости и god-классы
  2. Расходы растут - сложный промпт уходит в Opus за $15/1M токенов, хотя Haiku за $0.80 справился бы
  3. Контент не фильтруется - в production-промптах появляется то, что там быть не должно

Каждую из этих проблем можно решить отдельным инструментом. Но когда инструменты работают вместе - они усиливают друг друга.

Пайплайн

Запрос проходит через цепочку линтеров, каждый отвечает за свою область:

graph LR A[Промпт] --> B[seclint] B -->|safe| C[promptlint] B -->|blocked| X[Reject] C -->|haiku| D1[Agent: Haiku] C -->|sonnet| D2[Agent: Sonnet] C -->|opus| D3[Agent: Opus] D1 --> E[archlint] D2 --> E D3 --> E E -->|pass| F[costlint] E -->|fail| C F --> G[Done]
  1. seclint - проверяет контент на безопасность (6+/12+/16+/18+)
  2. promptlint - оценивает сложность, выбирает модель
  3. Агент - выполняет задачу на выбранной модели
  4. archlint - проверяет результат на архитектурные нарушения
  5. costlint - записывает стоимость, считает cache hit rate

Если archlint отклоняет результат - задача возвращается на более мощную модель. costlint фиксирует стоимость этой эскалации.

Инструменты

archlint - архитектурный линтер

Сканирует Go-проекты на структурные нарушения.

1
archlint scan --format json ./project/

Что находит:

  • Нарушения слоев (handler вызывает repository напрямую)
  • God-классы (>20 методов или >15 зависимостей)
  • Циклические зависимости
  • Нарушения Interface Segregation (интерфейсы >5 методов)

Метрики: fan-out, coupling (Ca/Ce), количество компонентов и связей.

GitHub: mshogin/archlint

promptlint - роутер по сложности промптов

Оценивает сложность промпта и выбирает модель. Без LLM, чистые метрики, <10ms.

1
2
3
4
5
echo "Fix typo in README" | promptlint analyze --output-model
# haiku

echo "Design microservices with CQRS" | promptlint analyze --output-model
# opus

Сигналы: длина, количество предложений, доменные ключевые слова, тип действия (fix/create/refactor), наличие кода.

Интеграция с ccproxy - реальный роутинг запросов Claude Code через прокси.

GitHub: mikeshogin/promptlint

costlint - анализ затрат на токены

Считает стоимость, анализирует кэширование, проводит A/B тесты между моделями.

1
costlint report --source telemetry.jsonl
1
2
3
4
5
6
7
Cost Report:
  Total requests: 342
  By model:
    opus:   48 requests, ~$12.60
    sonnet: 195 requests, ~$6.50
    haiku:  99 requests, ~$0.44
  With optimal routing: ~$8.20 (savings: 58%)

Метрики кэширования: cache hit rate, block reuse, content entropy, Jaccard similarity. A/B тесты: сплит трафика 30/30/40, per-group метрики стоимости и качества.

GitHub: mikeshogin/costlint

seclint / promptsec - контент-фильтр

Возрастной рейтинг промптов: 6+, 12+, 16+, 18+.

1
2
3
4
5
echo "Help with math homework" | seclint rate
# {"rating": "6+", "safe": true}

echo "Explain SQL injection for security course" | seclint rate
# {"rating": "16+", "safe": true, "flags": ["security_tools"]}

Учитывает образовательный контекст - объяснение SQL-инъекций для курса по безопасности не блокируется, а получает рейтинг 16+ вместо 18+.

GitHub: mikeshogin/seclint / mikeshogin/promptsec

Общие принципы

Все инструменты следуют одним правилам:

  • Go - единый стек, единый билд
  • Без LLM - чистые метрики, regex, keyword matching. <10ms на запрос
  • CLI + HTTP - каждый инструмент работает как команда и как сервер
  • JSONL телеметрия - единый формат логов для анализа
  • Pipeline-friendly - exit codes, stdout, pipes

Числа

На тестовой нагрузке (342 запроса за неделю):

МетрикаДоПосле
Расход на токены$19.54$8.20
Архитектурные нарушения6312
Запросы на дорогую модель100% opus14% opus
Время роутинга-<10ms

Экономия 58% на API без потери качества - дешевые задачи уходят на Haiku, архитектурные задачи остаются на Opus.

Оркестрация

Инструменты работают автономно, но максимальный эффект дают вместе. Для оркестрации используется myhome - daemon-based управление AI-агентами с workflow stages и scheduled tasks.

Связка:

  • myhome запускает агента
  • promptlint выбирает модель (pre-route hook)
  • archlint проверяет результат (quality gate stage)
  • costlint считает стоимость (telemetry consumer)
  • seclint фильтрует входящие промпты (pre-filter)

Начать

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Установить все
go install github.com/mshogin/archlint@latest
go install github.com/mikeshogin/promptlint/cmd/promptlint@latest
go install github.com/mikeshogin/costlint/cmd/costlint@latest
go install github.com/mikeshogin/seclint/cmd/seclint@latest

# Запустить роутинг
promptlint serve 8090 &
seclint serve 8091 &

# Проверить архитектуру
archlint scan --format json ./my-project/

# Посмотреть затраты
costlint report --source ~/.promptlint/telemetry.jsonl

Ссылки

Создано при помощи Hugo
Тема Stack, дизайн Jimmy