For practitioners building with AI — developers, architects, and
technically curious leaders who want specific observations
from production AI work.
Cairns
Short trail markers — technical notes, lessons learned, and
observations from building production AI. Found here, not in your inbox.
Ship the constraint
Not every piece of feedback points toward addition. Not
every failure mode requires more prompts, more complex
orchestrations, more context, more steps or more agency.
Narrow scope is what makes output verifiable. The constraint
is what binds validation to delivery. Ship the constraint.
restraintverificationorchestration
Primary-source terminal authority
A model asked for provenance can hallucinate a retraction of
a true claim. Another model's agreement with the first is not
verification — it's two trained priors aligning. Only a
fetched URL with fresh timestamp from a reliable source
terminates a claim.
verificationprovenanceground-truth
Role separation is mechanical, not cultural
"Research, synthesis, and verification are different subagent
roles" is culture. Running them as distinct agent invocations —
separate processes, separate contexts, separate system prompts —
is architecture. The gap is where good intentions collapse
silently into single-session review-your-own-work. The gap
stays invisible until someone checks.
multi-agentverificationarchitecture
Perpetual tomorrow
Tests that get skipped are always skipped. Code that has a
comment "defer" will always be deferred. Tomorrow never comes.
Express sequence, not time — dependency is timeless.
ai-memorydependency-managementprocess-discipline
Stage names are not stage contracts
When a process moves to a new domain, the stage names may
stay the same while the behaviors diverge. A stage called
"build" in one context means create the artifact. In
another, it means define the structure only — no artifact
yet. An agent that infers behavior from labels will drive
confidently down the wrong road. When a model fills in what
a stage "probably means" from similar stages it has seen
before, the result looks right at the summary level and
fails at the execution level. Stop inferring from names. Re-
state the stage contract, scope, allowed actions, and
expected output. High-level resemblance is the danger, not
the safety.
agentic-systemsprocess-disciplineorchestration
Code is increasingly ephemeral
When the cost of build + test is close to the cost of
procure + integrate, it is almost always better to build.
You get exactly what you need: no dependency collisions, no
defensive workarounds, no vendor roadmap to track. But the
economics only work if you include the test. Build alone is
vibe coding. Build + test is engineering. The gap between
them is where most AI-assisted projects fail. This is true
for commodity code — glue, adapters, one-off tools. Schemas,
permissions, billing logic, and data models accumulate
consequences. That is infrastructure, not code.
architectureai-developmentbuild-vs-buy
Context in the window is not attention in focus
Context in the window is not attention in focus. A model's
competence in one domain doesn't transfer to the next — but
it all too often feels like it does. Fight the temptation
toward complacency. Never assume the model knows what you
haven't explicitly had it remember, or find.
ai-agentscontext-windoworchestration
What 47 analyses of the Claude Code leak missed
We surveyed 47 public analyses of the Claude Code leak. Every single
one asked the same question: "What's inside?" We asked a different
question: "What does Claude Code tell us about building better tools
for agents?"
ai-commentaryperspectiveclaude-code
Don't infer what you can detect
The pundits laughed at Anthropic's frustration regex — a simple
pattern matcher inside the most sophisticated AI system in the world.
But a regex fires every time, costs zero tokens, has zero
hallucination risk, and is trivially debuggable. The principle: use
deterministic methods for what can be determined deterministically.
Save inference for what requires judgment.
architecturedeterminismdesign-patterns
Response budgets: be a good citizen in someone else's context window
If you're building an MCP server, your tool responses land inside
someone else's context window. Unbounded results waste tokens the
agent needs for reasoning. Cap responses. Include a
truncated: true flag and a total_count.
Budget your output like a conference talk — say what matters, leave
room for questions.
mcpapi-designcontext-window
Metadata now, enforcement later
We added an agency field to log events — default "none,"
purely informational. Today it's metadata nobody reads. When
autonomous agents arrive, it's the audit trail that tells you which
actions were human-directed and which were agent-initiated. The cost
of an unused field is zero. The cost of retrofitting a field into a
running system is a migration.
design-patternsfuture-proofingai-tooling
Self-correction is not verification
Next-gen AI models can identify and correct their own errors
recursively. Self-correction catches tactical errors — typos, logic
bugs, off-by-one mistakes. Verification catches strategic errors —
wrong requirements, missing edge cases, building the wrong thing
well. Better execution demands better oversight, not less.
ai-agentsverificationgovernance
The introspection loop
There's a strange feeling in writing prompts for a model that doesn't
exist yet. You're designing a conversation with a future colleague —
someone smarter than the current version, with capabilities you can
only estimate. The plan: use the next model to improve the tools that
serve it. It's an introspection loop — the system examining itself
through a more capable lens. You're writing letters to a future
colleague and hoping they'll be kind.
When setting up an agentic orchestration workflow to overcome the
limitations of vibe coding, don't vibe code the orchestration layer.
orchestrationprocessai-paired-developmentirony
Schema.org @id references across pages
When you define a Person entity with @id: "https://example.com/#person"
on your homepage, every other page can reference it by @id instead of
re-declaring the full entity. AI knowledge graphs use this to
deduplicate — one entity, many pages. The consistency matters more
than the completeness of any single block.
schema.orgseollm-discoverability
CSS class names as documentation
Naming a class .geo-quotable instead of .highlight-box
does two things: it tells future developers what the element is FOR
(AI citation extraction), and it makes the design system self-documenting.
The class name is the spec.
cssdesign-systemgeo
Variable fonts: one file, every weight
Source Serif 4 as a variable font is one 417KB WOFF2 file that covers
weights 200-900. The non-variable alternative would be 6+ files totaling
over 1MB. For Core Web Vitals (LCP < 2.5s), fewer HTTP requests with
font-display: swap wins every time.
performancefontscore-web-vitals
Follow
Cairns are available via RSS · For agents: MCP · llms.txt.
They're not emailed —
the dispatches are the subscription product.
Cairns are the breadcrumb trail you find when you're searching.