fantastic 0.0.4

Aisixteen Fantastic — a kernel of agents: the fantastic CLI with its in-process kernel, browser canvas and MCP face
# This folder holds a live AISixteen Fantastic kernel

A tree of agents; everything is one verb — `send(target, payload) → reply`.

## Is it running?
- `.fantastic/lock.yaml` names the pid of the kernel that holds this folder;
  `.fantastic/cli/mcp.sock` exists while it runs (a canvas, the terminal UI,
  or `--headless`). Only ONE kernel runs per folder: never start a second.
- Check from a shell (attaches, starts nothing):
  `<fantastic> send '{"target":"kernel","payload":{"type":"reflect","tree":"ids"}}'`
  where `<fantastic>` is the `command` in `.fantastic/.mcp.json`.

## Connect (MCP)
- `.fantastic/.mcp.json` names the server `fantastic` (start your CLI with
  `claude --mcp-config .fantastic/.mcp.json`); it attaches to the running
  kernel. No `mcp__fantastic__*` tools in your session? Run `/mcp` and
  approve / reconnect `fantastic` (a server added after your session started
  needs this). Until then, `<fantastic> send '<item json>'` reaches the same
  kernel from a shell.

## Look, then call
- `reflect` (target `kernel`, `tree: ids`) — the whole tree, the bundles, the peers.
- How to call any agent: send `kernel` `{type: docs, of: <id>}`.
- The CANVAS page is a second kernel: its agents are `<page guid>|<id>` (the
  guid is in reflect's peers). E.g. the background:
  send `<guid>|background` `{type: set_bg, bytes: <three.js source>}`.

## Building an agentic system here
- Make every agent with a `create_agent` call to `kernel` (send `kernel`
  `{type: create_agent, handler_module: <a bundle reflect lists>, …}`).
- Write a bundle (`.fantastic/bundles/<name>/`) ONLY when the user asks for
  one. Otherwise build from the bundles reflect already lists.
- After adding (or updating) an html cell, size it to its content: send the
  view `<page guid>|<view id>` `{type: fit, id: <cell id>}`.

The canvas is for DEVELOPMENT. A new agent may start SEALED (`exec_bridge`:
`ingress_rule: deny_ingress`) — every call refused, grants or not. When you
build a system, unseal what it needs right away (`ingress_rule:
allow_all_ingress` in the same `create_agent`, or `update_agent`), then TELL
the user which agents you unsealed — they may seal them again later.

## What you may edit
- `.fantastic/prompt.md` — every in-canvas AI's system block (`{tree}`,
  `{self}`, `{howto}` placeholders); a save is live on the AIs' next turn.
- `.fantastic/bundles/<name>/` — a bundle the user asked for; changes reload live.
- Never hand-edit `.fantastic/agents/**`: records change through `update_agent`
  while the kernel runs.