Суть урока
Когда у тебя один агент — всё понятно. Когда их 10+ — ты перестаёшь понимать кто что сделал, сколько это стоило и почему вчера что-то пошло не так.
Этот урок — про то, как навести порядок в армии агентов. Аудит, журналы, статус дашборды, интеграция с ClickUp и CRM.
Ключевые концепции
- Почему "чёрный ящик" = корень всех проблем с агентами
- Три уровня логирования: файл, база данных, внешний PM-инструмент
- ClickUp MCP — агент сам создаёт задачи и обновляет статус
- Notion как база знаний агентных результатов
- CRM-интеграция: завершил работу — обновил клиентскую карточку
- STATUS.md — живой дашборд который Claude обновляет сам
Теория
Проблема "чёрного ящика"
Без управления агенты работают как чёрные ящики: ты запустил, они что-то сделали, вернули результат. Что происходило внутри? Кто из них запустился первым? Почему один завис? Сколько денег сожгли за ночь?
Пять симптомов "чёрного ящика":
- Не знаешь сколько стоила конкретная агентная задача
- Не можешь воспроизвести результат — непонятно что именно агент делал
- Не знаешь кто запускал агента и когда
- При ошибке — не понятно на каком шаге она произошла
- Клиент спрашивает "что делал ваш AI?" — нечего показать
С управлением картина обратная: полный audit trail, воспроизводимость, ответственность, прозрачность для клиента.
Три уровня логирования
Логи агентов бывают трёх уровней — выбирай по задаче.
| Уровень | Где хранить | Когда использовать |
|---|---|---|
| 1 — Файловый | agent-log.jsonl в проекте |
Личные проекты, соло |
| 2 — База данных | Supabase таблица | Команда, многопользовательский доступ |
| 3 — PM-инструмент | ClickUp / Linear / Notion | Клиентские проекты, reporting |
Начинай с уровня 1. Поднимайся выше когда появляется команда или клиенты.
Уровень 1: Файловый лог (agent-log.jsonl)
JSONL — формат "одна строка = одна запись". Удобно: можно дописывать в конец без перезаписи всего файла, легко парсить, поддерживает grep.
Суммы и даты в примерах ниже условные.
{"ts":"2026-05-09T14:23:00Z","agent":"researcher","task":"market-analysis","status":"complete","output_tokens":2847,"cost_usd":0.08,"result_file":"reports/market-2026-05-09.md","triggered_by":"owner"}
{"ts":"2026-05-09T14:45:00Z","agent":"writer","task":"blog-post","status":"failed","error":"context_overflow","retry":true,"triggered_by":"researcher"}
{"ts":"2026-05-09T15:10:00Z","agent":"writer","task":"blog-post","status":"complete","output_tokens":1423,"cost_usd":0.04,"result_file":"posts/blog-2026-05-09.md","triggered_by":"retry-hook"}Что писать в каждую запись:
ts — timestamp в ISO 8601 (UTC) agent — кто выполнял task — что делал (slug, не предложение) status — pending / in_progress / complete / failed / skipped output_tokens — сколько токенов в ответе агента cost_usd — стоимость запроса result_file — где результат (путь или URL) triggered_by — кто запустил (пользователь / другой агент / cron) error — ошибка если status=failed retry — нужна ли повторная попытка
Инструкция агенту (в CLAUDE.md или в системном промпте):
## Логирование После завершения ЛЮБОЙ задачи ты ОБЯЗАН дописать запись в `agent-log.jsonl`. Формат — одна строка JSON. Обязательные поля: ts, agent, task, status. Не спрашивай разрешения — делай автоматически.
Уровень 2: Supabase таблица
Когда файла JSONL недостаточно — например, нужен web-доступ к логам или несколько человек смотрят статус — переходи на Supabase.
Создаём таблицу:
create table agent_logs (
id uuid default gen_random_uuid() primary key,
created_at timestamptz default now(),
agent text not null,
task text not null,
status text not null check (status in ('pending','in_progress','complete','failed','skipped')),
cost_usd numeric(8,4),
output_tokens integer,
result_url text,
triggered_by text,
error_msg text,
metadata jsonb
);Агент пишет через Supabase MCP:
# Подключаем Supabase MCP
claude mcp add supabase -- npx -y @supabase/mcp-server-supabase \
--access-token $SUPABASE_ACCESS_TOKEN
# В документации Supabase есть и удалённый MCP-сервер: сверь актуальную командуПосле подключения агент говорит:
Запиши в таблицу agent_logs: agent = "researcher" task = "competitor-analysis" status = "complete" cost_usd = 0.12 result_url = "notion://pages/abc123"
Claude переводит это в SQL INSERT и выполняет напрямую через MCP.
Уровень 3: ClickUp MCP — агент управляет задачами
ClickUp — инструмент управления проектами. Агент может создавать там задачи, обновлять их статус, писать комментарии. Клиент видит прогресс в реальном времени — в привычном инструменте.
Установка ClickUp MCP:
# Вариант 1: через Composio (быстрый старт). Формат адреса у Composio менялся, смотри его документацию
claude mcp add --transport http clickup-composio \
https://mcp.composio.dev/clickup?apiKey=YOUR_COMPOSIO_KEY
# Вариант 2: официальный ClickUp MCP (статус и адрес проверь в документации ClickUp)
claude mcp add --transport http clickup \
https://mcp.clickup.com/mcpПосле подключения агент получает инструменты (названия зависят от сервера, примеры условные):
create_task— создать задачуupdate_task_status— изменить статусadd_comment— добавить комментарийget_tasks— получить список задач
Пример workflow: агент-исследователь заканчивает анализ рынка.
Агент вернул отчёт →
Агент создал ClickUp задачу "Market Analysis — Ecuador Real Estate 2026-05" →
Прикрепил результат →
Поставил status = Done →
Создал следующую задачу "Write blog post based on research" →
Ты получил уведомление в ClickUpИнструкция агенту:
## ClickUp интеграция
После завершения каждой задачи:
1. Обнови статус задачи в ClickUp на "Done" (используй update_task_status)
2. Добавь комментарий с кратким summary (2-3 строки)
3. Если есть следующий шаг — создай новую задачу
4. Списки ClickUp: Research → List ID 901234, Writing → List ID 901235STATUS.md — живой дашборд
Файл STATUS.md который Claude обновляет после каждого завершённого задания:
# STATUS.md — AI Operations Dashboard > Обновлено: 2026-05-09 15:47 UTC ## Активные агенты | Агент | Задача | Статус | Стоимость | Обновлено | |-------|--------|--------|-----------|-----------| | researcher | market-analysis Ecuador | ✅ Done | $0.08 | 14:23 | | writer | blog-post недвижимость | 🔄 In Progress | $0.04 | 15:10 | | designer | thumbnail YouTube | ⏳ Queued | — | — | | deployer | production deploy | ❌ Failed | $0.02 | 15:30 | ## Сегодня потрачено - Всего: $0.14 - Агентов запущено: 4 - Успешно: 2 / Ошибок: 1 / В работе: 1 ## Последние ошибки - **deployer** 15:30 — context_overflow при деплое. Retry scheduled 16:00.
Добавь агенту в CLAUDE.md: "После каждой завершённой задачи обновляй STATUS.md: свою строку + итог дня."
Notion MCP — база знаний
ClickUp = для задач и процессов. Notion = для знаний и результатов.
Каждый агент-исследователь пишет структурированный вывод в Notion. Другой агент потом читает это и не делает ту же работу заново.
# Официальный удалённый MCP-сервер Notion (адрес сверяй в документации Notion)
claude mcp add --transport http notion https://mcp.notion.com/mcp
# При подключении Notion попросит войти и выдать доступ к нужным страницамИнструкция агенту:
## Notion — сохранение результатов После каждого исследования создай страницу в базе "Research": - Заголовок: [Тема] — [Дата] - Теги: тип исследования, регион, проект - Содержание: ключевые выводы (3-5 пунктов), источники, уверенность в данных - Ссылка на полный отчёт Перед началом нового исследования — сначала поищи в Notion. Если похожая работа уже есть — используй её.
Audit Trail с Git хешами
Самый надёжный audit trail — Git коммиты.
{
"ts": "2026-05-09T14:23:00Z",
"agent": "researcher",
"task": "competitor-analysis",
"git_before": "abc123def",
"git_after": "456789ghi",
"files_changed": ["reports/competitors-2026-05-09.md"],
"cost_usd": 0.08,
"status": "complete",
"duration_sec": 127
}git diff abc123 456789 — покажет каждую строку которую изменил агент. Полная воспроизводимость.
CRM интеграция (HubSpot / Pipedrive)
Агент закончил анализ для клиента → в CRM автоматически появляется запись.
# HubSpot через Composio (формат адреса сверяй с документацией Composio)
claude mcp add --transport http hubspot \
https://mcp.composio.dev/hubspot?apiKey=YOUR_KEYИнструкция агенту:
## CRM обновление Если задача связана с клиентом (есть client_id): 1. Добавь заметку в HubSpot: "[Агент] завершил [задачу]. Результат: [одна строка]" 2. Обнови поле "Last AI Action" датой 3. Если есть следующий шаг для менеджера — создай задачу в CRM
Модель зрелости — с чего начать
Ступень 1: agent-log.jsonl (15 мин)
↓
Ступень 2: STATUS.md (30 мин)
↓
Ступень 3: ClickUp MCP (2 часа)
↓
Ступень 4: Notion база знаний (2-3 часа)
↓
Ступень 5: CRM интеграция (3-4 часа)
↓
Ступень 6: Supabase + полный audit trail (1 день)Начни со ступени 1 сегодня.
Практика
- Создай
agent-log.jsonlи добавь инструкцию агенту в CLAUDE.md - Создай STATUS.md с таблицей агентов
- Запусти любого агента и проверь что оба файла обновились
- (Опционально) Подключи ClickUp MCP если есть аккаунт
- (Опционально) Подключи Notion MCP для сохранения результатов
# Шаг 1
touch agent-log.jsonl
# Шаг 2
cat > STATUS.md << 'EOF'
# STATUS.md
> Обновлено: вручную
## Активные агенты
| Агент | Задача | Статус | Стоимость |
|-------|--------|--------|-----------|
| — | — | — | — |
EOF
# Шаг 3 — проверка после работы агента
tail -5 agent-log.jsonlИнструменты и ресурсы
- ClickUp MCP — официальный сервер ClickUp (проверь статус в документации)
- Composio — сотни интеграций через один MCP
- Notion MCP — документация официального MCP Notion
- Supabase MCP — для баз данных
- HubSpot через Composio — CRM интеграция
Ключевые выводы
Агенты без журналов — чёрные ящики. Начни с
agent-log.jsonl(15 минут) — одна строка JSON после каждой задачи.
STATUS.md — живой дашборд: агент обновляет сам. Ты видишь состояние всей армии одним взглядом.
ClickUp MCP: агент сам создаёт задачи и обновляет статус. Клиент видит прогресс в своём инструменте.
Notion — память между сессиями. Исследование оплачиваешь один раз, а не каждый раз заново.
Следующий урок
Отметка хранится только в этом браузере и никуда не отправляется. Мой прогресс