Як побачити, що ваш AI-агент для коду виконує на ваших серверах

Ваш агент працює на продакшен-сервері, а термінал каже лише, що він викликає інструмент. Яку команду він запустив і що відповіла машина? Транскрипт розповість про це заднім числом. Ось як ми зробили це видимим саме під час роботи, що спробували спочатку і як отримати те саме без нашого застосунку.

Ви питаєте DevOps-агента, чому гальмує продакшен-API. Він береться до роботи. У його терміналі з'являється рядок про те, що він викликає інструмент, потім ще один, потім ще. Через шість викликів він повідомляє, що диск заповнений на 97 %, і пропонує почистити папку з логами.

Що він насправді запустив на цій машині? Який du, який find, чи встиг він уже щось видалити? Відповідь існує, але вона в транскрипті сесії, записана в JSON, і ви читаєте її заднім числом. На ноутбуці це нормально. На продакшен-сервері заднім числом уже пізно казати «стоп, тільки не цю папку».

Ми робимо AgentsRoom, десктопний застосунок, який запускає агентів для коду й дає їм інструменти для доступу до ваших серверів, баз даних і кластерів. Це історія про те, як ми зробили ці виклики видимими саме під час виконання: версія, яка не спрацювала, цифри тієї, що працює, і як отримати те саме, якщо ви не користуєтеся нашим застосунком.

Коротка відповідь

  • CLI показує, що інструмент відпрацював, але не сесію на іншому боці. Повна команда та її вивід ідуть у транскрипт на вашому диску.
  • Щоб стежити наживо, щось має записувати кожен виклик у момент його початку, а не наприкінці сесії.
  • Один журнал на з'єднання працює. Одна вкладка термінала на команду ні. Ми нарахували 166 віддалених команд за одну сесію.
  • Зберігайте цей журнал на своїй машині. Командний рядок на продакшен-хості містить секрети й дані клієнтів.
  • Без нашого застосунку: хук Claude Code, який дописує кожну shell-команду у файл, дає більшу частину результату, а транскрипт доповнює решту.

Чому транскрипту недостатньо на сервері

Claude Code, Codex та інші CLI справді записують усе. Claude Code пише по одному файлу JSONL на сесію в ~/.claude/projects/, Codex у ~/.codex/sessions/. Кожен виклик інструмента там є, із вхідними даними та результатом.

Проблема не в повноті, а в часі та формі. Транскрипт пишеться для CLI, щоб той міг відновити сесію. Ви читаєте його, коли агент уже зупинився, порпаючись у рядках JSON. Коли одночасно працюють три агенти, ви читаєте три файли. А термінал агента, те місце, куди ви справді дивитеся, показує лише згорнуте зведення кожного виклику.

Для коду на ноутбуці прочитати все потім це звичайний цикл перевірки: ви дивитеся diff перед комітом. У сервера немає diff. systemctl restart чи DELETE набирає чинності тієї ж миті, коли виконується.

Що ми спробували спочатку, і 166 команд

Наш перший віддалений інструмент для агентів відкривав з'єднання у вкладці термінала. Це виглядало правильно: користувач бачив сесію. Але провалилося це так, як ми не очікували.

Інструмент не давав агентові жодної змоги прочитати, що сталося у вкладці, яку він щойно відкрив. І в проєкті одного користувача агент перестав ним користуватися. Рахунок тієї сесії: 16 викликів нашого інструмента з'єднання і 166 команд sshpass, виконаних через власний shell-інструмент агента, причому агент питав у користувача пароль, а користувач вставляв його в чат. Продакшен-облікові дані опинилися відкритим текстом у транскриптах, у ps aux під час виконання кожної команди та у файлі в /tmp.

Урок був не в тому, що «агенти безрозсудні». Агент зробив єдине, що працювало. Безпечний інструмент, який не дає агентові робити свою роботу, обходять, і обхідний шлях гірший, ніж відсутність інструмента.

Тому ми написали ssh_exec: агент надсилає одну команду, AgentsRoom виконує її на збереженому з'єднанні, тримаючи пароль усередині застосунку, і повертає вивід і код виходу. Агент ніколи не бачить облікових даних і не має причин складати рядок sshpass.

Це розв'язало проблему безпеки й створило проблему видимості. Якби кожен ssh_exec відкривав вкладку, та сесія породила б 166 вкладок. Тому ssh_exec не відкривав жодної, і два місяці єдиним місцем, де можна було побачити ці команди, знову залишалася розмова з агентом.

Один журнал на з'єднання

Версія, яку ми випустили 29 жовтня 2026 року (AgentsRoom 1.242.0), тримається одного правила: жодних вкладок на команду. Натомість кожен виклик потрапляє в журнал, по одному на з'єднання.

  • Вкладка «Активність» на правій панелі, поруч із «Файли», «Зміни» і «Тести», показує картками з'єднання, яких торкалися агенти (остання команда, агент, час, стан), і 40 останніх викликів на стрічці. Її можна фільтрувати за агентом і шукати за командами, назвами з'єднань і виводом.
  • Журнал з'єднання читається як термінал: агент · час, потім $ команда, потім вивід, потім Готово · код виходу 0 · 1,2 с. Вивід SSH прокручується наживо, і вигляд іде за кінцем, доки ви не прокрутите вгору. Одна кнопка копіює весь журнал текстом.
  • Мітки в заголовку агента, по одній на кожен сервер, базу даних чи кластер, яких він торкався, із зеленою крапкою під час виклику. Один клік відкриває цей журнал.
  • Значок «Агент працює» у рядку з'єднання у вікнах «Сервери», «Бази даних» і Kubernetes, лише поки триває виклик.

Журнал лише для читання. Щоб самому вводити команди на машині, як і раніше використовується вкладка SSH вікна «Сервери». Повна сторінка функції: SSH-з'єднання для AI-агентів, а частина про бази даних описана на сторінці з'єднань із базами даних.

Що записується, а що ні

ВикликУ журналіЧому
ssh_exec (SSH, AWS SSM, WinRM)ТакОсновний випадок: команда на віддаленій машині без власної вкладки
ssh_transferТакФайл, скопійований на сервер або з нього, це дія на цьому сервері
db_query, db_schemaТакSQL у тому вигляді, у якому його написав агент, і перші рядки результату
kube_kubectlТакПоказується як рядок kubectl з аргументами
commands_run, ssh_connectНіВони й так відкривають вкладку термінала, за якою можна стежити
Власний shell-інструмент агента (ssh, psql, kubectl, набрані напряму)НіВін не проходить через AgentsRoom: це є в терміналі й транскрипті агента

Останній рядок і є чесне обмеження. Журнал бачить те, що проходить через наші інструменти. Якщо ви хочете, щоб там з'являлася кожна віддалена дія, інструменти мають бути для агента найпростішим шляхом. У цьому й урок 166 команд.

Ще одна деталь: вивід під час виконання команди транслює лише SSH, бо він іде через справжній термінал на вашій машині. Результати WinRM, SQL і kubectl з'являються, коли виклик завершується.

Скільки коштує ведення журналу

Наші користувачі запускають багато агентів одночасно: 45 агентів у 18 проєктах на одній машині, 48 консолей на іншій. Усе, що рахується на агента чи на фрагмент виводу, множиться на ці числа, тому в журналу жорсткі межі:

  • 120 викликів на проєкт, найстаріші видаляються першими.
  • 32 000 символів виводу на виклик, зберігається кінець, де містяться помилки й коди виходу.
  • 2 000 символів команди або SQL на виклик.
  • Одне повідомлення про оновлення на виклик кожні 120 мс для виводу наживо, ніколи не по одному на кожен фрагмент виводу термінала.
  • Жодних таймерів у простої. Поки жоден агент не викликає віддалений інструмент, журнал нічого не коштує.

Запис відбувається в одній точці: у мосту, через який проходять виклики інструментів усіх CLI. Тому все працює однаково для Claude Code, Codex, Antigravity CLI чи будь-якого іншого CLI, який запускає застосунок, без окремого коду для кожного провайдера.

Обмеження, яке ми обрали: ніщо не залишає машину

Журнал зберігається в пам'яті десктопного застосунку й зникає, коли ви його закриваєте. Він не синхронізується з нашими серверами, що для нас незвично: майже все інше в AgentsRoom іде за вашим акаунтом із комп'ютера на комп'ютер.

Журнал ні, і це навмисно. Вивід env на сервері містить секрети. SELECT по таблиці клієнтів містить дані клієнтів. Інструмент, створений, щоб зробити це видимим, не повинен ще й копіювати це кудись у нове місце.

Телефон може стежити за тим самим журналом із профілю агента (мобільний застосунок 2.47 і новіші). Потік іде з вашого комп'ютера на телефон наскрізно зашифрованим каналом, секрети маскуються до надсилання (API-ключі, пари KEY=value, паролі в URL, токени), і на сервері нічого не зберігається. Той самий виклик, як і раніше, залишається читабельним у розмові з агентом.

Аудит-логи Claude Code це інше

Якщо ви шукали «Claude Code audit log», ви, ймовірно, знайшли Compliance API від Anthropic для Claude Enterprise: стрічку активності, події аудит-логу та, для локальних сесій із входом в акаунт Enterprise, транскрипти сесій. Він створений для адміністраторів і команд із комплаєнсу, охоплює організацію, і читають його заднім числом.

Він відповідає на питання «хто в компанії що зробив із Claude». Він не відповідає на питання «яку команду мій агент виконує на сервері бази даних просто зараз». Одне не заважає іншому, і якщо ви працюєте в компанії з вимогами комплаєнсу, перше вам, найпевніше, потрібне в будь-якому разі, чим би ви не користувалися для другого.

Якщо ви не користуєтеся AgentsRoom

Значну частину цього можна отримати тим, що вже дають CLI.

Логуйте кожну shell-команду в момент її запуску. Хуки Claude Code можуть виконувати команду перед кожним викликом інструмента. У посібнику з хуків показано цей шаблон: хук PreToolUse на інструменті Bash, який передає jq -r .tool_input.command у лог-файл. Запустіть tail -f на цьому файлі в другому терміналі, і ви бачитимете кожну команду в момент, коли агент її надсилає, разом із рядками ssh.

Читайте транскрипт, коли потрібен вивід. Хук дає вам команду, але не те, що відповів сервер. Для цього є файл сесії в ~/.claude/projects/ (або ~/.codex/sessions/ для Codex) з повним результатом кожного виклику.

Дайте агентові власний обліковий запис на сервері. Окремий користувач робить кожне з'єднання атрибутованим у журналі автентифікації сервера, а якщо на ваших серверах працює auditd, правило на execve для цього користувача записує кожен запущений ним процес на боці сервера, де агент не може цього обійти.

Тримайте облікові дані поза досяжністю агента. Якщо єдиний спосіб під'єднатися це пароль, який агент має у вас спитати, ви побачите рядки sshpass у чаті. Використовуйте ключ, який агент ніколи не читає, або інструмент, що тримає секрет за нього. Ми написали окремий посібник про те, як передати агентові секрет, не вставляючи його в промпт.

Чого така схема не дає, так це зв'язку між трьома речами: який агент, на якому з'єднанні, з яким виводом наживо, в одному місці. Саме цю частину ми й побудували.

Питання, які справді ставлять

Чи можна бачити, що Claude Code робить на віддаленому сервері, поки він працює?

У терміналі ви бачите виклик інструмента, а після його завершення короткий результат. Повна команда та її вивід записуються в транскрипт сесії на вашому диску, і читаєте ви його потім. Щоб стежити за цим наживо, потрібне щось, що записує кожен виклик у момент його початку: хук у Claude Code, який пише кожну команду Bash у лог-файл, або застосунок, який виконує віддалені виклики за агента й показує їх наживо. Саме це робить вкладка «Активність» в AgentsRoom.

Де Claude Code зберігає запис про команди, які він запускав?

У транскрипті сесії, файлі JSONL у ~/.claude/projects/: одна папка на проєкт і один файл на сесію. Кожен виклик інструмента там окремий рядок із вхідними даними та результатом. Codex зберігає схожий файл для кожної сесії в ~/.codex/sessions/. Обидва файли повні, і обидва написані для того, щоб CLI міг відновити сесію, а не для того, щоб їх переглядала людина.

Це те саме, що аудит-логи Claude Code?

Ні. Аудит-логи, які шукають під цією назвою, це записи на рівні організації, які Anthropic пропонує в тарифі Enterprise через Compliance API: стрічка активності, події аудиту та, для сесій із входом в акаунт, транскрипти, які пізніше читає адміністратор. Вони відповідають на питання, хто що зробив в організації. Перегляд команд на одному сервері наживо це інший інструмент для іншої людини.

Чому б не відкривати по вкладці термінала на кожну команду агента?

Ми пройшли цим шляхом і все виміряли: агент, який розбирав інцидент на продакшені, виконав 166 віддалених команд за одну сесію. Вкладка на кожну команду робить панель вкладок марною вже за десять хвилин. Працює інше: один журнал на з'єднання, де кожен виклик це запис із командою, виводом наживо, кодом виходу та тривалістю.

Чи надсилає AgentsRoom команди та їхній вивід на сервер?

Ні. Журнал живе в пам'яті десктопного застосунку, обмежений 120 викликами на проєкт і зникає, коли ви закриваєте застосунок. Телефон може стежити за ним із профілю агента (мобільний застосунок 2.47 і новіші): потік іде з вашого комп'ютера на телефон наскрізно зашифрованим каналом, секрети замасковані, і на сервері нічого не зберігається.

Які команди агента вкладка «Активність» не показує?

Записуються лише виклики, що проходять через інструменти AgentsRoom: ssh_exec, ssh_transfer, db_query, db_schema і kube_kubectl. Команда, яку агент виконує власним shell-інструментом, наприклад звичайний рядок ssh чи psql, є в його терміналі й транскрипті, але не в журналі. commands_run і ssh_connect виключені навмисно, бо вони й так відкривають вкладку термінала, за якою можна стежити.

Коротко

Агентові на сервері потрібні від вас дві речі: спосіб працювати, не пов'язаний із вашим паролем, і спосіб для вас бачити, що він робить, поки він це робить. Перше без другого залишає вас читати JSON заднім числом. Друге без першого обходить агент, який вставляє рядки sshpass.

Зрештою в нас вийшов один журнал на з'єднання, обмежений за розміром і збережений на вашій машині. Якщо хочете спробувати, AgentsRoom можна завантажити безкоштовно, а на сторінці SSH-з'єднань налаштування показано крок за кроком. Якщо волієте залишитися лише зі своїм CLI, почніть із хука PreToolUse і tail -f: це займе п'ять хвилин, і ви більше ніколи не гадатимете, якими були останні шість викликів інструментів.

Завантажити AgentsRoom

Запускайте всіх своїх AI-агентів на всіх своїх проєктах з одного вікна.

БезкоштовноЗавантажити AgentsRoom

Додаток-компаньйон: контролюйте своїх агентів на ходу

Використовуйте свого: Claude, Codex, Antigravity CLI або іншого AI-провайдера.

Отримати розширення
Chrome Web Store

Надсилайте баги та запити прямо у свій публічний беклог.

Кілька проектів
Багато постачальників
Кілька агентів
Статус в реальному часі
Різниця файлів і коміт
Мобільний компаньйон
Попередній перегляд в реальному часі
Команди агентів
Автоматизація браузера
Розробка, орієнтована на беклог
Бібліотека підказок
Бібліотека навичок
Переглянути всі функції

Читати далі