Articles
Why Your AI Agent Fixates — And What Maslow Can Do About It
Why Your AI Agent Fixates — And What Maslow Can Do About It
What Does the Agent Want? From Drives to Goals
What Does the Agent Want? From Drives to Goals
Goal-oriented planning in case engines
Most case engines dispatch workers by trigger condition. A context change fires, the engine evaluates which bindings match, and every matching binding gets dispatched. The order is either declarati...
The Effects That Watch Themselves
The Effects That Watch Themselves
GOAP in a Case Engine: What Six Integration Tests Teach About Planning Under Uncertainty
A case engine that dispatches workers based on trigger conditions doesn’t need a planner. Bindings fire when their conditions are met. Context changes. More bindings fire. The choreography strategy...
Leaking Semaphore Slots: Anatomy of a Session Leak
A GatedAgentSession holds a Semaphore permit for the duration of its lifecycle. The caller opens a session, runs queries against it, and closes it — at which point the permit returns to the pool. S...
Four Annotation Layers, One Interface
An agent that assesses aircraft defects needs to be cautious and methodical. Its inspector sign-off requires two independent approvals. Every step must produce an audit trail that satisfies EASA Pa...
Virtual Threads: Retiring the Reactive Tier
Virtual Threads: Retiring the Reactive Tier
Spec-Driven LLM Development at Scale: Why Architectural Patterns Are the Foundation
Working with LLMs on small, isolated tasks is straightforward. Working with them on a production platform — multiple repos, evolving domain, long-lived codebase — is a different problem. The differ...
Spec-Driven LLM Development at Scale: Why Architectural Patterns Are the Foundation
Spec-driven development is how you work effectively with LLMs at scale — and architectural patterns are what make it possible.
Guide: When the Machine Codes: A Series Introduction
A six-part argument for Java and Quarkus over Python as the language of choice when an LLM is doing most of the coding — and why the conventional case for Python doesn't transfer from human develop...
Part 1: When the Machine Codes: Against the Python Default in LLM-First Development
When the machine codes, Python's default advantages disappear — the case that the conventional choice of Python for LLM-first development rests on assumptions that only hold for human developers.
Part 2: When the Machine Codes: The LLM-First Development Advantage of Static Typing
The positive case: how static typing's properties at generation time, review time, and scale make statically typed languages better suited to a development model where the LLM is the primary implem...
Part 3: When the Machine Codes: From Python to Quarkus — A Migration Playbook
A case study in migrating from Python to Java/Quarkus under LLM-first development — what actually happened, what transferred, and what the process revealed about the argument.
Part 4: When the Machine Codes: Java’s Ecosystem Trajectory and a Call to the Industry
The strongest remaining objection to Java in LLM-first development is scientific computing — this article documents the trajectory on which it is being resolved and what the industry needs to do.
Part 5: When the Machine Codes: Parallel Design and Spec-Led Development at Scale — An Empirical Study
An empirical examination across five integrated casehub systems built Java-first from inception — API evolution, integration outcomes, and whether the model scales.
Part 6: When the Machine Codes: Synthesis and Recommendations
Five articles condensed into two sentences, and what follows from them for developers, architects, and the organisations building the next generation of AI-assisted software.
Companion: When the Machine Codes: Technical Companion
The mechanism behind the claims — supporting technical arguments for developers who want implementation detail rather than the top-line case made in the six main articles.
Four Things a Synchronous Blackboard Strategy Can't Do
Changing the LoopControl interface from a blocking contract to a reactive Uni unlocks four capabilities the classical synchronous blackboard control shell cannot support.
What I Learned Trying to Fix Claude’s Sycophancy Problem
What I learned rebuilding my CLAUDE.md from scratch — researching what the community had tried, understanding why it worked or didn't, and what actually changed Claude's behaviour.