Synsema es un lenguaje donde el permiso es sintaxis. La plataforma corre tu agente bajo exactamente lo que declaró, sella sus secretos y guarda la auditoría que tu equipo de seguridad va a pedir.
Despliega tu primer agente Ver la API
Gratis para un servicio. Trae tu propia clave de LLM. El lenguaje es open source.
Qué corre aquí
Sitios, APIs, páginas renderizadas en el servidor. Un proceso sirve HTML a las personas y Markdown a los agentes.
Expón herramientas a Claude, Cursor o cualquier cliente. Una ruta, secretos sellados, entrada bajo un techo.
Sin URL. Vigilan feeds, colas, cadenas, bandejas. Siempre encendidos, bajo el mismo techo.
Blackboard, señales, spawn. Muchos agentes en un proceso, un manifiesto para todos.
EVM, Solana, Bitcoin, Algorand. Firmar y gastar son capacidades, medidas y auditadas.
Una PWA con push nativo, o un binario de escritorio. El mismo programa, la misma valla.
Antes de correr
Cada deploy cruza lo que el código declara con require y lo que tu plan permite. El resultado es una tabla, no una política: esta línea concedida, esta línea denegada, y por qué. El programa nunca puede subir por encima, porque el runtime hace cumplir el techo en cada llamada.
| Declarado en el programa | Alcance | En el plan 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 | denegada · por encima del plan |
| require spend("USDC") | USDC | denegada · por encima del plan |
| require memory("invoice-agent") | invoice-agent | concedida |
Mientras corre
Cada comprobación de capacidad que hace el runtime, concedida o denegada, queda escrita con su origen y su motivo. Cuando un agente intenta leer la dirección de metadatos de la nube que nunca declaró, la línea está ahí, en rojo, con el rechazo. Esa es la página que un CISO abre primero, y la que cierra la venta.
| 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 | denegada | nunca declarado |
| 13:58:39 | llm | — | concedida | reason · 1,930 tokens |
| 13:58:38 | secret | ARC_HOT_KEY | concedida | sellado · nunca impreso |
Lo que nunca ve
Un secret() es opaco para el programa que lo tiene. Autentica, firma y paga, pero no se puede imprimir, registrar, serializar ni entregar a un modelo. La inyección de prompt no tiene nada que robar, y tu revisión de seguridad tiene una pregunta menos.
require secret("ARC_HOT_KEY") require sign("ARC_HOT_KEY") let key be secret("ARC_HOT_KEY") print(key) -- lo que al modelo le encantaría ver let sig be secp256k1_sign(digest, key) -- lo que sí tiene permitido hacer
Hecho para que te lo deleguen
Toda la superficie de permisos es un bloque al principio del archivo. Se revisa en un pull request, se compara entre versiones, y un auditor lo lee en veinte líneas.
Un runner es una máquina con Docker y un programa. Solo llama hacia el plano de control, así que ponerlo en tu tenant no nos da acceso a nada tuyo.
Los servicios enterprise quedan detrás de tu SSO desde el primer deploy, con roles por proyecto y una auditoría que va a tu SIEM. El tier confidencial, en un TEE, es lo siguiente.
Recetas
Del blog
Lo que frena a un agente de IA en una empresa no es el modelo, es seguridad. Un manifiesto de permisos que el runtime hace cumplir, secretos que el programa no puede leer y un registro de cada comprobación resuelven la conversación.
Un comando, una URL y un registro de todo lo que el programa tuvo permitido tocar. Empieza gratis, trae tu propia clave.