Lampson como motor
Agentes como archivos
Además de los agentes que trae Lampson (build, plan, review, explore), puedes definir los tuyos con un archivo. Un agente es datos, no código: su prompt, las herramientas que puede usar, sus permisos y su modelo.
{
"id": "tienda",
"description": "Atiende a los clientes de la panadería por chat",
"base": "none",
"system": "Eres el asistente de Panadería Sol. Lee el catálogo antes de responder sobre precios o stock. Nunca inventes productos ni descuentos.",
"tools": [{"name": "read", "paths": [".lampson/tienda/*"]}],
"permission": "strict",
"steps": 6,
"budget_tokens": 40000,
"model": {"provider": "", "model": ""}
}
Guárdalo como .lampson/agents/tienda.agent.json en tu proyecto: el nombre del archivo tiene que ser <id>.agent.json. Desde ese momento lo ves en /agent, en el selector de la web, en lampson run --agent tienda, en la API, en los canales y en el SDK.
Dónde viven§
- Del proyecto:
<proyecto>/.lampson/agents/<id>.agent.json. Súbelo a git y tu equipo lo tiene. - Globales:
~/lampson/agents/<id>.agent.json— en la carpeta de Lampson, disponibles en todos tus proyectos. Unrevisorcon tus reglas, untraductor: los escribes una vez. - Si un proyecto tiene un agente con el mismo
idque uno global (o que uno integrado), gana el del proyecto.
Un archivo roto no tumba a los demás: se ignora y el motivo queda a la vista.
Los campos§
| campo | por defecto | |
|---|---|---|
id | minúsculas, números y - (máx. 40) | obligatorio |
description | para qué sirve; la ven /agent, la API y las IAs que lo usan por MCP | "" |
base | "none": el prompt es solo system. "lampson": antepone el prompt del agente de programación (herramientas, reglas del proyecto, AGENTS.md) | "none" |
system | el prompt del agente (obligatorio con base: "none"). Se le suman las instrucciones de los plugins cuyas herramientas tiene | |
tools | las herramientas que puede usar — ver abajo | [] |
permission | ask, strict o yolo — ver Permisos | el de la puerta |
steps | tope de pasos por turno | el de Lampson |
budget_tokens | tope de tokens por turno | el de Lampson |
model | {"provider", "model"} para que este agente use su propio modelo (uno barato para atención, uno potente para código) | el configurado |
buffer | la espera de silencio del buzón: {"quiet_s": 3, "max_s": 15} o false | la de la puerta |
El model propio se respeta en todas partes: la API, los canales, el SDK y también la terminal — lampson --agent tienda arranca con el modelo de tienda, y /agent cambia de modelo junto con el agente (/model lo sigue cambiando para la sesión).
Herramientas y permisos§
tools es una lista exacta: el modelo no ve nada fuera de ella.
"tools": [
"read",
"plugin_pedidos_*",
{"name": "read", "paths": [".lampson/tienda/*", "README.md"]},
{"name": "mcp_proveedor_ask", "approve": "auto"},
{"name": "bash", "approve": "ask"}
]
- Por nombre: las herramientas integradas (
read,write,edit,ls,find,grep,bash,fetch…), las de plugins (plugin_<plugin>_<tool>) y las de MCP (mcp_<server>_<tool>). Unal final toma un prefijo:plugin_pedidos_. paths— rutas limitadas (opcional). Solo pararead,write,edit,ls,findygrep. Con"read"a secas el agente ve todo el proyecto (lo de siempre, ideal para código o uso personal); conpaths, solo esas rutas:"carpeta/"es la carpeta y todo lo de adentro,"archivo.json"un archivo exacto,""todo. Lampson compara la ruta real que usaría la herramienta, no el texto del modelo:../, barras invertidas y rutas absolutas no se cuelan.
Un agente con rutas limitadas no puede tener además bash, process, delegate, lsp ni computer_use, que leerían cualquier archivo por otro camino: Lampson rechaza el archivo y te dice por qué.
approve— permiso por herramienta (opcional)."auto": esa herramienta, y solo esa, corre sin pedir aprobación aunque el agente seastrict(lo prohibido en todos los modos, comorm -rf /, sigue prohibido)."ask": pide aprobación siempre, aunque el agente seayolo. Así no tienes que darleyoloa un agente entero para que use una sola herramienta.
Sin nadie delante (la API, un canal, lampson run), un agente que no dice permission corre en strict: lo que pediría aprobación se deniega, el modelo lo ve y lo explica. Por la API, un agente en ask sí puede esperar una aprobación: llega al panel Aprobaciones de la web y, si configuraste la URL pública y el webhook, a tu celular. → Tareas programadas
Un agente de cara al público§
Para un bot que habla con desconocidos, lo seguro es darle lo justo:
base: "none"y unsystemque diga qué hace y qué no.- Solo las herramientas que necesita — mejor un plugin con una acción concreta (
catalogo_buscar) queread; y si usaread, conpaths. permission: "strict".
Ejemplo completo, con una conversación real: Receta: tomar pedidos por chat.
Aunque alguien lo convenza de «leer el .env», el agente no puede: Lampson rechaza la llamada antes de ejecutarla. Qué garantiza Lampson y qué no, con un ejemplo real de prompt injection, está en Seguridad; y un agente de soporte con herramientas propias, en Receta: un agente de soporte.