synsema
ES Español

Lenguaje de programación · framework para agentes de IA · seguro por defecto

Las personas leen la página.
Los agentes leen la fuente.

Una URL, negociada por contenido. Synsema es un lenguaje de programación rápido y seguro por defecto para agentes de IA, con el framework de agentes incorporado: la misma ruta sirve HTML a las personas y Markdown a los modelos. Cambiá el panel para ver el Markdown exacto que un LLM recibe de esta página.

Aprendé construyendo en try.synsema.com: cursos con un sandbox real, sin instalar nada.

GET synsema.com/es
200 OK · Content-Type: text/markdown
# Synsema
> Un lenguaje de programación para agentes de IA.

## Qué es
- Rápido. 47.200 req/s, por delante de Go y Node.
- Seguro por defecto. Sin `require`, sin acceso.
- Nativo para agentes. Una ruta, HTML o Markdown.

## Instalar
curl -fsSL synsema.com/install.sh | sh
Índice para agentes: /llms.txt

Synsema

Un lenguaje de programación para agentes de IA.

Rendimiento
47.200req/s
vs Go (net/http)
+10%
Seguro por defecto
Nativo para agentes

↑ el mismo recurso, dos representaciones · curl -H "Accept: text/markdown" synsema.com/es

Rápido · req/s con c=50

47.200req/s

Por delante de Go (42.800) y Node (38.700)1. Asíncrono nativo, multinúcleo real, un binario estático, sin runtime.

Seguro por defecto

-- sin require, sin acceso
require net("api.shop.com")
fetch("api.shop.com")  ✓ permitido
fetch("evil.com")      ⊘ rechazado

Sin require no hay acceso: lo rechaza el intérprete, no una revisión de código. Autenticación, validación e intención son declarativas.

Nativo para agentes

Esta página es la demo. Cada ruta sirve HTML a las personas y Markdown/JSON a los agentes, con /llms.txt, /sitemap.xml y /openapi.json derivados de la tabla de rutas.

La documentación expone un servidor MCP: los agentes buscan, leen, ejecutan y prueban código por un solo endpoint.

1 · medido en un VPS Linux, 6 cargas, c=50, mediana de corridas (la primera descartada). Harness reproducible: synsema-arena.

Qué se construye con él

Un framework para agentes de IA y un lenguaje de programación, en un solo binario.

Todo lo que necesita una app agéntica está en el lenguaje, no en un framework pegado encima: llamadas al LLM, uso de herramientas, memoria, aprobación humana, orquestación multiagente, un servidor de producción y el modelo de seguridad. Por eso el mismo lenguaje también construye la API, el sitio, la app de teléfono y escritorio, el cron y la CLI alrededor del agente.

Agentes

Agentes de IA y apps con LLM

reason, decide, analyze y generate son primitivas: respuestas validadas, reintentos, cualquier proveedor, la clave sellada como secreto.

docs ↗

Orquestación

Sistemas multiagente

Agentes en hilos reales, una pizarra compartida, señales, un bus de eventos y memoria durable, sin broker de mensajes que operar.

docs ↗

Humano en el circuito

Aprobaciones y compuertas

approve, confirm y ask esperan a una persona real, en la terminal o encolados tras enlaces de un solo uso; si no hay nadie, se deniega.

docs ↗

Herramientas

Servidores MCP

Exponé lo que un programa puede hacer a Claude Code, Cursor o Lampson. El servidor MCP de la documentación está escrito así.

docs ↗

Backends

APIs REST y CRUD

Rutas, auth y validación declarativas, paginación, SQLite, Postgres, MySQL, Mongo o Redis, en un archivo y con el servidor de producción incluido.

docs ↗

Tiempo real

Apps agénticas

WebSockets entrantes, procesos hijos que mirás línea a línea, un select sobre todo, cancelación y apagado ordenado.

docs ↗

Web

Sitios, SSR

Plantillas, layouts y componentes; cada página negociada para agentes; /llms.txt, sitemap y OpenAPI gratis. Este sitio es uno.

docs ↗

Deploy

HTTPS automático

--tls-auto vos@sitio.com: certificados y renovaciones de Let's Encrypt, HTTP/2, www al apex, un reverse proxy si lo necesitás.

docs ↗

Apps

Una app: web, teléfono y escritorio

synsema init --desktop: la misma app server-rendered se instala en Android e iOS como PWA con push nativo, y se distribuye como app de escritorio — un binario, una ventana de app del navegador, tu ícono, sin consola.

docs ↗

Automatización

Cron, webhooks, jobs

Tareas programadas y feeds en vivo por WebSocket; trabajo de larga duración sobre un event loop real, con observabilidad incluida.

docs ↗

Datos

Datos y gráficos

CSV, SQL, estadística, arrays numéricos y gráficos SVG nativos que los agentes leen como datos y las personas como imágenes; exportación a PNG y PDF.

docs ↗

Distribuir

Un binario, o WASM

synsema build sella programa y assets en un ejecutable; el intérprete también corre en navegadores, edge y TEEs.

docs ↗

Un archivo

Todo el backend, con sus permisos arriba.

Un programa Synsema empieza declarando qué puede tocar. Todo lo que está debajo de esa línea corre adentro: las rutas, la base de datos, los secretos, el modelo. Los dos archivos de abajo parsean y corren tal cual.

api.synConstruir una API REST ↗
-- A bookshop API. The `require` lines are the whole permission
-- surface: a port, one database file, one secret. Nothing else.
intent: "public read API; writes need the staff token"

require serve(8080)
require db("./shop.db")
require secret("API_TOKEN")

task check_token(token)
    let want be hmac_sha256("staff", token)
    when verify_hmac("staff", want, secret("API_TOKEN"))
        give {"role": "staff"}
    give nothing

serve on 8080
    auth with check_token
    rate_limit 120 per minute

    route "GET /books"
        give paged("SELECT id, title, price FROM books")

    route "POST /books" requires auth
        expect body {title: text, price: number}
        let b be json of request
        sql_exec("INSERT INTO books (title, price) VALUES (?, ?)",
                 [b.title, b.price])
        give created(b)

    route "GET /about"
        let doc be page([heading(1, "Bookshop"),
                         prose("HTML or Markdown, one route.")],
                        {"title": "Bookshop"})
        give content(doc)
agent.synPrimitivas de LLM ↗
-- An agent that triages support tickets. The model decides;
-- a human approves refunds; the API key is a sealed secret.
intent: "triage open tickets; refunds wait for a human"

require llm
require net("api.example.com")
require secret("SUPPORT_TOKEN")

let api be "https://api.example.com"
let auth be {"Authorization": bearer(secret("SUPPORT_TOKEN"))}
let r be http_get(api + "/tickets?open=1", auth)
let tickets be json_decode(body of r)

each t in tickets
    let msg be t["text"]
    let kind be decide between ["bug", "billing", "other"] given msg
    when kind == "billing"
        let amount be analyze msg for "the amount to refund"
        let who be t["customer"]
        approve "Refund " + text(amount) + " to " + who + "?" within 1h
    otherwise
        let reply be generate "a short, kind answer" given msg
        let url be api + "/tickets/" + t["id"] + "/reply"
        http_post(url, {"text": reply}, auth)
  • require es la superficie de permisos. Un puerto, un archivo de base de datos, un secreto. Un fetch a cualquier otro host lo rechaza el intérprete.
  • Auth y validación son declaraciones. auth with nombra la task que dice quién es un token; expect body rechaza un payload malo con un 400 que nombra el campo.
  • Una ruta, todos los lectores. content() responde HTML a los navegadores y Markdown o JSON a los agentes; paged() pagina los resultados grandes por vos.
  • El modelo es una primitiva. decide devuelve una de las opciones o reintenta; analyze y generate tienen tipo, no son strings de prompt pegados a mano.
  • Una persona también es una primitiva. approve … within 1h espera a alguien real; si no hay nadie, deniega.
  • Los secretos nunca se materializan. La clave viaja sellada hasta el socket; el modelo ve un marcador.

Hecho con Synsema

Tres cosas que podés usar hoy.

Agente de programación

Lampson

Un agente de programación con IA, open source, para tu terminal y navegador, escrito enteramente en Synsema: herramientas confinadas a tu proyecto, permisos que controlás, subagentes, tareas programadas, plugins.

lampson.org ↗

Capacidades para agentes

Lamps

Unidades portables de capacidad: un manifiesto que declara qué puede tocar el código, un runtime que lo hace cumplir y audita cada llamada. lamp add y después lamp mcp para Claude Code, Cursor o cualquier agente MCP.

lamps.sh ↗

Aprender

Try Synsema

Aprendé construyendo software para negocios reales, en el navegador: cursos, misiones validadas en un sandbox real, XP y niveles. Sin instalar nada.

try.synsema.com ↗

Del blog

Benchmarks, decisiones de diseño, guías.

Todas las entradas → · RSS