enolaBlog

Blog

Writing on agents and architecture.

MCP servers, AI coding agents, and software architecture from the enola team.

Latest

Dogfooding Enola: from a missed N+1 to a 2× faster TypeScript extractor

How a missed N+1 led to better TypeScript detection, lower extractor complexity, and 1.3–3.6× faster extraction with byte-identical output.

Read the post

31 posts

What Enola saves in 238 coding-agent sessions

Across 238 Claude Code and OpenCode sessions, 4,375 Enola calls added ~4.1M tokens to context. See latency, tool costs, and source-reading estimates.

benchmarkstokens

Does your repository already have rules?

An introduction to Enola’s constraint miner: find dependency patterns, review exceptions with your team, and turn agreed boundaries into checks.

What makes a coding agent correct its own mistakes?

Validator feedback changes whether a coding agent can repair rejected work. Location, observed state, and valid alternatives make the next attempt better.

coding agentsagent harnesses

What package metrics said about enola's own code

We ran enola's package metrics on its own 117 typed packages. Nine were flagged; one warranted structural work, and the useful changes produced byte-identical facts across 91 repositories.

package metricssoftware architecture

Dead code is a context tax

A graph can tell you nothing references a symbol. Whether to delete it is a separate decision, and it needs context the graph does not hold. How we cleared forty symbols out of Enola with zero regressions.

dead codetechnical debt

The harness decides what the model sees

A coding model never sees the whole repository or session. The harness selects its context, tools, persistent state, and feedback at every step.

How to use enola Dashboard

Open an architecture snapshot, investigate findings and dependencies, compare a change with a baseline, and verify snapshot freshness and coverage.

Instructions are not controls

Repository instructions guide coding agents before a change. Deterministic checks establish whether the result complied—and gates decide what happens next.

Policy as code: what a code graph can check

A worked example of PCI DSS and GDPR-inspired constraints that check code reachability and policy coverage across a Go module.

policy as codecompliance

How we test Enola against 91 repositories

Eight benchmark scripts cover reproducibility, regression precision, memory, architecture labels, command contracts, agent behaviour, and changes between sweeps.

benchmarksstatic analysis

Technical Debt Is the Additional Cost of Future Work

A structural condition, like a service reading another team's database directly, isn't technical debt by default. It becomes debt only against a counterfactual: what a reasonable alternative would save on the work ahead. What that means for pull requests, baselines, and CI policy.

Enola’s architecture audit of OpenAI Codex

Enola found a wide slash-command dispatcher. Tracing the metric revealed 89 call targets, 97 constructed targets, and one declaration edge.

architecture auditOpenAI Codex

What Is an Agent Harness?

A model generates decisions; the harness around it makes those decisions operational: tools, context, execution, permissions, and feedback. Where the term ends, how it differs from a framework or a prompt, and where enola fits in the loop.

What a Code Graph Actually Costs in Memory

About 3 KB per fact while generating, about 0.7 KB per fact once served, and a 5.7x gap between the two. What Enola costs in RAM from a small service to the Linux kernel, why it is written in Go, and what supporting twenty languages does to the bill.

memoryGo

How to Use Enola Day to Day: Hooks, Baselines, and the Architecture Check

Turn the session hook off when you want speed and keep the gate in CI, read the --explain report, write a failure policy that fits your language, manage baselines, and read enola log — with real command output from Gitea, Tokio, Excalidraw and a demo service.

What a Dependency Graph Can and Cannot Tell You

A dependency graph records one relation from specific evidence, not a universal truth about your code. What nodes and edges actually mean, why cycles aren't always a defect, and what reverse traversal proves versus what it doesn't.

Enola Is an Architecture Fitness Sensor

Harness engineering splits the controls around a coding agent into guides and sensors, computational and inferential. Mapping Enola onto that grid, including the three quarters of it Enola deliberately does not fill.

How Did the Codebase Get Like This?

Enola can now record and explore how a codebase's architecture changed over time. enola log, show, diff, and blame turn architectural drift into evidence you can query, instead of a story you reconstruct by hand from old commits.

architectural historyenola log

Cross-Repository Code Analysis: A Repository Is Not an Architecture

Relationships between repositories are rarely written down in one place. Why cross-repository dependency analysis is an evidence problem, not a search problem.

cross-repository analysismulti-repo architecture

What Is an AI Token? The Complete Guide

Tokens are how every model reads and generates text. What they are, how byte pair encoding splits words into pieces, and why some languages cost several times more than English.

tokenizationbyte pair encoding

We Asked Enola to Audit HuggingFace's chat-ui

Coupling hotspots, two cyclic dependencies wrapped around the app's most complex function, and a handful of auth-related god classes.

architecture auditSvelteKit

Parsing Code Is Not The Same As Mapping Architecture

A syntax tree is not an architecture graph. A symbol index is not one either. They can be inputs into one, but they are not the thing itself — and that gap is where most of the real engineering work lives.

architectureTree-sitter

The Four Memory Layers Every Coding Agent Needs

Most coding agents have one memory layer: whatever is in the context window right now. The full picture is four layers — and most teams are missing at least two.

agent memorycontext engineering

The Token Economics of a Coding Agent: Where the Context Gap Costs You

Input, output, cache writes, cache hits: where token costs actually land in an agentic coding loop, and what it's worth to close the context gap before the agent's first tool call.

token economicsLLM pricing

The Most Boring File in Enola Explains Why Static Analysis Is Hard

The extractor cache's version history isn't glamorous, but its comments read like a changelog of every place a naive parser gets architecture wrong.

static analysisextractor cache

Claude Code Context Loop

Gather context, take action, verify. Of those three phases, "gather context" has no fixed procedure — it's done by searching and reading, building an approximation in every fresh session. That's the phase a deterministic graph changes.

Claude Codeagentic loop

We Asked Enola to Audit Apache Airflow's Architecture. Here's What a Staff Engineer Would Notice.

Coupling hotspots, cyclic dependencies, god classes, complexity outliers — and a 56,308-node blast radius hiding inside one module. We walked through the exact review a staff engineer would do.

architecture auditApache Airflow

Codebase Memory Is Not an Architecture Map

Most codebase-memory tools parse symbols and retrieve fragments. That is useful, but it is not the same as building an architectural model. The difference matters.

architecturecodebase memory

Onboard New Joiners Faster with Enola

The true cost of onboarding isn't the paperwork — it's the three weeks a new engineer spends building a mental model of the codebase, and the three weeks of everyone else's time it drains.

onboardingdeveloper experience

What Are Explore Agents?

The hidden cost of how AI coding tools understand your codebase. Every AI coding tool is an explore agent — and the exploration has a measurable cost in tokens, time, and money.

explore agentsMCP