I’ve covered PNG and text files, and now it’s time for Markdown, which can be thought of as a philosophy of formatting or a lifestyle of text documents more so than an actually well defined file format. It has structure, and it has specifications, plural, and nothing agrees. Here is three lines of Markdown run through five parsers: INPUT: '- outer\n - inner\n' Python-Markdown <ul>…
Last time I took apart PNG, which opens with eight bytes whose entire job is to announce “I am a PNG”. A text file opens with nothing. No signature, no header, no length field, no version, no metadata. It is bytes, and then it stops. So this post is the opposite of the last one. Instead of walking a structure, we’re going to look at what happens when there isn’t one. POSIX…
I’m starting a series on file formats. Not “here are the ten image formats you should know,” but the actual bytes: what’s in the file, in what order, and why someone decided it should be that way. Starting with PNG, because it’s the format most developers touch every day and almost nobody has looked inside. I am likely to cover a few things that other explainer…
I have a home server with Plenty of RAM and no useful GPU, so running a local model was never the interesting part of deploying Hermes Agent . The interesting part was making the agent setup repeatable. I could have pasted a docker run command over SSH and called it finished. It would have worked. But “it works” and “I can rebuild this server six months from now” are two…
Protecting against supply chain attacks requires vigilance. You have to audit your dependencies. You have to pin your versions. You have to review your install scripts. All of these are great things to do, but they require sustained effort. pnpm 11 took the obvious thing and made it the default. They changed the waiting period. minimumReleaseAge defines the minimum number of minutes that must pass…
How do you onboard a new engineer to a project when most of what they need to know is not checked into the code at all? It’s the agent configuration. It’s the rules about commands, the conventions the agent applies automatically because it’s stored in your memory. That isn’t shared. I think we’re still figuring out the answers to this. I’m not sure that we…
What does boring look like in the age of AI? And I’m not talking about uninteresting. I’m talking about highly maintainable. JavaScript? I mean I guess models are good at it. Everybody knows it. It runs everywhere. The biggest problem with JavaScript is that TypeScript is better. Certainly it’s better than picking a novelty language that you haven’t built anything with…
Automation earns trust by being easy to override, not by being impossible to question. That sounds backwards. The pitch for automating something is usually that it removes the human, and a system you keep reaching into feels like a system that didn’t finish the job. But the automation you actually trust, over years, is the one you know you can stop. Most automation that you set up is…
Congratulations, the best model available passed your eval. That’s not the question you should be answering. What other models could have achieved equivalent results? How much did it cost to run those other models? How long did it take for those other models to achieve equivalent results? All of these are the questions that you should be asking yourself. If the only thing you’re…
Do you really know what you’re doing? You swapped a model, you tuned an agentic workflow, you had the agent rewrite a chunk of a system prompt. You added a skill. Now the output feels sharper. Is that feeling a measurement? No, it’s an impression. This is when the vibes start seeping into your agentic engineering world view. How Impressions Fail A subjective assessment isn’t…
Public benchmarks of large language models are a fine way to compare models in the abstract, but they’re close to useless for answering questions about things that actually matter. Generally, it’s helpful to know which model is the best in general at a specific benchmark, but it doesn’t answer the question of which model is the best at that specific thing you ask it to do all day…
In the last post we talked about the problems with a distributed system, and touched on the fact that timestamps are not as reliable as you think they are. If you have two updated_at fields and you compare them, how do you decide which side is the correct one? The updated_at field only tells you that a write happened. It doesn’t tell you the meaning, or if it was intentional. Conflict…
How do you keep two sets of data in sync? Like, by definition, you now have a distributed system. It could be something simple, syncing files or talking with a remote service somewhere. Maybe it’s not a lot of code. Initially, it might not feel like a distributed system, because there’s no cluster or consensus protocol. There’s no leader election system. You have multiple leaders…
Sync bugs usually all start the same way. Two copies of something, both of them mostly right, and no written rule about which one wins. The problems occur when you don’t notice The bug. When the file says one thing and the database says another. It’s not a problem until it is. And then you have to spend time figuring the why and when’s of the drift. So let’s talk about…
Coding agents are remarkably good at reopening decisions you already made. Imagine a content pipeline where posts live as local Markdown files and a database holds the scheduling metadata. You open a fresh session. Which one does the agent think is authoritative? It has to guess. And the database looks like the better answer, because databases usually are. So it proposes the obvious cleanup: make…
I SSH’d into my home server this afternoon and ran docker stats on the memory layer that every one of my coding agent sessions talks to. Here’s what came back: mem0-qdrant 28.09MiB / 60.75GiB 2.13% mem0-neo4j 612.7MiB / 60.75GiB 0.77% 640 megabytes. Vector store and graph store, both up for three weeks straight, serving every remember and recall call my agents make. The entire…
I worked as a contractor at Apple more than a decade ago. The specific work doesn’t matter, but if I walked back through the doors today, I know what I’d pitch. Call them iApps , just as a thought experiment. An iApp would be a small interactive tool generated for one specific problem. You ask Apple Intelligence for help, it gives you the research, and when the answer needs a…
If you let an autonomous coding agent run in an unbounded loop, I have bad news for you, or rather, your wallet. It happens easily. An agent gets handed a task, runs into an unhandled error or a failing test, and gets stuck in a retry loop. It re-reads the same files, attempts the same broken patch, and streams tokens the whole time while nobody is watching. We solved this problem in cloud…
I have not built a full production observability stack for an autonomous agent. I’ve built lots of small wrappers around existing coding harnesses. I have a pretty good idea how quickly their output can turn into a wall of model responses, tool calls, and subprocess logs. But I have not run LangChain across a Kubernetes cluster or operated an LLM router at scale. So this is not a postmortem.…
Ask your agent to run the tests in a repo it has never seen before and watch what happens. It’s gonna load so many things into the context to try to figure it out, digging through the repo to find the right command and what framework you’re using. What if you could standardize on a way to run the tests no matter the language or the framework? just test It’s a statement.…
Coding agents have made one word much harder to say. No. You describe a feature, and the agent can already see the model, the migration, the command, the tests, and the docs it needs to touch. The whole thing sounds like an afternoon instead of a week. So why not build it? That question used to contain its own answer. We didn’t have the time or the people, and the feature wasn’t worth…
Give a good harness access to subagents and everything starts looking like a team project. You’ve got one agent working with the database layer. Another can research the API. Another can write the tests. Another can check the work. Another can manage moving the data. As work starts happening in parallel, colored dots appear, and the whole thing starts looking like an org chart. That sounds…
Every agent has a junk drawer. It usually starts with project instructions. Then I added build commands, personal preferences, database warnings, old architecture decisions, and things to fix later. The agent could see everything if I wanted it to, but then it would have to read a small novel before touching the code, recurring workflows were buried between random facts, and completed work kept…
I’ve written before that your AI agent needs a task manager , and I stand by it. Chat history is not project state. Context windows compact. Sessions end. If the work matters tomorrow, it needs to live somewhere tomorrow’s agent can find it. The part I didn’t mention: not every task matters tomorrow. Some work should disappear with the session. Turning all of it into durable…
I’ve watched thousands of tests run over the years. When they pass it has felt good. A huge screen of green checks in the terminal is incredibly rewarding as a software developer. But the work is never finished. The tests are always valuable. They are evidence, but they were never the definition of done. Tests Prove the Claims We Give Them I’ve written before that testing is how we…