# Команды, файлы и сеть

Источник: https://svedum.ru/docs/agents/sandbox

> Что агенту можно без вашего разрешения на компьютере и у сотрудника — папки, ключи, сеть команд — и как работают списки разрешённого.

Здесь — как устроены ограничения, внутри которых агент запускает команды и правит файлы.
Кто разрешает шаг за их пределами, решает [режим разрешений](https://svedum.ru/docs/agents/permissions).

## Файлы и папки

Агент на вашем компьютере запускает команды и правит файлы с ограничениями: внутри проекта —
свободно, за его пределами и в настройках инструментов проекта (`.git`, `.svedum`, `.vscode`,
`.husky`, `.npmrc`) — только с разрешения. Кэши менеджеров пакетов в домашней папке — npm,
bun, pnpm, pip, Go, Cargo и других — открыты: зависимости ставятся без полного доступа.

Ключи и токены в домашней папке — `~/.ssh`, облачные, `gh`, профили браузеров — и пароли из
Связки ключей Mac агенту закрыты в любом режиме, кроме «Разрешать всё». Команда, которой они
нужны, — `git push` по SSH или `git fetch`, который берёт пароль у `gh` или из Связки ключей, —
упирается в эти ограничения и просит запуск с полным доступом, даже если сама спрятала свою
ошибку. Бывает, что команде сначала нужен сайт, а потом ключ: тогда карточки идут одна за другой,
и агенту не приходится просить заново.

Что команде понадобилось, проект запоминает. В следующий раз та же команда сразу просит нужное —
одной карточкой, без неудачного запуска. Это не разрешение: решаете вы или проверка, как и в
первый раз.

## Сеть

На Mac командам агента закрыт интернет. Открыты «Разрешённые сайты» из «Настройки →
Чат», а в режиме «Спрашивать» — ещё и реестры пакетов: npm, PyPI, crates, Go. Когда команде
нужен другой сайт, появляется карточка «Выполнить команду» со списком сайтов:

* **Разрешить** — открыть эти сайты только для этого запуска;
* **Разрешать всегда** — добавить их в разрешённые сайты;
* **Пропустить** — оставить закрытыми.

Если агент заранее знает, какие сайты нужны команде, он называет их сразу, и карточка
появляется до запуска. В режиме «Проверять» карточку сначала решает проверка. Локальные
адреса (localhost) открыты: тесты с локальным сервером работают. Закрыты только прокси вашей
системы — через них команда вышла бы в интернет.

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

Программы, которые соединяются с сервером напрямую, а не через сайты по списку, — `ssh`,
`whois`, `dig`, клиенты баз данных, `docker` — агент запускает с полным доступом, и на Mac, и
у сотрудника. Появляется карточка «Выполнить команду» с пометкой «С полным доступом: команда
сможет менять любые файлы и ходить в сеть»; в режиме «Проверять» её сначала решает проверка.
Если на Mac такая программа всё же запустилась с ограничениями и не смогла соединиться,
«Сведум» это видит и показывает ту же карточку.

## Разрешённые команды, пути и сайты

Списки видны и редактируются в «Настройки → Чат». Команды и пути из списков идут без
вопроса. В режиме «Проверять» действуют списки путей и сайтов. Список команд там не
действует: без проверки идут только команды, которые только читают, их перечень показан
под списком.

* **Разрешённые команды** — совпадение по началу команды с границей слова: `git`
  разрешает `git status`, но не `gitea`.
* **Разрешённые сайты** — хосты, куда команды агента ходят без вопроса, в обоих режимах:
  `registry.npmjs.org` или `*.example.com` для поддоменов.
* **Разрешённые пути** — файлы и папки вне проекта, которые агент может менять без
  вопроса. Разрешение папки покрывает всё внутри.
