<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Delimit.ai </title>
    <description>The latest articles on Forem by Delimit.ai  (@delimit).</description>
    <link>https://forem.com/delimit</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3813737%2Fa40d0367-0e5d-4976-8b51-95d4b4bfbd43.png</url>
      <title>Forem: Delimit.ai </title>
      <link>https://forem.com/delimit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/delimit"/>
    <language>en</language>
    <item>
      <title>I Tested Every 'Memory' Solution for AI Coding Assistants - Here's What Actually Works</title>
      <dc:creator>Delimit.ai </dc:creator>
      <pubDate>Sun, 05 Apr 2026 01:19:56 +0000</pubDate>
      <link>https://forem.com/delimit/i-tested-every-memory-solution-for-ai-coding-assistants-heres-what-actually-works-31hc</link>
      <guid>https://forem.com/delimit/i-tested-every-memory-solution-for-ai-coding-assistants-heres-what-actually-works-31hc</guid>
      <description>&lt;p&gt;Every AI coding session starts from scratch. You open Claude Code or Codex, and it has no idea that your team uses JWT with 15-minute expiry, that you migrated from REST to GraphQL last month, or that the payments service is the one thing you never touch on Fridays. You re-explain the same architecture decisions, the same conventions, the same constraints. Every single time.&lt;/p&gt;

&lt;p&gt;This is not a minor annoyance. It is compounding time loss. The first 5-10 minutes of every session is wasted on context that the assistant already learned yesterday. Over weeks, that adds up to hours. I went looking for solutions and tested everything I could find.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Tried
&lt;/h2&gt;

&lt;h3&gt;
  
  
  a) Obsidian Mind (574 stars on GitHub)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/breferrari/obsidian-mind" rel="noopener noreferrer"&gt;Obsidian Mind&lt;/a&gt; is an Obsidian vault template that gives Claude Code persistent memory. It works by loading vault context through CLAUDE.md on session start. You get slash commands like &lt;code&gt;/standup&lt;/code&gt; and &lt;code&gt;/dump&lt;/code&gt; to interact with your knowledge base.&lt;/p&gt;

&lt;p&gt;It is genuinely elegant if you already live in Obsidian. The setup is minimal, the vault structure makes sense, and the community around it is active. For pure Claude Code workflows, it does the job well.&lt;/p&gt;

&lt;p&gt;The limitation: it only works with Claude Code. If you switch to Codex for a background task or try Gemini CLI for a second opinion, your memory stays locked in the Obsidian vault. You also need Obsidian installed, which is a non-trivial dependency if your team does not already use it.&lt;/p&gt;

&lt;h3&gt;
  
  
  b) Claude Code's Built-in Memory
&lt;/h3&gt;

&lt;p&gt;Claude Code writes MEMORY.md files automatically to &lt;code&gt;~/.claude/&lt;/code&gt;. Zero setup required. It happens in the background as you work, capturing things the model thinks are important.&lt;/p&gt;

&lt;p&gt;The convenience factor is real. You do not configure anything, and it just starts remembering. For solo Claude Code users who never switch tools, this might be all you need.&lt;/p&gt;

&lt;p&gt;The limitations are predictable: it only works inside Claude Code, the memories are unstructured free text, there is no search, and nothing carries over to other assistants. You also have no control over what gets saved or how it is organized.&lt;/p&gt;

&lt;h3&gt;
  
  
  c) Custom CLAUDE.md / instructions.md Files
&lt;/h3&gt;

&lt;p&gt;The manual approach. You maintain a context file that each tool reads on startup. Claude Code reads CLAUDE.md, Codex reads AGENTS.md, Gemini CLI reads GEMINI.md. You write your architecture decisions, conventions, and constraints by hand.&lt;/p&gt;

&lt;p&gt;This works everywhere because every tool supports some form of instruction file. You have complete control over the content. Nothing is hidden, nothing is auto-generated.&lt;/p&gt;

&lt;p&gt;The cost is maintenance. You are now a documentation writer for your AI assistants. Files diverge between tools. You forget to update one. The Codex file says you use REST, the Claude file says GraphQL. Nobody catches it until something breaks.&lt;/p&gt;

&lt;h3&gt;
  
  
  d) Delimit remember/recall
&lt;/h3&gt;

&lt;p&gt;This is what I built. Delimit stores memories in &lt;code&gt;~/.delimit/memory/&lt;/code&gt; as structured entries with auto-generated tags. The same memory pool is accessible from the CLI and from any AI assistant that supports MCP.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx delimit-cli remember &lt;span class="s2"&gt;"JWT expiry is 15min, refresh tokens are 7 days"&lt;/span&gt;
npx delimit-cli recall jwt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;remember&lt;/code&gt; command saves a tagged entry. The &lt;code&gt;recall&lt;/code&gt; command searches across all your memories with fuzzy matching. The MCP server exposes the same store through &lt;code&gt;delimit_memory_store&lt;/code&gt; and &lt;code&gt;delimit_memory_search&lt;/code&gt;, so Claude Code, Codex, Gemini CLI, and Cursor all read from and write to the same pool.&lt;/p&gt;

&lt;p&gt;Memory is actually just one feature. Delimit is an API governance tool (breaking change detection, policy enforcement, CI integration), and the memory system exists because cross-session context turned out to be a prerequisite for reliable governance. You get both.&lt;/p&gt;

&lt;p&gt;The limitation: it is newer and less battle-tested than Obsidian Mind's vault approach. The community is smaller. If you want a rich, interlinked knowledge graph, Obsidian Mind's vault structure is more sophisticated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Obsidian Mind&lt;/th&gt;
&lt;th&gt;Built-in Memory&lt;/th&gt;
&lt;th&gt;Manual Files&lt;/th&gt;
&lt;th&gt;Delimit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini CLI&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero config&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured search&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto-tagging&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API governance&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requires Obsidian&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When to Use What
&lt;/h2&gt;

&lt;p&gt;If you are all-in on Claude Code and already use Obsidian for your notes, Obsidian Mind is the right choice. It fits naturally into an existing workflow and the vault-based approach gives you rich, interlinked context that a flat memory store cannot match. Do not switch away from something that works.&lt;/p&gt;

&lt;p&gt;If you use multiple AI assistants, or if you want governance tooling alongside memory, Delimit is built for that. One memory pool, every tool reads it. If you want maximum control and do not mind maintaining files by hand, the manual approach is honest work. It scales poorly, but it never surprises you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx delimit-cli remember &lt;span class="s2"&gt;"your first memory"&lt;/span&gt;
npx delimit-cli recall
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No install required. Memories persist in &lt;code&gt;~/.delimit/memory/&lt;/code&gt; and are available to any MCP-compatible assistant.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/delimit-ai/delimit-mcp-server" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/delimit-cli" rel="noopener noreferrer"&gt;npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://delimit.ai/docs" rel="noopener noreferrer"&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Switch AI Coding Assistants Without Losing Context</title>
      <dc:creator>Delimit.ai </dc:creator>
      <pubDate>Sat, 28 Mar 2026 14:44:46 +0000</pubDate>
      <link>https://forem.com/delimit/switch-ai-coding-assistants-without-losing-context-47bi</link>
      <guid>https://forem.com/delimit/switch-ai-coding-assistants-without-losing-context-47bi</guid>
      <description>&lt;p&gt;I was deep in a refactor in Claude Code when it hit rate limits. Twenty minutes of context — the task list, the decisions I'd made about the approach, the governance state of the API changes — all trapped in a conversation I couldn't continue.&lt;/p&gt;

&lt;p&gt;I opened Codex to keep working. It had no idea what I was doing. I spent 15 minutes re-explaining the task, the constraints, the decisions already made. Then Codex hit its own limit, and I opened Gemini CLI. Same story. Start over. Re-explain. Lose momentum.&lt;/p&gt;

&lt;p&gt;This happens every day to anyone using more than one AI coding assistant.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem is architectural
&lt;/h2&gt;

&lt;p&gt;Each AI assistant stores context in its own conversation window. When that window ends — rate limit, crash, session timeout, or just opening a different tool — the context is gone. There's no shared layer.&lt;/p&gt;

&lt;p&gt;It's like having three developers on a team with no issue tracker, no shared docs, and no standups. Each one knows what they worked on. None of them know what the others did.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shared state on disk
&lt;/h2&gt;

&lt;p&gt;Delimit stores everything in &lt;code&gt;~/.delimit/&lt;/code&gt; — plain files on your local machine, not in any model's context window. Task ledger, governance rules, memory, deliberation history. When you switch from Claude Code to Codex to Gemini CLI, they all read and write the same state.&lt;/p&gt;

&lt;p&gt;Here's what that looks like in practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# In Claude Code:
&amp;gt; "add to ledger: refactor auth module"
  LED-042 created

# Claude hits rate limit. Switch to Codex:
&amp;gt; "what's on the ledger?"
  LED-042: refactor auth module [open]

# Need a second opinion. Open Gemini CLI:
&amp;gt; "review LED-042 approach — JWT vs session tokens?"
  Reading LED-042 context... recommending JWT with refresh tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three assistants. One shared workspace. No re-explaining.&lt;/p&gt;

&lt;h2&gt;
  
  
  What carries across models
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Task ledger&lt;/strong&gt; — Every open item, its priority, notes, and completion status. Any assistant can create, update, or close tasks. The ledger is the source of truth, not any single conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Governance state&lt;/strong&gt; — API policies, breaking change history, security audit results. If Claude Code ran a lint check and found issues, Codex can see those results without re-running the check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memory&lt;/strong&gt; — Project decisions, architectural notes, user preferences. Stored once, accessible from every assistant. You tell Claude "we use PostgreSQL, not MySQL" and Gemini CLI knows it too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deliberation history&lt;/strong&gt; — When you ask multiple AI models to debate a decision (JWT vs sessions, monorepo vs polyrepo, REST vs GraphQL), the transcript and consensus are stored. Any assistant can reference past deliberations.&lt;/p&gt;

&lt;h2&gt;
  
  
  No extra API cost
&lt;/h2&gt;

&lt;p&gt;This is important: Delimit doesn't proxy your requests or add another API in the middle. If you pay for Claude Pro, Codex, or Gemini, Delimit uses your existing CLI installations. It's a local layer that coordinates between them — not a service that sits in the request path.&lt;/p&gt;

&lt;p&gt;The only exception is deliberation, where Delimit calls multiple model APIs to get consensus on a decision. That uses the xAI API for Grok (the others run through their native CLIs).&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup is one command
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx delimit-cli setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This detects which AI assistants you have installed, configures MCP (Model Context Protocol) for each one, and sets up the shared workspace. Takes about 30 seconds.&lt;/p&gt;

&lt;p&gt;After setup, every assistant you open has access to the same tools — &lt;code&gt;delimit_ledger_list&lt;/code&gt;, &lt;code&gt;delimit_memory_search&lt;/code&gt;, &lt;code&gt;delimit_lint&lt;/code&gt;, and about 100 others. They all read and write the same local state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters beyond convenience
&lt;/h2&gt;

&lt;p&gt;The convenience of not re-explaining your task is nice. But the real value is that governance and decisions persist across model switches.&lt;/p&gt;

&lt;p&gt;If Claude Code ran a security audit and flagged a vulnerability, that finding doesn't disappear when you switch to Codex. The evidence is stored, the ledger item is open, and any assistant you open next will see it.&lt;/p&gt;

&lt;p&gt;If three models deliberated on an architecture decision and reached consensus, that decision is recorded. Six months later, when a different assistant (or a different developer) asks "why did we choose JWT?", the answer is in the deliberation history.&lt;/p&gt;

&lt;p&gt;Context continuity isn't just about productivity. It's about institutional memory that survives model switches, rate limits, and team changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx delimit-cli setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Works with Claude Code, Codex, Cursor, and Gemini CLI. Free tier includes governance, breaking change detection, and the shared workspace. Pro ($10/mo) adds deliberation, persistent memory, and deploy tracking.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/delimit-cli" rel="noopener noreferrer"&gt;delimit-cli on npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/delimit-ai/delimit-mcp-server" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://app.delimit.ai" rel="noopener noreferrer"&gt;Dashboard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>devtools</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How I Made Claude Code Auto-Fix Breaking API Changes in CI</title>
      <dc:creator>Delimit.ai </dc:creator>
      <pubDate>Fri, 27 Mar 2026 04:28:52 +0000</pubDate>
      <link>https://forem.com/delimit/how-i-made-claude-code-auto-fix-breaking-api-changes-in-ci-1pea</link>
      <guid>https://forem.com/delimit/how-i-made-claude-code-auto-fix-breaking-api-changes-in-ci-1pea</guid>
      <description>&lt;p&gt;AI coding assistants are great at generating code. But what happens when the code they generate breaks your API contract? I built a workflow where Claude Code reads structured CI output, understands the breaking change, and fixes it — automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;If you have an OpenAPI spec checked into your repo, there's a good chance nobody is actually reviewing it on pull requests. Linters like Spectral validate the spec in isolation, but they don't compare old vs. new. They'll catch a missing description, but not the fact that you just changed a response field from &lt;code&gt;string&lt;/code&gt; to &lt;code&gt;integer&lt;/code&gt; — the kind of change that breaks every downstream consumer.&lt;/p&gt;

&lt;p&gt;I needed something that would:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Diff the spec against the base branch on every PR&lt;/li&gt;
&lt;li&gt;Classify each change as breaking or non-breaking&lt;/li&gt;
&lt;li&gt;Tell me the exact semver impact&lt;/li&gt;
&lt;li&gt;Give me a migration guide so I could fix it fast&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Solution: Delimit GitHub Action
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://github.com/marketplace/actions/delimit-api-governance" rel="noopener noreferrer"&gt;Delimit&lt;/a&gt;, a GitHub Action that does all of this deterministically. No LLM in the loop, no external API calls — just a diff engine that understands 27 types of OpenAPI contract changes (17 breaking, 10 non-breaking).&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;

&lt;p&gt;Add one workflow file to your repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;API Contract Check&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pull_request&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;delimit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;pull-requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;delimit-ai/delimit-action@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;api/openapi.yaml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Delimit auto-fetches the base branch version of your spec and diffs it against the PR changes. It runs in &lt;strong&gt;advisory mode&lt;/strong&gt; by default — posts a PR comment but never fails your build.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Auto-Fix Loop
&lt;/h2&gt;

&lt;p&gt;Here's where it gets interesting. Claude Code can read CI output. So when Delimit flags a breaking change, Claude sees:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What&lt;/strong&gt; changed (endpoint removed, type changed, enum value removed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where&lt;/strong&gt; it changed (exact path in the spec)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why&lt;/strong&gt; it's breaking (severity classification)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How&lt;/strong&gt; to fix it (migration guide)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That structured output is enough for Claude to submit a fix.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Loop in Practice
&lt;/h3&gt;

&lt;p&gt;You can see this working end-to-end on &lt;a href="https://github.com/delimit-ai/delimit-mcp-server/pull/11" rel="noopener noreferrer"&gt;PR #11&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Claude Code makes changes that modify the OpenAPI spec&lt;/li&gt;
&lt;li&gt;Delimit runs and flags the breaking changes in a PR comment&lt;/li&gt;
&lt;li&gt;Claude reads the comment, understands the issue, and pushes a fix&lt;/li&gt;
&lt;li&gt;Delimit re-runs — all checks pass&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The reason this converges (instead of looping forever) is that the diff engine is deterministic. Same input, same output.&lt;/p&gt;

&lt;h2&gt;
  
  
  CLI for Local Development
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx delimit-cli lint api/openapi.yaml
npx delimit-cli diff api/openapi.yaml &lt;span class="nt"&gt;--base&lt;/span&gt; main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Custom Policies
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .delimit/policies.yml&lt;/span&gt;
&lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;no-v2-removals&lt;/span&gt;
    &lt;span class="na"&gt;change_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;endpoint_removed&lt;/span&gt;
    &lt;span class="na"&gt;path_pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/v2/*"&lt;/span&gt;
    &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;error&lt;/span&gt;
    &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;v2&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;endpoints&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cannot&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;be&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;removed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;without&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;deprecation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;period"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx delimit-cli setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Action&lt;/strong&gt;: &lt;a href="https://github.com/marketplace/actions/delimit-api-governance" rel="noopener noreferrer"&gt;marketplace/actions/delimit-api-governance&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live PR demo&lt;/strong&gt;: &lt;a href="https://github.com/delimit-ai/delimit-mcp-server/pull/11" rel="noopener noreferrer"&gt;delimit-ai/delimit-mcp-server/pull/11&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://github.com/delimit-ai/delimit-mcp-server" rel="noopener noreferrer"&gt;github.com/delimit-ai/delimit-mcp-server&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  MIT licensed. No API keys or external services required.
&lt;/h2&gt;

</description>
      <category>ai</category>
      <category>openai</category>
      <category>devops</category>
      <category>openapi</category>
    </item>
    <item>
      <title>Catching Breaking API Changes Before They Reach Production</title>
      <dc:creator>Delimit.ai </dc:creator>
      <pubDate>Mon, 09 Mar 2026 22:19:58 +0000</pubDate>
      <link>https://forem.com/delimit/catching-breaking-api-changes-before-they-reach-production-4n7k</link>
      <guid>https://forem.com/delimit/catching-breaking-api-changes-before-they-reach-production-4n7k</guid>
      <description>&lt;p&gt;Breaking API changes are one of the easiest ways to accidentally disrupt production systems.&lt;/p&gt;

&lt;p&gt;They often slip through code review because the service itself still works — but client integrations fail immediately after deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Common Example
&lt;/h2&gt;

&lt;p&gt;Consider a small change in an OpenAPI specification:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;age: integer → age: string
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the service's perspective, everything still works.&lt;/p&gt;

&lt;p&gt;But any client expecting an integer now receives a string, which can break applications consuming the API.&lt;/p&gt;

&lt;p&gt;These types of issues are easy to miss during pull request reviews, especially when OpenAPI specs grow large.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of Breaking Changes
&lt;/h2&gt;

&lt;p&gt;Some examples of changes that can break API consumers include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removing an endpoint&lt;/li&gt;
&lt;li&gt;Deleting a required field&lt;/li&gt;
&lt;li&gt;Changing a field type&lt;/li&gt;
&lt;li&gt;Removing an enum value&lt;/li&gt;
&lt;li&gt;Making an optional parameter required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even small modifications can break downstream systems that depend on the API contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Detecting Breaking Changes in CI
&lt;/h2&gt;

&lt;p&gt;One approach to preventing these issues is comparing OpenAPI specifications directly in CI and failing the build when breaking changes are detected.&lt;/p&gt;

&lt;p&gt;Example CI output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❌ Breaking API change detected
Removed endpoint: DELETE /users/{id}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By validating API changes automatically during pull requests, teams can catch compatibility issues before deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example Implementation
&lt;/h2&gt;

&lt;p&gt;A simple implementation using GitHub Actions is available here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/delimit-ai/delimit-action" rel="noopener noreferrer"&gt;https://github.com/delimit-ai/delimit-action&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It compares OpenAPI or Swagger specifications between commits and flags breaking changes during CI runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;APIs often serve as contracts between teams, services, and external integrations.&lt;/p&gt;

&lt;p&gt;Automated contract validation helps ensure that changes to the API remain compatible with existing clients.&lt;/p&gt;

&lt;p&gt;As APIs grow larger and more interconnected, having automated guardrails becomes increasingly important for maintaining stability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discussion
&lt;/h2&gt;

&lt;p&gt;How do your teams handle API contract validation?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAPI diff tools&lt;/li&gt;
&lt;li&gt;contract testing&lt;/li&gt;
&lt;li&gt;schema versioning&lt;/li&gt;
&lt;li&gt;manual review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Curious to hear what approaches others are using.&lt;/p&gt;

</description>
      <category>api</category>
      <category>devops</category>
      <category>opensource</category>
      <category>githubactions</category>
    </item>
  </channel>
</rss>
