Ops culture and other hacker ramblings
Swamp Beyond Infrastructure
If you have used swamp.club at all, you probably think of it as an infrastructure automation tool. The ecosystem gravitates that way. The most-pulled extension is @john/k8s with 15 model types wrapping the Kubernetes API. The examples in the docs show pod health checks and deployment workflows. The leaderboard is full of people automating infrastructure tasks. That framing is incomplete. What swamp actually provides is a typed, versioned, schema-validated data layer for AI agents. The primitives are: models with Zod schemas, immutable versioned data, method execution, and composable workflow DAGs. Those primitives do not care whether the data flowing through them is pod status or prose rules. ...
The Workflow Collision
A collision is coming that most teams have not noticed yet. On one side you have the workflow your team actually uses. If you run a platform or operations team, it probably looks something like Kanban: pull-based flow, WIP limits, design sessions before implementation, a small number of states that everyone understands. The workflow exists to serve the people. You have spent years tuning it. It works. On the other side you have the lifecycle your AI agent needs. If you are using an agentic framework — Swamp, or something like it — the agent operates through a state machine with enforced transitions, upfront planning, adversarial review gates, and checks that physically prevent skipping steps. The lifecycle exists to constrain the agent. It works. ...
Building the Machine
I wrote recently about the difference between easy and simple.1 That post was philosophical. This one is not. This is what it looks like in practice. I have been building an AWS operations toolkit using Swamp. The toolkit investigates outages. It runs daily health checks. It composes nine separate extensions into two workflows that gather data from CloudWatch, X-Ray, EC2, Lambda, and load balancers, then produce an actionable report. This is the machine that builds the machine. Not the code. The system that produces the code and makes sense of the output. ...
The Architect's Instinct
We are living through a strange professional silence. Many of us use AI every day while feeling a quiet guilt about it. We worry that by offloading the labor of coding, we are offloading our value as engineers. We reach for the tool because it works. Then we wonder what it means that we needed it. The discomfort is not about the technology. It is the sense that we are moving faster than we can think. ...
Growing with the SparkleFormation registry
Growing into SparkleFormation In my continued usage with SparkleFormation I’m really growing to appreciate the convenience of having ruby available when composing templates. Things that would be challenging in a simplistic serialization format or lead to unmanageable duplication become easily solvable thanks to the powerful combination of an actual programming language, which json and yml are not, and the simplicity of the SparkleFormation DSL. At it’s simplest you can mirror the structure of any cloudformation json (and finally have comments inline!) but you quickly discover more advanced use cases. ...
SparkleFormation Bedtime Story
A very brief whirlwind tour of sparkles or: How I learned to stop writing terrible serialization formats directly and love the dsl An imaginary story of the beginner exploring some infrastructure tooling. Getting started Set env variables. Maybe create an init.sh while practicing. export AWS_ACCESS_KEY_ID="your key" export AWS_SECRET_ACCESS_KEY="your sekret" export AWS_REGION="us-east-1" # because YOLO export NESTED_BUCKET="s3://mah_bukkit" load that stuff into my current shell source ./init.sh Create a config .sfn file aready exists, thanks @luckymike. no need to create one. ...
OS Install using VirtualBox raw disk access
Recently I had a need to create a bootable sd card containing OpenBSD. Since my day to day machine is a MacBook Air with no cdrom drive this initially seemed difficult. It turned out to be much easier than I expected thanks to VirtualBox raw disk access. Raw hard disk access can be dangerous, mainly because there’s a risk you use the wrong device and blow away things you actually need, so be careful and make sure you know you’re using the right physical device. ...
Email in emacs
I genuinely dislike email, yet it’s a necessary part of working and communicating these days. I suppose there is occasional value found in the community of certain mailing lists, but generally the way email is used today is simply more of a distraction or interruption. A while back Steve Losh described how to setup Mutt the way he likes. It was an interesting read because he was detailed, technical and clearly prefers very customizable tools. I agree with him, and although I’ve long since abandonded Mutt I was motivated to describe my version of powerful, customizable, terminal based email management. ...
Fixing emacs bindings in iTerm2
I spend a decent amount of time in org-mode, using Emacs + iTerm2 on a Macbook Air. I fixed a recent annoyance I encountered when using Emacs org-mode to track time for a project. Org-mode has a handy time tracking feature and as the manual points out both C-S-<up/down> S-M-<up/down> can be used to call various functions for adjusting recorded time. In particular I wanted to use org-timestamp-down to add some time for a CLOCK item I had forgotten to start before a Skype call. ...
Update cookbook_versions with an awk one-liner
Sometimes it’s the simplest things that remind me why I love the classic unix tools. Here’s a quick way to fill in cookbook_versions for a chef environment using awk. Of course, this is a ridiculously simple usage of awk. There’s plenty more that can be done with just a single line of awk.