CLI
One static binary. The core commands:
synsema run program.syn # execute (exits when the program finishes)
synsema test program.syn # run `test` blocks (a file or a directory)
synsema check program.syn # parse only — no execution (fast)
synsema serve program.syn # stay alive for HTTP / crons / agents
synsema repl # interactive REPL
synsema conform --swarm app.syn # post-run state dump (blackboard + agents) as JSON
synsema daemon start app.syn # background daemon (see Deploy)
Useful flags
| Flag | Command | Effect |
|---|---|---|
--flat | run | parse a .fsyn (flat document) file |
--explain | run | rich error report on stderr (source context, call stack, suggestions) |
--format json | run --explain | structured diagnostics for tools/agents |
--provider <name> | run | force the LLM provider (anthropic/openai/minimax/deepseek) |
--sandbox | run / test | host ceiling stdout,time — run untrusted code (see Capabilities) |
--cap-set "<list>" | run / test | tailored host ceiling (name or name=scope); mutually exclusive with --sandbox |
--env-file <path> / --no-env-file | all | override / disable .env loading |
--port / --domain / --tls-auto / --bind / --secure | serve | deployment knobs (see Deploy) |
Exit codes
0 on success; 1 on a parse error, a runtime error, or if any spawned agent ended in ERROR. Plain run prints the stable one-liner Runtime error: file:line:col: msg; add --explain for the rich report. (For measuring exit codes in a shell, don't pipe before echo $? — redirect instead.)