Open only the packet needed now.
The scribe receives a bounded release order and can return only the declared drafted letter.
draft --drafted→ approve Independent software
Code · space · motion
Enter the work Enter the red-noir lab
Six projects in one world. A graphite asteroid, an amethyst interior, and a painting waiting inside.
Selected work · proof in sequence
Every idea has working parts.
Choose your own route, or follow the sequence.
Selected work / six perspectives
Project 01 / Agent protocols + durable execution
Declared protocols for agents, tools, and people. Witloom admits external signals, normalizes the next state, and preserves execution for recovery and replay. Rust provides the local-first reference runtime.
The scribe receives a bounded release order and can return only the declared drafted letter.
draft --drafted→ approve The operator sees the declared decision packet and may return proceed or abort—nothing else.
approve --proceed→ review The called council may emit vetoed. The parent program routes it to a blocked terminal without a model inventing recovery.
review --vetoed→ cancelled The council closes on two admitted ayes. Once closed, late output cannot change the accepted result.
review --adopted→ shipped The terminal revision, program basis, binding basis, and semantic journal survive the agent session. Replay never reinvokes effects.
shipped / revision 3 / replay exact Protocol graph
flagship.witl · Rust reference runtime
program flagship@1 where
-- Composed release train: model draft, operator gate, reusable council.
require review := "review.witl"
schema order := shaped "release-order.v1" {"type":"object","required":["tag"],"properties":{"tag":{"type":"string"}},"additionalProperties":false}
schema note := shaped "release-note.v1" {"type":"object","required":["notes"],"properties":{"notes":{"type":"string"}},"additionalProperties":false}
adapter only-the-notes : note -> _ := pick "/notes"
authority operator
actor operator : authority operator
actor scribe : managed never
accepts order
starts draft
state draft where
notes <- scribe : drafted note
state approve where
go <- operator : proceed order | abort order
state review where
call review
state shipped := end released
@[blocked] state cancelled := end cancelled
next
| draft, drafted => approve using only-the-notes
| approve, proceed => review
| approve, abort => cancelled
| review, adopted => shipped
| review, vetoed => cancelled
program demo-review@1 where
actor alpha : managed idempotent
actor beta : managed idempotent
actor gamma : managed idempotent
starts vote
state vote where
alpha <- alpha : aye | vetoed
beta <- beta : aye | vetoed
gamma <- gamma : aye | vetoed
close any_of
| saying vetoed
| at_least_saying 2 aye
decide
| saying vetoed => rejected
| _ => approved
carry := {
ayes := count aye
dissent := documents vetoed
}
state adopted := end adopted
@[blocked] state refused := end vetoed
next
| vote, approved => adopted
| vote, rejected => refused
Illustrative execution of the current flagship. Program source and graph describe the same routes.
Tigerwits / visual score
One scene, conducted in layers. Each visual voice keeps its own time. Hear four against three with Tiger Score ↓
01 / formation
Grains gather. Separate pieces close into one rough shell.
Core + Layout · one shared coordinate system
02 / encounter
A companion crosses behind. Dust turns first; the larger body follows.
Score · independent parts, shared time
03 / interior
A seam widens. Layers held inside the body come into view.
Surface · geometry beneath the shell
04 / release
Fragments separate along authored paths. Each piece keeps its place in the score.
Motion · paths and easing
05 / afterimage
The larger fragments recede. Fine dust carries their curve a little longer.
Browser · one frame, coordinated outputs
06 / continuation
A small piece leaves the frame. The next encounter is still unwritten.
Explore the libraries below · or play the Chopin study
Play four against three ↓ONE FORM. TWO VOICES.
Scroll conducts the page. Play gives the hands their own time. Both meet here, in one composition.
The written study is loading. The standalone version is available below.
Tiger Libraries · interaction lab
Move a tile. Change the space. Every piece finds its place. Explore the same composition with a pointer or a keyboard.
Keyboard: focus a card, token, or divider; press Space, use arrow keys, then Enter to commit or Esc to cancel.
Project 03 / Symbolic Content IR
A tiny symbolic content language for agents and software. Nested terms preserve order, duplicates and scope.
Python tools · open vocabulary · unreleased
A change of scope
think(Bob,
not(delete(Alice, File))) Bob thinks the action does not happen.
not(think(Bob,
delete(Alice, File))) It is not the case that Bob thinks the action happens.
Two authored interpretations. SCIR preserves the grouping; symbols have no built-in meaning. This is a source example.
Project 04 / Planevox
Sparse voxel worlds and charted surfaces, built on deterministic simulation and parallel-plane rendering.
Java 21 / Vulkan · playable slice in development
Canonical 10 cm cells · experimental 5 cm mode. Planet views remain diagnostics.
Projects 05–06 / Everyday craft
05 / Control Center
Declarative sections bring settings, actions, keymaps and commands into one inspectable Neovim surface. Configuration owns values, persistence and effects.
Dependency-free · Neovim 0.10+ · private API development
local signal = focus surface:resolve() -- leave room to think 06 / Red Noir
True black, disciplined gray and deliberate red. A stable, read-only palette carries the same hierarchy through syntax, diagnostics and editor surfaces.
Dependency-free · Neovim 0.9+ · private colorscheme
05 / A WORLD WITHIN · VINCENT VAN GOGH, 1889
Stay a while. Scroll to continue.
When the painting is focused, Space pauses or plays; arrow keys explore the detail view. Escape scrolls to the whole painting and pauses.