explore
Interactive explorations — deep technical explainers, teardowns, and design sketches. Each one a single self-contained folder of HTML, CSS, and JS that works offline, published at explore.exidia.app.
coding-agent — local coding agents from first principles
A five-part journey through the sibling repo that turns a Mac into a reproducible local AI coding-agent stack. It teaches the actual vocabulary behind the machinery — profiles, model artifacts, GGUF, MLX snapshots, manifests, runtimes, OpenAI-compatible localhost servers, benchmark rows, locks, and Pi provider configuration — with each concept tied to real code and docs.
1 · The stack·2 · Models·3 · Serving·4 · Benchmarking·5 · Daily use
Functions, data, and the DOM — can ClojureScript out-simplify Atomico?
Three takes on authoring Web Components, held side by side. Atomico builds them from plain functions and hooks — no classes, no this. Two ClojureScript answers push the same instinct deeper, on a stronger claim — that a component, its state, and its side-effects can all be inert data: zero turns even effects and reactivity into comparable, serialisable values (unlocking real SSR and snapshot tests), while baredom drops component-local state entirely, deriving the shadow tree from attributes alone (DOM = f(attrs, props)). A companion deep-dive then dismantles Atomico's c() to show exactly how JSX becomes a real custom-element class. Interactive demos throughout: a genuine native custom element, the hook-locker model, and handler-equality you can test.
Web extensions from first principles — and what Safari taught us
A three-part series that builds a Safari extension to capture your reading provenance — the trail of how you arrive at what you read. Part 1 teaches what a web extension actually is, organ by organ (manifest, background worker, content scripts, permissions, storage) and how they cooperate to turn a click into a saved fact. Parts 2–3 prove it in real Safari and chase the bugs only the real browser reveals: the silent localhost-permission gate, a clicked link that vanishes across the content↔background bridge, and a tab event Safari fires but leaves blind. Interactive demos and file:line citations throughout.
1 · Anatomy of an extension·2 · Proving it in Safari·3 · What Safari taught us
Building a Safari extension in ClojureScript — the build journey
A companion how-to to the conceptual series: how a ClojureScript Safari extension is actually built and shipped. Part 1 elaborates the shadow-cljs build and walks every artefact in public/. Part 2 hits the wall Chrome never makes you hit — Safari embeds the extension in a native macOS app, generated by safari-web-extension-converter, with two Xcode targets and a little generated Swift. Part 3 is code-signing (why ad-hoc is fatal and dev-signing mandatory), loading/enabling, and the REPL dev loop. A line-by-line interior reads the one Swift file for a CLJS reader new to Swift. Real file:line citations throughout.
1 · The shadow-cljs build·2 · Safari makes you ship an app·3 · Signing & the dev loop
Wax — a single-file memory engine for AI agents
A three-part series: how Wax works (file format, WAL, hybrid search, the bitemporal EAV graph); how it compares to qmd; and a concrete design for an org-mode “chunk→fact” bridge into its structured memory. Reverse-engineered from source, with interactive widgets and file:line citations.
Fossil — a guided tour of the SCM’s internals
An interactive “city” walkthrough of how Fossil SCM lays out its data on disk — the bedrock blocks, the vault, deltas and artifacts — built straight from the Fossil source. A work in progress.
Reach for what you already ship — the Closure Library for ClojureScript
The Google Closure Library is already inside every ClojureScript build — most newcomers never notice it, and reinstall what they already own. A problem-first walk through what it is, the four-way “use this, not that” judgment (Closure / cljs.core / the browser / npm), and how a hand-written guide proves it stays correct on every build.
How language models work — from a guess to a tool call
The concepts-first first leg of a trilogy on leveraging language models. Part 1 shows a model is a next-token guesser and what temperature does; Part 2, why models read tokens not words and how that drives context and cost; Part 3, the context window as one finite shared budget (and why bigger isn't free); Part 4 opens up attention and the key-value cache — how the model actually uses the context, and why a big window costs; Part 5, the capabilities you reach for — reasoning, tool use, structured output — and each one's edge. Practitioner mental models up front; the mechanism one disclosure away. Interactive widgets throughout.
1 · The next-token machine·2 · Tokens·3 · Context·4 · Attention·5 · Capabilities
GEPA — genetic-Pareto reflective prompt evolution
An evolutionary algorithm that mutates prompts by reading its own failures — outperforming reinforcement learning while using 35× fewer rollouts. An interactive walk through reflective mutation, the Pareto frontier, and why information per rollout beats rollout count.
MIPROv2 — automatic prompt optimization
How DSPy automatically writes better prompts for multi-stage LLM pipelines — jointly tuning both the natural-language instructions and the few-shot examples for every prompt, by Bayesian search. Interactive, with each pipeline module clickable.