Модуль code — работа с кодовой базой
🟢 Модуль даёт агенту доступ к коду проекта: чтение, создание и точечная правка
файлов, обзор/поиск, запуск команд (сборка, тесты, git). В комплекте — готовый
агент coder. Модуль dual-transport: один и тот же код работает как
linked-крейт и как нативная DLL.
Что поставляет
| Что | Идентификатор | Описание |
|---|---|---|
| Инструменты | kind: read_file … run_command |
6 операций над кодом проекта |
| Агент | coder |
готовый кодовый агент с подключёнными инструментами |
| Настройка | code/code_root |
корень проекта (проецируется в AGENT_OS_CODE_ROOT) |
Модуль входит в набор по умолчанию (server.yaml → modules.enabled).
Инструменты
kind |
Назначение |
|---|---|
read_file |
прочитать файл/диапазон строк |
write_file |
создать новый файл (только создание) |
edit_file |
точечная замена фрагмента (old_string → new_string) |
list_files |
список файлов по glob |
grep |
поиск по содержимому (regex) |
run_command |
запуск команды в корне проекта |
Инструменты не трогают ФС и процессы напрямую — они ходят через host-порты
agent_os.Fs и agent_os.Process,
поэтому песочница ядра применяется одинаково в обоих транспортах, а модуль
объявляет соответствующие capabilities.
Корень проекта
Приоритет:
root:в YAML инструмента (абсолютный или со${VAR});template_vars[code_root]из контекста вызова — так каталог передаётся субагенту черезparamsуsubagent_tool(ключ настраивается полемroot_var);AGENT_OS_CODE_ROOT(настройкаcode/code_rootна странице Настройки);- рабочий каталог сервера.
Все пути — относительные корня; абсолютные пути и .. отклоняются; выход за
корень (в т.ч. через симлинки) запрещён. Дополнительно применяется песочница
агента (read_roots/write_roots).
Правки — только точечные
edit_file заменяет уникальный фрагмент; файл целиком не перезаписывается.
write_file — только создание (существующий файл не затирается).
run_command и безопасность
Команду выбирает LLM. Политика — в YAML инструмента:
deny: [rm, sudo, shutdown] # запрещённые программы/строки
# allow: [cargo, git, npm] # если задан — разрешены только перечисленные
approval: # gate одобрения человека (ядро)
required: true
severity: high
timeout_secs: 600
on_timeout: deny
action: "Выполнить команду: {{ input.command }}{% if input.args %} {{ input.args | join(' ') }}{% endif %}?"
Плюс жёсткий таймаут; в linked-сборке — лимиты kernel-песочницы (CPU/mem/procs/ fsize, kill дерева процессов). В DLL-сборке kernel-лимиты не применяются — защита сводится к approval + политике + таймауту.
Агент coder
Поставляется config-бандлом (agents/coder/) и загружается рядом с
config/agents/ при включённом модуле. Объявляет tool_files для всех шести
инструментов. Агент config/agents/coder (если есть) побеждает бандловый.
coder объявлен admin_only: true: взаимодействовать с ним может только админ
(admin-токен или admin login-cookie), обычные и анонимные пользователи получают
403. Это защищает мощные инструменты (правка файлов, запуск команд). При
выключенной аутентификации гейт открыт — задавайте server.yaml → auth.
Как модуль контрибутит
Модуль отдаёт по одному stable-объекту ToolEngine на каждый kind в реестр
tool.engines и объявляет capabilities:
agent_os_sdk::declare_module!(
CodeModule, "code", contribute, DOCS,
capabilities = ["agent_os.Fs", "agent_os.Process"]
);