| glab api | glab api, the raw request command in GitLab's command-line client: --field decodes JSON arrays and objects, bracketed names reach the API as the query parameters they spell, --paginate follows the Link URL as given, and mr create recognizes a title already marked Draft. | 2026-10-13 | ~3 min | projects | gitlabglabcli |
| switchyard | A ladder of Jenkins pipelines on a Java and Maven app, each converted to GitLab CI/CD at GitLab Public Sector, with a guide that puts every Jenkins construct beside the GitLab primitive that carries it and a rehearsal track for converting live. | 2026-10-08 | ~3 min | projects | gitlabjenkinsci |
| Representation | See how the same question about the Apollo 11 SysML v2 model changes in tokens, cost and correctness as the representation changes, over recorded runs or live with your own key. | 2026-09-15 | | guides | 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 that three sizes of model give the same correct answer, and check the kitchen model with a script, because it is only worth having once something checks it. | 2026-08-26 | | guides | 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 | ~4 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 | A Claude Code plugin for contributing to GitLab projects, above all the gitlab-org/gitlab monorepo, from a machine with no GitLab Development Kit: a no-GDK contribution spine beside GitLab's own agent skills vendored at a pinned commit, until the spine merged into gitlab-simulation. | 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 for GitLab team members: file issues and merge requests against GitLab without a GDK, and reproduce self-managed GitLab on throwaway cloud VMs that delete themselves, so a change is proven on a customer's install before a maintainer sees it. | 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 |
| kaniko | A pipeline-driven build of the Chainguard kaniko fork for GitLab Runner: six images per release, compiled in UBI9 and shipped from scratch, in standard and FIPS 140-3 crypto, each cosign-signed with a CycloneDX SBOM, SLSA v1.0 provenance and an OpenVEX document attached. | 2026-05-13 | ~3 min | projects | gitlabcontainerssupply-chain |
| 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 | Copies a child's photos and videos out of a Famly nursery feed onto the household's own disk, with the post, the educator and the time written into each photo as EXIF and XMP. Optional upload to a self-hosted Immich. | 2026-05-08 | ~3 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 | ~16 min | writing | cmscloudflare-workersstatic-sites |
| Patinate | Render Strava rides over an OpenStreetMap basemap as a themed SVG plate. One Rust binary syncs activities into a SQLite cache, clips every track inside a salted hidden zone before the renderer sees it, and strips identifying attributes on the way out. Overlapping low-alpha strokes accumulate into brighter colour where you ride often, the way patina builds on metal. | 2026-05-06 | ~3 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 | ~3 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 | ~3 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 | | guides | aiharnessclaude-code |
| postern | Routes events from Azure Event Grid, GCP Pub/Sub, AWS SQS, Kafka and any CloudEvents producer to GitLab pipeline triggers: one container, YAML routes, variables extracted from the payload, no database. | 2026-04-09 | ~3 min | projects | gitlabgocloudevents |
| kit | A tool-registry manager that resolved developer tool versions across git-based TOML registries, generated mise configuration from the result, verified every install, and ran the bumps through CI: a scheduled sense, a rules-first respond with cheap model inference for the edge cases, and a merge gate that re-checked every checksum. | 2026-04-06 | ~3 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 command-line tool that managed an agent's skills, subagents and rules the way a package manager manages packages: a git registry as the source, a synced copy under each project's .claude directory, a lockfile naming what was installed, and a hook that reported drift as it happened. | 2026-04-05 | ~3 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 | Session multiplexer for AI coding work, written in Rust over tmux. It owns the <repo>/<campaign> address across the tmux session, the campaign files on disk and the runtime's conversation, with a resume engine that snapshots a session and brings it back. | 2026-03-27 | ~3 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 |
| yotoshelf | A self-hosted tool for making Yoto Make Your Own audio cards: record in a browser tab, draft and voice stories, print labels, publish through go-yoto, a dependency-free Go client with a dated ledger of how the API really behaves. | 2026-03-14 | ~3 min | projects | goyotohousehold |
| kebnf | Converts the OMG's KeBNF text for KerML and SysML v2 into ANTLR4 and tree-sitter grammars from one parsed AST, recording the metamodel binding it strips to a per-rule mapping file. The tree-sitter backend writes definition and usage rules with their prefix keywords inlined, so GLR can resolve the grammar. | 2026-03-10 | ~3 min | projects | grammarsysmlrust |
| sysml | A Rust toolkit that parses SysML v2 models into a knowledge graph and serves it to people, CI and language-model agents through one core: a clap CLI, a feature-gated MCP server and a skill file that teaches an agent the CLI. A study instrument for how an agent can work a large model without reading it whole. | 2026-03-10 | ~3 min | projects | sysmlaimcp |
| sysml-bench | An evaluation harness that measures whether giving a tool-augmented LLM more tools helps it answer questions about a SysML v2 model: typed tasks scored per field against published schemas, four tool sets called through a command line, public corpora of several sizes, and a pre-registered replication on an independent corpus. | 2026-03-10 | ~3 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 halts the agent at an agree step until a human approves the plan. | 2026-03-08 | ~3 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 | ~3 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 |