Mac app that turns a stems delivery into a ready DAW session: every stem named, placed and playable, with a receipt showing what was imported and what was skipped. Signed and notarised.
Writing
Notes on AI agents, security, and building tools that last.
The Drawing Is the Spec. The Data on the Arrows Is the Contract.
Everyone is writing about managing coding agents like a team. I measured 7,785 of my own prompts: median 11 words. The prompt is short because the spec is a drawing, with the real data written on every arrow. Once the data on each hop is chosen, the code is already decided. Here is the loop, with a real diagram.
Check the Recruiter Before the Code
Binance lost $6.3 billion, and by its own account it started with a fake job interview and a take-home. I've run due diligence on recruiter messages with my agents since March. Tonight I added the part that reads the take-home without running it, and open-sourced the lot.
What Does It Actually Mean to Revoke an AI Agent?
At AI Security Night London, one talk asked how you revoke an AI agent. On the way home I kept asking: revoke what? The process, the keys, the work already running, or the damage already done?
My Sessions Are the Traces: Error Analysis on My Own AI Agents
Chapter 3 of Evals for AI Engineers says to read traces end to end, mark the first failing step, and group the notes only after 20 of them. I work with coding agents all day, so I built that into the dashboard I already use. Here is the page, the first mark, and the plan.
I Typed 'I Told You' 117 Times. Then I Stopped Writing Rules for My AI Agents.
I scanned 1,754 sessions and 4,701 of my own prompts across two months. Written rules in a markdown file did not stop my agents from skipping skills, starting edits before design sign-off, or burning frontier tokens on lookups. Here is how I replaced text rules with deterministic code guards.
I wanted to see what my AI agents could reach
I added a map to Agent Estate to explore what could happen when file access, tools and outside connections work together. Each possible route keeps its evidence, conditions and unknowns visible.
I Built a Usage Tracker for My AI Agents
I run three AI coding tools, each with its own five-hour and weekly limits. This is the panel I built to see all of them in one place: how it asks each tool, how it reads three very different answers, how the numbers get to the screen, and how I checked it tells the truth.
My Test Passed Because the Answer Was in the Test
An AI feature I was about to ship scored 60% on its first test. The test songs had a metronome in them. Three tests later the real answer was sitting inside the files all along. This is how I check what my agents build.
My Agent Saw an Empty Graph. The Parser Was Wrong.
A schema came back in a format the client did not recognise, and the parser turned that into an empty list. No exception, no HTTP error. For an agent reading the graph through MCP tools, 'I can't read this' became 'there is nothing here'.
Most of My Context Window Was Unaccounted For
I built a dashboard to see what my agents had. It still couldn't tell me what was in the context window at the moment I hit enter. So I built a context workbench, measured one live session, and found that 80% of the used context was not attributable to anything I could name.
I Couldn't See What My Agents Could See
I use AI agents across three different harnesses every day, and for months I had no idea which of them knew what. So I built myself a control panel. This is how it got birthed, and why observability of your own setup is a different problem from observability of your outputs.
I Built My Agent a Memory. The Lookup Was Pointing the Wrong Way.
My agent's memory had a write path and no read path. The check I needed already existed. It just ran at the end of the job instead of the start. An ordering bug wearing the costume of a missing feature.
Falsify the judge before trusting the eval
An LLM judge can give you a green evaluation without proving it can recognise a bad answer. So I added a tier to my eval harness that has to fail before it's allowed to pass.
My Harness Was Invisible. So I Built It an Observatory.
Nine skills, seven hooks, 135 memory files, crons — all buried in dotfiles and edited by digging through VS Code. I built a UI over the whole thing: memory graph, in-place editing, skill changelogs, hook config, and an evals screen. Because handing frontier tasks down to cheaper models only works if you can measure what a model can do with your current skills.
My Agent Argues With Me Before It Updates My Worldview
Summaries pile up and thinking stays still. So I built a pipeline where videos become typed challenges against a beliefs file capped at seven entries, checked for novelty against a knowledge graph, and judged by exactly one person: me.
My AI Agent Waited for Me to Start It. Now One Part Runs While I Sleep.
I had memory, budgets, and guardrails, and I was still the one pressing go. Climbing from harness to loop turned out to be one timer, one snapshot file, and knowing which celebrated pattern to skip.
ShadowScout: Sending the Scout Before Another AI Tool Gets Adopted
A hackathon build for shadow AI approvals: Tavily searches vendor evidence, Gemini extracts claims, deterministic policy rules make the decision, and ClickHouse-shaped audit rows preserve the trail.
Recruiter Risk Triage: Separating Real Opportunities From Unsafe Outreach
A real LinkedIn recruiter message felt slightly off, so I checked the company, found the website did not resolve, and traced the role back to an expired job description. This is the local-first tool I built from that instinct.
Primitive Reps: The Way I Learn Hard Things
I do not learn hard technical skills by covering topics. I break them into small movements and repeat those movements across scenarios until the pattern becomes automatic.
I Gave My AI Agent a Memory. Then It Started Choking on It.
The follow-up to the memory-layer post. Persistent context worked too well: session start was burning 30-40K tokens before I typed a word. Four fixes — context is a budget, not a bucket.
Your Platform Is a Bottleneck With a Logo
A simple test for whether an internal platform is actually self-service, or just another queue developers have to wait in.
What Broke When I Tried to Use My Own Practice App
The Musician's Practice App is not public yet. This is a build note from getting it ready for early testing by using it like an actual musician, not a feature checklist.
The Platform Nobody Thinks About Anymore
Platform engineering only becomes visible when it breaks. This is the story of building reusable testing, compliance and production-gating infrastructure that multiple services could adopt without reinventing the same deployment safety work every time.
I Built a Memory Layer for My AI Agent
Stateless AI sessions waste engineering time. I built a context layer where sessions load relevant history, persist decisions, and traverse a knowledge graph instead of starting from zero.
Your Production System Has Logs. Your Career Probably Doesn’t.
Engineering work leaves traces everywhere: Jira, GitHub, Slack, incidents, notes. Career observability is about connecting them before performance review season turns you into an archaeologist.
I Built a RAG System to Solve a Real Problem I've Had for 15 Years
You put a specific keyboard on the rider, get flown out to the gig, and when you arrive it's something completely different. That's the scenario this project solves.
Projects
Practical AI workflow tools for music, security, and operations.
Autonomous compliance approval agent for shadow AI tools. Searches vendor evidence, maps it to company policy, produces scoped decisions, and monitors approved tools for drift.
Local-first dashboard for checking recruiter outreach across legitimacy, security risk, original JD clues, opportunity fit, and safe reply strategy.
A grounded RAG system that answers questions about keyboard manuals using retrieved evidence, refusals, evals, and Langfuse tracing.
Practice app for musicians who can already play. Timer, YouTube player, metronome, tuner, sheet music, AI recommendations.
AI Studio Agent
In progressAutomated stem loading for Ableton Live. The goal: send a message from your phone and open a prepared Ableton project later.
Threat Intel Daily Brief
In progressAutomated morning email with high-signal cybersecurity threat items from trusted sources. Built for engineers and analysts.