I left cmux for herdr at the start of June because its remote support did not fit how I work. Maybe I should have waited a little longer! cmux shipped a daemon that keeps SSH terminals alive across reconnects on 1 June, then added SSH agent forwarding on 4 June. I stayed on herdr anyway. I’ve now spent about two months with each, moving between Linux boxes and my Mac while running several…
Most of my last couple of weeks have been spent on code reviews and planning. Everyone can write code fast and cheaply , teammates and agents both, so the wall of PRs mounts quicker than anyone can read it. Reviewing is how I stay a contributor to all that code: reading a change properly, even just its core path, means I know what’s going on in that part of the system and I can still…
I use Pi and Claude Code day to day, and I run them in two places. On my Mac, Claude Code’s permissions stay on because the box holds personal credentials and uncommitted work. On a pair of second-hand Dell micros, both agents run unattended with scoped project access and no irreplaceable local state. I assume an unattended agent will eventually do something I didn’t mean, so the…
TL;DR Each MCP tool puts a contract in the model’s context. I keep related typed filters together and let the agent shape authorised results in code. Server-side scoping stays where access requires it. Progressive discovery stops a large catalog from using too much context. The tempting way to build a data MCP server is one query_data(dataset, filters) tool. Every new slice adds another…
I disqualified a 30B vision model for being too slow, and I was wrong about why. On my DGX Spark it timed out past 21 minutes on trivial documents, with no reading gain over its 8B sibling to show for the wait, so I binned it. Then I re-ran the same task on an RTX 5090 and successful runs finished in 22 to 140 seconds, so speed was never the real problem. The model still fails, because under…
TL;DR A guaranteed JSON schema tells you the shape is right, not that the content is any good. So I trust an LLM in stages: lock the shape with structured outputs, now native on Bedrock through constrained decoding, then check the content with Pydantic Evals, then grade the open-ended parts with an LLM judge you’ve calibrated against your own labels. That’s how I get output I’ll…
TL;DR A typed FastMCP tool takes a few lines. Putting one in front of company data adds caller authentication and per-tool access control. This build-along then adds an audit trail and file delivery. The complete example runs without an identity provider or AWS account. Most MCP tutorials stop at a few tools running on your own machine with no authentication. That is enough to learn the protocol…
The argument I keep hearing is that skills have made MCP servers redundant. A skill can drive any CLI, so point the agent at aws or psql and it can do anything a server can. For one person working on their own machine, that’s mostly true. Calling a CLI doesn’t make a skill a good way to authenticate or retrieve governed data. The skill uses whatever credentials happen to be on your…
Specs rot for a reason: we link them to code by file path and line number, and code moves. The spec says the token refresh logic lives in src/auth/service.py , someone refactors it into TokenService , and now the spec describes a file that no longer exists. Nobody notices until the spec is wrong enough to mislead someone, usually an agent, usually mine. Instead of pointing at where the code lives,…
If you’re thinking about getting into software engineering right now, the vibes are terrible. Every second post on social media tells you the career is dead: AI writes the code and nobody hires juniors, so pack it up. I understand why people feel that way, and some of it is true, but the full picture is messier than the doom scroll suggests and a lot more hopeful. I’ve been building…
This post is for the mids, seniors, and principals trying to work out what our jobs look like now that the machine writes the code. If you’re early in your career and wondering whether the whole thing is still worth pursuing, that’s a different conversation and I’ll write it up separately soon. I’ve been building software for over a decade, and these days I use AI coding…
TL;DR Open weights didn’t catch the frontier in 2026, but they got close enough for most of the work I do day to day. The gap closed because sparse attention, MoE routing, latent KV compression and four-bit quantisation cut the compute and memory per token without giving up much quality, rather than through bigger models or more RAM. This walks through the engineering that closed the gap,…
My personal coding setup is a remote Ubuntu box that I connect to via ssh. Pi and Claude Code do the work. I scope down access because Pi runs without permission prompts and I use Claude’s --dangerously-skip-permissions flag. Neovim handles edits, while yazi gives me review and filesystem navigation with git status patched into the file tree. tmux and mosh hold it all together so nothing…
I built a PR reviewer called lgtmaybe , which is the joke I wanted in the name before I’d even started writing the code. You point it at a pull request, pick a model with one flag, and it posts inline comments plus a summary. A clean PR gets a 👍 LGTM, and everything else gets a maybe. The thing I’m happiest with is that you can run it on OpenAI, Anthropic, OpenRouter, Bedrock, Vertex,…
The morning coffee, my first priority! Hey, I’m Matt - a Principal Engineer at AWS, living in Melbourne, Australia 🇦🇺. I build things and write up the bits worth keeping. Lately, that’s mostly: Building tools in Python - mostly Pydantic, PydanticAI, FastAPI and AWS Strands. I like typed code, and agents do a lot of the boring work. Playing with open-source LLMs - Qwen, GLM and…
A few blogs and people worth your time. Paul Kukiel - a good friend of mine, and one of the best Solution Architects I know. He writes hands-on posts on AWS, Python, and AI-assisted coding. Melchi Salins - a colleague who goes deep on compute and AI infrastructure. His KV cache explainer even ships with an interactive calculator. If we know each other and you’d like a link here, get in…
A few things I’ve built or am still tinkering with. lgtmaybe # A PR reviewer that works with six model providers behind one --provider flag. Bedrock and Vertex use GitHub OIDC, so the cloud providers don’t need static keys in your secrets. The same Python core ships as a PyPI CLI and a GitHub Action, with AI doing most of the typing. I wrote up how I built it , the full docs live at…
Archive post - originally published 30 September 2021 on devsintheshed.com . The example is CDK v1 in JavaScript, and I’ve transcribed the code from the original article’s screenshots (the two lines of require s and the class declaration above the visible area are the standard cdk init template). The concept of construct IDs and unique IDs is unchanged in v2, but the imports have moved…
Archive post - originally published 30 September 2021 on devsintheshed.com . I’ve left the article exactly as it ran back then: CDK v1 , aws_cdk.core , the per-service aws-cdk.aws-* packages, the lot. It’s a snapshot of how this worked at the time. CDK has since moved to v2 and a fair bit of the code below no longer runs as written - skip to the 2026 appendix at the end for…