AGONTS

Рабочие среды (Workspaces)

Персональный контейнер на воркспейс — файлы, терминал, preview. Как v0 и Claude Code, только под ваших агентов.

v0/Claude Code-flow внутри AGONTS. У каждого воркспейса — свой постоянный контейнер с файловой системой, терминалом и preview-иконкой. Агент пишет код, запускает dev-сервер, показывает результат в iframe.

Что это

Workspace — Docker-контейнер под ваш tenant, созданный по запросу и живущий, пока вы с ним работаете. Внутри:

  • /workspace — постоянный каталог. Сохраняется на хосте в /srv/agonts-workspaces/{tenantId}/, переживает перезагрузки контейнера.
  • bash / node / bun / python3 — готовые рантаймы.
  • Read-only rootfs + tmpfs — корень контейнера нельзя менять; /tmp, /home/node, /run — tmpfs (RAM).
  • Egress firewall — сетевой исход запрещён к IMDS (AWS/GCP метадата), к API-контейнеру напрямую и к 100.64/10. Интернет наружу — открыт.

Workspace — не sandbox для недоверенного кода. Это persistent среда под одного tenant. Не делите воркспейс между проектами, если не хотите, чтобы они видели файлы друг друга.

UI

Чат-страница делится на две панели:

  • Слева — тред с агентом.
  • Справа — панель воркспейса с тремя вкладками:
    • Files — дерево, inline редактор CodeMirror 6 (JS/TS/Python/HTML/CSS/MD/JSON), Cmd/Ctrl-S + автосейв через 1.5s.
    • Preview — iframe на ваш dev-сервер через reverse-proxy, Copy URL / Open ↗, auto-reload по Save + Exec.
    • Terminalbash -lc, ↑/↓ для истории, stdout/stderr в логе.

Ресайзер между панелями — тяните, двойной клик — сброс. Ширина пишется в cookie agonts-ws-panel-width.

Тарифы и лимиты

Prop

Type

CPU-минуты считаются за календарный месяц: при превышении квоты /container/ensure вернёт HTTP 402 и UI-бейдж NNm / capm покраснеет.

Как агент этим пользуется

Агент получает набор инструментов workspace___*. Они внутренние — модель сама решает, когда их звать.

  • workspace___write_file({ path, content }) — создаёт/перезаписывает файл внутри /workspace.
  • workspace___read_file({ path }) — читает файл.
  • workspace___list_dir({ path }) — листает каталог (дерево через опцию recursive).
  • workspace___delete({ path }) — удаляет файл или каталог.

Пути — относительные к /workspace. ../ блокируется safeRelPath.

  • workspace___boot() — стартует контейнер (если его нет). ~3s cold start, ~600ms warm.
  • workspace___run({ command, cwd?, detach? }) — выполняет bash -lc "<command>". С detach: true запускается через docker exec -d — процесс переживает конец запроса.
  • workspace___serve_port({ port, command }) — запускает сервис в фоне, проверяет, что порт слушает, возвращает preview-URL.
  • workspace___dev_server({ port?, startCommand? }) — one-shot: определяет стек (bun.lock/pnpm/yarn/npm, pyproject/requirements, go.mod), ставит зависимости, поднимает dev-сервер, дожидается порта, отдаёт URL. Используется один раз после скафолдинга.

Preview-прокси

Каждый воркспейс получает уникальный URL вида:

https://ag0nts.xyz/api/_api/workspaces/{workspaceId}/proxy/{port}/...

API форвардит запросы в контейнер на указанный порт. Перед форвардом стрипятся Cookie, X-Workspace-Id, все X-Forwarded-* — чтобы tenant-процесс не получил ваш auth-токен.

HTTP API

Все эндпоинты — под /workspaces/:id/*, гейтятся assertMember. Только участники воркспейса могут бить эти маршруты.

Prop

Type

Безопасность

  • read-only rootfs + drop ALL capabilities + no-new-privileges.
  • tmpfs-овые /tmp, /home/node, /run масштабируются по тарифу.
  • egress firewall на docker bridge (AGONTS_WS chain в DOCKER-USER).
  • pid / nproc / nofile ulimits — 128 / 128 / 1024 соответственно.
  • Пути в tools через safeRelPath../ не проходит.

Типичный флоу

# 1. Пустой воркспейс, агент создаёт файлы
workspace___write_file({ path: 'index.html', content: '<h1>hi</h1>' })

# 2. Поднимаем preview
workspace___serve_port({
  port: 8080,
  command: 'python3 -m http.server 8080'
})
# → returns preview URL, iframe в UI обновляется

# 3. Итерируем
workspace___write_file({ path: 'index.html', content: '<h1>hello</h1>' })
# auto-reload через ?__t=N в iframe

FAQ

Q: Что будет с файлами, если контейнер упадёт? Всё, что записано в /workspace, остаётся на хосте. При следующем ensure — поднимется со всеми файлами. Остальные пути (tmpfs) — теряются.

Q: Можно ли дать агенту доступ к внешнему API? Да. Egress в интернет открыт. Заблокирован только IMDS и наш API.

Q: Сколько контейнеров живёт одновременно? По одному на воркспейс. Idle-таймер останавливает простаивающие (free: 15 мин, starter: 1 ч, pro: 6 ч).

Q: Как снять snapshot состояния? Автоматически ночью — per-tenant tar.gz в MinIO (см. workspaces/{tenantId}/snapshots/). Ручной restore — через UI.

On this page