Skip to main content
Glama

NOMOS Browser

Браузер вашего агента, с вами в комнате.

Управляемая инфраструктура навигации для ИИ-агентов. Браузер становится ресурсом платформы, а не игрушкой, привязанной к модели — и владелец видит, разрешает и прерывает то, что делает агент.

0.3.0-rc.2 · MIT · Node ≥ 22.6 · Chromium via Playwright · без шага сборки


Проблема

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

  • слепое доверие — агент действует, а владелец узнаёт потом;

  • паралич — агент спрашивает всё, а владелец автоматически кликает «да», пока одобрение не становится рефлексом.

NOMOS Browser разделяет то, что владелец уже разрешил, и то, что требует согласия сейчас, и делает разницу видимой, проверяемой и обратимой.

Related MCP server: gaze

Как это выглядит

NOMOS · Claude · Gemini · Qwen · Ollama · agente próprio
                        │
      MCP  ·  REST v1  ·  WebSocket  ·  SDK  ·  CLI  ·  Live Agent Console
                        │
              NOMOS BROWSER RUNTIME
        política → autonomia → aprovação → auditoria
                        │
                 Playwright · CDP
                        │
                     Chromium

Состояние навигации принадлежит Runtime, а не модели. Агент отключается, умирает или заменяется другим от другого поставщика: сессия остаётся живой, с теми же вкладками, куки и задачей.


Возможности

Live Agent Console

Зеркало страницы, курсор агента, полоса состояния, лента активности, центр одобрения и история только для чтения

Два режима автономии

ASK спрашивает перед каждым действием, изменяющим страницу; AUTO выполняет самостоятельно то, что вы уже разрешили

AUTO не является обходом

Автоматический режим никогда не отменяет обязательное одобрение. Это топология кода, а не обещание

Одобрение с привязкой

Одноразовое, привязанное к действию, сессии и точным аргументам. Одобрение «Отмена» не разрешает «Подтвердить покупку»

Маскированный секрет

Вводимый текст отображается как [скрыто: 24 символа(ов), C…Z]: достаточно для решения, но никогда не достаточно для утечки

Аудит и воспроизведение

Цепочка, связанная хэшем, печать при завершении сессии, воспроизведение только для чтения в трёх слоях

Человеческий контроль

Взятие управления замораживает агента; возврат управления требует повторного наблюдения перед действием

23 глагола, 16 инструментов MCP

Единый контракт, предоставляемый через MCP, REST, WebSocket, SDK и CLI

Демонстрация

Live Agent Console обслуживается самим runtime, на том же источнике, с CSP connect-src 'self' — нет разрешительного CORS, который можно было бы эксплуатировать.

node packages/api/src/daemon.ts
# abra a URL com o token que o daemon imprime

Воспроизводимые сценарии с ожидаемым результатом находятся в docs/demos.md.


Установка

npm ci --include=dev
npx playwright install chromium

--include=dev — не украшение: с NODE_ENV=production или npm config omit=dev, npm ci пропускает devDependencies, и проверка типов затем падает с "This is not the tsc command you are looking for". Подробности в docs/INSTALLATION.md.

Нет шага сборки для runtime: Node выполняет TypeScript нативно. Интерфейс имеет собственный шаг (node packages/ui/build.ts), потому что читает токены бренда из хранилища при каждой генерации.

Быстрый старт

# 1. subir o runtime
node packages/api/src/daemon.ts &

# 2. estado
node packages/cli/src/main.ts health

# 3. abrir uma página (a sessão nasce com a política padrão)
node packages/cli/src/main.ts open https://example.com

# 4. ver o que ficou gravado
node packages/cli/src/main.ts sessions
node packages/cli/src/main.ts replay <SESSION_ID>

CLI никогда не предоставляет чувствительные capability: сессия, созданная ею, рождается с запрещёнными download, upload, send, purchase, payment и delete.

Примеры

# capturar a tela de uma sessão
node packages/cli/src/main.ts screenshot <SESSION_ID> --out /tmp/tela.png

# entregar um objetivo ao agente
node packages/cli/src/main.ts task --session <SESSION_ID> "encontre o preço do plano anual"

# acompanhar os eventos ao vivo
node packages/cli/src/main.ts events --session <SESSION_ID>

# verificar a integridade do replay gravado
node packages/cli/src/main.ts replay verify <SESSION_ID>

ASK и AUTO

Иерархия, и порядок есть гарантия:

POLÍTICA DO DONO → MODO DE AUTONOMIA → CAPABILITY DO NOMOS → GATES DE APROVAÇÃO → AÇÃO

ASK — спрашивать

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

Одобрение browser.task не является бланком: каждый шаг, который план решит выполнить, снова проходит через ворота.

AUTO — действовать без вопросов

Агент выполняет самостоятельно всё, что вы уже разрешили своей политикой. Что не меняется:

  • действия с финансовым эффектом, внешней отправкой или высокой необратимостью продолжают требовать одобрения — browser.upload спрашивает в AUTO, потому что отправляет ваши данные наружу, и это нельзя отозвать;

  • маршрут без объявленного профиля риска попадает в «всегда одобрять» (fail-closed);

  • если состояние автономии не может быть подтверждено (runtime упал, переподключение), интерфейс никогда не показывает AUTO: он переходит в неизвестное и обрабатывается как ASK.

AUTO != BYPASS — это не обещание из документации. Шлюз автономии работает после capability и человеческого контроля: когда он выполняется, всё, что политика запрещает, уже вернуло 403. В коде нет ветки, которая превращает deny в allow.

Подробнее в docs/ask-mode.md и docs/auto-mode.md.

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

  • Аутентификация по токену с областями (OBSERVE, NAVIGATE, INPUT, DOWNLOAD, UPLOAD, SECRET, CONTROL, ADMIN). Каждый маршрут имеет объявленную область; ни один не живёт по умолчанию.

  • Кто действует, не разрешает. Профиль агента не может одобрять, делегировать режим или возобновлять. Остановить — да: pause и emergency-stop никогда не могут быть сложнее, чем действовать.

  • Политика fail-closed по capability, с A6_DESTRUCTIVE запрещённым.

  • Анти-SSRF: переход на внутренний хост — явное действие, никогда не выводимое.

  • Анти-инъекционная процедура в пути выполнения: observe и extract возвращают provenance.

  • Обязательная аренда управления (allow_unleased: false).

  • Секреты не появляются в интерфейсе, аудите или воспроизведении.

Модель угроз T1–T10, с объявленными остатками, находится в docs/SECURITY.md.

Ничто здесь не утверждает «100% безопасно». Ни одна мера этого не поддерживает, и ни одна никогда не поддержит.

Аудит и воспроизведение

Цепочка из 19 полей на каждое действие, связанная хэшем, с редактированием секрета в источнике. При завершении сессия опечатывается.

Воспроизведение доступно только для чтения в трёх независимых слоях: на маршруте нет глагола записи (405 + Allow: GET); чтение истории не воскрешает сессию; и режим объявляется runtime, а не выводится экраном.

Он также честен в отношении собственного чтения: сообщает о повреждённых строках и отсутствующих источниках, вместо того чтобы возвращать более короткую временную шкалу, которая представляется полной. Сессия, которой никогда не существовало, — это 404, а не пустое воспроизведение с 200.

См. docs/audit-and-replay.md.

MCP

16 инструментов, без привязки к модели:

browser_navigate · browser_observe · browser_find · browser_extract · browser_screenshot · browser_click · browser_type · browser_press · browser_scroll · browser_tabs · browser_tab_open · browser_tab_switch · browser_tab_close · browser_download · browser_upload · browser_task

В экосистеме NOMOS браузер — это управляемая capability политикой владельца, с подписанным каталогом и доверием по отпечатку нормализованного манифеста. См. docs/mcp.md и docs/NOMOS-INTEGRATION.md.

Конфигурация

51 ключ, доступный для запроса через сам runtime:

curl -s localhost:7777/api/v1/config/schema   # a FORMA (pública)
curl -s localhost:7777/api/v1/config          # os VALORES efetivos (ADMIN)

Разделение намеренно: «что существует?» может быть отвечено любому носителю; «что действует здесь?» — нет. См. docs/CONFIGURATION.md.

Устранение неполадок

Симптом → причина → проверка → исправление в docs/TROUBLESHOOTING.md.


Разработка

npx tsc --noEmit                    # tipos
bash scripts/run-suite.sh           # suíte inteira, um arquivo por vez
bash scripts/run-suite.sh --fast    # pula browser/bench
bash scripts/regressao-completa.sh  # 15 etapas, um veredito
bash scripts/limpar-orfaos.sh       # higiene por prova de posse

Используйте исполнитель, а не node --test tests/ напрямую. Раннер Node распараллеливает по CPU; при нехватке памяти процесс умирает на середине и оставляет усечённый вывод без строки сводки, что выглядит как успех. run-suite.sh запускает по одному файлу за раз, и мёртвый файл отображается как MORTO.

Тесты

Измерено на HEAD 6964cf0:

suíte TypeScript     789 passes · 0 falhas · 37/37 arquivos
E2E do Live Agent    106 casos  · 9 baterias
sala limpa           14/14 passos, a partir de clone do HEAD
regressão completa   15 etapas · 0 falha · 0 não-executada

Проект отказывается называть PASS то, что не было наблюдаемо. Два примера:

Управление браузером реально. Клик, синтезированный JavaScript, доходит до страницы с isTrusted=false; отправленный через CDP — с true. Спайк тестирует оба — второй доказывает управление, первый доказывает, что тест не пустой.

Счётчик одобрений не слепой. При мутации продукта UNEXPECTED_APPROVAL_PROMPTS переходит с 0 на 3 и на 5 в зависимости от внедрённого дефекта. Счётчик, который оставался бы на нуле при мутации, ничего бы не измерял.

Известные ограничения

  • p99 не сообщается ни на одном пути задержки: 30 выборок требуют 100 для поддержки p99. Ни один наблюдаемый максимум не называется p99.

  • Нет HTTP-маршрута для выпуска токена с областью — он существует во внутреннем API.

  • Ветка pr.page.isClosed() недостижима при нормальной работе; это защита от гонок, а не покрытие.

  • Полоса состояния интерфейса обновляется по опросу каждые 700 мс. События приходят за ~1 мс; полоса — нет.

  • Проверено на macOS/Apple Silicon. Другие платформы не измерялись.

Полный список с цифрами находится в docs/LIMITATIONS.md, а что является PROVEN против MEASURED или NOT PROVEN — в PRODUCT_TRUTH_MATRIX.md.

Дорожная карта

В ROADMAP.md. То, что там есть, — это законные долги, а не обещания сроков.


Документация

Начните здесь

quickstart.md

С нуля до первого browser task

live-agent-console.md

Консоль, её состояния и элементы управления

ask-mode.md · auto-mode.md

Два режима и то, что между ними не меняется

demos.md

Воспроизводимые сценарии

Справочник

INSTALLATION.md · CONFIGURATION.md · TROUBLESHOOTING.md

Установка, настройка, разблокировка

ARCHITECTURE.md · API.md

Слои и маршруты

browser-control.md · tasks.md · TASK-ENGINE.md

Глаголы, цели и движок задач

security-overview.md · SECURITY.md

Безопасность продукта и модель угроз

audit-and-replay.md · AUDIT.md

След, печать и воспроизведение

mcp.md · NOMOS-INTEGRATION.md · GI-INTEGRATION.md

Интеграции

RECOVERY.md · VISION-PROVIDER.md

Что переживает что; зрение

LIMITATIONS.md · EVIDENCIA.md · RASTREABILIDADE.md

Ограничения, доказательства, прослеживаемость

RELEASE.md · CHANGELOG.md

Как делается версия; что изменилось

Бренд

Бренд NOMOS заморожен в v1.0, и официальный резолвер отвечает rc=0. Токены считываются из хранилища при каждой сборке и не версионируются в этом репозитории — копировать бренд-токен в промежуточный файл запрещено контрактом управления. См. docs/BRAND.md.

Лицензия

MIT. См. LICENSE. Правообладатель: Voltolini-SPACE.

Лицензия покрывает код. Она не предоставляет прав на бренды «NOMOS» и «NOMOS Browser» и на токены визуальной идентичности, которые управляются отдельно и не версионируются здесь. Подробности в NOTICE.md.

До 2026-08-25 этот репозиторий объявлял «все права защищены» с placeholder-правообладателем. Обе вещи были решением владельца и были решены.

Часть экосистемы NOMOS · voltolini.space

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to perform intelligent browser automation with session-based context analysis, including navigation, form filling, and content extraction through natural language.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to drive a real, already logged-in browser from the CLI or over MCP, with enforceable approval gates for actions and safeguards against prompt injection.
    1,133,569 npm
    Mozilla Public 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to automate browsers through Playwright behind multi-layer safety guards, restricting navigation to allowed domains, defaulting to read-only actions, and recording all behavior in audit logs.
    7
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to drive a real Chrome browser for autonomous web tasks, using fast typed decisions with calibrated confidence, human-in-the-loop questions, safety gates, and full debug traces.
    347 npm
    5
    MIT