one batch send
[{"target": "kernel",
"payload": {"type": "reflect", "readme": true}}]kernela modela programfilesa shellthe canvasyou
There is no client library. The protocol is the API: every agent answers reflect with what it is, and docs says how to call it. Given only those self-descriptions, an AI wires the system itself.
Agents
A recursive tree. Each agent runs a bundle (a handler module) and keeps its state in its own record.
send
The one primitive: batched, concurrent, each item a kernel task you can ps and cancel, joinable and idempotent by id.
reflect / docs
What an agent is, and how to call it — the whole self-description, one round-trip each.
The call gate
Deny-all and two-sided: a call passes only when the caller’s can_call and the target’s callable_by both grant it.
Bridges
Every edge to the outside — another kernel, the disk, a process, a browser, an MCP server — is an IO leg, sealed until opened.
Memory
Every message lives in a memory store agent; AI agents fold, recall and page their own history.
The engine
A meta-runtime
The kernel of agents: one verb, a two-sided call gate, a ledger, memory, a scheduler — in Python, Rust, Swift and TypeScript. It is not a harness for one app; it is ready to power any AI app, yours included.
The product
fantastic canvas
The open-source workbench built on that engine: a browser canvas where you and an AI build, run and wire your own systems. One repo holds both layers — the engine and the harness of Emergent Software.
AI agents
vLLM, Ollama, the OpenAI Responses API and Anthropic’s Messages API — plus Apple’s on-device model in Swift. Tool calling uses the kernel’s own prompt-taught grammar, so any capable model drives the same verbs.
vLLMOllamaOpenAI ResponsesAnthropicApple on-device
IO legs
Files, edits, streams and watches clamped to the running dir; allow-listed commands and PTY terminals; browser and HTTP faces; kernel-to-kernel links; a remote MCP server’s tools as verbs.
file_bridgeexec_bridgeweb_wsweb_restws_bridgemcp_client
Folder bundles
Drop bundles/<name>/bundle.yaml plus a program into .fantastic/ and it becomes a new kind of agent — hot-reloadable.
.fantastic/
└─ bundles/
└─ <name>/
├─ bundle.yaml
└─ agent.pyKernel services
A scheduler, credentials by reference with secret fields masked in records and events, a persistent tree on disk, and a task table with Unix-style ps / cancel.
pscancelschedule[secret]
Deny-all by default.
Nothing is open by default. Every IO leg denies until an operator opens it, grants are explicit on both ends of a call, an agent never raises its own authority, and file access is clamped to the directory the kernel runs in. One root reflect shows the whole landscape.