Tvijo wiki
Каталог

Доступ агента к shell: семь развилок, которые пришлось решить

Семь решений, от которых зависит, можно ли выпускать автономию агента: подтверждения, отдельная учётка, файлы с ключами, источник релиза, проверяемое «готово», координация и объём релиза.

Короткий ответ

Дать агенту доступ к shell — это не одно решение, а семь. Пять из них про машину, а не про модель: что разрешено запускать без вопроса, под какой учётной записью это происходит, кто может прочитать файл с ключами, собирается ли прод из коммита и что вообще разрешено называть словом «готово». Мы проверили все семь на своём продукте и оставили узкий режим доступа, пока не сделана изоляция.

Три независимых разбора одного и того же пакета дали две фактические ошибки. Обе закрыла одна проверка на сервере. Публиковать стоит именно это: судьям надо отдавать результаты проверок, а не пересказ задачи.

Технический разбор продукта, наблюдение 28 октября 2026. Это не бенчмарк, не независимый аудит и не утверждение, что Tvijo лучше другого инструмента. Оценок здесь нет намеренно: все числа наши, с датой и способом перепроверки.

Семь развилок одной таблицей

Развилка Вопрос простыми словами Дешёвое умолчание Что выбрали мы Чего это стоит Что изменит решение
Подтверждения Убрать вопросы совсем или оставить под ними пол? Убрать все подтверждения Внутри изолированной задачи вопросов нет; жёсткие запреты остаются полом Каждой задаче нужна своя рабочая копия Песочница, которая доказуемо не достаёт до прода
Права Работать от администратора или от отдельной учётки? От root, потому что так уже работает Отдельная учётка с пустым домашним каталогом Создание учётной записи, владение результатами, отключение shell для входа Доказательство, что песочница уже закрывает те же пути
Ключи Пообещать, что ключи не передаются, или сделать их нечитаемыми? «Мы не кладём ключи в окружение» Права на файлы плюс явный список монтирования Аудит всех читателей до ужесточения Машина без других локальных учёток
Источник релиза Править работающую копию или собирать из коммита? Править копию — быстрее Сначала коммит, потом пересборка и рестарт; до этого правки не существует Окно рестарта и шаг пересборки Выкатка, которая по построению читает только собранный артефакт
Завершение Верить «готово» модели или проверять? Верить отчёту агента Предикаты движка по классу задачи Движок обязан записывать каждый вызов инструмента Класс задачи, для которого проверки пока нет
Координация Читать журналы сессий других агентов или доску? Скармливать сырые журналы модели Небольшая детерминированная доска: владелец, pid, задача, рабочая копия Heartbeat и скрипт без модели внутри Очередь, которая сама сообщает состояние
Объём релиза Выпустить автономию или проверенную автономию? Выпустить функцию сейчас Узкий режим, пока не закрыты первые пять развилок Публичный релиз позже Изоляция, которая приедет раньше, чем ожидалось

Ни одна из семи не экзотическая. Каждую дёшево решить неправильно и дорого обнаружить это позже.

Два режима доступа на пяти командах

Политику команд из выпущенного пакета мы прогнали без исполнения и записали решение по каждой команде в обоих режимах.

Команда Узкий режим (разбор и граница папки) Широкий режим (прямой shell на хосте)
git push origin main сначала спросит: команда уходит с машины выполнит без вопроса
git push --force origin HEAD:main откажет выполнит без вопроса
git -C . reset --hard откажет выполнит без вопроса
rm -rf всей папки рабочего дерева заблокирует граница папки выполнит без вопроса
crontab -r выполнит без вопроса выполнит без вопроса

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

Где три разбора разошлись и что показала проверка

Один и тот же пакет ушёл трём ревьюерам из разных семейств моделей. В порядке работ они совпали, в вопросе изоляции разошлись. Оба расхождения решила проверка на машине, а не спор.

Утверждение ревьюера Что показала проверка Что это меняет
«Отдельная учётка не достанет до рабочего дерева, значит выбор — либо открыто, либо недоступно» Дерево читается всеми, но записывать в него может только владелец Реальный выбор — «читает, но не пишет»: для кода хватает, для ключей нет
«Отдельной учётки достаточно» Кто прочитает файл, решает режим самого файла, а старые копии файла с ключами сохраняют свой режим Учётка — первый шаг; граница — список монтирования и режимы файлов
«Настоящая изоляция требует своей контейнерной платформы» Песочница уже установлена, а в проекте уже был записан контракт песочницы Надо переиспользовать её. Строить платформу не требовалось

Ревьюеры пропустили и то, что находится одной командой статуса: супервизор воркера на этой машине падал шесть дней. Ни один разбор об этом не сказал, потому что ни одному не поручали смотреть на живое состояние. Доска с процессами показала бы это сразу.

Что разрешено называть «готово»

Движок возвращает done, когда сама модель написала done. На этом пути нет счётчика реально выполненных инструментов. Для ответа в чате это нормально; для задачи, которая заявляет правку кода, — нет.

Класс задачи Что движок может проверить сам Чего недостаточно
Изменение кода Записанная движком правка, затем запущенная движком проверка после последней правки Модель цитирует прошедший тест, которого не запускала
Ответ на исследовательский вопрос Хеш дерева не изменился, в журнале есть чтения, на которых держится ответ Уверенный ответ без единого вызова инструмента
Диагностика Проба есть в журнале, и код возврата в ответе совпадает с записью журнала Правдоподобная причина, придуманная из текста задания

Тот же принцип уже применён к ревью: ревьюеру засчитывается завершённое структурное событие, а не код выхода ноль.

Какой чек мы хотим на каждую задачу

  1. Что изменено, по путям.
  2. Какие проверки запустил сам движок и в каком порядке относительно последней правки.
  3. Деньги по метру — из леджера, а не из отчёта агента.
  4. Расход подписки в вызовах и токенах отдельной колонкой, без пересчёта в доллары.
  5. Кого спросили и что ответили.

Пятый пункт и есть коммерческая причина заводить чек. Один и тот же вопрос стоил $0,0038 на самой дешёвой полосе и $0,0693 на самой дорогой: восемнадцать цен за один и тот же ответ из восьми пунктов. Без чека выбор ревьюера — вкус; с чеком это маршрутизация, которую можно перепроверить позже.

Чего мы намеренно не делаем

  • Не строим свою контейнерную платформу, если песочница уже есть.
  • Не отправляем сырой журнал чужой сессии платной модели, чтобы узнать, чем занят агент.
  • Не выпускаем широкий режим доступа раньше изоляции.
  • Не продаём «ключи не наследуются окружением» как границу безопасности. Это утверждение о процессе, а не о файле.

⚠️ Когда это НЕ работает

  • Один человек, одна машина, других локальных учёток нет. Большинство из семи развилок схлопывается в «неважно»; изоляция тогда покупает воспроизводимость, а не защиту.
  • Грязное начальное состояние. Если рабочая копия уже изменена, «дерево изменилось» ничего не доказывает. Нужен хеш или снимок на старте, иначе проверка — театр.
  • Медленные или нестабильные тесты. Если прогон занимает час, «движок запустил проверку после правки» превращается в формальность. Держите короткий список быстрых проверок и говорите, какие были обязательны.
  • Агент, который вообще не вызывает инструменты. Наша исходная проблема была именно такой: агент сообщил об отказе, не попробовав. Проверка завершения это не лечит — сначала проверяется сама возможность.
  • Жёсткий бюджет. Второе мнение стоит денег. Разница в восемнадцать раз — повод маршрутизировать по классу задачи, а не повод всегда покупать дорогого ревьюера.

Запросить разбор ваших развилок

Если вы выбираете, с чего начать на своей машине, форма ниже спрашивает, какую из семи развилок разобрать первой. Мы отвечаем тем, что изменили бы, в каком порядке и что нужно увидеть на вашей стороне. Оплата здесь не принимается, доступ к системам не выдаётся, ключи и пароли присылать не нужно.

Метод и источники

Наблюдение 28 октября 2026. Проверено: выпущенный пакет расширения, снимок исходников, конфигурация работающего сервиса и политика команд в том виде, в каком она выпущена. Измерено: решение политики по пяти командам в двух режимах, стоимость трёх разборов из леджера транспорта и состояние процесса супервизора.

Не делалось и не заявляется: тест на проникновение, независимый аудит, нагрузочный бенчмарк, платная активация клиента, реальный пилот с заказчиком. Страница описывает решения и их цену, а не сертификат безопасности.

Отдельно: четыре числа на этой странице наши, и каждое пересчитывается по артефактам, сохранённым вместе с задачей. Где утверждение проверить не удалось, оно названо утверждением ревьюера, а не фактом.

Что читать дальше

💬 Комментарии

Комментарии публичны и модерируются. Не публикуйте персональные данные.
  • Комментариев пока нет. Будьте первым!

Следующие шаги