Blog(150)
Every post, newest first: what I built, what broke, and what I changed. Browse by topic.
- / Date/ Name
- My tmux test SIGKILLed the agent running it
- My agent claimed a test suite that did not exist
- Deleting a clean git worktree broke a live agent session's shim
- The git check that proves isolation isn't the one you'd reach for
- Park the decision, not the task
- My alarm was an `if` statement, and my backend wasn't in it
- When you're straining to recall the command, that's the bug
- The only way to ship prod is to cut a tag
- Merged is not deployed
- The 2FA wall automation can't climb
- My agent kept signing its mail with someone else's return address
- You can't un-queue a poller
- 'Requires the human' is a promise, not a shrug
- The tmux window title lied to me
- Green CI lied to me four different ways
- The merge gate was built to avoid loops, not to define done
- Some tokens can't be re-minted, only copied
- The -A flag that unhung my launchd agent
- My machines deploy themselves: one runner per box
- Small request 200, big request 429, same account, same second
- An AI reviewer's silence is not a yes
- Zombie agents: when the watchdog isn't the one doing the killing
- Outdated means the lines moved, not that you fixed it
- Half my agents never got the memo
- Stay in your lane, file a P0
- The glob that ate the rest of my file
- The comment count was lying to me
- Say the word and I'll X
- Green CI is a grammar check, not a fact check
- systemctl show lied to me about my own env var
- The outdated comment that wouldn't die
- An old timestamp is not a dead backup
- Each repo's CI is ground truth
- The coordinator shouldn't be running grep
- My rescue daemon said 'LIVE' while seeing nothing
- The fourth account didn't exist yet
- My fleet boss reported 22 stuck panes instead of fixing them
- 231 green tests certified my fail-open bug
- The crash loop that passed every health check
- Zero events, exit 1, one second: the failure is startup, not your code
- When a quick fix becomes a dig, send someone else down the hole
- My agent kept SSHing into the box it was already running on
- Agents flag merge-readiness. Humans merge.
- Gate the boundary, not every merge
- Ask the pane you're in, not the one tmux is looking at
- My rescue script typed a command into Claude's chat
- Merged is not running
- My agent burned the SSH lockout budget guessing keys
- The zombie PR loop: why my agents kept working after the job was done
- My agent's 'green' was a lie until I ran the real test
- The stale pointer that looked like a dead login
- The tmux title said 'Debug QUIC error.' It was three days out of date.
- My file sync committed a delete of 803,100 files. Then it tried to push it everywhere.
- zsh doesn't split your variables, and silence is not success
- My agents cached their doctrine, not my commit
- Name the pane, not the UUID
- The admin override is a different trust context
- The glob that ate the rest of my shell init
- Empty `which` means 'not in PATH', not 'not installed'
- The process I killed was alive. It just had a different name.
- My dotfiles deploy themselves now (I stopped SSHing into five boxes)
- The pipeline is the review
- 'Go all the way' does not mean merge
- The daemon was running. The socket wasn't there.
- scutil --dns lied to me
- Put the dumb checks in the blocking path
- My merge gate counted comments instead of asking GitHub
- Don't send your agents on a scavenger hunt
- My lint rule caught its own test fixture
- Reconcile-or-refuse: how to trust a number an AI pulled out of a bank statement
- The rescuer couldn't see the lifeline
- Silence is not approval
- My resume hook came back alive and froze on the first question
- Agents reason on whatever state exists when they look
- My agent said it was blocked. It had the keys the whole time.
- Never run git checkout in a loop's working directory
- A comment count is not a merge verdict
- I said my bank-statement parser was 100% accurate. I was grading it against itself.
- I benchmarked three OCR models on real bank statements. The best one flipped with the layout.
- The loop is not allowed to decide it's done
- Green CI is necessary, not sufficient
- 'Say the word and I'll run it' was the tell
- An old timestamp on identical content is health, not staleness
- The boss agent's context window is the most expensive thing in the fleet
- My fleet boss asked permission for a chore
- A credential clobber looks exactly like a rate limit
- A 51-line parser beat a 3-billion-parameter model at reading bank statements
- My agent talked to a wall for 55 ticks
- Green didn't mean seeing: the night my rescue daemons watched nothing
- 'Threads resolved' is not 'the fix is in the code'
- Make your AI reviewer argue with itself
- CODY has to prove itself wrong first
- My tmux-resurrect snapshot lied, so I rebuilt the Claude fleet from jsonl mtimes
- My passing tests encoded the fail-open bug as correct behavior
- My macOS agent workers went dark until I moved them from LaunchAgent to LaunchDaemon
- Byte-slicing a Claude agent's context payload poisoned every retry
- My agent-to-agent message ledger came back out of order. Clock skew was the bug.
- My Claude Code balancer was rotating accounts when it should have waited 30 seconds
- My Claude Code rescue daemon was running on the accounts it rescued
- Continuous deployment, not freeze
- Examples are the spine, not the rulebook
- Finish, don't stage: what I want from an agent on the night shift
- Green on mocks is not done
- I cloned my own voice for my website
- Visibility is not theater
- I built a load balancer for my Claude Code subscriptions
- Git worktrees ate my edits, so we switched to dedicated machines for agent isolation
- Building on giants: how Daniel Miessler's PAI became my foundation
- Skills are just the beginning: the four-layer agent stack
- Version-controlling your AI's brain
- PAI: the operating system I built around my AI assistant
- Your CLAUDE.md is probably making your agent worse
- Agentic engineering, part 1: building skills that ship code for you
- Agentic engineering, part 2: adversarial code review that loops until clean
- Agentic engineering, part 3: tracing every code path before it becomes a bug
- Agentic engineering, part 4: nine skills that replaced my dev process
- I built a bug-hunting loop that doesn't quit: the BugBot methodology
- Why the same code looks different from every angle: BugBot lessons learned
- Implementing the GCC paper: giving AI agents persistent, structured memory
- Two healthcare sites, 400 Lighthouse points, and the lessons that got us there
- Debugging a ghost in the machine: session isolation for Claude Code plugins
- Field-level ensemble OCR: getting 74.8% accuracy from two mediocre vision models
- Patching Synology Active Backup for Linux to run on kernel 6.17
- From 5.6% to 62.3% accuracy: building a self-hosted insurance card OCR service
- Two AI trends changing urgent care in 2026
- The burden of being: why responsibility might be the antidote to modern nihilism
- The four-line architecture that beat complex AI frameworks
- Building an AI patient chatbot for urgent care with n8n, GPT-4, and Langfuse
- The delayed prescription strategy: how to reduce antibiotic use 62% while keeping patient satisfaction
- Why urgent care centers are leaving walk-in-only for hybrid scheduling
- Machiavelli was right: eight strategic principles every leader should understand
- How I built a $2,300/year RAG system that rivals $40K OpenAI setups
- What Peterson's Genesis lectures teach about sacrifice: why Abraham waited 100 years
- The six-task system: how I manage knowledge work with PARA and the Ivy Lee method
- Why terminal multiplexers are an anti-pattern: lessons from Kitty's creator
- The three levels of why: why surface motivation fails and how to find your primal drive
- The universal algorithm: how one framework scales from bug fixes to building companies
- Building tools to fix real problems: a patient insurance education app
- Building an enterprise RAG system with local SLMs: Phi-4 and LightRAG
- Building an AI analysis agent in hours: a no-code approach with Lovable and n8n
- Supporting SSE for Model Context Protocol (MCP) in Python: introducing fastapi-mcp-client
- Architecting extensible AI agents: a modular core with pluggable skills and SSE communication
- Building reliable AI agents: evaluation with the Azure AI SDK behind a custom APIM gateway
- Porting GPTResearcher to Semantic Kernel: building an enterprise-ready research agent
- Moving a RAG pipeline onto GPUs: 3.5 hours down to 42 minutes
- Building an enterprise-grade RAG system: three retrieval strategies, fused
- Defining PII masking policies with AWS Bedrock Guardrails
- Fine-tuning Microsoft Phi-2 for sentiment analysis, step by step
- Optimizing Apache Spark for skewed data: techniques and a case study
- Sentiment analysis: comparing Azure, AWS, and custom fine-tuned models