Агенты

From docs/ru/agents.md at cc732c3 View on GitHub

Каждый хост, который настраивает rtok agents install <host>, — по приложениям: что rtok в него записывает и какие плагины rtok затем доходят до этого приложения.

  • Hooks, MCP, Proxy, Plugin — четыре модуля, которые может включать установка. yes записывается обычной установкой; флаг (--proxy, --yes) означает, что модуль записывается только с этим флагом; — означает, что хост не может его нести. README хоста (ссылка в столбце Host) объясняет причину каждого —.
  • MCP — это запись rtok в собственном файле конфигурации приложения (D33): установка и обновление всегда её записывают, удаляет её только remove, и плагин никогда её не заменяет. Запись запускает rtok mcp --host <id> (id хоста из этой таблицы), чтобы процесс MCP знал свой хост; agents update добавляет --host к записи, которую более старый rtok записал без него, а remove по-прежнему удаляет любую из форм.
  • Plugin — это каталог из plugins/<host>/, который rtok подключает ссылкой в хост (Cursor и ZCode: хуки; OpenCode и pi: путь вызова bash). Там, где приложение показало бы сервер плагина рядом с записью конфигурации (Claude Code и Desktop, Cursor, Copilot, Codex, VS Code, ZCode, Kimi, Grok), плагин rtok не поставляет MCP-сервер; расширение Gemini его сохраняет, а запись в settings.json его переопределяет.
  • rtok plugins reached перечисляет каждый плагин из каталога, у которого есть хотя бы один интерфейс (хук, путь вызова bash, MCP, прокси), который может нести один из модулей выше. Плагины с пометкой (off) по умолчанию выключены, и для них нужно [plugins.<id>] enabled = true.

Проверить, что установлено на этой машине, можно командой rtok agents list; rtok doctor сообщает о тех же модулях и предупреждает, когда в конфигурации установленного хоста нет записи MCP rtok или она устарела, называя команду rtok agents install <host> (с --cli или --desktop), которая её запишет.

rtok doctor также сообщает о сломанных хуках, дублирующихся хуках и дублирующихся записях MCP в файлах конфигурации хостов. rtok doctor --fix их убирает. В терминале он открывает чек-лист всех удаляемых пунктов: номер переключает пункт, k N оставляет вместо этого копию N дубликата, d показывает diff каждого файла, y запрашивает последнее подтверждение и записывает (после резервной копии в _backup/), q выходит. Пункты в общем файле проекта изначально не выбраны, поскольку изменение затронет ваших коллег. Без терминала --fix печатает diff и ничего не записывает; --fix --yes записывает выбор по умолчанию без вопросов; --only broken-hooks|duplicate-hooks|duplicate-mcp (можно повторять) ограничивает набор, а --agent <host> ограничивает одним хостом. Оставленная копия дубликата, собственные файлы плагина и собственные записи rtok никогда не удаляются, а каждый байт за пределами удалённых записей остаётся как был. Запись rtok, которую пишет установка, всегда остаётся оставленной копией. Такое же имя rtok в другой области и копия плагина (расширение Gemini) выводятся только как сведения, потому что хост сам объединяет или перекрывает их (для копии плагина rtok agents update <host> обновляет плагин); к удалению предлагается только написанная вручную копия под другим именем, которая тоже запускает rtok mcp, например rtok-mcp. Во вкладке Doctor в rtok tui тот же список: f открывает его, Space переключает запись, k оставляет эту копию, Enter просит подтверждение, y записывает; любая другая клавиша отменяет.

После обновления rtok команда rtok agents update приводит все установленные хосты к актуальному состоянию; для Claude Code решение принимается по версии плагина — см. Версии и обновления плагинов.

HostAppKindHooksMCPProxyPluginrtok plugins reached
claudeClaude CodeCLIyesyes--proxyyesmeasure, cmd, read, json_tree (off), archive, proxy, inject, guard, memory, graph, toon, compress, docs (off)
claudeClaude DesktopDesktop—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
cursorCursor CLICLIyesyes—yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
cursorCursorDesktopyesyes—yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
codexCodexCLIyesyes--proxyyesmeasure, cmd, read, json_tree (off), archive, proxy, inject, guard, memory, graph, toon, compress, docs (off)
opencodeOpenCodeCLI—yesyesyesmeasure, cmd, read, json_tree (off), archive, proxy, guard, memory, graph, toon, compress, docs (off)
opencodeOpenCode DesktopDesktop—yesyesyesmeasure, cmd, read, json_tree (off), archive, proxy, guard, memory, graph, toon, compress, docs (off)
kiloKilo Code CLICLI—yes—yesmeasure, cmd, read, json_tree (off), archive, guard, memory, graph, toon, docs (off)
kiloKilo Code for VS CodeDesktop—yes—yesmeasure, cmd, read, json_tree (off), archive, guard, memory, graph, toon, docs (off)
pipiCLI———yesmeasure, cmd, read, json_tree (off), archive, guard, memory, graph, toon, docs (off)
ompoh my piCLI—yes—--yesmeasure, cmd, read, json_tree (off), archive, guard, memory, graph, toon, docs (off)
zcodeZCodeDesktopyesyes—yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
kimiKimi CodeCLIyesyes—--yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
kimiKimi Code DesktopDesktopyesyes—--yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
grokGrok BuildCLI—yes—--yescmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
vscodeVS CodeDesktop—yes—--yescmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
vscodeVS Code - InsidersDesktop—yes—--yescmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
copilotCopilot CLICLIyesyes—--yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
copilotGitHub CopilotDesktop—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
commandcodeCommand Code CLICLIyesyes—yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
aideraiderCLI——--proxy—measure, json_tree (off), archive, proxy, toon, compress
windsurfWindsurfDesktop—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
zedZed CLICLI—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
zedZedDesktop—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
clineCline CLICLIyesyes—--yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
clineCline for VS CodeDesktopyesyes—--yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
geminiGemini CLICLIyesyes—--yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
codewhaleCodeWhaleCLIyesyes——measure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
mimoMiMo CodeCLI—yes—yesmeasure, cmd, read, json_tree (off), archive, guard, memory, graph, toon, docs (off)
mimoMiMo DesktopDesktop—yes—yesmeasure, cmd, read, json_tree (off), archive, guard, memory, graph, toon, docs (off)
antigravityAntigravity CLICLI———--yesread, json_tree (off), archive, memory, graph, toon, docs (off)
antigravityAntigravityDesktop———--yesread, json_tree (off), archive, memory, graph, toon, docs (off)
devinDevin CLICLIyesyes—--yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
devinDevinDesktopyesyes—--yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
rooRoo CodeDesktop—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
qwenQwen CodeCLIyesyes—--yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
codebuddyCodeBuddy CodeCLIyesyes—--yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
codebuddyWorkBuddyDesktopyesyes—--yesmeasure, cmd, read, json_tree (off), archive, inject, guard, memory, graph, toon, docs (off)
gooseGoose CLICLI—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
gooseGooseDesktop—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
droidFactory DroidCLI—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
kiroKiro CLICLI—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
kiroKiro IDEDesktop—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
junieJunie CLICLI—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
ampAmpCLI—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
warpWarpDesktop—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
continueContinue CLICLI—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
continueContinueDesktop—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
crushCrushCLI—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
openhandsOpenHandsCLI—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
augmentAugment Auggie CLICLI—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)
reasonixReasonixCLI—yes——read, json_tree (off), archive, memory, graph, toon, docs (off)

Таблица генерируется из кода хостов (src/agents/<host>/mod.rs и каталог плагинов) тестом tests/agents_doc.rs, который падает, если она устарела. После изменения хоста, добавления нового или изменения интерфейсов плагина перегенерируйте её:

RTOK_BLESS=1 mise exec -- cargo test --test agents_doc

Столбец rtok plugins reached вычисляется по объявленным интерфейсам: плагин указывается, когда хост поддерживает интерфейс, на котором плагин отвечает. Это не доказывает, что каждое событие, нужное плагину, зарегистрировано на этом хосте, — проверка этого для каждого хоста — задача T70.7 в plan.md.

Claude Code также получает хук PreToolUse на Skill (T62.1). Он бездействует, пока не задано [plugins.guard] skills = true; тогда SKILL.md больше skill_max_bytes архивируется, а вызов отклоняется с картой заголовков файла и указателем rtok expand <id>. Навык, сжатый таким образом, не применяет свой frontmatter, поэтому навыки с allowed-tools, model, context или agent всегда загружаются целиком.

Куда доходит плагин хоста, а собственные интерфейсы rtok — нет

У rtok три собственных интерфейса (хук, MCP, прокси), и у каждого есть жёсткая граница:

  • Хук PostToolUse не может изменить результат инструмента, только добавить контекст. Поэтому в Claude Code сокращается только Bash — он переписывается в rtok run до выполнения. Результат Read, Grep или стороннего MCP попадает в контекст целиком.
  • Живая зона archive работает внутри rtok proxy. Хост без настройки базового URL никогда не сокращает старый результат инструмента, как бы долго ни длилась сессия.
  • Хост без событий хуков не получает ни одного плагина хуков, поэтому у inject нет пути внутрь. guard доходит до pi и OpenCode через rtok guard check в подключённом плагине (T70.5).

Плагин хоста — каталог в plugins/<host>/, который подключает ссылкой rtok agents install <host>, — находится внутри процесса хоста и не ограничен этими границами. Там, где API плагинов хоста богаче его API хуков, плагин — единственный путь к нужной возможности. Задокументированные положения API по обзору от 2026-09-18 (research.md §15):

Что предлагает API плагиновpiOpenCodeCursor
Заменить результат любого инструментаtool_resultсегодня bash; другие инструменты не задокументированытолько результаты MCP
Заблокировать вызов с причиной, которую читает модельtool_calltool.execute.beforebefore…Execution
Переписать сообщения, отправляемые моделиcontext——
Действовать при компакцииsession_before_compactexperimental.session.compactingpreCompact (только наблюдение)
Зарегистрировать инструмент без MCPpi.registerTool——

Из этого вытекают два следствия, определяющие открытую работу в plan.md: в pi вся живая зона archive может работать без прокси (T70.2), а результаты MCP, которые хост запустил сам, можно сокращать там, где это позволяет API плагинов (T70.4), — ни то ни другое недостижимо из rtok mcp, rtok hook или rtok proxy. Плагины Claude Code и ZCode несут те же события хуков, что и их файлы настроек, без более богатого API; у Codex, Claude Desktop, Windsurf, Zed, Kimi и Copilot каталога плагина нет. Для всех них прокси остаётся единственным путём.

Каждая из этих задач начинается с повторной сверки API хоста с его актуальной документацией: таблица выше — обзор документации вендоров, а не измерение.

Какие хосты читает rtok agents usage

rtok agents usage --source logs суммирует токены по собственным файлам сессий каждого хоста (каталоги задаются в [agents.usage.dirs] в docs/config.md, а research.md, раздел 30, указывает источник каждого формата).

HostReadsStatus
Claude Code, Codexтранскрипты в [stats]поддерживается
OpenCode, Kiloстроки message в файле SQLite хоста, открытом только для чтенияподдерживается
Copilot CLIитоги по моделям каждой завершённой сессииподдерживается, по сессиям
Gemini CLItokens каждого ответа в логах чатовподдерживается
piusage каждой записи в логах сессийподдерживается
Kimi Codeстроки usage.record в wire-логе каждого агентаподдерживается
Droidнет: поля токенов в его файле настроек не задокументированыunsupported
Grokнет: xAI документирует grok usage, который rtok не запускает, а не файлыunsupported
ZCodeнет: записи сессий не задокументированыunsupported
Antigravityнет: его локальные данные не задокументированыunsupported

Хост со статусом unsupported, у которого в каталоге есть файлы, указывается в отчёте в разделе skipped, чтобы отсутствующий агент был виден, а не молча считался нулём.

Устаревшие плагины

rtok agents outdated перечисляет только хосты, где установлен плагин rtok и его версия старше запущенного бинарника rtok (по старшинству SemVer; метаданные сборки того же релиза по-прежнему считаются актуальными). Хосты, которые актуальны, не установлены или новее, пропускаются. rtok agents update --check печатает тот же отчёт.

rtok agents outdated              # каждый хост из таблицы выше
rtok agents outdated claude,cursor
rtok agents outdated --json
rtok agents outdated --exit-code  # код выхода 10, если что-то устарело (CI)

Когда все установленные плагины соответствуют бинарнику, команда печатает, сколько их установлено, и версию rtok; когда не установлено ни одного, она печатает no rtok plugins installed. Проверка только локальная (квитанция, файл версии, записи хостов) — без сети и без CLI хоста. Подробнее — в Версии плагинов: Список устаревших плагинов.

Мусор

rtok agents junk list показывает для rtok и каждого установленного хоста его папки с размерами, виды мусора внутри них и сколько освободит rtok agents junk clear. clear — пробный прогон до --yes.

Обе команды печатают элементы, из которых сложены итоги, чтобы точный набор можно было проверить до удаления. Элемент — одна строка: путь (ссылка в терминале, который их поддерживает, с ~ для домашней папки), размер, когда его использовали в последний раз (самый новый файл внутри, например 3 weeks ago (2026-09-09 14:02)), почему это мусор и, если элемент не будет очищен, почему (review kind: add --include review, agent running).

  • --items N|all задаёт, сколько элементов показывать для каждого вида (по умолчанию 10, затем +N more (размер)); --items 0 печатает только итоги.
  • --sort size|last-used|path упорядочивает элементы внутри вида: сначала крупные (по умолчанию), сначала давно не используемые или по пути. Элемент с нечитаемым временем считается свежим и идёт последним. Сами агенты всегда идут по месту, которое освободит clear, от большего к меньшему.
  • --min-size РАЗМЕР скрывает более мелкие элементы. У clear он ещё и сужает план, так что удаляется ровно то, что показал пробный прогон.
  • --json всегда содержит все элементы: path, size_bytes, last_used (секунды Unix или null), reason, will_clear и, если элемент не очищается, skip_reason.

rtok doctor добавляет строку junk с местом, которое clear освободит по умолчанию, и указывает на rtok agents junk list, если оно больше гигабайта. Страница Hosts в rtok web и rtok tui показывает тот же список.

На странице Hosts в rtok web список выглядит как карточка junk: по каждому агенту и виду — число элементов и размеры, а также строки Freed by clear и Freed with --include review. Кнопка Clear safe junk запускает пробный прогон clear по safe-видам всех агентов (никогда не по видам review, explicit и never и никогда не в корзину), показывает, что будет удалено, и ничего не удаляет, пока вы не нажмёте Confirm. Удаляются только показанные вам элементы, и каждый проверяется заново перед удалением, поэтому файлы работающего агента, изменившаяся папка, симлинк и защищённый файл остаются и попадают в отчёт. На вкладке Hosts в rtok tui клавиша c показывает тот же пробный прогон, а y удаляет перечисленное; любая другая клавиша отказывается и оставляет все файлы как были. Результат заканчивается строкой Freed X of Y planned.