BROWSER
O navegador do seu agente, com você na sala.
Dar um navegador a um agente de IA é dar a ele o poder de comprar, enviar e apagar no seu nome. O NOMOS Browser separa o que você já autorizou do que precisa do seu consentimento agora, e mostra a diferença numa tela onde você pode interromper a qualquer momento.
A Gi vive ao lado da sua navegação. Clique no ícone NOMOS e o painel lateral abre já conectado, sem colar token e sem terminal. É só conversar: pergunte e ela responde ali mesmo, peça uma tarefa e ela navega, executa e volta com a resposta. Você vê o agente trabalhar com o alvo destacado na própria página, aprova ao lado do que está acontecendo, alterna ASK/AUTO, pausa, assume o volante e audita. Quando quiser assumir de vez, o modo controle total deixa a Gi agir sem pedir permissão, com aviso claro na tela.
Código aberto sob MIT, em github.com/Voltolini-SPACE/nomos-browser.
O problema
Confiança cega ou paralisia. As duas saídas são ruins.
Confiança cega significa descobrir depois. Perguntar tudo significa treinar o dono a clicar "sim" sem ler, e uma aprovação que virou reflexo não protege ninguém.
Política
O que o agente pode, decidido por você. Fail closed: o que não foi permitido não roda.
Autonomia
Dentro do permitido, o que passa direto e o que para para perguntar.
Trilha
Toda ação gravada, encadeada por hash e selada no fim da sessão.
Dois modos
Perguntar, ou agir sem perguntar
ASK
O agente lê a página à vontade. Antes de cada ação que muda alguma coisa, ele para e pergunta, dizendo o que vai fazer, onde, e qual a consequência.
Ler nunca pergunta. Perguntar para ler é ruído, e ruído ensina você a aprovar sem prestar atenção.
AUTO
O agente executa sozinho o que sua política já permite. "Agir sem perguntar" quer dizer isso, e só isso.
Continuam pedindo aprovação: o que envia dado para fora, o que mexe em dinheiro, o que não tem volta.
AUTO não é bypass
Essa é a garantia que sustenta o resto, e ela não é uma promessa de documentação. É a ordem dos portões no código: quando a autonomia decide, tudo que sua política nega já foi recusado. Não existe caminho que transforme um "não" em "sim".
- Ações irreversíveis pedem aprovação nos dois modos, sempre.
- Rota sem perfil de risco declarado cai em "sempre aprovar".
- Aprovar um objetivo não é cheque em branco: em ASK, cada passo do plano volta a pedir permissão.
- Se a conexão cair, a tela nunca volta dizendo "automático" sem poder provar. Ela mostra estado desconhecido e trata como perguntar.
Rebaixando essa regra de propósito no código, o teste cai. Um teste que não sabe falhar não sabe nada.
Live Agent Console
Você vê o agente trabalhar
A página espelhada, o cursor do agente com o que ele está fazendo agora, o estado da sessão e o histórico de cada ação com nível e duração.
scripts/capturar-console.mjs,
que sobe o runtime, cria a sessão e fotografa a tela.
# faixa de estado, lida do runtime a cada 700 ms Agente gi Sessão #4A2F Status AGUARDANDO APROVAÇÃO Autonomia AGIR AUTOMATICAMENTE Ação atual browser.upload · A2 # mesmo em automático, ainda pergunto: browser.task, browser.upload # o pedido que aparece na tela Ação browser.type Onde página atual Consequência digita num campo da página Parâmetros text: [oculto: 24 caractere(s), C…Z]
- Quatro controles que funcionam no servidor, não na tela: pausar, cancelar, assumir o controle, parar.
- Se a tela cair no meio de uma parada de emergência, o servidor termina a interrupção sozinho.
- Pausado, o agente não age. Mas você continua vendo a página, porque é olhando que se decide se vale retomar.
- Assumir o volante congela o agente. Devolvê-lo obriga o agente a reobservar antes de agir: a página pode ter mudado enquanto você estava lá.
Segurança
Quem age não autoriza
- Escopos declarados em toda rota. O perfil de agente não alcança aprovar, delegar autonomia nem retomar depois de uma pausa.
- Parar, sim. Interromper nunca pode ser mais difícil do que agir, senão o freio fica atrás de uma porta que o acelerador não tem.
- Aprovação de uso único, amarrada à ação, à sessão e aos argumentos exatos. Aprovar um clique em "Cancelar" não autoriza um clique em "Confirmar compra".
- Segredos não aparecem na tela de aprovação, na trilha nem no replay.
- Conteúdo de página é dado, não instrução. Uma página que manda o agente ignorar suas ordens é conteúdo classificado.
- Replay somente leitura, garantido pela tabela de rotas e não por um botão escondido.
O produto não diz "100% seguro". Nenhuma medida sustenta isso. O modelo de ameaça é publicado com os resíduos declarados, incluindo que o selo do replay é hash sem chave.
Prova, não promessa
O que foi medido
Nenhum p99 aparece aqui. Trinta amostras não sustentam um p99, então o instrumento devolve nulo e explica por quê. Publicar o número redondo seria mais bonito e menos verdadeiro.
Seis defeitos que os próprios testes acharam
O mais assustador: a amarra que liga uma aprovação aos argumentos usava
JSON.stringify(args, chaves.sort()). O segundo parâmetro do
JSON.stringify não ordena, ele filtra, e descarta tudo que
está aninhado. Clicar em "Cancelar" e clicar em "Confirmar compra"
produziam a mesma assinatura.
Encontrado por um teste escrito para desconfiar da própria implementação, e corrigido antes de qualquer uso real.
Integrações
Um contrato, várias portas
MCP
16 ferramentas, sem acoplamento a modelo. No NOMOS, entra como capacidade governada pela política do dono.
REST e WebSocket
API v1 e eventos ao vivo. A interface é servida pelo próprio runtime, na mesma origem.
CLI e SDK
nomos-web com oito comandos. Sessão criada por ele nasce sem capacidade sensível.
Integrado também à Gi, o assistente de voz do ecossistema, com cancelamento por interrupção de fala.
Começar
Instalar como usuário
Único requisito: Node 22.18 ou mais novo. O instalador cuida do resto:
Chromium, detecção do Ollama, CLI nomos-browser e início no
login. Depois, clique no ícone NOMOS: o painel abre ao lado da página
já conectado. É só conversar com a Gi. Sem colar token, sem terminal.
# baixe o release em github.com/Voltolini-SPACE/nomos-browser/releases tar -xzf nomos-browser-v*.tar.gz && cd nomos-browser-v*/ bash packaging/release/install.sh # dia a dia nomos-browser start · stop · status · logs
Ou clonar, instalar, rodar (desenvolvimento)
Não há passo de build: o runtime executa TypeScript nativamente.
# o produto git clone https://github.com/Voltolini-SPACE/nomos-browser cd nomos-browser npm ci npx playwright install chromium # a suíte inteira, do jeito que a CI roda npm test # o runtime. ele imprime a porta (padrão 127.0.0.1:7777) # e o caminho do token de controle npm run daemon
O console fica na raiz do runtime e exige o token:
http://127.0.0.1:7777/?token=<TOKEN>. O token vive em
~/.nomos-browser/control-token com permissão 0600;
se estiver legível por outros, o runtime recusa usá-lo.
- README, com quickstart, arquitetura e limitações declaradas.
- Release mais recente e o changelog de cada versão.
- Política de segurança, para relatar uma falha em particular.
- Issues, para relatar um problema em público.
Estado
Estável, e com os limites ditos assim mesmo
- Validado em macOS com Apple Silicon. Outras plataformas ainda não foram medidas, e por isso não são anunciadas. Marcar uma versão como estável não mede nenhuma delas.
- Não há rota HTTP para emitir token com escopo. Existe na API interna.
- Nenhum percentil p99 é reportado, em nenhum caminho.
- Código aberto sob MIT. A licença cobre o código, não as marcas nem os tokens de identidade visual.
Um produto que esconde o que não faz gasta a confiança de quem descobre sozinho depois.