Blog
Design patterns, formal methods, and the computer science theory behind our tools. We ground agentic software engineering with scaffolding from CS theory to create more reliable and deterministic outputs.
Building L1 Tools for L4 Agents
When agents need a visual interface, the most important design decision is where to draw the boundary between deterministic rendering and agentic composition.
The Verification Gap
As code moves from deterministic to agentic, the gap between what we can specify and what we can verify widens at every level. Five levels of code, five verification paradigms, and the case for formal methods in an agentic world.
AI Coding + Grounding and Formal Methods = Agentic Software Engineering
Formal specifications improve code reliability, but the cost of writing them kept them out of most projects. AI removes the time penalty. We're testing whether the payoff is as significant as we think.
Composable Tools: Integration Without Coupling
Our tools discover and enrich each other through filesystem conventions and shell hooks — six integration layers from sentinel checks to agent orchestration, with no shared code required for the first four.
Dev/Prod Namespace Isolation for Claude Code Plugins
Developing a Claude Code plugin while your users have it installed means running both versions simultaneously. Here's how we isolate dev from prod.
The Accountability Gap
When a human writes code, someone is accountable. When an LLM writes code, the terms of service say nobody is. Verification was always important — now it is load-bearing.
The Six Problems of Agentic Engineering
When engineering teams adopt AI agents, six distinct coordination problems emerge. Each operates at a different layer and timescale. No single tool solves all six — and that's healthy.
Choosing the Right Projection
The library-vs-service debate is old. What's new is that agents, apps, and humans all need to reach the same capability. Here's how we decide which integration point to use when.
MCP Patterns: Push Notifications in a Protocol Without Push
MCP has no push notification mechanism. We built six interlocking patterns to solve display, notification, broadcast, and process coordination for MCP-based tools.
Universal Access to Capability
We tried building every tool as a Python library with thin projection layers — CLI, MCP, and REST from one codebase. Here's what we learned.
The Installation Problem for MCP Tools
Installing an MCP tool touches PyPI, marketplace caches, and host configuration. One command per use case, backed by six patterns refined through a marketplace migration.
Design Decision Logs When AI Is Your Co-Author
AI assistants re-propose rejected approaches because context is ephemeral. Design decision logs — adapted from Michael Nygard's ADRs — are one way to solve this while the ecosystem builds better solutions.