Synsema é uma linguagem em que permissão é sintaxe. A plataforma roda seu agente sob exatamente o que ele declarou, sela seus segredos e guarda a auditoria que seu time de segurança vai pedir.
Implante seu primeiro agente Ver a API
Grátis para um serviço. Traga sua própria chave de LLM. A linguagem é open source.
O que roda aqui
Sites, APIs, páginas renderizadas no servidor. Um processo serve HTML para pessoas e Markdown para agentes.
Exponha ferramentas ao Claude, ao Cursor ou a qualquer cliente. Uma rota, segredos selados, entrada sob um teto.
Sem URL. Vigiam feeds, filas, chains, caixas de entrada. Sempre ligados, sob o mesmo teto.
Blackboard, sinais, spawn. Muitos agentes em um processo, um manifesto para todos.
EVM, Solana, Bitcoin, Algorand. Assinar e gastar são capacidades, medidas e auditadas.
Uma PWA com push nativo, ou um binário de desktop. O mesmo programa, a mesma cerca.
Antes de rodar
Cada deploy cruza o que o código declara com require e o que seu plano permite. O resultado é uma tabela, não uma política: esta linha concedida, esta linha negada, e por quê. O programa nunca pode subir acima disso, porque o runtime faz valer o teto em cada chamada.
| Declarado no programa | Escopo | No plano Free |
|---|---|---|
| require net("rpc.arc.network") | rpc.arc.network | concedida |
| require llm | — | concedida |
| require secret("ARC_HOT_KEY") | ARC_HOT_KEY | concedida |
| require sign("ARC_HOT_KEY") | ARC_HOT_KEY | negada · acima do plano |
| require spend("USDC") | USDC | negada · acima do plano |
| require memory("invoice-agent") | invoice-agent | concedida |
Enquanto roda
Cada verificação de capacidade que o runtime faz, concedida ou negada, fica registrada com sua origem e seu motivo. Quando um agente tenta ler o endereço de metadados da nuvem que nunca declarou, a linha está lá, em vermelho, com a recusa. É a página que um CISO abre primeiro, e a que fecha o negócio.
| 14:02:11 | sign | ARC_HOT_KEY | concedida | invoice #2291 · 412 USDC |
| 14:02:10 | spend | USDC | concedida | 412 / 500 |
| 13:58:40 | net | 169.254.169.254 | negada | nunca declarado |
| 13:58:39 | llm | — | concedida | reason · 1,930 tokens |
| 13:58:38 | secret | ARC_HOT_KEY | concedida | selado · nunca impresso |
O que ele nunca vê
Um secret() é opaco para o programa que o carrega. Ele autentica, assina e paga, mas não pode ser impresso, logado, serializado nem entregue a um modelo. Prompt injection não tem o que roubar, e sua revisão de segurança tem uma pergunta a menos.
require secret("ARC_HOT_KEY") require sign("ARC_HOT_KEY") let key be secret("ARC_HOT_KEY") print(key) -- o que o modelo adoraria ver let sig be secp256k1_sign(digest, key) -- o que ele tem permissão de fazer
Feito para ser delegado
Toda a superfície de permissões é um bloco no topo do arquivo. Revisado em pull request, comparado entre versões, legível por um auditor em vinte linhas.
Um runner é uma máquina com Docker e um programa. Ele só chama o plano de controle, então colocá-lo no seu tenant não nos dá acesso a nada seu.
Serviços enterprise ficam atrás do seu SSO desde o primeiro deploy, com papéis por projeto e uma auditoria que vai para o seu SIEM. O tier confidencial, em um TEE, é o próximo.
Receitas
Do blog
O que segura um agente de IA numa empresa não é o modelo, é segurança. Um manifesto de permissões que o runtime faz valer, segredos que o programa não consegue ler e um registro de cada verificação resolvem a conversa.
Um comando, uma URL e um registro de tudo o que o programa teve permissão de tocar. Comece grátis, traga sua própria chave.