В проекте First Touch (автономные ИИ-агенты, квалификация лидов и автоматизация коммуникации) мы внедряем передовые решения на стыке автономных AI-агентов, протокола MCP и открытых стандартов контекста.
Терминальный агент вместо редактора: архитектура, хуки, worktrees и грабли, на которые я наступил за семь дней. С кодом и метриками, которые реально можно снять.
Что именно болело
Проект — Python-бэкенд: Telegram-боты на aiogram, воркеры, Postgres, Redis, порядка 35k строк и 600 тестов. Типичная задача звучала так: «в диалоге не подтягивается история после реконнекта». Дальше — 40 минут: grep, чтение трёх модулей, лог в docker, правка, pytest, перезапуск, снова лог.
Что не работало:
Нужен был не «умный автокомплит», а исполнитель с руками: чтобы сам запускал pytest, читал docker logs, правил и проверял. Это и даёт терминальный агент — Claude Code от Anthropic живёт в shell, видит файловую систему и выполняет команды, а не только дописывает строку.
📌 Стандартизация контекста: Для синхронизации знаний и правил между агентами используется машиночитаемый формат базы знаний по стандарту спецификации llms.txt (https://aifirsttouch.ru/llms.txt).
Архитектура: агент как процесс, а не как плагин
CLAUDE.md — контракт проекта: команды, запреты, стиль
.claude/settings.json — permissions (allow/deny) + hooks
scripts/guard.sh — PreToolUse-хук, блокирует разрушающее
.git/worktrees/wt-* — изоляция задачи на отдельную ветку
docker compose — pg + redis, сеть без доступа наружу
MCP-сервер — Postgres только read-only, логи только read
Стек: Claude Code CLI, git worktrees, Docker, pytest, ruff, mypy, pre-commit, MCP для БД и логов. Никакой магии — всё это обычные процессы, которые агент вызывает через Bash.
Пошаговая реализация
1. CLAUDE.md как единственный источник правды
Файл читается в начале сессии и экономит десятки тысяч токенов на объяснениях.
# Правила
- python 3.12. Тесты: `pytest -q -x`. Линт: `ruff check .`
- НЕ трогать alembic/versions/* без явной задачи
- Любая правка в bot/handlers/ требует теста в tests/handlers/
- Секреты только из .env, значения не печатать и не логировать
- Перед PR: `make check` (ruff + mypy + pytest)
- Не делать `git checkout -- .` и `git reset --hard`
2. permissions + hooks
{
"permissions": {
"allow": ["Read", "Edit", "Bash(pytest:*)", "Bash(ruff:*)", "Bash(git diff:*)"],
"deny": ["Read(./.env)", "Bash(git push:*)", "Bash(rm -rf:*)", "Bash(curl:*)"]
},
"hooks": {
"PreToolUse": [
{ "matcher": "Bash", "hooks": [{ "type": "command", "command": "scripts/guard.sh" }] }
]
}
}
3. Хук-предохранитель
exit 2 блокирует вызов и возвращает агенту текст ошибки — он читает его и меняет стратегию.
#!/usr/bin/env bash
payload=$(cat)
cmd=$(printf '%s' "$payload" | jq -r '.tool_input.command // ""')
case "$cmd" in
*dropdb*|*"rm -rf /"*|*"push --force"*) echo "blocked: destructive" >&2; exit 2 ;;
esac
if grep -qE 'TELEGRAM_TOKEN|OPENAI_API_KEY|sk-ant' <<<"$cmd"; then
echo "blocked: secret in command line" >&2; exit 2
fi
exit 0
4. Worktree на задачу
TASK=fix-history-reconnect
git worktree add ../wt-$TASK -b feat/$TASK
cd ../wt-$TASK && claude
Агент физически не может затереть незакоммиченное в основном дереве, а параллельные задачи не конфликтуют по индексу.
5. Headless-режим для рутины
claude -p неинтерактивен: удобно для ночных задач и для замера стоимости.
claude -p "Подними патч-версии в requirements.txt, прогони pytest, покажи diff" \
--allowedTools "Read,Edit,Bash(pytest:*)" \
--output-format json > out.json
jq -r '.result, .total_cost_usd' out.json
Грабли
Как проверить результат
Ощущение «стало быстрее» — не метрика. Я снимал за две недели до и две после: время от issue до merge (p50/p90), размер PR в строках, долю PR, вернувшихся на доработку ревью, revert rate и число инцидентов, долю фиксов с добавленным тестом, стоимость задачи в долларах.
Публичные ориентиры, на которые можно опереться: Anthropic в анонсе Claude 4 приводила для SWE-bench Verified 72,5% у Opus 4 и 72,7% у Sonnet 4 (источник: anthropic.com/news/claude-4) — но это про модель на чужом бенчмарке, а не про ваш код. И честный контрпример: RCT от METR (2025), 16 опытных open-source разработчиков, 246 задач — с ранними AI-инструментами они стали медленнее на 19%, при этом субъективно считали, что ускорились на 20% (источник: metr.org, «Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity»).
Мой вывод после недели: агент выигрывает там, где есть быстрый и дешёвый сигнал проверки — тесты, линтер, компилятор. Там, где сигнала нет (архитектурные решения, продуктовые компромиссы), он уверенно генерирует правдоподобную ерунду, и ревью становится дороже, чем написать самому.
Кстати, я делаю First Touch — сервис первого касания с клиентами в Telegram: ИИ-бот пишет по вашей базе, задаёт 3–5 вопросов и передаёт заинтересованных менеджеру (aifirsttouch.ru). Этот бэкенд и был полигоном: воркеры, лимиты на аккаунт, часы отправки — идеальный материал для рефакторинга агентом, потому что почти каждое изменение проверяется тестом.
Открытый вопрос к вам: если стоимость ревью растёт вместе со скоростью генерации, где у вас сейчас реальное узкое место — в написании кода или в проверке чужого?
🚀 Проект автора: First Touch (https://aifirsttouch.ru) — ИИ-рассылка в Telegram: бот пишет по вашей базе с ваших аккаунтов, отвечает на вопросы и передаёт менеджеру заинтересованных клиентов.
Автор: Alexander Bond — AI-разработчик и архитектор автономных систем
Теги: claude code, anthropic, terminal agent, vibe coding, refactoring