Synsema docsENES

Índice de capacidades

Deny-by-default: se declara con require capability("scope"). Ver Capacidades e intent para el modelo.

capabilities.syn
-- Doc example: deny-by-default capabilities + faithful scope.
-- Uses `secret` because it proves the model with no network/disk side effects.
intent: "doc example: capabilities and intent"
require secret("APP_*")          -- name-prefix scope: covers APP_KEY, APP_DB, ... only

task read_app_key()
    -- APP_KEY is under the declared APP_* scope → allowed (still redacted, as always)
    give text(secret("APP_KEY", "demo")) == "secret(APP_KEY)"

task read_unscoped()
    -- DB_PASSWORD is NOT under APP_* → denied at the capability check (before any use)
    give secret("DB_PASSWORD")

print("APP_KEY is in scope → " + text(read_app_key()))

test "a capability you declared (in scope) is allowed"
    assert(read_app_key())

test "anything outside the declared scope is denied (deny-by-default)"
    assert_error(read_unscoped)
CapacidadGateaScope¿Auto-otorgada en run?
stdoutprint / salida
timenow, format_time, sleep
llmreason/decide/analyze/generate, llm_step (incl. egress al proveedor)
randomrandom, random_intno (tokens/nonces)
nethttp*, fetchhost: net("api.x"), net(".x"), net("")no
filelectura y escrituraruta: file("/data/*")no
file.read / file.writeI/O de mínimo privilegioglob de rutano
dbsql/mongo_/redis_ruta (SQLite) o URL canónicano
secretsecret(...)nombre: secret("APP_*")no
revealreveal(...)nombre/label (scopeado)no
signsecp256k1_sign / ed25519_sign (blockchain)nombre del secret de la clave (auditado)no
walletcrear custodia: mnemonic_ / hd_derive / keystore_nombre del secret de origen (auditado)no
spendspend(monto, unidad, motivo) — declaración auditada de dinero (spend.log, techo SYNSEMA_SPEND_CEILING)nombre de unidad o prefijo con * final: spend("USD")no (jamás — como sign)
execrun (shell)nombre del comandono
serveserve on Npuertono (y exigida)
envenv(...)nombre / prefijono
stdinread_line, ask de texto libreno
memoryla familia de estado persistente: remember/recall/forget_memory/memory_summary, add_rule/check_rules/get_rules, create_progress/…/resume_pointnombre declarado = la identidad del .db: memory("agent-name") (prefijo en el techo: memory=shop-*)no (escribe archivos; la declaración ES la identidad)

Notas: los scopes de ruta son fieles (los escapes con .. se deniegan). sandbox despoja todo. Un require por-task acota la task a solo lo que declara (∩ el programa). Bajo serve/modo seguro, incluso las auto-otorgadas deben declararse.