<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>enola blog</title>
    <link>https://enola.tech/blog/</link>
    <description>MCP servers, AI coding agents, and software architecture from the enola team.</description>
    <language>en</language>
    <atom:link href="https://enola.tech/blog/rss.xml" rel="self" type="application/rss+xml" />
    <lastBuildDate>Wed, 14 Oct 2026 09:00:00 GMT</lastBuildDate>
    <item>
      <title>Dogfooding Enola: from a missed N+1 to a 2× faster TypeScript extractor</title>
      <link>https://enola.tech/blog/dogfooding-enola-typescript-extractor</link>
      <guid isPermaLink="true">https://enola.tech/blog/dogfooding-enola-typescript-extractor</guid>
      <description>How a missed N+1 led to better TypeScript detection, lower extractor complexity, and 1.3–3.6× faster extraction with byte-identical output.</description>
      <pubDate>Wed, 14 Oct 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>

    </item>
    <item>
      <title>What Enola saves in 238 coding-agent sessions</title>
      <link>https://enola.tech/blog/what-enola-saves-in-real-agent-sessions</link>
      <guid isPermaLink="true">https://enola.tech/blog/what-enola-saves-in-real-agent-sessions</guid>
      <description>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.</description>
      <pubDate>Sun, 11 Oct 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan Menges</dc:creator>
      <category>benchmarks</category>
      <category>tokens</category>
      <category>coding agents</category>
      <category>MCP</category>
      <category>Claude Code</category>
      <category>OpenCode</category>
    </item>
    <item>
      <title>Does your repository already have rules?</title>
      <link>https://enola.tech/blog/does-your-repository-already-have-rules</link>
      <guid isPermaLink="true">https://enola.tech/blog/does-your-repository-already-have-rules</guid>
      <description>An introduction to Enola’s constraint miner: find dependency patterns, review exceptions with your team, and turn agreed boundaries into checks.</description>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>

    </item>
    <item>
      <title>What makes a coding agent correct its own mistakes?</title>
      <link>https://enola.tech/blog/what-makes-a-coding-agent-correct-its-own-mistakes</link>
      <guid isPermaLink="true">https://enola.tech/blog/what-makes-a-coding-agent-correct-its-own-mistakes</guid>
      <description>Validator feedback changes whether a coding agent can repair rejected work. Location, observed state, and valid alternatives make the next attempt better.</description>
      <pubDate>Tue, 29 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>
      <category>coding agents</category>
      <category>agent harnesses</category>
      <category>validator feedback</category>
      <category>software architecture</category>
    </item>
    <item>
      <title>What package metrics said about enola's own code</title>
      <link>https://enola.tech/blog/package-metrics-on-enola</link>
      <guid isPermaLink="true">https://enola.tech/blog/package-metrics-on-enola</guid>
      <description>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.</description>
      <pubDate>Wed, 23 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan</dc:creator>
      <category>package metrics</category>
      <category>software architecture</category>
      <category>refactoring</category>
      <category>static analysis</category>
      <category>coding agents</category>
    </item>
    <item>
      <title>Dead code is a context tax</title>
      <link>https://enola.tech/blog/dead-code-is-a-context-tax</link>
      <guid isPermaLink="true">https://enola.tech/blog/dead-code-is-a-context-tax</guid>
      <description>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.</description>
      <pubDate>Sat, 19 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan</dc:creator>
      <category>dead code</category>
      <category>technical debt</category>
      <category>static analysis</category>
      <category>coding agents</category>
      <category>context window</category>
    </item>
    <item>
      <title>The harness decides what the model sees</title>
      <link>https://enola.tech/blog/the-harness-decides-what-the-model-sees</link>
      <guid isPermaLink="true">https://enola.tech/blog/the-harness-decides-what-the-model-sees</guid>
      <description>A coding model never sees the whole repository or session. The harness selects its context, tools, persistent state, and feedback at every step.</description>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>

    </item>
    <item>
      <title>How to use enola Dashboard</title>
      <link>https://enola.tech/blog/how-to-use-enola-dashboard</link>
      <guid isPermaLink="true">https://enola.tech/blog/how-to-use-enola-dashboard</guid>
      <description>Open an architecture snapshot, investigate findings and dependencies, compare a change with a baseline, and verify snapshot freshness and coverage.</description>
      <pubDate>Tue, 15 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>

    </item>
    <item>
      <title>Instructions are not controls</title>
      <link>https://enola.tech/blog/instructions-are-not-controls</link>
      <guid isPermaLink="true">https://enola.tech/blog/instructions-are-not-controls</guid>
      <description>Repository instructions guide coding agents before a change. Deterministic checks establish whether the result complied—and gates decide what happens next.</description>
      <pubDate>Sun, 13 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>

    </item>
    <item>
      <title>Policy as code: what a code graph can check</title>
      <link>https://enola.tech/blog/policy-as-code</link>
      <guid isPermaLink="true">https://enola.tech/blog/policy-as-code</guid>
      <description>A worked example of PCI DSS and GDPR-inspired constraints that check code reachability and policy coverage across a Go module.</description>
      <pubDate>Tue, 08 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan</dc:creator>
      <category>policy as code</category>
      <category>compliance</category>
      <category>PCI DSS</category>
      <category>GDPR</category>
      <category>architecture constraints</category>
      <category>CI</category>
      <category>SARIF</category>
    </item>
    <item>
      <title>How we test Enola against 91 repositories</title>
      <link>https://enola.tech/blog/how-we-benchmark-a-code-graph</link>
      <guid isPermaLink="true">https://enola.tech/blog/how-we-benchmark-a-code-graph</guid>
      <description>Eight benchmark scripts cover reproducibility, regression precision, memory, architecture labels, command contracts, agent behaviour, and changes between sweeps.</description>
      <pubDate>Sat, 05 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan</dc:creator>
      <category>benchmarks</category>
      <category>static analysis</category>
      <category>reproducibility</category>
      <category>regression testing</category>
      <category>coding agents</category>
      <category>methodology</category>
    </item>
    <item>
      <title>Technical Debt Is the Additional Cost of Future Work</title>
      <link>https://enola.tech/blog/technical-debt-additional-cost</link>
      <guid isPermaLink="true">https://enola.tech/blog/technical-debt-additional-cost</guid>
      <description>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.</description>
      <pubDate>Wed, 02 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>

    </item>
    <item>
      <title>Enola’s architecture audit of OpenAI Codex</title>
      <link>https://enola.tech/blog/testing-coding-agent-repositories</link>
      <guid isPermaLink="true">https://enola.tech/blog/testing-coding-agent-repositories</guid>
      <description>Enola found a wide slash-command dispatcher. Tracing the metric revealed 89 call targets, 97 constructed targets, and one declaration edge.</description>
      <pubDate>Tue, 25 Aug 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>
      <category>architecture audit</category>
      <category>OpenAI Codex</category>
      <category>coding agents</category>
      <category>fan-in</category>
      <category>fan-out</category>
      <category>static analysis</category>
    </item>
    <item>
      <title>What Is an Agent Harness?</title>
      <link>https://enola.tech/blog/what-is-an-agent-harness</link>
      <guid isPermaLink="true">https://enola.tech/blog/what-is-an-agent-harness</guid>
      <description>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.</description>
      <pubDate>Sat, 22 Aug 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>

    </item>
    <item>
      <title>What a Code Graph Actually Costs in Memory</title>
      <link>https://enola.tech/blog/what-a-code-graph-costs-in-memory</link>
      <guid isPermaLink="true">https://enola.tech/blog/what-a-code-graph-costs-in-memory</guid>
      <description>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.</description>
      <pubDate>Thu, 20 Aug 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan</dc:creator>
      <category>memory</category>
      <category>Go</category>
      <category>performance</category>
      <category>architecture graph</category>
      <category>static analysis</category>
      <category>benchmarks</category>
    </item>
    <item>
      <title>How to Use Enola Day to Day: Hooks, Baselines, and the Architecture Check</title>
      <link>https://enola.tech/blog/how-to-use-enola-day-to-day</link>
      <guid isPermaLink="true">https://enola.tech/blog/how-to-use-enola-day-to-day</guid>
      <description>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.</description>
      <pubDate>Tue, 18 Aug 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan Menges</dc:creator>

    </item>
    <item>
      <title>What a Dependency Graph Can and Cannot Tell You</title>
      <link>https://enola.tech/blog/what-is-a-dependency-graph</link>
      <guid isPermaLink="true">https://enola.tech/blog/what-is-a-dependency-graph</guid>
      <description>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.</description>
      <pubDate>Sat, 15 Aug 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>

    </item>
    <item>
      <title>Enola Is an Architecture Fitness Sensor</title>
      <link>https://enola.tech/blog/architecture-fitness-sensor</link>
      <guid isPermaLink="true">https://enola.tech/blog/architecture-fitness-sensor</guid>
      <description>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.</description>
      <pubDate>Mon, 10 Aug 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan Menges</dc:creator>

    </item>
    <item>
      <title>How Did the Codebase Get Like This?</title>
      <link>https://enola.tech/blog/how-did-the-codebase-get-like-this</link>
      <guid isPermaLink="true">https://enola.tech/blog/how-did-the-codebase-get-like-this</guid>
      <description>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.</description>
      <pubDate>Tue, 04 Aug 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan</dc:creator>
      <category>architectural history</category>
      <category>enola log</category>
      <category>structural blame</category>
      <category>regression testing</category>
      <category>AI coding agents</category>
      <category>static analysis</category>
    </item>
    <item>
      <title>Cross-Repository Code Analysis: A Repository Is Not an Architecture</title>
      <link>https://enola.tech/blog/cross-repository-code-analysis</link>
      <guid isPermaLink="true">https://enola.tech/blog/cross-repository-code-analysis</guid>
      <description>Relationships between repositories are rarely written down in one place. Why cross-repository dependency analysis is an evidence problem, not a search problem.</description>
      <pubDate>Tue, 28 Jul 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan</dc:creator>
      <category>cross-repository analysis</category>
      <category>multi-repo architecture</category>
      <category>dependency graph</category>
      <category>AI coding agents</category>
      <category>static analysis</category>
      <category>MCP</category>
    </item>
    <item>
      <title>What Is an AI Token? The Complete Guide</title>
      <link>https://enola.tech/blog/what-is-a-token-llm</link>
      <guid isPermaLink="true">https://enola.tech/blog/what-is-a-token-llm</guid>
      <description>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.</description>
      <pubDate>Mon, 27 Jul 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>
      <category>tokenization</category>
      <category>byte pair encoding</category>
      <category>LLM pricing</category>
      <category>context windows</category>
      <category>multilingual AI</category>
      <category>token economics</category>
    </item>
    <item>
      <title>We Asked Enola to Audit HuggingFace's chat-ui</title>
      <link>https://enola.tech/blog/enola-chatui-sveltekit-benchmark</link>
      <guid isPermaLink="true">https://enola.tech/blog/enola-chatui-sveltekit-benchmark</guid>
      <description>Coupling hotspots, two cyclic dependencies wrapped around the app's most complex function, and a handful of auth-related god classes.</description>
      <pubDate>Sun, 19 Jul 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>
      <category>architecture audit</category>
      <category>SvelteKit</category>
      <category>chat-ui</category>
      <category>impact analysis</category>
      <category>cyclic dependencies</category>
      <category>god classes</category>
    </item>
    <item>
      <title>Parsing Code Is Not The Same As Mapping Architecture</title>
      <link>https://enola.tech/blog/parsing-code-is-not-mapping-architecture</link>
      <guid isPermaLink="true">https://enola.tech/blog/parsing-code-is-not-mapping-architecture</guid>
      <description>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.</description>
      <pubDate>Fri, 17 Jul 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan</dc:creator>
      <category>architecture</category>
      <category>Tree-sitter</category>
      <category>symbol graph</category>
      <category>multi-repo</category>
      <category>MCP</category>
      <category>coding agents</category>
      <category>deterministic analysis</category>
    </item>
    <item>
      <title>The Four Memory Layers Every Coding Agent Needs</title>
      <link>https://enola.tech/blog/four-memory-layers-coding-agent</link>
      <guid isPermaLink="true">https://enola.tech/blog/four-memory-layers-coding-agent</guid>
      <description>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.</description>
      <pubDate>Wed, 15 Jul 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>
      <category>agent memory</category>
      <category>context engineering</category>
      <category>structural memory</category>
      <category>long-term memory</category>
      <category>coding agents</category>
      <category>MCP</category>
    </item>
    <item>
      <title>The Token Economics of a Coding Agent: Where the Context Gap Costs You</title>
      <link>https://enola.tech/blog/token-economics-coding-agent</link>
      <guid isPermaLink="true">https://enola.tech/blog/token-economics-coding-agent</guid>
      <description>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.</description>
      <pubDate>Thu, 09 Jul 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>
      <category>token economics</category>
      <category>LLM pricing</category>
      <category>context gap</category>
      <category>prompt caching</category>
      <category>coding agents</category>
      <category>MCP</category>
    </item>
    <item>
      <title>The Most Boring File in Enola Explains Why Static Analysis Is Hard</title>
      <link>https://enola.tech/blog/the-most-boring-file-in-enola</link>
      <guid isPermaLink="true">https://enola.tech/blog/the-most-boring-file-in-enola</guid>
      <description>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.</description>
      <pubDate>Tue, 07 Jul 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan</dc:creator>
      <category>static analysis</category>
      <category>extractor cache</category>
      <category>architecture graph</category>
      <category>deterministic analysis</category>
      <category>coding agents</category>
      <category>MCP</category>
    </item>
    <item>
      <title>Claude Code Context Loop</title>
      <link>https://enola.tech/blog/claude-code-context-loop</link>
      <guid isPermaLink="true">https://enola.tech/blog/claude-code-context-loop</guid>
      <description>Gather context, take action, verify. Of those three phases, &quot;gather context&quot; 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.</description>
      <pubDate>Fri, 03 Jul 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>
      <category>Claude Code</category>
      <category>agentic loop</category>
      <category>context window</category>
      <category>MCP</category>
      <category>architecture</category>
      <category>dependency graph</category>
      <category>deterministic analysis</category>
    </item>
    <item>
      <title>We Asked Enola to Audit Apache Airflow's Architecture. Here's What a Staff Engineer Would Notice.</title>
      <link>https://enola.tech/blog/enola-apache-airflow-benchmark</link>
      <guid isPermaLink="true">https://enola.tech/blog/enola-apache-airflow-benchmark</guid>
      <description>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.</description>
      <pubDate>Sun, 28 Jun 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>
      <category>architecture audit</category>
      <category>Apache Airflow</category>
      <category>impact analysis</category>
      <category>cyclic dependencies</category>
      <category>god classes</category>
      <category>blast radius</category>
      <category>pre-refactor review</category>
    </item>
    <item>
      <title>Codebase Memory Is Not an Architecture Map</title>
      <link>https://enola.tech/blog/codebase-memory-is-not-an-architecture-map</link>
      <guid isPermaLink="true">https://enola.tech/blog/codebase-memory-is-not-an-architecture-map</guid>
      <description>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.</description>
      <pubDate>Thu, 25 Jun 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dejan</dc:creator>
      <category>architecture</category>
      <category>codebase memory</category>
      <category>knowledge graph</category>
      <category>MCP</category>
      <category>coding agents</category>
      <category>RAG</category>
      <category>deterministic analysis</category>
    </item>
    <item>
      <title>Onboard New Joiners Faster with Enola</title>
      <link>https://enola.tech/blog/onboard-new-joiners-faster</link>
      <guid isPermaLink="true">https://enola.tech/blog/onboard-new-joiners-faster</guid>
      <description>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.</description>
      <pubDate>Sun, 21 Jun 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>
      <category>onboarding</category>
      <category>developer experience</category>
      <category>MCP</category>
      <category>codebase architecture</category>
      <category>knowledge graph</category>
      <category>Claude Code</category>
      <category>AI coding</category>
    </item>
    <item>
      <title>What Are Explore Agents?</title>
      <link>https://enola.tech/blog/what-are-explore-agents</link>
      <guid isPermaLink="true">https://enola.tech/blog/what-are-explore-agents</guid>
      <description>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.</description>
      <pubDate>Fri, 19 Jun 2026 09:00:00 GMT</pubDate>
      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert</dc:creator>
      <category>explore agents</category>
      <category>MCP</category>
      <category>AI coding</category>
      <category>token costs</category>
      <category>Claude Code</category>
      <category>Cursor</category>
      <category>codebase architecture</category>
      <category>LLM benchmarks</category>
    </item>
  </channel>
</rss>
