synsema
FR Français

Langage de programmation · framework pour agents IA · sécurisé par défaut

Les humains lisent la page.
Les agents lisent la source.

Une URL, négociée par contenu. Synsema est un langage de programmation rapide et sécurisé par défaut pour les agents IA, avec le framework d'agents intégré : la même route sert du HTML aux personnes et du Markdown aux modèles. Basculez le panneau pour voir exactement le Markdown qu'un LLM reçoit de cette page.

Apprenez en construisant sur try.synsema.com : des cours avec un vrai bac à sable, rien à installer.

GET synsema.com/fr
200 OK · Content-Type: text/markdown
# Synsema
> Un langage de programmation pour agents IA.

## Ce que c'est
- Rapide. 47 200 req/s, devant Go et Node.
- Sécurisé par défaut. Sans `require`, pas d'accès.
- Natif pour les agents. Une route, HTML ou Markdown.

## Installer
curl -fsSL synsema.com/install.sh | sh
Index pour agents : /llms.txt

Synsema

Un langage de programmation pour agents IA.

Débit
47 200req/s
vs Go (net/http)
+10 %
Sécurisé par défaut
Natif pour les agents

↑ la même ressource, deux représentations · curl -H "Accept: text/markdown" synsema.com/fr

Rapide · req/s à c=50

47 200req/s

Devant Go (42 800) et Node (38 700)1. Asynchrone nativement, vrai multicœur, un binaire statique, zéro runtime.

Sécurisé par défaut

-- sans require, pas d'accès
require net("api.shop.com")
fetch("api.shop.com")  ✓ autorisé
fetch("evil.com")      ⊘ refusé

Sans require, pas d'accès : c'est l'interpréteur qui refuse, pas une revue de code. Authentification, validation et intention sont déclaratives.

Natif pour les agents

Cette page est la démo. Chaque route sert du HTML aux personnes et du Markdown/JSON aux agents, avec /llms.txt, /sitemap.xml et /openapi.json dérivés de la table des routes.

La documentation expose un serveur MCP : les agents cherchent, lisent, exécutent et testent du code via un seul endpoint.

1 · mesuré sur un VPS Linux, 6 charges, c=50, médiane des exécutions (la première écartée). Harnais reproductible : synsema-arena.

Ce que vous construisez avec

Un framework pour agents IA et un langage de programmation, en un seul binaire.

Tout ce dont une application agentique a besoin est dans le langage, pas dans un framework collé par-dessus : appels au LLM, outils, mémoire, validation humaine, orchestration multi-agents, un serveur de production et le modèle de sécurité. Le même langage construit donc aussi l'API, le site, le cron et la CLI autour de l'agent.

Agents

Agents IA et apps LLM

reason, decide, analyze et generate sont des primitives : réponses validées, nouvelles tentatives, n'importe quel fournisseur, la clé scellée comme secret.

docs ↗

Orchestration

Systèmes multi-agents

Des agents sur de vrais threads, un tableau noir partagé, des signaux, un bus d'événements et une mémoire durable, sans broker de messages à faire tourner.

docs ↗

Humain dans la boucle

Validations et garde-fous

approve, confirm et ask attendent une vraie personne, dans le terminal ou en file derrière des liens à usage unique ; sans personne, c'est refusé.

docs ↗

Outils

Serveurs MCP

Exposez ce qu'un programme sait faire à Claude Code, Cursor ou Lampson. Le serveur MCP de la documentation elle-même est écrit ainsi.

docs ↗

Backends

API REST et CRUD

Routes, auth et validation déclaratives, pagination, SQLite, Postgres, MySQL, Mongo ou Redis, dans un seul fichier, avec le serveur de production intégré.

docs ↗

Temps réel

Apps agentiques

WebSockets entrants, processus enfants suivis ligne par ligne, un select sur l'ensemble, annulation et arrêt ordonné.

docs ↗

Web

Sites, SSR

Templates, layouts et composants ; chaque page négociée pour les agents ; /llms.txt, sitemap et OpenAPI offerts. Ce site en est un.

docs ↗

Déploiement

HTTPS automatique

--tls-auto vous@site.com : certificats et renouvellements Let's Encrypt, HTTP/2, www vers l'apex, un reverse proxy quand il le faut.

docs ↗

Apps

Une app : web, mobile et desktop

synsema init --desktop : la même app rendue côté serveur s'installe sur Android et iOS en PWA avec push natif, et se livre en app de bureau — un binaire, une fenêtre d'app du navigateur, votre icône, sans console.

docs ↗

Automatisation

Cron, webhooks, jobs

Tâches planifiées et flux en direct par WebSocket ; travail de longue durée sur une vraie boucle d'événements, observabilité incluse.

docs ↗

Données

Données et graphiques

CSV, SQL, statistiques, tableaux numériques et graphiques SVG natifs que les agents lisent comme des données et les humains comme des images ; export PNG et PDF.

docs ↗

Livraison

Un binaire, ou WASM

synsema build scelle programme et ressources dans un exécutable ; l'interpréteur tourne aussi dans les navigateurs, en edge et dans les TEE.

docs ↗

Un fichier

Tout le backend, avec ses permissions en tête.

Un programme Synsema commence par déclarer ce qu'il peut toucher. Tout ce qui suit s'exécute à l'intérieur : les routes, la base de données, les secrets, le modèle. Les deux fichiers ci-dessous se compilent et s'exécutent tels quels.

api.synConstruire une 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.synPrimitives 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 est la surface de permissions. Un port, un fichier de base de données, un secret. Un fetch vers tout autre hôte est refusé par l'interpréteur.
  • Auth et validation sont des déclarations. auth with nomme la tâche qui dit qui est un jeton ; expect body rejette un payload invalide avec un 400 qui nomme le champ.
  • Une route, tous les lecteurs. content() répond en HTML aux navigateurs et en Markdown ou JSON aux agents ; paged() pagine les gros résultats pour vous.
  • Le modèle est une primitive. decide renvoie une des options ou réessaie ; analyze et generate sont typés, pas des chaînes de prompt collées à la main.
  • Un humain aussi est une primitive. approve … within 1h attend une vraie personne ; sans personne, il refuse.
  • Les secrets ne se matérialisent jamais. La clé voyage scellée jusqu'au socket ; le modèle voit un marqueur.

Construit avec Synsema

Trois choses à utiliser dès aujourd'hui.

Agent de programmation

Lampson

Un agent de programmation IA open source pour votre terminal et votre navigateur, écrit entièrement en Synsema : outils confinés à votre projet, permissions sous votre contrôle, sous-agents, tâches planifiées, plugins.

lampson.org ↗

Capacités pour agents

Lamps

Des unités portables de capacité : un manifeste déclare ce que le code peut toucher, un runtime l'applique et audite chaque appel. lamp add, puis lamp mcp pour Claude Code, Cursor ou tout agent MCP.

lamps.sh ↗

Apprendre

Try Synsema

Apprenez en construisant des logiciels pour de vraies entreprises, dans le navigateur : des cours, des missions vérifiées dans un vrai bac à sable, de l'XP et des niveaux. Rien à installer.

try.synsema.com ↗

Sur le blog

Benchmarks, choix de conception, guides.

Tous les articles → · RSS