<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Intent Driven Dev - Medium]]></title>
        <description><![CDATA[Move beyond “Vibe Coding.” Use Spec-Driven Development to reduce assumptions, eliminate drift, and ensure your AI agents build exactly what you envision. - Medium]]></description>
        <link>https://medium.com/intent-driven-dev?source=rss----d97c9b8de610---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Intent Driven Dev - Medium</title>
            <link>https://medium.com/intent-driven-dev?source=rss----d97c9b8de610---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 13 Nov 2026 13:30:56 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/intent-driven-dev" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Free eBook Spec-Driven AI Development (Manning)]]></title>
            <link>https://medium.com/intent-driven-dev/free-ebook-spec-driven-ai-development-manning-e4d84fd1b1f5?source=rss----d97c9b8de610---4</link>
            <guid isPermaLink="false">https://medium.com/p/e4d84fd1b1f5</guid>
            <category><![CDATA[spec-driven-development]]></category>
            <category><![CDATA[vibe-coding]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[ai-coding]]></category>
            <category><![CDATA[intent-driven-development]]></category>
            <dc:creator><![CDATA[Hari Krishnan]]></dc:creator>
            <pubDate>Mon, 05 Oct 2026 16:21:35 GMT</pubDate>
            <atom:updated>2026-10-05T16:21:34.920Z</atom:updated>
            <content:encoded><![CDATA[<h4>From Intent to Trusted Code</h4><p><a href="https://blog.manning.com/free-ebook-spec-driven-ai-development">Free eBook Spec-Driven AI Development</a></p><p>I am glad to share that an excerpt from my book, Spec-Driven Development: Engineering with Intent, is featured in <a href="https://medium.com/u/bd9671589b55">Manning Publications</a>’s new free ebook, Spec-Driven AI Development.</p><p>And it is completely free. If you are exploring Spec-Driven Development or looking to adopt AI-native software engineering, this is a great place to start.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e4d84fd1b1f5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/intent-driven-dev/free-ebook-spec-driven-ai-development-manning-e4d84fd1b1f5">Free eBook Spec-Driven AI Development (Manning)</a> was originally published in <a href="https://medium.com/intent-driven-dev">Intent Driven Dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Spec-Driven Development]]></title>
            <link>https://medium.com/intent-driven-dev/spec-driven-development-d1a45922ba9a?source=rss----d97c9b8de610---4</link>
            <guid isPermaLink="false">https://medium.com/p/d1a45922ba9a</guid>
            <category><![CDATA[spec-driven-development]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[intent-driven-development]]></category>
            <category><![CDATA[context-engineering]]></category>
            <category><![CDATA[vibe-coding]]></category>
            <dc:creator><![CDATA[Hari Krishnan]]></dc:creator>
            <pubDate>Thu, 17 Sep 2026 02:19:09 GMT</pubDate>
            <atom:updated>2026-09-17T02:19:10.334Z</atom:updated>
            <content:encoded><![CDATA[<h4>Live-Session with <a href="https://medium.com/u/bd9671589b55">Manning Publications</a>: Spec-Driven Development: Engineering with intent teaches you how to close the gap between what you mean and what your agents actually build.</h4><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FwxhgWSj11fY%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DwxhgWSj11fY&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FwxhgWSj11fY%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/20c0e5be6c2869cbc1bcc11762127d8d/href">https://medium.com/media/20c0e5be6c2869cbc1bcc11762127d8d/href</a></iframe><p>For AI coding agents, accurately specifying your intent is the whole ballgame! Spec-Driven Development: Engineering with intent teaches you how to close the gap between what you mean and what your agents actually build.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d1a45922ba9a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/intent-driven-dev/spec-driven-development-d1a45922ba9a">Spec-Driven Development</a> was originally published in <a href="https://medium.com/intent-driven-dev">Intent Driven Dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[My new book about Spec-Driven Development: Engineering with intent (Manning Publications)]]></title>
            <link>https://medium.com/intent-driven-dev/my-new-book-about-spec-driven-development-engineering-with-intent-manning-publications-77d4b29a6bea?source=rss----d97c9b8de610---4</link>
            <guid isPermaLink="false">https://medium.com/p/77d4b29a6bea</guid>
            <category><![CDATA[prompt-engineering]]></category>
            <category><![CDATA[spec-driven-development]]></category>
            <category><![CDATA[context-engineering]]></category>
            <category><![CDATA[vibe-coding]]></category>
            <category><![CDATA[harness-engineering]]></category>
            <dc:creator><![CDATA[Hari Krishnan]]></dc:creator>
            <pubDate>Tue, 01 Sep 2026 13:34:58 GMT</pubDate>
            <atom:updated>2026-09-01T13:48:28.997Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QGLcA8v6dwfShvM0y0TgYw.jpeg" /><figcaption>Spec-Driven Development: Engineering with intent (Manning Publications) by Hari Krishnan</figcaption></figure><p>Excited to announce that my book, “Spec-Driven Development: Engineering with Intent,” is now live on <a href="https://medium.com/u/bd9671589b55">Manning Publications</a> MEAP.</p><p><strong>Buy the book: </strong><a href="https://hubs.la/Q04vSfDl0"><strong>Spec-Driven Development: Engineering with intent</strong></a></p><p>The first three chapters are live, and there is a <strong>50% off sitewide sale running from Aug 31 to Sept 14</strong>.</p><p>The book covers how we can close the gap between our ideas and AI agent-generated implementations by articulating our intent clearly using approaches including Spec-Driven Development, Ralph Loops, and more. While seeing a coding agent generate a prototype from a single-line prompt may be impressive, getting a coding agent to deliver production-ready software is a completely different ball game. In this book, we look at what it takes to engineer context effectively for coding agents so that they are not constantly bottlenecked on us, yet deliver software that is aligned with what we want.</p><p>Software engineering is ultimately about how we collaborate as a team, and this book looks at coding agents as members of the team at our table rather than just tools on the desk.</p><p>One of the <strong>advantages of MEAP is that you get to read the book as I write it</strong>. Please do share your thoughts and feedback. This will help shape the book as it evolves.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=77d4b29a6bea" width="1" height="1" alt=""><hr><p><a href="https://medium.com/intent-driven-dev/my-new-book-about-spec-driven-development-engineering-with-intent-manning-publications-77d4b29a6bea">My new book about Spec-Driven Development: Engineering with intent (Manning Publications)</a> was originally published in <a href="https://medium.com/intent-driven-dev">Intent Driven Dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Behavior-Driven Development and Spec-Driven Development with OpenSpec]]></title>
            <link>https://medium.com/intent-driven-dev/behavior-driven-development-and-spec-driven-development-with-openspec-ce5deb9970c9?source=rss----d97c9b8de610---4</link>
            <guid isPermaLink="false">https://medium.com/p/ce5deb9970c9</guid>
            <category><![CDATA[context-engineering]]></category>
            <category><![CDATA[openspec]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[vibe-coding]]></category>
            <category><![CDATA[spec-driven-development]]></category>
            <dc:creator><![CDATA[Hari Krishnan]]></dc:creator>
            <pubDate>Mon, 24 Aug 2026 02:28:35 GMT</pubDate>
            <atom:updated>2026-08-24T02:28:35.490Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*pii5YqYGMc3VvnBq.jpg" /></figure><p>The advantage of using BDD techniques such as capturing our intent in Gherkin syntax is that we can generate Cucumber tests that then guide the coding agent to build the application.</p><p>There are two main goals in this walkthrough:</p><ol><li>Using a spec which is only in text or markdown to get the coding agent to build an application that is completely aligned with our intent — and call it done only when it has actually completed.</li><li>Achieving spec as source, as described in <a href="https://martinfowler.com/articles/exploring-gen-ai/sdd-3-tools.html">Birgitta’s article on martinfowler.com about spec-driven development tools</a>.</li></ol><p>The overall guideline of the harness is to “make it easy to ‘do the right thing’ and work at the spec level, rather than the code level,” as mentioned in my <a href="https://www.infoq.com/articles/enterprise-spec-driven-development/">InfoQ article on enterprise spec-driven development</a>.</p><h3>The Template</h3><p>Code for this walkthrough is the <a href="https://github.com/intent-driven-dev/behavior-driven-template">behavior-driven-template</a>. This is a subset of the <a href="https://github.com/intent-driven-dev/intent-driven-template">intent-driven-template</a>, scoped down to help us demo BDD only and focus on it.</p><h3>The Sample Application: PollCast</h3><p>We start with an empty repository initialized with OpenSpec and switched to a custom <strong>behavior-driven schema</strong>. PollCast is an application that allows users to cast their vote against polls created by other users. The product intent and the technology stack both go into the context section of OpenSpec&#39;s config.yaml:</p><pre>schema: behavior-driven<br><br>context: |<br>  PollCast is an intuitive web application allowing users to instantly create,<br>  share, and track custom polls. To prevent spam without the friction of<br>  passwords, the platform features a streamlined UI where participants simply<br>  cast votes using their email address as a unique identifier, guaranteeing<br>  highly accurate and duplicate-free poll results.<br><br>  Tech stack: Node.js, server-side rendered Express, JSON file store to begin with.</pre><p>With that context in place, the first slice is what we type into the coding agent — allow users to vote for a poll that already exists:</p><pre>/opsx:propose Allow users to vote for a poll that already exists.<br><br>Rules:<br>- A vote cannot be modified once it is cast.<br>- A duplicate vote cannot be cast for the same email ID —<br>  email ID is the unique identifier.</pre><h3>A Behavior-Driven OpenSpec Schema</h3><p>The behavior-driven schema is close to the standard OpenSpec schema — it generates a proposal, spec, design, and tasks — with two deliberate differences:</p><ol><li><strong>The spec template contains fenced regions of Gherkin.</strong> Instead of a plain markdown template, the spec has fenced sections where Given/When/Then scenarios are articulated in Gherkin syntax. OpenSpec already supports this syntax in prose, but fencing the Gherkin means we can lint it, ensure it is syntax-valid, and generate acceptance tests from it.</li><li><strong>The tasks put acceptance tests first.</strong> The generated task list ensures the acceptance test suite is created before the application itself is built.</li></ol><p>When the change proposal for poll voting is created, the spec includes a fenced Gherkin feature — including the rule that there are no duplicate votes on the same email ID — and the agent reports that the Gherkin has been extracted and linted as clean syntax. Two things make this work:</p><ul><li>Rules in config.yaml state that the spec artifact cannot be marked as generated until linting is fully done, and enforce a one-to-one mapping between the specification inside OpenSpec and the extracted Gherkin file.</li><li>To learn how to run the gherkin-lint npm module, the agent is directed to fetch its documentation through the context7 CLI.</li></ul><h3>From Plain Text to Deterministic Tests</h3><p>This brings us to the first question: how do we take a text file and ensure it guides the coding agent to build an application aligned with the intent articulated in the spec?</p><p>First, commit the spec and start a fresh session — I always like to commit the spec and begin the apply step in a new clean session so the coding agent has fresh context to work with. Running opsx apply then works through the tasks, and because of how the tasks are structured, the first thing that appears is an acceptance test folder containing Cucumber.js step definitions.</p><p>A quick primer if you are unfamiliar with BDD: <strong>Gherkin</strong> is just the syntax — the Given/When/Then scenario and feature structure. It is a ubiquitous language for business and product teams to collaborate on; it puts a specification in a standard format, and because Given/When/Then is nice to create tests from, it is very helpful for us. <strong>Cucumber</strong> is the tool that generates test cases from that Gherkin by defining a step for each line. We are using Cucumber.js since this is a JavaScript application; in Python you would use Behave, in Java JBehave or similar — each language has its own frameworks for step definitions.</p><p>Put the spec and step definitions side by side and the mapping is direct: a line like “a poll exists with options cats and dogs” in the spec has its programmatic equivalent as a function in the step definitions. Running these as tests produces a report showing every scenario in the spec passing — and the application has been built to satisfy them.</p><p><strong>Why not just use something like the Playwright CLI?</strong> I use the Playwright CLI quite a bit, but it introduces an amount of non-determinism. Step definitions, on the other hand, are repeatable — the coding agent only changes a few things for each new feature, and it doesn’t burn a lot of tokens because you are just re-running code that is already built.</p><p>The alignment works in both directions. If I edit only the markdown spec — say Alice votes for <em>dogs</em> instead of <em>cats</em> — and re-run the acceptance tests, they fail: the vote was recorded for cats but the spec now expects dogs. The coding agent now has a deterministic signal to go and correct the code. The acceptance tests are always in line with the OpenSpec plain-text file.</p><p>The piece putting this together is the cucumber.cjs configuration, which was authored using an <strong>acceptance test authoring</strong> skill. That skill is currently built for Cucumber.js and JavaScript-based UI applications - it knows how to create a page object model, for example - and you can adapt it to the nature of your application and technology stack.</p><p>Here is a short summarizing this flow:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FjghIES9jWDg%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fshorts%2FjghIES9jWDg%3Fsi%3Dylz_Lzcl7DhucebW&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FjghIES9jWDg%2Fhq2.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/c68edc8fc671d5cbb102b69f7f924adc/href">https://medium.com/media/c68edc8fc671d5cbb102b69f7f924adc/href</a></iframe><h3>Two Rules and a Hook</h3><p>How do we make the coding agent finish building the application and only then call it done?</p><ul><li><strong>Rule 1</strong> — in the claude.md file itself: <em>acceptance tests must always pass</em>. Only after that can the agent call the work done. This is what turns the plain-text spec into a deterministic definition of done rather than letting the agent reward-hack its way to &quot;complete.&quot;</li><li><strong>Rule 2</strong> — <em>specs and code are never modified together</em>. Without this rule, an agent that has modified code first can reward-hack rule 1: it modifies the spec to get the tests passing and reports “the spec is good, the tests pass, no problem” — but the fundamental principle is gone, because we did not use the spec as source.</li></ul><p>Rule 2 is not just a guideline sitting in claude.md. A hook called <strong>Zone Guard</strong> enforces it as a deterministic check: within a git commit or within a session - depending on the approach you take - it will never allow a single piece of change to include both the spec and the code.</p><h3>Spec as Source Harness Guidelines</h3><p>The second question comes from <a href="https://martinfowler.com/articles/exploring-gen-ai/sdd-3-tools.html">Birgitta’s article on martinfowler.com</a> and her framing of <em>spec-anchored</em> versus <em>spec as source</em> — which I compared OpenSpec against in an <a href="https://intent-driven.dev/blog/2025/12/26/choosing-spec-driven-development-tool/">earlier post</a>, concluding OpenSpec has the potential to be spec-anchored because of its source-of-truth specification. As an experiment, can we take it all the way to spec as source?</p><p>For spec as source, the spec is the only main source file that humans edit over time — humans never touch the code. As an extension, no vibe coding is allowed either: I cannot just ask the agent to modify the code and leave the spec behind. That is where the trouble usually starts — the spec builds the first version of the application, but the moment code is modified by hand, spec and code drift apart.</p><p>First, archive the completed change. The specification carries the delta format — added, removed, modified markers — so that when it is synced and archived it moves into the source-of-truth specification. The acceptance tests still pass; only their path changes, from inside the change folder to the source-of-truth specification.</p><p>Now, in a new session, let’s go against the grain of the harness — the new-engineer-on-the-team scenario:</p><pre>Help me change the src folder directly to allow users to modify votes<br>by submitting with the same email again. No need to create OpenSpec proposal.</pre><p>This deliberately contradicts the first specification, which disallows duplicate votes. Because the rules are in place, the agent pushes back and says a spec has to be created. Forcing it through with “bypass and move forward” doesn’t work either: the agent cannot complete the feature, because the acceptance test asserting <em>a user must not be able to vote more than once with the same email ID</em> is now broken by the modified code. The agent itself reports that the requested feature directly contradicts the existing spec, and that the path forward is to modify the spec first. The resolution: revert the changes and start afresh with a proper OpenSpec change proposal for the capability.</p><p>This is exactly what I articulated in my <a href="https://www.infoq.com/articles/enterprise-spec-driven-development/">InfoQ article on enterprise spec-driven development</a>: doing the right thing — writing the spec first — must be easy, and going against the grain of the harness — writing code first and leaving the spec behind — should be hard. Both are taken care of here, and the only way forward is an OpenSpec change proposal.</p><p>The new proposal’s spec again has fenced Gherkin, this time carrying the <em>modified</em> marker for the changed feature. Running the acceptance tests at this point shows the original scenarios still passing and the new scenarios as undefined — the modification is not yet done. There is more nuance here, such as calculating the <em>effective test suite</em> so that contradicting tests (the original feature and its modification) are not run together — a topic for a separate video.</p><p>Here is a short summarizing spec as source:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FYaQ2rDPmamY%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fshorts%2FYaQ2rDPmamY%3Fsi%3D-9aSEViH1MdTBSne&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FYaQ2rDPmamY%2Fhq2.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/c236e2527d8e831cc9308a593946ed75/href">https://medium.com/media/c236e2527d8e831cc9308a593946ed75/href</a></iframe><h3>BDD Does Not Replace TDD</h3><p>Because we are doing behavior-driven development does not mean TDD is not required. BDD takes care of the <strong>outside-in</strong> — the spec is always from the point of view of the user, and it drives the application from the outside. Test-driven development helps you go <strong>inside-out</strong>. Both are necessary to put an application together well; TDD is simply not covered here to keep the focus of this walkthrough on BDD.</p><p>Does this mean we have completely achieved spec as source? Not necessarily — there are a few more things to complete — but the two questions we set out with are answered: a markdown spec, given a programmatic equivalent through Cucumber.js step definitions, drives the application through tests that tell the coding agent when it is actually done; and the harness rules — acceptance tests must always pass, specs and code are never modified together — keep both humans and agents from inadvertently modifying code first.</p><h3>Video Walkthrough</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FxoPjF-Z2Qgw%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DxoPjF-Z2Qgw&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FxoPjF-Z2Qgw%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/dbefdb7542320b2b5eb357e96a418d33/href">https://medium.com/media/dbefdb7542320b2b5eb357e96a418d33/href</a></iframe><h3>References</h3><ul><li>Behavior-Driven Template — <a href="https://github.com/intent-driven-dev/behavior-driven-template">intent-driven-dev/behavior-driven-template</a></li><li>Intent-Driven Template — <a href="https://github.com/intent-driven-dev/intent-driven-template">intent-driven-dev/intent-driven-template</a></li><li>Birgitta’s article on martinfowler.com — <a href="https://martinfowler.com/articles/exploring-gen-ai/sdd-3-tools.html">Exploring Gen AI: Spec-Driven Development Tools</a></li><li>InfoQ — <a href="https://www.infoq.com/articles/enterprise-spec-driven-development/">Enterprise Spec-Driven Development</a></li><li>Earlier post on spec-anchored vs spec as source — <a href="https://intent-driven.dev/blog/2025/12/26/choosing-spec-driven-development-tool/">Which Spec-Driven Development Tool Should You Choose?</a></li></ul><p><em>Originally published at </em><a href="https://intent-driven.dev/blog/2026/07/17/behavior-driven-development-sdd-openspec/"><em>https://intent-driven.dev</em></a><em> on July 17, 2026.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ce5deb9970c9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/intent-driven-dev/behavior-driven-development-and-spec-driven-development-with-openspec-ce5deb9970c9">Behavior-Driven Development and Spec-Driven Development with OpenSpec</a> was originally published in <a href="https://medium.com/intent-driven-dev">Intent Driven Dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Better Specs with Adversarial AI and Glossary Skills]]></title>
            <link>https://medium.com/intent-driven-dev/better-specs-with-adversarial-ai-and-glossary-skills-9fb940bf82e7?source=rss----d97c9b8de610---4</link>
            <guid isPermaLink="false">https://medium.com/p/9fb940bf82e7</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[domain-driven-design]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[spec-driven-development]]></category>
            <category><![CDATA[vibe-coding]]></category>
            <dc:creator><![CDATA[Hari Krishnan]]></dc:creator>
            <pubDate>Thu, 02 Jul 2026 11:38:53 GMT</pubDate>
            <atom:updated>2026-07-02T11:38:53.554Z</atom:updated>
            <content:encoded><![CDATA[<h4>Multi-Model Spec Review and Glossary Skills using OpenSpec and OpenCode</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*lapx0cg2Z9PWqrBD.jpg" /></figure><p>This post extends the <a href="https://intent-driven.dev/blog/2026/05/10/spec-driven-development-openspec-opencode/">OpenSpec + OpenCode walkthrough</a> with two new skills added to the <a href="https://github.com/intent-driven-dev/intent-driven-template">intent-driven-template</a>: <strong>adversarial authoring</strong> and <strong>glossary</strong>. Both are aimed at getting your specifications into good shape before they reach human review.</p><h3>The Problem These Solve</h3><p>Specs written by a single model carry that model’s blind spots, and we often have to intervene by handing these specifications to another model to avoid bias. A second issue with specifications authored by agents is the inconsistency in terminology across sessions. Each model may have its own way of expressing the spec. And also, each human reviewing it may also have their own inputs. We need a way to both reduce model bias and remain consistent by building domain-specific terminology to achieve better specifications. These two skills address that directly.</p><h3>1. Adversarial Authoring — Cross-Model Review Inside the Workflow</h3><p>The <a href="https://github.com/intent-driven-dev/intent-driven-template/tree/main/.agents/skills">adversarial-authoring skill</a> wires two sub-agents into the proposal phase: one <strong>author, one reviewer</strong>. A common setup is having one model write the proposal and another model review it - Claude writing and GPT reviewing, or vice versa.</p><p>For example, if we use this skill to author proposal.md, this also produces <strong>council notes</strong>: what the author subagent wrote, what the reviewer subagent challenged, and how each challenge was resolved - accepted, rejected, and why.</p><p>This matters because:</p><ul><li>Different models surface different assumptions and biases</li><li>Over-specification gets caught before it reaches you</li><li>The decision trail is visible, not buried in a chat session</li></ul><p>Keep it to two or three sub-agents. More than that and the output becomes noise.</p><p>The <a href="https://github.com/intent-driven-dev/intent-driven-template/tree/main/.agents/skills">glossary skill</a> runs during the design phase and maintains a file of domain and technical terms with precise definitions scoped to your application.</p><p>Consider a common scenario: an agent designing an import layer for inconsistent legacy CSV data might coin a term like <em>translation boundary service</em> — verbose, invented, and unfamiliar to your team. The right term is <strong>anti-corruption layer</strong> (ACL), a Domain-Driven Design context mapping pattern introduced by Eric Evans: <a href="https://en.wikipedia.org/wiki/Anti-corruption_layer">“an isolating layer to provide your system with functionality of the upstream system in terms of your own domain model”</a> — a concept your engineers already know. This way we can reduce inconsistency where one person calls ACL a translation boundary and others may use some other term. And each of these may be slightly different. When we agree on the concept we are using that leads to clear specifications.</p><p>Why this helps over time:</p><ul><li>Terms defined once are reused by the agent in every subsequent spec</li><li>Engineers at different experience levels converge on the same language</li><li>Agents are part of your team — shared terminology applies to them too</li></ul><p>A single precise term like <em>idempotent</em> or <em>anti-corruption layer</em> carries more information than a paragraph of approximation.</p><p>The same applies to terminology specific to your organization or industry. In a run club, a <strong>sweeper</strong> (or tail runner) is the volunteer who runs at the back of the pack — matching the pace of the slowest participant, ensuring no one is left behind or lost, and relaying updates to the lead group or organizers. An agent designing a run club management feature might describe this role as a <em>“designated rear-of-pack participant welfare coordinator”</em> — verbose and imprecise. Your team calls it a sweeper. Define it once in the glossary — with its responsibilities scoped to your club’s rules — and the agent will use that term in every spec it writes after that.</p><h3>Putting It Together</h3><p>These skills complement the ones we discussed in our previous post. Adversarial authoring reduces model bias. Glossary enforces terminological consistency. Combined with grill-me for interrogating the plan upfront - covered in the <a href="https://intent-driven.dev/blog/2026/05/10/spec-driven-development-openspec-opencode/">previous post</a> - the spec that arrives at your desk should require our review, and much less cleanup.</p><p>The <a href="https://github.com/intent-driven-dev/openspec-schemas/tree/main/openspec/schemas/intent-driven">intent-driven schema</a> automatically sequences all of this. You don&#39;t have to remember to run the review; it&#39;s built into the workflow.</p><h3>Video Walkthrough</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F2V78VVJ1sa0%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D2V78VVJ1sa0&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F2V78VVJ1sa0%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/375c40bd5b70b2bfe084ec5fb6bb3df5/href">https://medium.com/media/375c40bd5b70b2bfe084ec5fb6bb3df5/href</a></iframe><h3>References</h3><ul><li>Intent-Driven Template — <a href="https://github.com/intent-driven-dev/intent-driven-template">intent-driven-dev/intent-driven-template</a></li><li>Adversarial Authoring skill — <a href="https://github.com/intent-driven-dev/intent-driven-template/tree/main/.agents/skills">.agents/skills/adversarial-authoring</a></li><li>Glossary skill — <a href="https://github.com/intent-driven-dev/intent-driven-template/tree/main/.agents/skills">.agents/skills/glossary</a></li><li>OpenSpec — <a href="https://github.com/Fission-AI/OpenSpec">Fission-AI/OpenSpec</a></li><li>Anti-Corruption Layer — <a href="https://en.wikipedia.org/wiki/Anti-corruption_layer">Wikipedia</a>; Eric Evans, <em>Domain-Driven Design: Tackling Complexity in the Heart of Software</em> (2003), Chapter 14: Maintaining Model Integrity</li><li>Previous post — <a href="https://intent-driven.dev/blog/2026/05/10/spec-driven-development-openspec-opencode/">Spec-Driven Development with OpenSpec and OpenCode</a></li></ul><p><em>Originally published at </em><a href="https://intent-driven.dev/blog/2026/06/27/sdd-adversarial-authoring-glossary/"><em>https://intent-driven.dev</em></a><em> on June 27, 2026.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9fb940bf82e7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/intent-driven-dev/better-specs-with-adversarial-ai-and-glossary-skills-9fb940bf82e7">Better Specs with Adversarial AI and Glossary Skills</a> was originally published in <a href="https://medium.com/intent-driven-dev">Intent Driven Dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Linear and OpenSpec]]></title>
            <link>https://medium.com/intent-driven-dev/linear-and-openspec-f6a069f3e0e5?source=rss----d97c9b8de610---4</link>
            <guid isPermaLink="false">https://medium.com/p/f6a069f3e0e5</guid>
            <category><![CDATA[ai-coding]]></category>
            <category><![CDATA[openspec]]></category>
            <category><![CDATA[product-management]]></category>
            <category><![CDATA[product-backlog]]></category>
            <category><![CDATA[spec-driven-development]]></category>
            <dc:creator><![CDATA[Hari Krishnan]]></dc:creator>
            <pubDate>Thu, 04 Jun 2026 14:20:31 GMT</pubDate>
            <atom:updated>2026-06-04T14:20:31.467Z</atom:updated>
            <content:encoded><![CDATA[<h4>Integrating Linear Product Backlog with OpenSpec Spec-Driven Development</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*0psbFS7KQcpt-Irz.jpg" /><figcaption>Linear Product Baclog Integration with OpenSpec SDD using Codex Skills</figcaption></figure><p>In my <a href="https://intent-driven.dev/blog/2026/01/11/linear-mcp-openspec-sdd-workflow/">earlier article</a>, I walked through keeping a Linear backlog in sync with OpenSpec as an agent moved a change through <em>Propose</em>, <em>Apply</em>, and <em>Archive</em>. That workflow worked, but it relied on modifying OpenSpec itself.</p><p>This revisit achieves the same workflow <strong>without touching OpenSpec at all</strong>. The Linear sync now lives entirely in a skill — <a href="https://github.com/intent-driven-dev/openspec-schemas/tree/main/.codex/skills/openspec-linearized">openspec-linearized</a> - that runs on stock OpenSpec.</p><h3>What the Skill Does</h3><p>The skill overlays Linear issue management onto the OpenSpec change lifecycle while keeping a clear ownership boundary:</p><ul><li><strong>Linear</strong> owns the business context — goals, acceptance criteria, and stakeholder-facing status.</li><li><strong>The repository</strong> owns the technical design and implementation.</li></ul><h3>Initial Configuration</h3><p>In order to let the coding agent know about which Linear project, team and label we want to associate this repository with, the skill asks us for the details and stores them in openspec/linear.yaml. Once this file is created when we subsequently ask the coding agent to pick up an issue from Linear, it exactly knows where to look.</p><h3>Mapping Linear issue status with OpenSpec change proposal phases</h3><ul><li><strong>Propose</strong> — Binds a Linear Backlog issue as the business brief, and moves it to <em>Todo</em>. proposal.md stays lean, with Linear metadata in its frontmatter.</li><li><strong>Apply</strong> — Moves the story to <em>In Progress</em> while the tasks are implemented.</li><li><strong>Archive</strong> — Completes the OpenSpec archive first, then mirrors the finalized specs into Linear Project Documents (titled OpenSpec: &lt;capability&gt;) and moves the issue to <em>Done</em>.</li></ul><h3>Video Walkthrough</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FrueiUBXVR9Y%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DrueiUBXVR9Y&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FrueiUBXVR9Y%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/617b2aa15acd33d12a0668bdf2d71690/href">https://medium.com/media/617b2aa15acd33d12a0668bdf2d71690/href</a></iframe><h3>References</h3><ul><li>openspec-linearized skill — <a href="https://github.com/intent-driven-dev/openspec-schemas/tree/main/.codex/skills/openspec-linearized">intent-driven-dev/openspec-schemas</a></li><li>Earlier walkthrough — <a href="https://intent-driven.dev/blog/2026/01/11/linear-mcp-openspec-sdd-workflow/">Linear MCP + OpenSpec: A Spec-Driven Development Workflow</a></li><li>OpenSpec — <a href="https://github.com/Fission-AI/OpenSpec">Fission-AI/OpenSpec</a></li></ul><p><em>Originally published at </em><a href="https://intent-driven.dev/blog/2026/05/29/linear-openspec-skill-based-sdd/"><em>https://intent-driven.dev</em></a><em> on May 29, 2026.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f6a069f3e0e5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/intent-driven-dev/linear-and-openspec-f6a069f3e0e5">Linear and OpenSpec</a> was originally published in <a href="https://medium.com/intent-driven-dev">Intent Driven Dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[OpenCode and OpenSpec]]></title>
            <link>https://medium.com/intent-driven-dev/opencode-and-openspec-7445a5dadfba?source=rss----d97c9b8de610---4</link>
            <guid isPermaLink="false">https://medium.com/p/7445a5dadfba</guid>
            <category><![CDATA[skills]]></category>
            <category><![CDATA[spec-driven-development]]></category>
            <category><![CDATA[openspec]]></category>
            <category><![CDATA[open-code]]></category>
            <category><![CDATA[agentic-ai]]></category>
            <dc:creator><![CDATA[Hari Krishnan]]></dc:creator>
            <pubDate>Thu, 21 May 2026 06:31:52 GMT</pubDate>
            <atom:updated>2026-05-21T06:31:52.393Z</atom:updated>
            <content:encoded><![CDATA[<h4>Spec-Driven Development with OpenSpec and OpenCode</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*0h2mbNfOQquZl77g.jpg" /></figure><p>The <a href="https://github.com/intent-driven-dev/intent-driven-template">intent-driven-template</a> wires OpenSpec, OpenCode, and a set of <a href="https://github.com/intent-driven-dev/intent-driven-template/tree/main/.agents/skills">OpenCode skills</a> into an end-to-end Spec-Driven Development workflow. This post walks through each step the template sets up - from openspec init to the custom schema that ties it all together.</p><h3>1. OpenSpec Setup</h3><p>Start by initializing OpenSpec in the project:</p><pre>openspec init</pre><p>Then pick the new, continue, verify, and any other commands you need beyond what is included in the core profile. Profiles were introduced in <a href="https://intent-driven.dev/blog/2026/02/25/openspec-1-2-release/">OpenSpec 1.2</a>.</p><h3>2. OpenSpec Git Discipline</h3><p>The template ships an <a href="https://github.com/intent-driven-dev/intent-driven-template/tree/main/.agents/skills/openspec-git-discipline">openspec-git-discipline skill</a> that enforces a single rule: every OpenSpec state change must cross main before the next lifecycle phase depends on it.</p><p>That means the proposal must be on main before apply starts, and implementation must be merged back to main before archive runs. The skill defines explicit gates around propose, continue, apply, and archive so the agent stops and asks rather than silently violating the rule.</p><p>The reasoning behind these gates — especially when running parallel changes in worktrees — is covered in <a href="https://intent-driven.dev/blog/2026/04/01/openspec-git-worktrees-opencode/">OpenSpec, Git WorkTrees, and OpenCode</a>.</p><h3>3. Proposal — Grill Me Before You Create proposal.md</h3><p>During the proposal step, the template uses Matt Pocock’s <a href="https://github.com/mattpocock/skills/blob/main/skills/productivity/grill-me/SKILL.md">grill-me skill</a> to interrogate the plan one question at a time, walking down each branch of the design tree until there is a shared understanding between the user and the agent.</p><p>This pulls open questions out into the proposal <em>before</em> specs are written, rather than discovering them later.</p><h3>4. Design — C4 Diagrams</h3><p>In the design step, the template uses the <a href="https://github.com/intent-driven-dev/intent-driven-template/tree/main/.agents/skills/c4-diagrams">c4-diagrams skill</a> to clarify architecture before detailed design. The skill produces system context, container, component, dynamic, or deployment diagrams - only the levels that answer a real question - in plain ASCII or Mermaid.</p><p>The skill also gates on purpose, format, and rigor up front, requires assumptions and open questions to be called out alongside the diagram, and refuses to drift into detailed design until the diagram is approved. This is especially useful in the brownfield context — see <a href="https://intent-driven.dev/blog/2026/03/10/spec-driven-development-brownfield/">Spec-Driven Development with Brownfield Projects</a> for more on that.</p><h3>5. ADR — Recording the Architectural Decisions</h3><p>The design step almost always surfaces architectural decisions worth keeping. The template uses an <a href="https://github.com/intent-driven-dev/intent-driven-template/tree/main/.agents/skills/architectural-decision-records">architectural-decision-records skill</a> to draft each ADR with explicit context, considered options, decision, and consequences - supporting MADR full, MADR minimal, Nygard, Y-Statement, and custom styles.</p><p>ADRs are kept <em>outside</em> the change so they persist after the change is archived. The reasoning behind that choice — and why specs alone are not enough — is covered in <a href="https://intent-driven.dev/blog/2026/04/29/spec-driven-development-with-adr/">Architectural Decision Records with Spec-Driven Development</a>.</p><h3>6. Superpowers for Worktree-Based Parallelism</h3><p>The template uses <a href="https://github.com/obra/superpowers">Obra’s Superpowers</a> in two places:</p><ul><li>During the <strong>explore</strong> phase, Superpowers’ brainstorming skill kicks in automatically.</li><li>During <strong>bulk apply</strong>, our <a href="https://github.com/intent-driven-dev/openspec-schemas/blob/main/.opencode/skills/openspec-bulk-apply-change/SKILL.md">openspec-bulk-apply-change skill</a> leverages Superpowers&#39; worktrees and subagents skills to run multiple OpenSpec changes in parallel - each in its own worktree and SubAgent - without them stepping on each other.</li></ul><p>The mechanics of doing this with OpenSpec — proposing on main, applying inside worktrees, and merging before archive - are covered in <a href="https://intent-driven.dev/blog/2026/04/01/openspec-git-worktrees-opencode/">OpenSpec, Git WorkTrees and OpenCode</a>.</p><h3>7. Bringing It Together — The intent-driven Schema</h3><pre>proposal -&gt; specs -&gt; design -&gt; adr -&gt; tasks</pre><p>OpenSpec uses <strong>schemas</strong> to control which artifacts are generated during the proposal phase. The template activates the <a href="https://github.com/intent-driven-dev/openspec-schemas/tree/main/openspec/schemas/intent-driven">intent-driven schema</a> from <a href="https://github.com/intent-driven-dev/openspec-schemas">intent-driven-dev/openspec-schemas</a>, which produces five artifacts in order:</p><p>Schemas are what make all the previous steps fit together as a single workflow rather than a pile of separate tools — the schema is what tells OpenSpec to ask for an ADR after design, and tasks only after that. Custom schemas were introduced in the <a href="https://intent-driven.dev/blog/2026/01/26/openspec-1-0-release/">OpenSpec 1.0 release</a>, where config.yaml first opened up workflow customization.</p><h3>Video Walkthrough</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FM3dp9u1wZes%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DM3dp9u1wZes&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FM3dp9u1wZes%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/82c9ce521c1807cc937c6dd7252d1923/href">https://medium.com/media/82c9ce521c1807cc937c6dd7252d1923/href</a></iframe><h3>References</h3><ul><li>Intent-Driven Template — <a href="https://github.com/intent-driven-dev/intent-driven-template">intent-driven-dev/intent-driven-template</a></li><li>Template skills — <a href="https://github.com/intent-driven-dev/intent-driven-template/tree/main/.agents/skills">.agents/skills</a></li><li>OpenSpec — <a href="https://github.com/Fission-AI/OpenSpec">Fission-AI/OpenSpec</a></li><li>Matt Pocock’s grill-me skill — <a href="https://github.com/mattpocock/skills/blob/main/skills/productivity/grill-me/SKILL.md">mattpocock/skills</a></li><li>Obra’s Superpowers — <a href="https://github.com/obra/superpowers">obra/superpowers</a></li><li>intent-driven schema — <a href="https://github.com/intent-driven-dev/openspec-schemas/tree/main/openspec/schemas/intent-driven">intent-driven-dev/openspec-schemas</a></li></ul><p><em>Originally published at </em><a href="https://intent-driven.dev/blog/2026/05/10/spec-driven-development-openspec-opencode/"><em>https://intent-driven.dev</em></a><em> on May 10, 2026.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7445a5dadfba" width="1" height="1" alt=""><hr><p><a href="https://medium.com/intent-driven-dev/opencode-and-openspec-7445a5dadfba">OpenCode and OpenSpec</a> was originally published in <a href="https://medium.com/intent-driven-dev">Intent Driven Dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Architectural Decision Records with Spec-Driven Development using OpenSpec]]></title>
            <link>https://medium.com/intent-driven-dev/architectural-decision-records-with-spec-driven-development-using-openspec-404452cd5748?source=rss----d97c9b8de610---4</link>
            <guid isPermaLink="false">https://medium.com/p/404452cd5748</guid>
            <category><![CDATA[openspec]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[ai-coding]]></category>
            <category><![CDATA[spec-driven-development]]></category>
            <category><![CDATA[context-engineering]]></category>
            <dc:creator><![CDATA[Hari Krishnan]]></dc:creator>
            <pubDate>Sun, 10 May 2026 14:18:24 GMT</pubDate>
            <atom:updated>2026-05-21T06:28:23.826Z</atom:updated>
            <content:encoded><![CDATA[<h4><strong>Treating architectural decisions as first-class context in Spec-Driven Development</strong></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*idEzaAjcdpnCrrP9.jpg" /></figure><p>Architectural decisions deserve a durable log so that future change proposals can leverage prior reasoning during design — not rediscover it. <a href="https://github.com/Fission-AI/OpenSpec">OpenSpec</a> with the default <a href="https://github.com/Fission-AI/OpenSpec/tree/main/schemas/spec-driven">spec-driven</a> schema captures that reasoning in design.md while a change is in flight, but once the change is archived, only specs.md is carried forward into openspec/specs/. The design rationale stays behind in the archive, out of reach of future proposals. The new spec-driven-with-adr schema closes that gap by keeping <a href="https://adr.github.io/">Architectural Decision Records</a> outside the change, alongside specs, so every architectural decision persists and the current state of the architecture stays visible to future proposals.</p><h3>The Default spec-driven Schema</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ReWXNqApsDcxv7lI.jpg" /></figure><p>OpenSpec ships with a default schema called spec-driven that produces four artifacts per change: proposal.md, specs.md, design.md, and tasks.md. When a change is archived, <strong>only </strong><strong>specs.md is preserved</strong> - it is synced into openspec/specs/ and lives on. The proposal, design, and tasks are archived with the change under openspec/changes/archive/... and are not considered when the next change is proposed.</p><p>For more on how schemas plug into this pipeline, see the earlier post on <a href="https://intent-driven.dev/blog/2026/02/12/openspec-custom-schemas/">OpenSpec Custom Schemas</a>.</p><h3>Why This Matters for Architectural Decisions</h3><p>The rationale behind an architectural choice usually lives in design.md. Because design.md is archived with the change, that rationale becomes invisible to future proposals. New changes then get designed in the dark - the same trade-offs get re-litigated, fresh designs can quietly contradict prior ones, and the team loses the ability to see <em>why</em> the architecture looks the way it does.</p><h3>How spec-driven-with-adr Differs</h3><p>The <a href="https://github.com/intent-driven-dev/openspec-schemas/tree/main/openspec/schemas">spec-driven-with-adr</a> schema adds an <strong>ADR artifact that lives outside the change</strong>, outside the openspec/ folder. Every change can write one or more ADRs (when there are significant architectural changes or decisions being made), and those records persist after the change is archived.</p><p>That gives the workflow two things the default schema does not:</p><ul><li>A durable record of every architectural decision — context, options considered, choice, and consequences — captured at the moment the decision is made.</li><li>A visible current-state view of the architecture that future change proposals can read and design against.</li></ul><p>The intent matches the rest of OpenSpec: keep the reasoning close to the code so future contributors — human or agent — can read the <em>why</em> without spelunking through pull requests, Slack, or memory.</p><h3>Specs and ADRs Together Represent Current State</h3><p>The earlier <a href="https://intent-driven.dev/blog/2025/11/09/spec-driven-development-openspec-source-truth/">Source of Truth post</a> framed openspec/specs/ as the living spec representing the current state of the system. The spec-driven-with-adr schema extends that same idea to architectural reasoning:</p><ul><li><strong>Specs</strong> represent the current state of the application’s <strong>overall functionality</strong> — what the system does today.</li><li><strong>ADRs</strong> represent the current state of the application’s <strong>architecture</strong> — <em>how</em> and <em>why</em> the system is built that way today.</li></ul><p>Both are durable, and both are read by future change proposals during design. Proposals, designs, and tasks are scaffolding that gets archived once a change ships; specs and ADRs are the load-bearing artifacts that future changes design against.</p><h3>A Small Example</h3><p>Suppose an early change picks Postgres over DynamoDB for the primary store. With the default schema, that decision is reasoned through in design.md - the alternatives considered, the cost and operational trade-offs, the consequences for query patterns - and then archived once the change ships. With spec-driven-with-adr, the same reasoning is captured as an ADR that persists outside the change.</p><p>A few months later, someone proposes “add full-text search”. During design, the agent (or human) reading sees the storage ADR, knows the system is on Postgres, and naturally evaluates pg_trgm and tsvector before reaching for a separate search service to infer the same from code. Without the ADR, that proposal can easily start by re-debating the storage choice, or worse, silently introduce a second store that contradicts the original decision.</p><h3>Video Walkthrough</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fy5oemaPsmOA%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dy5oemaPsmOA&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fy5oemaPsmOA%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/9ce4d6f6ea9458860b37c577a176a7da/href">https://medium.com/media/9ce4d6f6ea9458860b37c577a176a7da/href</a></iframe><h3>References</h3><ul><li>Architectural Decision Records — <a href="https://adr.github.io/">adr.github.io</a></li><li>spec-driven-with-adr schema — <a href="https://github.com/intent-driven-dev/openspec-schemas/tree/main/openspec/schemas/spec-driven-with-adr">openspec-schemas</a></li><li>Previous post — <a href="https://intent-driven.dev/blog/2026/02/12/openspec-custom-schemas/">OpenSpec Custom Schemas</a></li></ul><p><em>Originally published at </em><a href="https://intent-driven.dev/blog/2026/04/29/spec-driven-development-with-adr/"><em>https://intent-driven.dev</em></a><em> on April 29, 2026.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=404452cd5748" width="1" height="1" alt=""><hr><p><a href="https://medium.com/intent-driven-dev/architectural-decision-records-with-spec-driven-development-using-openspec-404452cd5748">Architectural Decision Records with Spec-Driven Development using OpenSpec</a> was originally published in <a href="https://medium.com/intent-driven-dev">Intent Driven Dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Git Worktrees with OpenSpec]]></title>
            <link>https://medium.com/intent-driven-dev/git-worktrees-with-openspec-19dcf186a63f?source=rss----d97c9b8de610---4</link>
            <guid isPermaLink="false">https://medium.com/p/19dcf186a63f</guid>
            <category><![CDATA[vibe-coding]]></category>
            <category><![CDATA[spec-driven-development]]></category>
            <category><![CDATA[openspec]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[coding]]></category>
            <dc:creator><![CDATA[Hari Krishnan]]></dc:creator>
            <pubDate>Wed, 08 Apr 2026 08:22:22 GMT</pubDate>
            <atom:updated>2026-04-08T08:22:22.757Z</atom:updated>
            <content:encoded><![CDATA[<h4>Git Worktrees and Subagents with OpenSpec and OpenCode to parallelize feature development.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*1EiygieDJTBaCPG_.jpg" /><figcaption>Git Worktrees and Subagents with OpenSpec and OpenCode to parallelize feature development</figcaption></figure><p>Git WorkTrees let you check out multiple branches simultaneously in separate directories — each with its own working state. Combined with SubAgents in OpenCode, this unlocks genuine parallel feature development inside a Spec-Driven Development workflow.</p><p>The key is knowing <em>where</em> each step of the OpenSpec workflow belongs: proposal on main, implementation in worktrees, archive after merge.</p><h3>Propose on the Main Branch</h3><p>Always run /opsx:propose (or /opsx:explore + continue) on the <strong>main branch</strong>, never inside a worktree branch.</p><p>OpenSpec’s proposal step analyses your active changes alongside the source-of-truth specifications to detect conflicts and gaps. If you propose from a worktree branch, OpenSpec only sees that branch’s delta — it loses visibility into other in-flight changes and the authoritative specs on main. Proposing on main keeps everything in view.</p><p>Once a proposal is created, you can immediately start on the next proposal for a different feature, still on main. Proposals are lightweight — they don’t touch implementation yet.</p><h3>Apply with SubAgents and WorkTrees</h3><p>With proposals ready on main, hand each one off to a SubAgent with its own WorkTree. Each SubAgent works in an isolated branch, applying its change independently. Because worktrees share the same git object store, you get true parallelism without duplicating the repository.</p><p>Before a worktree branch is eligible to merge, run <strong>Verify</strong> inside that same SubAgent session. Verify checks that the implementation matches the proposal’s spec, design, and task artifacts. Running it within the worktree ensures verification before merge so that we can address any issues flagged in the report within that worktree.</p><h3>Merge First, Then Archive</h3><p>Once a worktree branch passes Verify, merge it back to <strong>main</strong> before running Archive. Archive syncs the change’s delta specs into the source-of-truth specifications on main. If you archive while still on a worktree branch, the spec merge runs against an incomplete view of main — other merged features aren’t visible yet — and conflicts become likely.</p><p>The rule: <strong>merge → archive</strong>, in that order, every time. You can Archive each change individually after its merge, or merge all completed worktrees first and then run Bulk-Archive in one pass.</p><h3>Commit Discipline</h3><p>More commits means more recovery points. Aim to commit at every logical boundary:</p><ul><li>After the change proposal is created, or after each proposal artifact is generated individually (spec, design, tasks)</li><li>After each logical code change inside the worktree branch</li><li>After running Archive (the spec sync is a meaningful state change)</li></ul><p>There is no such thing as too many commits in this workflow. If a SubAgent session goes wrong mid-apply, a dense commit history gives you a clean point to resume from rather than starting over.</p><h3>Video</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FF9xjZlqVDDk%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DF9xjZlqVDDk&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FF9xjZlqVDDk%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/99bfdd1444658fa210a8408ce730a4ba/href">https://medium.com/media/99bfdd1444658fa210a8408ce730a4ba/href</a></iframe><p>For a reference skill that automates the bulk-apply workflow, see the <a href="https://github.com/intent-driven-dev/openspec-schemas/blob/main/.opencode/skills/openspec-bulk-apply-change/SKILL.md">openspec-bulk-apply-change skill</a>.</p><p>For worktree-based skills, <a href="https://github.com/obra/superpowers">Superpowers</a> is worth exploring — it provides a skill framework designed to work with git worktrees.</p><p><em>Originally published at </em><a href="https://intent-driven.dev/blog/2026/04/01/openspec-git-worktrees-opencode/"><em>https://intent-driven.dev</em></a><em> on April 1, 2026.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=19dcf186a63f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/intent-driven-dev/git-worktrees-with-openspec-19dcf186a63f">Git Worktrees with OpenSpec</a> was originally published in <a href="https://medium.com/intent-driven-dev">Intent Driven Dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Spec-Driven Development with Brownfield Projects]]></title>
            <link>https://medium.com/intent-driven-dev/spec-driven-development-with-brownfield-projects-f13ad57dab2a?source=rss----d97c9b8de610---4</link>
            <guid isPermaLink="false">https://medium.com/p/f13ad57dab2a</guid>
            <category><![CDATA[spec-driven-development]]></category>
            <category><![CDATA[openspec]]></category>
            <category><![CDATA[vibe-coding]]></category>
            <category><![CDATA[ai-coding]]></category>
            <category><![CDATA[legacy]]></category>
            <dc:creator><![CDATA[Hari Krishnan]]></dc:creator>
            <pubDate>Sun, 15 Mar 2026 06:44:23 GMT</pubDate>
            <atom:updated>2026-03-15T06:44:22.956Z</atom:updated>
            <content:encoded><![CDATA[<h4>Upfront Reverse Engineering vs Incremental Spec Coverage</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*K5fs5ifHzVm4Dp_N.jpg" /></figure><h3>What is a Brownfield Project?</h3><p>The term “Legacy code” has many definitions, the most relatable IMHO is how Michael Feathers defines it in his book <a href="https://www.oreilly.com/library/view/working-effectively-with/0131177052/">Working Effectively with Legacy Code</a>. Any code that does not have tests is effectively legacy.</p><p>Similarly “Brownfield”, in the context of SDD, can be defined as projects that were not built based on specs. The only artifact that is available to us is the implementation or the code itself.</p><h3>Can We Reverse-Engineer Specs?</h3><p>In theory, we can reverse-engineer it. A quick way to achieve it is by using tools like repomix to pack the code into smaller sizes and give it to an LLM along with context of the SDD tool we are using. This can help generate the overall spec.</p><p>In practice, however, AI-generated specs are often inaccurate. The model doesn’t fully capture the original developer’s intent or the subtle nuances embedded in the code. The result is a spec that looks plausible on the surface but diverges from reality. This can’t be trusted as a foundation for future development.</p><h3>The Issues with Reverse-Engineering</h3><p>Reverse Engineering the spec itself can be quite involved. And even if we do, reviewing the specs may not be practical.</p><p>In the context of Test-Driven Development, when dealing with legacy code which does not have tests, should we start by writing all the tests first? That is not practical. In Feathers’ work in <a href="https://www.oreilly.com/library/view/working-effectively-with/0131177052/">Working Effectively with Legacy Code</a> the approach taken is largely to cover the area of code change with tests to first establish current behavior (characterization tests). Then we can test drive the remaining code.</p><p>Similarly it is a lot more practical to incrementally author specs for brownfield projects.</p><p>There is also the problem of alignment loss. A reverse-engineered spec is a derived artifact. When new features are developed against a misaligned spec, the risk of regressions and unintended side effects rises sharply, because the spec no longer reflects the real ground truth of the system.</p><h3>Why Incremental is Better</h3><p>The incremental approach focuses specs on a single, upcoming change rather than attempting to capture the whole codebase at once. Before making a modification, you author a spec for just that area — the change you are about to make. This is far more economical: the scope is bounded, the context is fresh, and the resulting spec accurately reflects intent.</p><p>Over time, this practice compounds. Each change leaves behind a spec that covers its slice of the system. As spec density grows in frequently touched areas, those sections start to behave like greenfield zones. The coverage builds naturally where it matters most.</p><p>For a deeper look at how this applies at scale, see my article on <a href="https://www.infoq.com/articles/enterprise-spec-driven-development/">Enterprise Spec-Driven Development on InfoQ</a>.</p><h3>Brownfield Spec-Driven Development with OpenSpec</h3><h4>Use a Custom Profile and the Explore → Continue Workflow</h4><p>When applying SDD to brownfield projects with OpenSpec, prefer using a custom OpenSpec profile over the default propose command. For more information on custom profiles, please see <a href="https://intent-driven.dev/blog/2026/02/25/openspec-1-2-release/">OpenSpec 1.2 release blog post</a>.</p><p>The recommended workflow for brownfield is:</p><ol><li>/opsx:explore - explore the change and understand the codebase before any spec is written</li><li>Review the exploration output</li><li>/opsx:continue (or fast-forward through artifacts) - progress through proposal, spec, design, and tasks one at a time</li></ol><p>In brownfield projects reviewing each artifact individually gives you more control over what gets generated thereby keeping the spec grounded in the real codebase.</p><h4>Pass Codebase Context During Explore with Repomix MCP</h4><p>During the explore phase, pass context about the existing codebase using <a href="https://github.com/yamadashy/repomix">Repomix</a> MCP. This educates the AI on the brownfield codebase before spec writing begins, so the resulting artifacts reflect the actual system rather than assumptions.</p><p>Example command:</p><pre>/opsx:explore I would like to remove the maybe option in RSVP, use repomix mcp to understand existing code</pre><p>Repomix packages your codebase into a format the AI can consume directly, giving the explore phase accurate grounding in what already exists.</p><p>For large codebases, tools like Repomix are especially helpful in managing context window usage.</p><h3>Conclusion</h3><p>Incremental approach gives you control, accuracy, and progressively growing coverage, without requiring a big upfront investment in reverse-engineering specs that may not hold up. You start where the work is, build specs that reflect genuine intent, and let the brownfield gradually transform over time.</p><p>To see this in action, watch the video below. It walks through a real-world example demonstrating how to use RepoMix to package an existing codebase, feed it to an AI model for analysis, and then author a targeted spec for the next change.</p><h3>Video</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FgJvwn-nuSc8%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DgJvwn-nuSc8&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FgJvwn-nuSc8%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/75772295ac6c342081bdcb9324ae7b59/href">https://medium.com/media/75772295ac6c342081bdcb9324ae7b59/href</a></iframe><p><em>Originally published at </em><a href="https://intent-driven.dev/blog/2026/03/10/spec-driven-development-brownfield/"><em>https://intent-driven.dev</em></a><em> on March 10, 2026.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f13ad57dab2a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/intent-driven-dev/spec-driven-development-with-brownfield-projects-f13ad57dab2a">Spec-Driven Development with Brownfield Projects</a> was originally published in <a href="https://medium.com/intent-driven-dev">Intent Driven Dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>