Агент-аналитик: что это и как создать его в OpenCode

Что такое агент-аналитик

Агент-аналитик — это субагент, который в основном читает: он превращает сырые данные в записку для решения. Его входы — логи, метрики, выгрузки CSV, результаты запросов к базе и история git; его метод — команды только на чтение, которые считают, агрегируют и сравнивают; его выход — короткая записка с числами, рисками и одной рекомендацией. Он никогда не правит файлы и не меняет системы, которые измеряет.

У него полный цикл агента — переформулировать вопрос, выполнить команду, прочитать вывод, уточнить — но каждый вызов инструмента здесь измерение, а не изменение. Там, где чат-бот угадал бы процент, аналитик печатает команду и число, на котором оно построено.

Исследователь и аналитик

Две роли только для чтения отвечают на разные вопросы и хорошо выстраиваются в цепочку:

Быстрая проверка при выборе роли: если ответ заканчивается ссылкой, запускайте исследователя; если числом — аналитика.

Создать файл агента

Файл .opencode/agents/analyst.md, id analyst. Главное здесь — allowlist для shell: команды измерения разрешены, всё остальное запрещено правилом-ловушкой в конце — правила прав упорядочены, и побеждает последнее совпадение:

--- description: Turns logs, metrics and git history into a decision memo mode: subagent model: opencode/gpt-6-luna steps: 10 permissions: - action: edit resource: "*" effect: deny - action: shell resource: "head *" effect: allow - action: shell resource: "tail *" effect: allow - action: shell resource: "wc *" effect: allow - action: shell resource: "grep *" effect: allow - action: shell resource: "sort *" effect: allow - action: shell resource: "uniq *" effect: allow - action: shell resource: "python3 *" effect: allow - action: shell resource: "git log *" effect: allow - action: shell resource: "git diff --stat*" effect: allow - action: shell resource: "*" effect: deny --- Restate the question as one measurable sentence before touching data. Show the command, then the number it produced. Verify every headline number with a second command or a second source. State confidence and what would change the conclusion. No writes, no deletes, no installs. Mask personal data in examples. Answer as a decision memo: Question, Data, Findings, Risks, Recommendation.

Заметки по полям:

Инструменты и доступ к данным

Основную работу делают базовые инструменты: read, glob, grep для файлов и разрешённый shell для подсчётов. Два дополнения окупаются быстро:

Оставьте доступным инструмент question: метрика с неясным определением (что считать посетителем, 5xx, активным пользователем) даёт уверенную и неверную записку. Один уточняющий вопрос дешевле одного неверного решения.

Системный промпт, который работает

Три привычки отличают полезную записку от уверенного шума. Во-первых, вопрос становится одним измеримым предложением — доля ошибок GET /api/orders за последние 7 дней — до того, как запущена хоть одна команда. Во-вторых, каждое число в выводах проверено дважды: второй командой или той же командой на более узком окне. В-третьих, записка называет своё окно данных и то, что она НЕ проверила. Промпт в файле выше задаёт все три правила; формат отчёта ниже их закрепляет.

Как его запускать

Дайте родителю вопрос, в котором есть набор данных:

Use the analyst subagent to measure the 5xx rate per endpoint from site_logs and say whether it grew this week

Типичная первая команда в трассировке:

wc -l site_logs/access.log

Закрепите это как .opencode/commands/analyze.md:

--- description: Measure one question with the read-only analyst agent: analyst model: opencode/gpt-6-luna subagent: true --- Analyze: $ARGUMENTS Return a decision memo: Question, Data, Findings, Risks, Recommendation.

Чтобы выстроить роли в цепочку, оркестратор получает обоих детей в свои права subagent: исследователь описывает, где логируются запросы, аналитик считает их долю. Три результата детей возвращаются в родительскую сессию.

Формат записки для решения

Фиксированный скелет, пять разделов, один экран:

Question Did the 5xx rate of GET /api/orders grow this week? Data site_logs/access.log, 214,003 lines, Oct 14-21; verified with wc -l and a second pass on a 2-day window. Findings - 5xx rate 0.42% this week vs 0.19% last week (+0.23 pp). - 87% of 5xx hit /api/orders; top status 502 (1,204 hits). - Growth starts Oct 19, 14:00 — matches the deploy in git log. Risks - Log source only; no client-side errors counted. - Two days of the window include a bot crawl (user agent filtered). Recommendation - Roll back the Oct 19 deploy first, then re-measure before any fix.

Каждое число в Findings должно воспроизводиться из Data. Если раздел заполнить нельзя, записка так и говорит: пустой Risks — тревожный признак, а не чистый результат.

Замеры

Пять фиксированных задач с числами, которые можно проверить руками:

Ограничения

Автор статьи: Клавдия Кондакова