| Representation | See, with your own key, how the same question about the Apollo 11 SysML v2 model changes in tokens, cost and correctness as the representation changes. | 2026-09-15 | | lessons | aillmsysml |
| The Key in the Wrong Keyring | We wanted to sign everything for cairn in CI, including a key for kernel modules, and reached into shim's part of the boot chain without asking first. | 2026-09-14 | ~23 min | writing | linuxbootcsecure-boot |
| Operationalizing Ontology with Language Models | Projects co-written with language models grow semi-structured data that drifts. An ontology is one approach to consistency I wanted to investigate: what one is, how to run a program over it, what that buys, and the small experiment I designed to find out. | 2026-09-09 | ~20 min | writing | aiharnessteaching |
| Ontology | Operationalize an ontology with a language model. Give the agent a small model of the kitchen instead of a list of what is in it, so the answers stop wobbling from one session or model to the next, and check that model with a script, because it is only worth having once something checks it. | 2026-08-26 | | lessons | aiharnessclaude-code |
| The Flywheel and the Meter | Documented open models and pricing pain arrived in the same season, and I wanted to know whether the alignment is real or a rhyme. Building a flywheel to read my own usage, finding two moats where the argument assumed one, and a license question that answered itself while I wrote. | 2026-08-14 | ~13 min | writing | ai-harnessopen-modelsai-economics |
| The Other Half of the Corpus | The benchmark I built in the last post measured my imagination, not my work. Your history is two corpora, artifacts and transcripts, and I had never indexed the second one. | 2026-08-07 | ~11 min | writing | ragretrievalai-harness |
| When Retrieval Is Not the Question | What replaced the retrieval pipeline on the artifact side: a decay report that runs without a query, a fact lane for questions with one right answer, and disagreement surfaced rather than resolved. | 2026-08-07 | ~7 min | writing | retrievalknowledge-managementai-harness |
| varve | A local record lake over agent-session transcripts. Normalizes Claude Code, pi, and opencode session records into Parquet partitions and queries them with DuckDB. Files are canonical, the engine is disposable, and nothing leaves the machine. | 2026-08-07 | ~3 min | projects | duckdbparquetsql |
| July 2026 Links | Curated links from July 2026. | 2026-07-31 | ~6 min | links | linkscollecting |
| egress | A public, versioned catalog of every outbound connection a self-managed GitLab instance can make, built for administrators who have to write the firewall and allowlist rules for a controlled-egress or air-gapped environment. | 2026-07-21 | ~3 min | projects | air-gapcontrolled-egressegress |
| Evidence Factory | A worked demonstration of running a continuous ATO evidence pipeline for NIST 800-53 controls entirely inside GitLab: a policy plane injects a conformance stage no repository can edit, a released CI/CD Catalog runs the checks, and one Python driver turns each result into a merge gate and a control posture. | 2026-07-21 | ~3 min | projects | cicontainersgitlab |
| Cairn | A sealed bootc estate: db-signed UKI boot under keys from an offline ceremony, composefs-pinned root, TPM2 unlock bound to a signed PCR11 policy. Images promote only after booting for real in CI. | 2026-07-19 | ~4 min | projects | infrastructurehomelablinux |
| gitlab-contribution | Vendors GitLab's official AI-agent skills for Claude Code at a pinned commit, plus one authored skill for contributing to GitLab projects without a GitLab Development Kit. | 2026-07-09 | ~3 min | projects | gitlabllmai-harness |
| Service-to-Service Routing in Rootless Podman | Part one isolated the network planes. The sequel: if every service is in its own plane, how do they talk? The answer is FQDN-everywhere through one always-available local router. Getting there meant a hunt through link-local host access, an SSRF guard that rejected it, pasta's --map-guest-addr, and a careful reading of what podman upstream has actually decided. Plus an epilogue: what happened when the pattern met the whole fleet, and the upstream patch that lets the workaround retire. | 2026-07-02 | ~14 min | writing | homelabpodmancontainers |
| bulkhead | Least-privilege self-managed GitLab CI runners on a fixed set of AlmaLinux hosts: rootless Podman for ordinary jobs, ephemeral libvirt VMs for jobs that need root, and the cgroups v1 versus v2 trap that decides which release to build on. | 2026-07-01 | ~4 min | projects | podmancontainersself-managed |
| June 2026 Links | Curated links from June 2026. | 2026-06-30 | ~6 min | links | linkscollecting |
| gitlab-simulation | A Claude Code plugin that provisions ephemeral self-managed GitLab instances on Google Compute Engine, so an LLM agent can reproduce airgap, Duo Agent Platform, Geo, and license-gated cases that never surface on SaaS, without touching production. | 2026-06-26 | ~3 min | projects | gitlabself-managedsimulation |
| Network Plane Isolation in Rootless Podman | Two podman networks alone don't segment traffic in rootless mode, and isolate=true silently fails when netavark uses its iptables backend (the default on Fedora 43 and earlier) thanks to an iptables-nft bug. The root cause, the fix, and how Fedora 44 made it disappear. | 2026-06-10 | ~7 min | writing | homelabpodmancontainers |
| Painless Bit-Perfect from Navidrome to a Streamer | Notes from getting a self-hosted music library to play bit-perfect on a network streamer, why the record player is not always the right answer with little kids around, and the small debug package for the closed-source iOS client that was the gap. | 2026-05-08 | ~4 min | writing | audioupnpdebugging |
| bairn | Personal photo archive for households whose nursery or preschool uses Famly. Pulls images and videos to disk with full EXIF and XMP metadata embedded into each file. Optional Immich upload for households that already self-host one. | 2026-05-08 | ~2 min | projects | gofamlyhousehold |
| A Progressive Vendor Stance for the Agent-Native Future | I emailed Famly support in September 2024 asking for a parent-side data export feature. They couldn't commit it to product (a small SaaS has to chase revenue features), but they pointed me at their API and left me an architecturally accessible position to build the integration myself. Twenty months later, with an AI harness on my side, bairn shipped. That stance is the right one for a world where users will increasingly act through agents. | 2026-05-07 | ~20 min | writing | bairngoreverse-engineering |
| Enabling Editors to Use Git Without Knowing | Most static-site CMSes make editors learn Git. They shouldn't have to. A small Cloudflare Worker called sveltia-identity-translator lets editors save changes through their existing Workspace identity, while git history attributes correctly. | 2026-05-06 | ~14 min | writing | cmscloudflare-workersstatic-sites |
| Patinate | Render Strava activity into stylized heatmap posters and inline SVG. A single Rust binary keeps a SQLite activity cache, draws it over an OpenStreetMap basemap in one of four baked-in themes, trims every track inside a privacy circle before render, and can strip identifying attributes on the way out. The patina builds where you ride often: overlapping low-alpha strokes accumulate into brighter color the way actual patina builds on metal. | 2026-05-06 | ~1 min | projects | cyclingvisualizationrust |
| Sveltia Identity Translator | Translated-identity proxy for Sveltia CMS. Editors authenticate against your IdP; a single bot does the API calls; commits attribute correctly via git's author/committer split. | 2026-05-06 | ~2 min | projects | cmsauthcloudflare-workers |
| April 2026 Links | Curated links from April 2026. | 2026-04-30 | ~5 min | links | linkscollecting |
| jig | An agent-shape harness that points a real agent at a real CLI and counts what happens: a battery declared in agent-shape.toml, a headless runtime spawned against the fixture, and an LLM judge scoring the transcript on a 4-point scale whose top mark is a first command that was real and worked. A companion check guards the rubric against drift in the tool's own help output. | 2026-04-24 | ~4 min | projects | aitestingagent |
| The Larder Lesson | A scrollytelling lesson that builds a small AI harness around meal planning in Claude Code. An applied companion to the AI harnesses series. | 2026-04-19 | ~2 min | writing | aiharnessteaching |
| Larder | Build a small assistant for dinner out of one agent and a folder of plain files, and learn the shape that transfers to most of the other things you keep doing by hand: when the answer is wrong, correct the file, not the answer. | 2026-04-19 | | lessons | aiharnessclaude-code |
| kit | A tool-registry manager that resolved developer tool versions across git-based TOML registries, generated mise configuration from the result, and verified every install against a per-tool trust tier, from cosign down to a bare checksum. Three CI pipelines proposed and gated the bumps until mise covered the same ground. | 2026-04-06 | ~6 min | projects | toolingregistryrust |
| Inference on a Schedule | A nightly CI pipeline that mixes Python and a language model to keep a static site's activity data fresh. The interesting part was discovering which 10% of the work actually needed a model. | 2026-04-05 | ~9 min | writing | aiinfrastructurearchitecture |
| rune | A Rust CLI that treated a git repository as the canonical home for an agent's skills, subagents, and rules, syncing them into each project's .claude directory behind a content-hash lockfile and a write hook that surfaced drift in the same turn as the edit. Retired once the portable SKILL.md layout made most of what it did a directory of markdown and a symlink. | 2026-04-05 | ~4 min | projects | aiagentregistry |
| The Hunt for Leverage | On test frameworks that tell agents what to do next, and the design patterns that make LLM-generated tests actually correct. | 2026-04-04 | ~11 min | writing | aisoftware-engineeringtesting |
| manifold | An API-only adoption profiler for self-managed GitLab: it reads activity through the REST API and renders a dashboard of adoption gaps and the enablement action that closes each one, entirely inside a customer's own network. | 2026-04-03 | ~3 min | projects | gitlabgoanalytics |
| March 2026 Links | Curated links from March 2026. | 2026-03-31 | ~2 min | links | linkscollecting |
| Get Lamp | On dark software factories, where they work, where they might not, and a tool we built to explore the gap. | 2026-03-29 | ~8 min | writing | aisoftware-engineeringtooling |
| Building Bootc Images from Scratch | The upstream Fedora bootc images ship 523 packages. We built one with 255 from scratch using dnf --installroot and a Containerfile. No rpm-ostree, no treefile, no inheritance. | 2026-03-27 | ~19 min | writing | linuxcontainersbootc |
| muxr | Harness session multiplexer for AI coding workflows. Owns the harness/campaign/session/segment address across tmux, the filesystem, and your AI runtime so a rename stays coherent in all three. | 2026-03-27 | ~5 min | projects | aitmuxharness |
| Kernel Modules as Multi-Stage Container Builds | A pattern for building ZFS and NVIDIA kernel modules in multi-stage container builds for bootc immutable images. No DKMS, no gcc, no kernel-devel in your production OS. | 2026-03-25 | ~13 min | writing | linuxcontainersbootc |
| AI Harnesses Are For Everyone | A harness is a set of files that turns a stateless AI model into a persistent collaborator. The major labs are racing to move inference closer to your work. Here's how to meet them halfway. | 2026-03-24 | ~16 min | writing | aiharnessworkflow |
| LLM-Mediated Experimentation | Giving an LLM access to a real test bench transformed a year-old debugging effort. The root cause was not what anyone thought. | 2026-03-24 | ~9 min | writing | aidebugginginfrastructure |
| Go Architecture for LLM-Maintained Codebases | Structural choices in a Go project built mostly by LLMs: making wrong code fail to compile rather than fail code review. | 2026-03-15 | ~9 min | writing | goaisoftware-engineering |
| kebnf | Converts the OMG's KeBNF text for KerML and SysML v2 into ANTLR4 and tree-sitter grammars from one AST, all 640 rules, recording the metamodel annotations it strips. A mechanically faithful tree-sitter emitter timed out parsing a one-line file; inlining shared prefix keywords took it to 0.15ms and cut LR conflicts from 335+ to 199. | 2026-03-10 | ~3 min | projects | grammarsysmlrust |
| sysml | A single Rust binary that parses SysML v2 models into a queryable knowledge graph, exposed through a clap CLI for humans and CI and a stdio MCP server for agents, both over the same core. The open question is whether the CLI is the cheaper transport for an agent, and I have not measured it yet. | 2026-03-10 | ~4 min | projects | sysmlaimcp |
| sysml-bench | An evaluation harness asking whether giving a tool-augmented LLM more tools actually helps it answer questions about a SysML v2 engineering model. 88 tasks scored per field against published schemas, run across four tool sets and six public corpora, with a pre-registered replication whose frozen hypothesis did not survive the independent corpus. | 2026-03-10 | ~5 min | projects | sysmlaibenchmarking |
| On Building a Complicated Foot Gun | Deploying a home server with immutable infrastructure tooling: what the pipeline tested, what it didn't, and what broke anyway. | 2026-03-09 | ~15 min | writing | homelabbootcselinux |
| synthesist | A Rust CLI that records the process governing a body of code (what was planned, what was agreed, what phase the work is in) as an append-only claim graph an agent can query instead of inferring from a diff. Workflow state is a per-asserter JSON-LD log read back through a disposable index, under a phase machine that forbids every write until a human approves the plan. | 2026-03-08 | ~4 min | projects | aiorchestrationrust |
| Rootless Podman Pods Leak Subordinate UIDs | Rootless Podman pods leak subordinate UIDs onto the host filesystem. The pod abstraction was the constraint, and named networks fix it completely. | 2026-03-07 | ~11 min | writing | homelabpodmancontainers |
| Back to Composable | On why the agent tooling ecosystem is rediscovering the Unix shell, and why MCP is starting to look like Maven. | 2026-03-05 | ~14 min | writing | aitoolingworkflow |
| Meeting Notes RAG | A RAG pipeline for searching customer meeting notes: embedding, vector search, and synthesis without a SaaS intermediary. | 2026-03-03 | ~17 min | writing | ragvector-searchbenchmarking |
| February 2026 Links | Curated links from February 2026. | 2026-02-28 | ~10 min | links | linkscollecting |
| The Merge Request as {Friction, Leverage} | The merge request is both the thing slowing teams down and the thing keeping them safe. That tension is real and worth sitting with. | 2026-02-23 | ~13 min | writing | aiworkflowsoftware-engineering |
| Pinboard | Ken Burns-style video generator that composites photos as vintage Polaroid snapshots on panoramic backgrounds, with smooth camera movement and music. | 2026-02-22 | ~2 min | projects | videotoolingopen-source |
| Playbill | TOML-driven video program assembler: title cards, intros, episode pass-throughs, and credits rendered into a single concatenated video with fade-to-black transitions. | 2026-02-22 | ~3 min | projects | videotoolingopen-source |
| Birthday at the Theater | Alasdair turned three and we threw him a party at the theater, which required splicing together TV episodes, phone-recorded introductions, and Ken Burns effects on Route 66 maps. | 2026-02-18 | ~19 min | life | videotoolingopen-source |
| A Reading Roadmap for My Kids | A dragnet pass at chapter books worth reading aloud, organized by age. Built to share and update as we go. | 2026-02-15 | ~32 min | writing | readingparenting |
| Self Inventory | Between dropping off the kids and my first meeting I built a scrollytelling analysis platform. What does that mean for the skills I spent years developing? | 2026-02-15 | ~7 min | writing | aiworkflowidentity |
| Things I Want to Build | A running list of things I've wanted to build over the years but failed to because they required far more time and attention than I was capable of historically. | 2026-02-15 | ~2 min | writing | projectswishlist |
| Harness Explorer | Static analysis for the AGENTS.md, CLAUDE.md, and skills files that define how an agent behaves in a codebase. A single Go binary follows their references into a knowledge graph, scores it for redundancy, contradiction, and information density, and ranks where the next hour of harness editing saves the most tokens; whether that ranking approximates what matters is untested, since no calibration dataset exists. | 2026-02-07 | ~3 min | projects | aitooling |
| Immutable | FROM-scratch Fedora bootc images with source-built, MOK-signed ZFS and NVIDIA kernel modules. A homelab on an earned, verifiable supply chain. | 2025-11-01 | ~4 min | projects | infrastructurehomelablinux |
| July 2022 Links | Curated links from July 2022. | 2022-07-31 | ~3 min | links | linkscollecting |
| May 2022 Links | Curated links from May 2022. | 2022-05-31 | ~7 min | links | linkscollecting |
| April 2022 Links | Curated links from April 2022. | 2022-04-30 | ~3 min | links | linkscollecting |
| March 2022 Links | Curated links from March 2022. | 2022-03-31 | ~3 min | links | linkscollecting |
| February 2020 Links | Curated links from February 2020. | 2020-02-29 | ~2 min | links | linkscollecting |
| January 2020 Links | Curated links from January 2020. | 2020-01-31 | ~9 min | links | linkscollecting |
| May 2019 Links | Curated links from May 2019. | 2019-05-31 | ~8 min | links | linkscollecting |
| October 2018 Links | Curated links from October 2018. | 2018-10-31 | ~13 min | links | linkscollecting |
| September 2018 Links | Curated links from September 2018. | 2018-09-30 | ~7 min | links | linkscollecting |
| August 2018 Links | Curated links from August 2018. | 2018-08-31 | ~4 min | links | linkscollecting |
| July 2018 Links | Curated links from July 2018. | 2018-07-31 | ~4 min | links | linkscollecting |
| Iceland and the United Kingdom | Three weeks across Iceland, Scotland, and England. Waterfalls, geothermal lagoons, the best Thai food we've ever eaten, and sneaker waves at Reynisfjara. | 2016-09-01 | ~55 min | life | tripicelandscotland |
| Travel Planning | How we planned the 2016 Iceland, Scotland, and England trip: flights, logistics, and the pleasure of planning months in advance. | 2016-09-01 | ~12 min | life | tripplanning |
| Las Vegas | Things to do in Las Vegas that don't involve gambling or sitting poolside: the Hoover Dam, Red Rock Canyon, and the strip from a distance. | 2016-07-01 | ~6 min | life | triplas-vegasnevada |