Команди
Кожна команда нижче — це інтерфейс до того самого реєстру плагінів і того самого SQLite-сховища,
і кожна з них уже працює. Підкоманда, плагін якої не вкомпільовано (наприклад,
rtok run без feature cmd), виводить not implemented і завершується з кодом 0, тож урізана
збірка ніколи не блокує хост.
| Команда | Що робить |
|---|---|
rtok plugins | перелічує плагіни: id, увімкнено, інтерфейси |
rtok config show|init|validate|get|set|path | один файл конфігурації; show --sources показує, звідки взялося кожне значення |
rtok hook <event> | точка входу хуків Claude Code (JSON на stdin → JSON на stdout) |
rtok mcp | MCP-сервер через stdio: read, search, tree, expand, mem_*, інструменти графа |
rtok proxy | проміжний вузол ANTHROPIC_BASE_URL / OPENAI_BASE_URL: фіксація використання, необов'язковий режим стиснення |
rtok batch | завдання Batch провайдерів (submit, status, fetch) через rtok proxy; див. batch-flex.md |
rtok dashboard | локальний UI на React поверх WebSocket API, що читає те саме сховище |
rtok run -- <cmd> | запускає команду, архівує сирий вивід, друкує відфільтровану версію |
rtok filter --stdin | фільтрує дані, не виконуючи їх (OpenCode tool.execute.after) |
rtok expand <id> | друкує заархівовані дані — цілком або за --lines / --grep |
rtok stats | вимірювання з логів сесій і з проксі |
rtok doctor | перевіряє хуки, MCP-сервери, ланцюжок проксі — зокрема скільки кожен коштує за хід, і скільки місця звільнить rtok agents junk clear |
rtok agents install claude|cursor|codex|opencode|kilo|pi|zcode|kimi|copilot|aider|windsurf|zed | встановлює в хост із резервними копіями; --dry-run |
rtok agents uninstall claude|cursor|codex|opencode|kilo|pi|zcode|kimi|copilot|aider|windsurf|zed | прибирає rtok із хоста з резервними копіями; --dry-run |
rtok agents list | кожен відомий застосунок: тип і назва, шлях і версія, файли конфігурації, модулі rtok, версія встановленого плагіна |
rtok agents junk list|clear | теки кожного агента, види сміття й розміри; clear — пробний прогін до --yes, без --agent, --kind, --include review чи --older-than чистить лише власні логи й архіви rtok, перевіряє кожен елемент ще раз просто перед видаленням, --include review видаляє й ті злиті, чисті, незайняті worktree, які видалив би rtok worktree gc (stale-worktrees; решту показано з причиною gc, і вони лишаються), --items, --sort і --min-size налаштовують построчний список елементів, --trash переносить до кошика ОС, код виходу 1, якщо заплановане лишилося |
rtok graph index [path] | будує індекс символів tree-sitter для дерева |
rtok graph impact <name> [--all] [--project <id|dir>] | що зламається при зміні символу (файли згруповано й обрізано за plugins.graph.impact_tokens; --all друкує всі рядки), по проєкту й пов'язаних із ним проєктах; dead і affected теж ідуть по цьому набору (символ, який викликає лише пов'язаний проєкт, не мертвий; git diff читається в кожному проєкті, тести перелічено по проєктах); --project є й у index, status. Одна відповідь, один ліміт; за ввімкненого watch rtok mcp стежить за кожним проєктом набору |
rtok graph review [--since <ref>|--staged] [--json] [--project <id|dir>] | список читання для git diff, упорядкований за ризиком: оцінка кожного зміненого файла, визначення, до яких не доходить тест, і діапазони рядків |
rtok graph diff [--from <ref>|<project>:<ref>]... [--from-export <file>] [--to <ref>|working] [--json] [--project <id|dir>] | що зміна зробила з графом, MCP graph_diff: символи змінені (сигнатура або тіло), додані, видалені, перейменовані або перенесені, і додані чи видалені ребра викликів; у кожного зміненого або видаленого символу його виклики з проєкту та пов'язаних проєктів. Стара сторона читається з об'єктної бази git (без checkout, робоче дерево не чіпається); --from типово HEAD, --to — робоче дерево. Перейменування показується, лише якщо рівно одне видалене й одне додане визначення мають те саме тіло; текст обрізається за plugins.graph.max_tokens з expand <id> для решти, --json повний. --from <проєкт>:<ref> (ім'я, id або каталог проєкту; можна повторювати) порівнює цей проєкт зі своїм ref, решта беруть звичайний --from. --from-export <файл> порівнює робоче дерево зі збереженим rtok graph export --level symbols замість ревізії: показує додані й видалені символи та додані й видалені зв'язки реєстру (з посиланням git зв'язки порівняти не можна, реєстр не зберігає історії), але не зміни й не ребра, бо в експорті немає сигнатур; MCP шлях до файлу не приймає. Файли, які змінилися, але яких не читає жодна граматика (бінарні, мова без граматики, не розбираються), перелічені як changed, not analysed; виключені проєктом файли не перелічуються |
rtok graph export [--level overview|symbols] [--focus <symbol> [--depth N]] [--no-redact] [--from <file>] [--format json|svg|png] [--scale 1-4] [--transparent] [-o <file>] [--project <id|dir>] | граф у вигляді файлу, MCP graph_export (лише JSON): JSON rtok.graph.v1 (проєкти, зв'язки, символи, виклики; схема в docs/schemas/, формат у plugins). overview — проєкти й зв'язки, symbols додає всі символи та виклики, --focus залишає символи в межах --depth викликів від одного. Домашній каталог, ім'я користувача й абсолютні шляхи приховуються без --no-redact; --from показує збережений експорт і не чіпає ні реєстр, ні індекс. --format svg малює картинку того самого експорту (200 найзв'язаніших вузлів, легенда й підвал із проєктами, областю, бекендом, indexed_at, версією, часом експорту та позначкою про неповноту; підвал каже, скільки вузлів приховано); --format png растеризує її в --scale разів більше за початковий розмір (від 1 до 4, типово 1) і вимагає -o; --transparent прибирає тло. Для PNG на машині потрібен шрифт. У rtok tui клавіша e на сторінці Graph пише той самий файл тією ж функцією (формат, рівень, приховування особистих даних ввімкнене, доки його не вимкнуть, файл, який ви назвали), а v відкриває збережений JSON лише для читання |
rtok memory import <file> | імпортує нотатки як JSONL з дедуплікацією за гешем тексту |
rtok otel flush|status | експортує журнали обліку через OTLP/HTTP або повідомляє позначки (watermarks) |
rtok task create|list|show|status|next|ready|claim|release|dep|priority|sync|init | план проєкту в адаптері [tasks]; claim бере готове завдання, dep записує блокер, sync піднімає лічильники id і повідомляє про розбіжності |
rtok task export github|linear [--dry-run] [--json] | односторонньо віддзеркалити завдання з диска в GitHub Issues або Linear; повторний запуск без змін не надсилає записів |
rtok bench | A/B-порівняння двох конфігурацій хоста на фіксованих задачах |
Сторінка Graph
Сторінка Graph у rtok dashboard малює граф коду у два рівні: об'ємною 3D-сценою, пласкою
2D-сценою або звичайним списком (вибір запам'ятовується; без WebGL сторінка показує 2D і
пояснює чому).
- Усі проєкти. Вузол на кожен зареєстрований проєкт, лінія на кожен зв'язок. Правий клік
по вузлу дає Select, Open, Re-index, Remove…, Fly to і Copy path; подвійний клік відкриває
проєкт. Re-index запускає
rtok graph projects reindexу воркері: поки він іде, вузол має станindexing, а старі рядки відповідають далі; потімokабоfailedз помилкою. Remove… показує dry runrtok graph projects remove(рядки індексу й зв'язки, що підуть; файли не чіпає) і видаляє лише після підтвердження. Уrtok tuiті самі дві дії є на сторінці Graph. - Один проєкт. Файли — куби, типи й модулі — октаедри, функції — сфери, кожен кольору свого
проєкту й згрупований за текою. Клік вибирає вузол; клік по вибраному файлу розкриває його
визначення, по вибраній функції — ставить на неї фокус (викликачі й викликані на глибину від
одного до чотирьох викликів, кнопки глибини). Виклик у пов'язаний проєкт закінчується
контурним вузлом кольору того проєкту; клік по ньому відкриває той проєкт із символом у
фокусі.
+N moreпіднімає ліміт вузлів на 500.⚠позначає файл, змінений після останньої індексації, а доки такі файли є, банер повідомляє, що картина неповна. - Бічна панель і пошук. Панель вибраного вузла показує шлях і рядок, сигнатуру, викликачів і
викликаних (інші кінці ребер
callsна картинці; клік по одному вибирає його) та посилання Open in editor,vscode://file/<root>/<path>:<line>. Для вузла пов'язаного проєкту посилання будується від кореня того проєкту, а Open in<project>заходить у нього. Поле пошуку надсилає текст за Enter (простий набір нічого не шле) і перелічує збіги в проєкті та пов'язаних проєктах, кожен із проєктом; збіг у цьому проєкті отримує фокус, збіг в іншому відкриває той проєкт із символом у фокусі. - Де ви — видно в адресі. Проєкт, розкриті файли, фокус і глибина лежать в URL сторінки:
кожен крок — запис історії, хлібні крихти (
All projects / rtok / src/plugins/graph) повертають назад, а скопійоване посилання відкриває той самий вигляд. - Стани індексу. Непроіндексований проєкт показує команду
(
rtok graph index --project <id>) і заповнюється, коли індекс готовий; проєкт зі зниклою текою малюється порожнім контуром і не відкривається. Докиwatchпереіндексовує, сторінка питає знову й оновлюється на місці, не зсуваючи сцену. - Порівняння. Кнопка Compare на панелі проєкту просить у сервера той самий звіт, що й
rtok graph diff(сторінка нічого не перераховує), і фарбує картинку: додане зеленим+, видалене червоним−(контурним привидом у розгорнутому файлі, бо в робочому дереві його вже нема), змінене жовтим~, переміщене синім→; файл бере єдину зміну своїх символів, різні види роблять його зміненим, а доданий чи прибраний виклик — зелена або червона пунктирна лінія. Кожна зміна має і знак у підписі, і слово в підказці та списку, тож колір — не єдина ознака. Бічна панель дає лічильники, змінені (сигнатура або тіло) та видалені символи з їхніми викликачами, перейменовані, переміщені й додані символи, ребра викликів, додані та прибрані зв'язки й файлиchanged, not analysed. Стара сторона —HEAD, посилання абоPROJECT:REFз поля (іде по Enter) чи збереженийrtok graph export --level symbols, обраний через вибір файлу: сторінка сама читає файл і шле його текст, а не шлях, тому ніщо через/wsне змусить rtok відкрити файл. Проти експорту перелічуються лише додані та видалені символи й зв'язки. Кожен список обрізається на 500 рядків на проєкт (панель каже, скільки ще; усе є вrtok graph diff). Граф наживо далі працює; вимкнення Compare повертає попередню картинку. - Граф наживо. Поруч з оглядачем (одне під одним за ширини менше 900 px) друга картинка
лише для читання показує, що роблять інструменти графа, за викликами, що надходять по
/ws. Вона малює той самий рівень, що й оглядач, з тим самим розкладом і кольорами: зареєстровані проєкти або відкритий проєкт. Вводу вона не приймає (ні вказівника, ні колеса, ні клавіш, курсор лишається звичайною стрілкою). Виклик підсвічує вузол проєкту на огляді або вузол з назвою його цілі у вигляді одного проєкту: кільце на кожен виклик, що виконується, одного з восьми акцентів, німб для викликів за останні 5 хвилин і червоне кільце в того, що впав; понад вісім викликів, що виконуються, лічильник «busy» показує, скільки ще. До першого виклику картинка затемнена й підписана «Waiting for graph calls». Камера бере в кадр вузли викликів, що виконуються, і викликів, що завершилися за останні 4 секунди, і плавно повертається до загальної картини, коли таких не лишилося (заprefers-reduced-motionвона перемикається стрибком). Кнопки «2D» і «3D» у куті картинки перемикають вигляд; 3D це той самий Three.js, що в частині 1, без обертання й вибору: німб для нагріву, оболонка на кожен виклик, що виконується, і червоний каркас у того, що впав; без WebGL показується 2D зі сповіщенням. У кожного виклику, що виконується, є невеликий підпис на його вузлі, у 2D і в 3D: інструмент і лічильник секунд; завершений виклик зберігає підпис із тривалістю 4 секунди й згасає після 2, виклик, згорнутий у «+N more», підписує вузол, що тримає лічильник, а виклик поза областю підпису не має. Смуга між частинами змінює їхній розмір (перетягування, стрілки, подвійний клік повертає 50/50) і запам'ятовується; «Hide live graph» ховає картинку й завершує підписку на/ws, це теж запам'ятовується. Сторінка підписується, лише доки граф наживо показано. Нижче: виклики, що виконуються, виклики й збої, надіслані токени, токени без rtok і зекономлене, стовпці за інструментами та частки бекендів за останні 1, 5 або 15 хвилин чи від запускуrtok web: підсумки читаються зі сховища, тож після перезавантаження сторінки цифри ті самі (сховище тримає 5000 останніх подій викликів, давніші виклики з підсумків випадають). На екранах вужче за 900 px, де жива частина лягає під оглядач, ці числа згортаються в один рядок (виконується, виклики, зекономлено), який розгортає повні картки й знову їх згортає; від 900 px і ширше нічого не змінюється. Підсумки беруться зsummaryкожного кадру й рядків вимірюваньgraph, тож вікно збігається зrtok statsза тими самими викликами (стовпці за інструментами та частки бекендів рахують виклики, перелічені в кадрі). Сторінка також рахує запитані символи (і скільки викликів зачепили більше одного проєкту), рядкиlsp_fallbackі відповіді, обрізані заmax_tokens, точно, заsummary, а дляsymbol,callers,impact,outline,exploreіgraph_diffще скільки запитаних символів відповіді перелічують (exploreзапитує по одному на ідентифікатор питання, решта жодного), файли перелічених рядків (місця виклику під зміненим символом уgraph_diffрядками дифу не є) і в скількох проєктах є влучання, як їх порахували бекенди графа під час збирання відповіді; затримка (медіана й 95-й процентиль) вимірюється за викликами, які перелічують кадри, останні 1000. «Freeze» заморожує картинку й рахує те, що надходить; «Unfreeze» наздоганяє всі виклики. Стрічка тримаєlive_feed_rows(200) останніх завершених викликів, фільтрується за викликачем (агент і хост, які сховище назвало для сесії, наприкладclaude 3f9a1c2e; процесrtok mcpпоказано хостом і pid, невідому сховищу сесію — її id), інструментом і проєктом, показує викликів, що впали, червоним і позначає виклик, що не завершився за дві хвилини, як перерваний. Ключі[plugins.graph]live_heat_window_s(300),live_max_events_per_s(50; скільки подій викликів за секунду показує панель, лічильники рахують кожен виклик) іlive_feed_rows(200) читаються під час запуску живої частини. Картки «calls» і «saved» мають спарклайн із 30 слотів сервера за обране вікно (за останні 15 хвилин для «since start») з тих самих кошиків, що додаються до підсумків; вони називаються «calls over the last 5 min» і «tokens saved over the last 5 min». Якщо сторінка має область (проєкт, у який зайшли, інакше вибраний, з усім, що сягають його зв'язки), рядок стрічки для проєкту поза нею отримує позначку «outside scope» і не підсвічує полотно. На вигляді одного проєкту, коли ліміт у 500 вузлів сховав частину вузлів, виклик на схованому рахується під «folded calls» на намальованому файлі, чий шлях містить ціль виклику, інакше на групі «+N more». - Тривоги. Коли перевірка здоров'я (див. LSP-бекенд) піднімає тривогу для
проєкту, його вузол отримує червоний значок на обох рівнях (червоний маркер у 3D, а в списку й
підказці — слово
alert), так само як кожен зв'язок до нього й кожен контурний символ цього проєкту на вигляді одного проєкту. Список тривог угорі сторінки — один рядок на вид тривоги («share-1, share-2, share-3 unreachable since 14:02 (3 projects)»). Спливне сповіщення з'являється, коли знімок піднімає або знімає тривогу, і зникає за кілька секунд або за Dismiss; тривоги, що вже горіли під час відкриття сторінки, потрапляють у список, але без сповіщення. - Бекенд графа. У кожного проєкту в списку стоїть
lspабоtags, а заголовок вибраного проєкту пояснює чому: мову, чий сервер відповідає, або причину відкату на теги, час останньої перевірки й час наступної спроби health check. Проєкт, про який ще ніхто не питав, так і пише, що запису немає.
Кожен прапорець — це ключ конфігурації
Немає прапорця, який не можна зробити постійним. rtok proxy --port 8791 і
[proxy] port = 8791 — це те саме налаштування, задане двома способами, а rtok config show --sources
повідомляє, який рівень переміг. Ланцюжок пріоритетів описано в Конфігурації.
Скорочення і повернення назад
rtok run -- <cmd> виконує команду, архівує сирий вивід і друкує відфільтровану
версію з доданим id. rtok expand <id> друкує початкові дані назад. Ця пара —
увесь контракт збереження без втрат: ніщо, що скорочує rtok, не втрачається безповоротно.
Вимірювання
rtok stats читає таблицю measurements. Рядки надходять від плагінів, що викликають Ctx::record
з Measurement, і від проксі, який фіксує реальне usage з відповідей API.
rtok stats --calibrate заново підганяє оцінювач «символів на токен» під ці реальні
лічильники.
rtok bench запускає дві конфігурації хоста на фіксованому наборі задач у bench/tasks.toml і
порівнює їх.
Події викликів графа
rtok dashboard показує, що роблять інструменти графа. Кожен виклик symbol, callers,
impact, outline і explore у будь-якому процесі rtok (MCP-сервер, rtok mcp --call) пише в
сховище подію початку, подію прогресу та подію кінця. Дашборд читає нові події кожні 250 мс і
надсилає їх через /ws кадрами {"type":"calls"}, тому виклик з іншого процесу видно протягом
секунди (обидва строки перевіряє tests/web_live.rs). Сторінка вмикає кадри повідомленням {"calls":{"subscribe":true}} і вимикає значенням
false; поки жоден сокет не підписаний, нічого не читається.
Подія кінця містить інструмент, символ, проєкт і бекенд (lsp, tags або text, береться із
заголовка відповіді; для фіксованого режиму порожньо), час виконання, оцінку токенів відповіді та
рядки вимірювань graph, які записав виклик (samples: вид, байти й оцінка токенів до і після).
Це ті самі рядки, що показує rtok stats --plugin graph. Невдалий виклик завершується з
ok: false і текстом помилки. У подіях лише імена, шляхи й числа, без вихідного коду.
У кадрі не більше 100 подій. Під час сплеску початок і прогрес завершеного виклику згортаються в
його кінець, а summary кадру рахує кожен виклик опитування, тож підсумки не гублять події.
Повторного надсилання немає: сокет бачить події, записані після підписки (перший кадр порожній і
несе номер останньої події), а підсумок за вікно читається зі сховища. Сховище тримає останні
5000 подій.