synsema
ES Español

Lamps — dale herramientas a tu agente de IA con un techo que no puede levantar

Un lamp es una unidad portátil de capacidad. Su manifiesto declara qué puede tocar el código, el runtime de Synsema lo hace cumplir y registra cada comprobación. Instalás uno con lamp add y se lo exponés a cualquier agente con lamp mcp.

Cuando un agente consigue una shell, su permiso es una coincidencia de texto: esta línea de comando parece segura. El texto no acota efectos — el mismo binario lee y destruye, la credencial viaja con la llamada, y cada comando nuevo es una negociación nueva. Los lamps mueven el permiso a donde corresponde: a los efectos.

El contrato§

Un lamp es una carpeta con un manifiesto y un programa. El manifiesto declara el techo: cada familia de efecto que el código podrá tocar alguna vez, acotada por patrón.

{
  "name": "git",
  "profile": "native",
  "caps": "stdout,env=LAMP_*,exec=git",
  "tools": [{ "name": "log", "description": "One-line decorated log.", "parameters": { "type": "object" } }]
}

Tres partes, y ninguna tiene que confiar en las otras: el autor declara, el operador otorga (un techo de proyecto y un techo de sesión), el runtime hace cumplir la intersección y guarda el registro. Lo que corre siempre es efectivo ⊆ declarado ∩ manifiesto ∩ proyecto ∩ sesión; un lamp puede angostar lo que le dieron y nunca ensancharlo. Un exec sin binario nombrado se rechaza al cargar, sin excepciones.

Cuatro verbos§

lamp add git                        # pull it (hashed file by file) and lint the promise
lamp inspect git                    # what it asks, what it promises — BREAKS ITS PROMISE if they differ
lamp git log '{"n": 5}'             # run it, under the ceiling, as a person
lamp enable git && lamp mcp         # the same tool for any MCP agent: Claude Code, Cursor, Lampson…

Cada llamada corre en un proceso hijo del mismo binario bajo ese techo; un rechazo vuelve como dato y queda en ~/.lamps/audit/log.jsonl. Eso es el sistema funcionando — nunca reintentes con un techo más ancho.

Por qué necesita Synsema§

El techo no es un archivo de política que se le pide a la herramienta que respete. Es el --cap-set del intérprete de Synsema que ejecuta el lamp, así que un require por encima de él falla antes de que salga un solo byte. Los lamps oficiales — git, shell con una política escrita por una persona, sql de solo lectura, http con allowlist, npm-deps, skills — son unas pocas decenas de líneas cada uno que podés leer antes de instalar nada.

Poné uno a andar: lamps.sh tiene el instalador, el hub y el paper del protocolo. Publicar el tuyo es subir un repo público con lamp.json y lamp.syn.