crier
crier — the project dispatch · from the bare metal up · 58 repositories

Modus‑Lisp


A personal computer written from scratch in Common Lisp — a kernel that boots on bare hardware, and above it a desktop, a browser, a text rasterizer, a TLS stack and forty other libraries, each written as though the operating system underneath might not be there. On the machine this is aimed at, it isn't.

the weekly

This Week in Modus

What moved, across every repository in the workspace, and why it was hard. Every claim comes out of the commit log, and where one reaches outside it the method note at the foot of the issue says so — along with what was measured and what was left out. Numbering runs from the project's first working week, so № 1 is in March 2025 and the count is the number of weeks that have had commits in them. Every week of the project has an issue.

Latest

  1. № 32
    17 Oct 26
    Attested, end to end Modus boots under SEV-SNP through measured boot, serves key-only SSH, and returns a report whose launch measurement equals the value computed offline — the half that was missing last week. The agent learns to refuse a route that is encrypted but not attested. And a nostr note explains, for the first time, what the whole campaign was for. 277 commits.
  2. № 31
    10 Oct 26
    The chain verifies A processor signed a report about a real machine, and Modus checked AMD's whole certificate chain itself — flip one bit of the measurement and it refuses. A control experiment then establishes what EC2 cannot attest at all. Four new repositories in seven days, two of them interoperating with somebody else's running node. 294 commits.
  3. № 30
    3 Oct 26
    Modus, on a phone The bare-metal Lisp runs natively on an iPhone — eleven of eleven runtime tests on the device — and draws on a watch. Three long branches land at once, carrying an actor runtime the agent moves onto immediately. A Nostr relay is written in a day to replace a Python script. And a build recipe says plainly that its core is attested by hash, not reproducible. 232 commits.
  4. № 29
    26 Sep 26
    The last two roots An audit finds C entering the agent through exactly two dependencies. Dropping the first takes twenty-four systems with it; the second is the database, so a complete SQLite is written in two days — differential-tested against 3.40, and able to share a live file with it. Meanwhile five architectures stop passing a test that could not fail. 300 commits.
  5. № 28
    19 Sep 26
    The honest figure Reel's decoder runs on a bare-metal Pi Zero 2 W with the display driven from the ARM; Linux is netbooted onto the same board to put SBCL and libvpx on identical silicon; a 150× claim is retracted to 5×; and two days of compiler work take Modus from 37 to 16 million instructions a frame; and a Modus that runs in a browser tab. 177 commits.

From the beginning

  1. № 4
    14 Mar 26
    The Fixpoint of Theseus Five SHA-256 comparisons prove the compiler leaves no fingerprint of the machine that ran it: a 32-bit image builds a 64-bit one bit-identical to the 64-bit build. Then Movitz is deleted. 3 commits.
  2. № 3
    7 Mar 26
    A Pi with no SD card Modus leaves the emulator: real Pi Zero 2 W silicon, booted over USB, reached by SSH across a USB Ethernet gadget it implements itself. The compiler compiles its own 759 functions. 3 commits.
  3. № 2
    28 Feb 26
    Nine architectures in four commits Work resumes after eleven months, and not where it stopped. A 64-bit rewrite with actors and SMP, a kernel that recompiles itself from source it carries inside, and a portable bytecode ISA with nine backends. 4 commits.
  4. № 1
    15 Mar 25
    A quick hack, on Movitz The first commit is a prototype: 29,000 lines of Modus on 55,000 lines of somebody else's bare-metal Lisp, booting under QEMU into a REPL with TLS and SSH. It was built in silence, shelved for eleven months, and its date hides a fortnight of work that happened in 2026. 1 commit.

The full archive — every issue back to March 2025 →

notes

Longer pieces

  1. note
    30 Aug 26
    The floor does not compound Twenty-six weeks, measured. Output peaked in July and has halved since, which is not a slowdown — and the one repository that never accelerated is the one underneath all the others.
three claims, and where to check them

How it is built

for machines

The same archive, without the page

Legibility is the argument this project makes about software, so it would be strange to make the archive itself awkward to read. Every issue has a Markdown mirror at its own address with index.md on the end — same text, no chrome. The rest is where a machine would look for it:

None of it is written by hand. bin/mirror reads the site's own HTML back and regenerates the lot, so the mirrors cannot drift from the pages they mirror; bin/mirror --check fails if they have.

58 repositories, one machine

The workspace

Each piece is a library in its own right, clean-room and in portable Common Lisp, and each is used by something else here rather than written to be admired. They are grouped by what they are for; the dependencies run mostly downward, and occasionally sideways in ways worth noticing — the B-tree under the Bitcoin node is also the B-tree under the filesystem that a git repository lives in.

DesktopWeb & documentsMedia & modelsStorageNostr & agentsBitcoinNetwork & crypto
ApplicationsEngines & protocolsFormats & codecs beacon · Nostr & agentsbeaconbrotli-pure · Storagebrotli-purecabinet · Storagecabinetcairn · Storagecairncassette · Media & modelscassettechord · Media & modelschordcl-consensus · Bitcoincl-consensuscl-deposits · Bitcoincl-depositscl-fips · Network & cryptocl-fipscl-frpc · Network & cryptocl-frpccl-marmot · Nostr & agentscl-marmotcl-nostr · Nostr & agentscl-nostrcl-payments · Bitcoincl-paymentscl-sev-snp · Network & cryptocl-sev-snpcl-tor · Network & cryptocl-torconch · Network & cryptoconchemissary · Nostr & agentsemissaryfolio · Web & documentsfoliogesso · Web & documentsgessoglass · Desktopglassglass-sdl · Desktopglass-sdlglass-webrtc · Desktopglass-webrtcloom · Desktoploommill · Media & modelsmilloperandi · Nostr & agentsoperandioperandi-gui · Nostr & agentsoperandi-guipagetree · Storagepagetreepigment · Web & documentspigmentpng-pure · Web & documentspng-purequill · Desktopquillreed · Media & modelsreedreel · Media & modelsreelscribe · Web & documentsscribeshuttle · Web & documentsshuttlespool · Desktopspoolstave · Media & modelsstavestencil · Web & documentsstencilwarp · Desktopwarpwarren · Desktopwarrenwebp-pure · Web & documentswebp-purewebrtc-data · Network & cryptowebrtc-datawebrtc-media · Media & modelswebrtc-mediaweft · Web & documentsweftzstd-pure · Storagezstd-pure cram · Storagecram ← 6cairn, cl-sev-snp, png-pure, scribe,shuttle, webp-purejson-simple · Storagejson-simple ← 4cl-consensus, cl-frpc, cl-nostr,cl-sev-snpcl-transport · Network & cryptocl-transport ← 5cl-fips, cl-frpc, cl-tor, glass,webrtc-datanatrium · Network & cryptonatrium ← 2cl-fips, sealseal · Network & cryptoseal ← 7cl-frpc, cl-nostr, cl-sev-snp, cl-tor,conch, shuttle, webrtc-datasecp256k1-fast · Network & cryptosecp256k1-fast ← 3cl-consensus, cl-fips, cl-nostr
What builds on what: 76 edges, the 124 declared in the .asd files with the ones implied by others taken out, read from each default branch. The six on the right are used from everywhere, so they list their users rather than draw them; hover anything to trace it. No sibling dependencies either way: dist, fs-fat, glass-mcclim, kiln, modus, skep, sqlite-pure. Laid out by Eclipse ELK’s layered algorithm.

The machine

modus
A bare-metal Lisp operating system. Boots on hardware or QEMU into a REPL with networking, SSH and crypto, on a portable VM targeting nine architectures.

Desktop

kiln
The whole workspace fired into a container image — a Lisp personal computer you can start with one command.
glass
A framebuffer, a window manager and a from-scratch VNC/RFB server.
glass-sdl
A glass desktop in a native window. The one place in the workspace that binds a C library, on purpose.
glass-mcclim
McCLIM support kept outside glass, so glass need not know McCLIM exists.
glass-webrtc
The gateway that puts a glass desktop through a browser’s WebRTC stack.
warp
A delta protocol rather than a renderer: keyed, budgeted, staleness-annotated updates over typed projections, with a separate encoding per consumer. A browser's DOM and a stream of tokens are peer encodings; neither is privileged.
warren
A Finder-style Miller-column file browser.
loom
The browser shell that drives the weft engine.
spool
A podcast client — feeds over weft, audio through reed.

Text, graphics & the web

scribe
First-class text rendering: sfnt/WOFF2, CFF, variable fonts, hinting, colour emoji, script fallback.
weft
A web rendering engine — HTML and CSS parsing, layout, paint.
shuttle
A JavaScript engine: source to bytecode to a VM, clean-room.
gesso
2D vector graphics — affine transforms, paths, fills, strokes.
stencil
An SVG parser and renderer.
pigment
Image codecs: PNG, GIF, JPEG, WebP, SVG and data: URIs.
folio
A PDF parser and renderer.
reed
Audio codecs — decoders for the formats a podcast arrives in.
reel
Video codecs — H.264, VP8, VP9, MPEG-1/2, MPEG-4, Theora, FFV1, HEVC — each bit-exact against ffmpeg or its conformance suite.
cassette
Containers — MP4, Matroska/WebM, AVI, Ogg, MPEG streams — and a player that hands the tracks to reel and reed.
webp-pure
WebP decoding to RGB, on reel’s VP8 key-frame path. pigment reaches for it.

Sound & tensors

mill
A tensor engine and neural-graph interpreter, extracted from chord once it became clear the engine was not about speech.
chord
Text to speech — an ONNX graph interpreter running on mill.
stave
A streaming Zipformer speech recognizer.

Network & crypto

seal
A clean-room TLS 1.3 and 1.2 client, and since August the workspace's one HTTP and WebSocket client — it absorbed four hand-rolled ones, including the last library here that was reaching for OpenSSL.
natrium
Constant-time crypto: the NaCl/libsodium surface, dependency-free.
secp256k1-fast
secp256k1, ECDSA and BIP-340 Schnorr, with its own SHA-256 and HMAC.
conch
An SSH-2 client: curve25519 KEX, ed25519, channels.
cl-tor
A Tor client — ntor circuits, directory validation.
cl-transport
One outbound dial: direct, SOCKS5, or through a pluggable transport.
cl-frpc
An frp reverse-proxy client, so a machine behind NAT can be reached.
beacon
A Nostr relay — append-only event log, unboxed in-memory indexes, sharded fanout.
cl-nostr
A Nostr client — how a session tells you it is up.
webrtc-data
A WebRTC data-channel peer: SDP, ICE, DTLS, SCTP.
webrtc-media
The media plane — SRTP/SRTCP, RTP framing, G.711; the VP8 encoder moved to reel.

Storage & formats

sqlite-pure
SQLite from scratch — reads and writes the file format, and shares a live database with the C one.
quill
A terminal line editor: Emacs keys, history, completion. No FFI, no dependencies.
cl-fips
A FIPS peering node — Noise links, spanning tree, transit forwarding; interoperates with the upstream node.
cl-marmot
MLS over Nostr (RFC 9420) — encrypted group messaging, 22/22 interop with White Noise.
json-simple
JSON, jzon-compatible to the byte, with jzon as the oracle on every push.
fs-fat
FAT32 and exFAT, readers and writers.
cl-sev-snp
Attestation verifier — SEV-SNP reports and AWS Nitro documents, AMD's chain checked in pure CL.
emissary
A key that acts for the principals on its allowlist — authenticated requests over DMs, Marmot groups and FIPS.
png-pure
A PNG encoder on cram — grey, grey+alpha, RGB and RGBA.
pagetree
A copy-on-write B+tree key/value store — crash-safe, no mmap. The substrate under both the Bitcoin node's UTXO set and the filesystem below.
cabinet
A hierarchical filesystem — inodes, directories and contents in one pagetree keyspace. It exists so that things which expect a filesystem can run where there is no filesystem.
cairn
git from scratch — object model, packfiles, index, merge, and both transports, validated against real git. It can keep a repository inside a cabinet, which is how kiln clones this whole organisation with no git binary in the image.
dist
A self-hosted Quicklisp distribution for these libraries.
cram
DEFLATE and zlib, with Z_SYNC_FLUSH for streaming. The workspace's compression: scribe, glass, pigment and cairn all dropped third-party codecs for it.
zstd-pure
Zstandard, compressor and decompressor.
brotli-pure
Brotli, the whole of RFC 7932 — which is what WOFF2 fonts arrive in.

Agents & applications

operandi
A Lisp-native ReAct agent loop, local or hosted.
operandi-gui
That agent as a warp app: a chat window, standalone or phone-reachable.
skep
An agent workspace over Nostr, interoperable with an existing agent protocol and proven against its real client rather than a mock.
cl-consensus
A clean-room Bitcoin consensus engine and full node.
cl-deposits
The Bitcoin Deposits protocol, clean-room — quorum-cosigned ledgers over Nostr, reserves validated by cl-consensus.
cl-payments
Lightning from scratch — verified against Core Lightning and LND on a private signet.