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

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

/atomico-vs-cljs

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.

The comparison·Inside c()

/safari-extension

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

/safari-extension-howto

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

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.

1 · Wax explained·2 · Wax vs qmd·3 · The chunk→fact bridge

/fossil-tour

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.

Overview·1 · Bedrock·2 · Vault

/closure

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.

The story·Field Guide·Keeping it honest

/language-models

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

/explainers/gepa

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.

/explainers/miprov2

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.