The thesis.
Lumen is a language for humans, but its target is the substrate above the model rather than the model itself. The catalogue’s nominal inclusion bar is “designed for LLMs to author code”; Lumen earns its place via the orchestration-camp criterion of first-class effect declarations for model calls and agent-coordination primitives. The vocabulary is the giveaway: cell (function), effect, grant, agent, pipeline, machine, memory are all language keywords. Functions declare effects in the return type after a slash (cell main() -> String / {Log}); tools must be granted with explicit caps (grant Chat max_tokens 1024 temperature 0.7); the runtime can be locked into @deterministic true mode that rejects nondeterministic operations at compile time, not at runtime.
Build deterministic agent workflows with static types, first-class AI primitives, and markdown-native source files.
The distinctive move is making the source file the same artefact as the documentation. Three source extensions ship: .lm.md (markdown with fenced Lumen blocks), .lm (raw source), and .lumen (markdown-native). The compiler’s first pipeline stage is markdown extraction — code and prose share one file, and the model writing one writes the other. Where Boruna does deterministic-workflow enforcement at the bytecode VM via policy-gated effects and hash-chained evidence, Lumen does it at the type system via algebraic effects, grants, and the @deterministic annotation. Same orchestration-camp diagnosis, different layer.
What it looks like.
effect Log cell info(msg: String) -> Unit endcell main() -> String / {Log} perform Log.info(“Starting”) return “Done” end
handle main() with Log.info(msg) -> resume(unit) print(“LOG: {msg}”) end
The / {Log} in the return type declares the effect. perform invokes it; handle ... with ... discharges it. One-shot delimited continuations under the hood. cell is the function keyword — Lumen does not use fn.
Distinctive moves.
- Markdown-native source.
.lm.mdfiles contain markdown prose with fencedlumenblocks. The compiler extracts code as its first pipeline stage. Documentation and implementation are one artefact. cellis the function keyword. Notfn. Cells take typed parameters and declare effects in the return type after a slash.- Algebraic effects, first-class.
effect Logdeclarations,performto invoke,handle ... with ...to discharge. The runtime uses one-shot delimited continuations; opcodesPerform,HandlePush,HandlePop, andResumeare first-class in the VM. - Grants as syntactic policy.
grant Chat max_tokens 1024 temperature 0.7constrains every call to that tool. Policy lives in source, not configuration — Boruna’s effect declarations lifted to the language surface. @deterministic truemode. A compile-time annotation that rejectsuuid(),timestamp(), and other nondeterministic operations. The static analogue of Boruna’s runtime deterministic replay.- Three process kinds.
pipelinefor auto-chained stages (extract → transform → load),machinefor state graphs,memoryfor key-value stores. Each is a first-class language construct rather than a library pattern. - MCP as a provider crate.
lumen-provider-mcpships alongsidelumen-provider-http,lumen-provider-json,lumen-provider-fs,lumen-provider-gemini,lumen-provider-crypto,lumen-provider-env. MCP is one tool source among several, not the privileged one.
Maturity.
v0.1.10 (February 2026), 352 commits, ~5,300 passing tests across all crates (AGENTS.md figure; the README’s 1,365+ is at a different cut). MIT-licensed, written in Rust (96.5% of the source), compiles to LIR bytecode for a register-based VM with ~100 opcodes, 32-bit fixed-width encoding, and COW collections via Rc::make_mut. The workspace contains 12+ crates covering compiler, VM, runtime, CLI, LSP, JIT codegen, WebAssembly bindings, tensor operations, and provider integrations. Single-author at the human level (alliecatowo); AGENTS.md notes that “only the Delegator agent commits code” — the contributors listing reflects agent runs of the project’s own multi-agent dev team.
Agent tooling.
The agent-facing surface is unusually elaborate. AGENTS.md declares a multi-agent development team — Delegator (Gemini 3 Pro), Auditor, Debugger (Claude Opus 4.6), Coder (Claude Sonnet 4.5), Worker (Claude Haiku 4.5), Tester, Task Manager, Performance, Planner — each with a defined role and only the Delegator authorised to commit. CLAUDE.md and .opencode/agents/ provide further orientation. The LSP includes semantic search; the VS Code extension covers .lm.md files; a tree-sitter grammar ships at tree-sitter-lumen/. The CLI’s lumen emit mode outputs bytecode as JSON for downstream agent consumption.
- Boruna orchestration Closest design relative. Both target deterministic AI workflows. Boruna enforces at the bytecode VM via policy-gated effects and hash-chained evidence bundles; Lumen enforces at the type system via algebraic effects, grants, and a compile-time
@deterministicannotation. Both ship MCP integration. Lumen targets humans authoring workflows; Boruna targets auditable execution. - Plumbing adjacent Plumbing wires agents (typed channels, copy-discard symmetric monoidal category); Lumen is what runs inside a single node of that wiring. Complementary substrates rather than competitors.
- AILANG verification Cross-camp on effect systems. AILANG's row-polymorphic Hindley-Milner with capability categories (IO/FS/Net/Clock/AI) is the verification cousin of Lumen's effect-row syntax. Different mechanism, same diagnosis: model calls must be visible in the signature.