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

Published 2026-09-02 · https://synsema.org/es/blog/lamps-capabilities-with-a-ceiling-for-ai-agents


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.

```json
{
  "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

```sh
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](https://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`.

