Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by Jackson Ly
Four models, one job each: what our own logs say about splitting the work
Most people pick one model and ask it to do everything. We stopped doing that months ago, mostly because it kept running out. Our subscriptions hit their limits, and the one model doing everything also checked its own work, which is the one job a model is worst at. So we split it. Claude plans and checks. Grok attacks whatever Claude just wrote. Codex builds the big pieces. And as of this week, Tīrtha, our own router, takes the routine building. We kept a ledger of who caught what.
225 billion Claude Code tokens in 30 days, and the subagents that never named a model
My rule for coding agents is "plan with the expensive model, execute with cheaper ones". Then I added up every Claude Code token from my busiest 30 days, 15 September to 14 October: 225.1 billion tokens over 736,633 API responses. Opus models ran 94% of them. In two of those weeks, most of my subagents never named a model, so they inherited Opus from their parent session and I didn't notice. It was just me with a Mac, a home PC and, on a heavy day, ten or more agents working at the same time.
Test the second access path before you call a metric unreadable
I keep a list of surfaces whose numbers I could not read, with a short reason written next to each one. Discourse gives you nothing per post. The comments API has no reaction field. Once a line like that is written down it stops looking like a hypothesis, and nothing in my process ever reopened one. This week I re-probed four of them and three turned out to be readable.
Refreshing a token I did not own logged our account out
We run a monitoring job that checks a Bluesky account for replies. Last week I fixed a real bug in it, and the fix took the account offline for two days. The bug was worth fixing. The fix was the wrong shape, for a reason that is easy to miss when you are integrating with an app you did not write. The bug I was fixing The job read the session out of the browser's local storage and called the notification endpoint with it.
A 200 response is not a page, and your policy check is grepping an empty shell
I run automated checks over terms of service and publisher agreements before we use a platform. Fetch the page, strip the tags, grep for the clauses that matter. It is not sophisticated and it has worked for months. This week it lied to me three times. The numbers Same script, same extraction, three legal pages: peerlist.io/terms returned 60 characters of text. daily.dev/terms returned 70. substack.com/pa, which is a full publisher agreement, returned 1,345.
Your agent's inbox check is measuring read state, not answered state
If you run an agent that answers inbound, it needs exactly one boolean per item: have we replied to this yet. Every platform hands you something that looks like that boolean, and none of them actually is. I spent this week finding three different ways that gap swallows real messages. All three came out of the same agent, on three different platforms, and the fix turned out to be the same shape every time. 1.
Durable approval is not the same as valid approval
A few weeks ago we shipped a general command tool for a local agent, with a deny-list in front of it and a human approval gate behind it. I wrote at the time that the deny-list is the part that looks like engineering and does not hold, because you cannot enumerate the dangerous set. The gate is the part that holds. Someone pushed back with a good refinement. The gate only holds if approval is real state with a lifecycle: requested, then approved or rejected, then consumed, then expired.
Running local and cloud models in the same coding agent: what actually ships in 2026
Someone on r/LocalLLaMA asked a question this week that turned out to be harder to answer than it looks: which open-source coding harness lets a local model and a cloud model work on the same task, together, in one loop? The answers he got were a proxy and a shrug. He rejected both, correctly. So here is the actual answer, with the config knobs, and an honest account of the part that does not exist yet.
Human in the loop is not a switch: classify the commands
Human in the loop is usually implemented as a switch: approvals on, or approvals off. Both settings are wrong for an agent that runs shell commands, and you find that out the same way everyone does, which is by watching a long task die on its third ls. The stall looks like this. Your agent is working through something multi-step, it needs to look at a directory, the harness raises an approval, and the run stops dead waiting for a human who has gone to make coffee.
Your baseline scored 0.000. That's a broken harness, not a result.
Your baseline scored 0.000? Before you publish the win, here is the checklist I now run, because a zero from a baseline is almost never a result. It is usually your harness. This week I watched a builder on r/Rag do something rare: he benchmarked his own memory library against plain RAG expecting a win, got three null results, and published the confounds instead of the victory.
Why Your LLM Pipeline Is Burning 60% of Its Token Budget on Noise (and How to Fix It)
I run a lot of RAG pipelines. And for a while, I was doing what most people do: retrieve the top-k documents, concatenate them into the context, and ship the whole thing to the LLM. It worked. But when I started looking closely at what was actually in those contexts, I noticed something uncomfortable: a huge fraction of every prompt was filler. Background sentences that restated the obvious. Transition paragraphs that connected ideas the model didn't need connected.
Our Rust file watcher ate 23.6 GB of RAM, and our ignore rules never had a chance
We build a local-first indexer for macOS. It watches the user's home folder so that when a file changes, we reindex just that file. Watching one project directory is a solved problem. Watching a real human's $HOME is a different sport, and it broke us in a way that took a heap profiler to see. The symptom The app sat at roughly 25 GB of resident memory. Not a slow leak either. It climbed there shortly after launch and stayed. One core also pinned itself for about ten minutes at every boot.
Point any app at a local LLM on your Mac (OpenAI-compatible endpoints)
Most apps that grew an "AI" feature in the last two years talk to one of a handful of cloud APIs, and almost all of them speak the same dialect: the OpenAI Chat Completions format. That one detail is the reason you can pull the cloud out and run the whole thing locally on a Mac without the app ever noticing. Here is the trick, why it works, and the gotchas that bite. The one interface everything agrees on OpenAI's /v1/chat/completions endpoint became the de facto standard.
MLX vs GGUF on Apple Silicon: which local LLM format should you actually use?
If you run local models on a Mac, you eventually hit the same fork in the road: the same model is available as a GGUF file and as an MLX version, and something has to tell you which one to download. The short answer is that MLX is faster on Apple Silicon and GGUF goes everywhere. The useful answer is knowing when that trade actually matters, because for a lot of setups it does not. Here is the practical version, with the reasons.
What poisoning a RAG store taught us about agent memory
Most of the "AI memory" conversation is about getting things in: chunking, embeddings, which vector database, how to compress a long chat into something you can recall later. Almost none of it is about what happens when one of those memories is wrong on purpose. That is the part we cannot stop thinking about while building a local-first personal memory layer, because an assistant that remembers you is also an assistant that can be talked into remembering a lie.
Why I built my Mac assistant to run 100% on-device (and what local-first actually cost me)
I'm building a proactive personal assistant for the Mac called recal. It watches how I work, learns my patterns, and starts doing the repetitive busywork for me. The one constraint I refused to bend on: it runs entirely on-device. No cloud, no account, no server. 0 bytes of my activity leave the machine. This is the honest engineering version of that decision: why I made it, what it bought me, and what it genuinely cost.
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with Jackson
Contact Jackson, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack