Skip to main content
Glama

NOMOS Browser

Der Browser deines Agents, mit dir im Raum.

Governierte Browser-Infrastruktur für KI-Agenten. Der Browser wird zu einer Plattformressource, nicht zu einem Spielzeug, das an ein Modell gekoppelt ist — und der Besitzer sieht, autorisiert und unterbricht, was der Agent tut.

0.3.0-rc.2 · MIT · Node ≥ 22.6 · Chromium via Playwright · ohne Build-Schritt


Das Problem

Einem Agenten die Macht zu geben, einen Browser zu nutzen, heißt ihm die Macht zu geben, im Namen von jemandem zu kaufen, zu senden, zu löschen und Daten leaken zu lassen. Das wird meist auf zwei schlechte Arten gelöst:

  • blindes Vertrauen — der Agent handelt und der Besitzer erfährt es danach;

  • Lähmung — der Agent fragt alles, und der Besitzer klickt „Ja" im Automatismus, bis die Genehmigung zum Reflex wird.

Der NOMOS Browser trennt das, was der Besitzer bereits autorisiert hat von dem, was jetzt Zustimmung braucht, und macht den Unterschied sichtbar, auditierbar und umkehrbar.

Related MCP server: Cloudflare Playwright MCP

Wie es aussieht

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

Der Navigationszustand gehört dem Runtime, nicht dem Modell. Der Agent trennt sich, stirbt oder wird durch einen anderen von einem anderen Anbieter ersetzt: Die Sitzung bleibt am Leben, mit denselben Tabs, Cookies und Tasks.


Funktionen

Live Agent Console

Seitenspiegel, Agent-Cursor, Statusleiste, Aktivitätsfeed, Genehmigungszentrum und schreibgeschützter Verlauf

Zwei Autonomiemodi

ASK fragt vor jeder Aktion, die die Seite verändert; AUTO führt selbstständig aus, was du bereits autorisiert hast

AUTO ist kein Bypass

Der automatische Modus entfernt niemals eine Pflichtgenehmigung. Das ist Codetopologie, kein Versprechen

Genehmigung mit Anker

Einmalig, an die Aktion, die Sitzung und die exakten Argumente gebunden. „Abbrechen" zu genehmigen autorisiert nicht „Kauf bestätigen"

Maskiertes Geheimnis

Der einzugebende Text erscheint als [verborgen: 24 Zeichen, C…Z]: genug zum Entscheiden, nie genug zum Leaken

Audit und Replay

Hash-verkettete Spur, Siegel beim Beenden der Sitzung, schreibgeschütztes Replay in drei Ebenen

Menschliche Kontrolle

Das Steuer zu übernehmen friert den Agenten ein; es zurückzugeben zwingt zu erneuter Beobachtung vor dem Handeln

23 Verben, 16 MCP-Tools

Ein einziger Vertrag, bereitgestellt über MCP, REST, WebSocket, SDK und CLI

Demo

Die Live Agent Console wird vom Runtime selbst auf derselben Origin mit CSP connect-src 'self' ausgeliefert — es gibt kein permissives CORS zum Ausnutzen.

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

Reproduzierbare Abläufe mit erwartetem Ergebnis findest du in docs/demos.md.


Installation

npm ci --include=dev
npx playwright install chromium

--include=dev ist keine Dekoration: Mit NODE_ENV=production oder npm config omit=dev überspringt npm ci die devDependencies und der Typecheck schlägt danach mit "This is not the tsc command you are looking for" fehl. Details in docs/INSTALLATION.md.

Es gibt keinen Build-Schritt für das Runtime: Node führt TypeScript nativ aus. Die Oberfläche hat einen eigenen Schritt (node packages/ui/build.ts), weil sie bei jeder Generierung die Markentokens aus dem Tresor liest.

Quick start

# 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>

Die CLI gewährt niemals sensible Capabilities: Eine von ihr erstellte Sitzung wird mit verweigertem Download, Upload, Send, Purchase, Payment und Delete geboren.

Beispiele

# 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 und AUTO

Die Hierarchie, und die Reihenfolge ist die Garantie:

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

ASK — fragen

Lesezugriffe gehen direkt durch. Jede Aktion, die die Seite verändert, stoppt und fragt, mit Konsequenz und Ressource auf Portugiesisch geschrieben, damit die Entscheidung bewusst ist und kein Reflexklick.

Eine browser.task zu genehmigen ist kein Blankoscheck: Jeder Schritt, den der Plan auszuführen beschließt, tritt erneut in das Tor ein.

AUTO — handeln ohne zu fragen

Der Agent führt selbstständig alles aus, was du durch deine Richtlinie bereits autorisiert hast. Was sich nicht ändert:

  • Aktionen mit finanzieller Wirkung, externem Versand oder hoher Irreversibilität fragen weiterhin nach Genehmigung — browser.upload fragt in AUTO, weil es deine Daten nach außen sendet, und das lässt sich nicht zurücknehmen;

  • eine Route ohne deklariertes Risikoprofil fällt auf „immer genehmigen" (fail-closed);

  • wenn der Autonomiezustand nicht nachgewiesen werden kann (Runtime ausgefallen, Wiederverbindung), zeigt die Oberfläche niemals AUTO: Sie fällt auf unbekannt zurück und behandelt es als ASK.

AUTO != BYPASS ist kein Dokumentationsversprechen. Das Autonomietor läuft nach Capability und menschlicher Kontrolle: Wenn es ausführt, hat alles, was die Richtlinie verweigert, bereits 403 zurückgegeben. Es gibt keinen Codezweig, der ein deny in ein allow verwandelt.

Mehr in docs/ask-mode.md und docs/auto-mode.md.

Sicherheit

  • Token-Authentifizierung mit Scopes (OBSERVE, NAVIGATE, INPUT, DOWNLOAD, UPLOAD, SECRET, CONTROL, ADMIN). Jede Route hat einen deklarierten Scope; keine lebt vom Default.

  • Wer handelt, autorisiert nicht. Das Agentprofil erreicht weder Genehmigen, Modusdelegieren noch Fortsetzen. Stoppen schon: pause und emergency-stop dürfen nie schwieriger sein als Handeln.

  • Fail-closed-Richtlinie pro Capability, mit verweigertem A6_DESTRUCTIVE.

  • Anti-SSRF: Zu einem internen Host zu navigieren ist ein expliziter Akt, nie abgeleitet.

  • Anti-Injection-Provenienz im Ausführungspfad: observe und extract geben provenance zurück.

  • Obligatorischer Kontroll-Lease (allow_unleased: false).

  • Geheimnisse erscheinen weder in der Oberfläche, im Audit noch im Replay.

Das Bedrohungsmodell T1–T10, mit deklarierten Resten, findest du in docs/SECURITY.md.

Nichts hier behauptet „100% sicher". Keine Maßnahme stützt das, und keine wird es je stützen.

Audit und Replay

Spur mit 19 Feldern pro Aktion, hash-verkettet, mit Geheimnis-Schwärzung an der Quelle. Beim Beenden wird die Sitzung versiegelt.

Das Replay ist in drei unabhängigen Ebenen schreibgeschützt: Es gibt kein Schreibverb auf der Route (405 + Allow: GET); das Lesen des Verlaufs erweckt die Sitzung nicht wieder; und der Modus wird deklariert vom Runtime, nicht vom Bildschirm abgeleitet.

Es ist auch ehrlich über das eigene Lesen: Es meldet beschädigte Zeilen und fehlende Quellen, statt eine kürzere Zeitleiste zurückzugeben, die sich als vollständig ausgibt. Eine Sitzung, die nie existiert hat, ist 404, kein leeres Replay mit 200.

Siehe docs/audit-and-replay.md.

MCP

16 Tools, ohne Modellkopplung:

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

Im NOMOS-Ökosystem ist der Browser eine Capability, die von der Richtlinie des Besitzers regiert wird, mit signiertem Katalog und Vertrauen durch Fingerabdruck des normalisierten Manifests. Siehe docs/mcp.md und docs/NOMOS-INTEGRATION.md.

Konfiguration

51 Schlüssel, vom Runtime selbst abfragbar:

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

Die Trennung ist bewusst: „Was existiert?" kann jedem Träger beantwortet werden; „Was gilt hier?" nicht. Siehe docs/CONFIGURATION.md.

Troubleshooting

Symptom → Ursache → Überprüfung → Korrektur in docs/TROUBLESHOOTING.md.


Entwicklung

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

Verwende den Executor, nicht node --test tests/ direkt. Der Node-Runner parallelisiert pro CPU; unter Speicherdruck stirbt der Prozess mitten in der Ausführung und hinterlässt eine abgeschnittene Ausgabe ohne Zusammenfassungszeile, die wie Erfolg aussieht. run-suite.sh führt eine Datei nach der anderen aus, und eine tote Datei erscheint als MORTO.

Tests

Gemessen bei 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

Das Projekt weigert sich, das als PASS zu bezeichnen, was nicht beobachtet wurde. Zwei Beispiele:

Die Browserkontrolle ist real. Ein von JavaScript synthetisierter Klick erreicht die Seite mit isTrusted=false; einer, der über CDP ausgelöst wird, mit true. Der Spike testet beide — der zweite beweist die Kontrolle, der erste beweist, dass der Test kein Vakuum ist.

Der Genehmigungszähler ist nicht blind. Unter Produktmutation geht UNEXPECTED_APPROVAL_PROMPTS von 0 auf 3 und auf 5, je nach injiziertem Defekt. Ein Zähler, der unter Mutation bei null bliebe, würde nichts messen.

Bekannte Einschränkungen

  • p99 wird auf keinem Latenzpfad berichtet: 30 Stichproben erfordern 100, um ein p99 zu stützen. Kein beobachtetes Maximum wird p99 genannt.

  • Es gibt keine HTTP-Route zum Ausstellen eines Tokens mit Scope — sie existiert in der internen API.

  • Der Zweig pr.page.isClosed() ist im Normalbetrieb unerreichbar; er ist Rennverteidigung, keine Abdeckung.

  • Die Statusleiste der Oberfläche aktualisiert per 700-ms-Polling. Die Ereignisse kommen in ~1 ms an; die Leiste nicht.

  • Validierung auf macOS/Apple Silicon. Andere Plattformen wurden nicht gemessen.

Die vollständige Liste mit Zahlen findest du in docs/LIMITATIONS.md, und was PROVEN gegenüber MEASURED oder NOT PROVEN ist, steht in PRODUCT_TRUTH_MATRIX.md.

Roadmap

In ROADMAP.md. Was dort steht, sind legitime Schulden, keine Terminversprechen.


Dokumentation

Beginne hier

quickstart.md

Von null zum ersten Browser-Task

live-agent-console.md

Die Konsole, ihre Zustände und Steuerelemente

ask-mode.md · auto-mode.md

Die beiden Modi und was sich zwischen ihnen nicht ändert

demos.md

Reproduzierbare Abläufe

Referenz

INSTALLATION.md · CONFIGURATION.md · TROUBLESHOOTING.md

Installieren, konfigurieren, entsperren

ARCHITECTURE.md · API.md

Schichten und Routen

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

Verben, Ziele und die Task-Engine

security-overview.md · SECURITY.md

Produktsicherheit und Bedrohungsmodell

audit-and-replay.md · AUDIT.md

Spur, Siegel und Replay

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

Integrationen

RECOVERY.md · VISION-PROVIDER.md

Was überlebt was; Vision

LIMITATIONS.md · EVIDENCIA.md · RASTREABILIDADE.md

Grenzen, Evidenz, Rückverfolgbarkeit

RELEASE.md · CHANGELOG.md

Wie man eine Version erstellt; was sich geändert hat

Marke

Die Marke NOMOS ist in v1.0 eingefroren und der offizielle Resolver antwortet rc=0. Die Tokens werden bei jedem Build aus dem Tresor gelesen und nicht in diesem Repository versioniert — das Kopieren von Marken-Tokens in eine Zwischendatei ist durch den Governance-Vertrag verboten. Siehe docs/BRAND.md.

Lizenz

MIT. Siehe LICENSE. Inhaber: Voltolini-SPACE.

Die Lizenz deckt den Code ab. Sie gewährt keine Rechte an den Marken „NOMOS" und „NOMOS Browser" noch an den Tokens der visuellen Identität, die separat verwaltet und hier nicht versioniert werden. Details in NOTICE.md.

Bis 2026-08-25 erklärte dieses Repository „Alle Rechte vorbehalten" mit einem Platzhalter-Inhaber. Beides war eine Entscheidung des Eigentümers und wurde entschieden.

Teil des NOMOS-Ökosystems · voltolini.space

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to control a browser through a set of tools, allowing them to perform web automation tasks like navigation, typing, clicking, and taking screenshots.
  • 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

View all related MCP servers

Related MCP Connectors

  • AI-powered browser automation — navigate, click, fill forms, and extract data from any website.

  • Runtime permission, approval, and audit layer for AI agent tool execution.

  • A paid remote MCP for AI agent browser approval MCP, built to return verdicts, receipts, usage logs,

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Voltolini-SPACE/nomos-browser'

If you have feedback or need assistance with the MCP directory API, please join our Discord server