<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://blog.harikrishnan.io/blog/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.harikrishnan.io/" rel="alternate" type="text/html" /><updated>2026-04-02T17:26:04+00:00</updated><id>https://blog.harikrishnan.io/blog/feed.xml</id><title type="html">Hari Krishnan’s Blog</title><subtitle>Thoughts on AI, Platform Engineering, Architecture, APIs, Developer Experience and Transformation</subtitle><author><name>Hari Krishnan</name><email>hello@harikrishnan.io</email></author><entry><title type="html">OpenSpec, Git WorkTrees and OpenCode</title><link href="https://blog.harikrishnan.io/2026-04-01/openspec-git-worktrees-opencode" rel="alternate" type="text/html" title="OpenSpec, Git WorkTrees and OpenCode" /><published>2026-04-01T00:00:00+00:00</published><updated>2026-04-01T00:00:00+00:00</updated><id>https://blog.harikrishnan.io/2026-04-01/openspec-git-worktrees-opencode</id><content type="html" xml:base="https://blog.harikrishnan.io/2026-04-01/openspec-git-worktrees-opencode"><![CDATA[<p><img src="/assets/images/posts/intent-driven/openspec-git-worktrees-opencode-cover.jpg" alt="OpenSpec, Git WorkTrees and OpenCode" /></p>

<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>

<h2 id="propose-on-the-main-branch">Propose on the Main Branch</h2>

<p>Always run <code class="language-plaintext highlighter-rouge">/opsx:propose</code> (or <code class="language-plaintext highlighter-rouge">/opsx:explore</code> + 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>

<h2 id="apply-with-subagents-and-worktrees">Apply with SubAgents and WorkTrees</h2>

<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>

<h2 id="merge-first-then-archive">Merge First, Then Archive</h2>

<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>

<h2 id="commit-discipline">Commit Discipline</h2>

<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>

<h2 id="video">Video</h2>

<iframe width="560" height="315" src="https://www.youtube.com/embed/F9xjZlqVDDk" title="OpenSpec, Git WorkTrees and OpenCode" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></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>

<hr />

<p><strong><a href="https://intent-driven.dev/blog/2026/04/01/openspec-git-worktrees-opencode/">Read the full article on intent-driven.dev →</a></strong></p>

<p><em>Originally published on intent-driven.dev on April 01, 2026</em></p>]]></content><author><name>Hari Krishnan</name></author><category term="openspec" /><category term="git-worktrees" /><category term="opencode" /><category term="parallel-development" /><category term="subagents" /><summary type="html"><![CDATA[A workflow for using Git WorkTrees and SubAgents to build features in parallel with OpenSpec Spec-Driven Development on OpenCode.]]></summary></entry><entry><title type="html">Spec-Driven Development with Brownfield Projects</title><link href="https://blog.harikrishnan.io/2026-03-10/spec-driven-development-brownfield" rel="alternate" type="text/html" title="Spec-Driven Development with Brownfield Projects" /><published>2026-03-10T00:00:00+00:00</published><updated>2026-03-10T00:00:00+00:00</updated><id>https://blog.harikrishnan.io/2026-03-10/spec-driven-development-brownfield</id><content type="html" xml:base="https://blog.harikrishnan.io/2026-03-10/spec-driven-development-brownfield"><![CDATA[<p><img src="/assets/images/posts/intent-driven/spec-driven-development-brownfield-banner.jpg" alt="Spec-Driven Development with Brownfield Projects" /></p>

<h2 id="what-is-a-brownfield-project">What is a Brownfield Project?</h2>

<p>The term “Legacy code” has many definitions, the most relatable IMHO is how Michael Feathers defines it in his book <em>Working Effectively with Legacy Code</em>. 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>

<h2 id="can-we-reverse-engineer-specs">Can We Reverse-Engineer Specs?</h2>

<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>

<h2 id="the-issues-with-reverse-engineering">The Issues with Reverse-Engineering</h2>

<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 <em>Working Effectively with Legacy Code</em> 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>

<h2 id="why-incremental-is-better">Why Incremental is Better</h2>

<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 Enterprise Spec-Driven Development on InfoQ.</p>

<h2 id="brownfield-spec-driven-development-with-openspec">Brownfield Spec-Driven Development with OpenSpec</h2>

<h3 id="use-a-custom-profile-and-the-explore--continue-workflow">Use a Custom Profile and the Explore → Continue Workflow</h3>

<p>When applying SDD to brownfield projects with OpenSpec, prefer using a custom OpenSpec profile over the default <code class="language-plaintext highlighter-rouge">propose</code> command. For more information on custom profiles, please see OpenSpec 1.2 release blog post.</p>

<p>The recommended workflow for brownfield is:</p>

<ol>
  <li><code class="language-plaintext highlighter-rouge">/opsx:explore</code> — explore the change and understand the codebase before any spec is written</li>
  <li>Review the exploration output</li>
  <li><code class="language-plaintext highlighter-rouge">/opsx:continue</code> (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>

<h3 id="pass-codebase-context-during-explore-with-repomix-mcp">Pass Codebase Context During Explore with Repomix MCP</h3>

<p>During the explore phase, pass context about the existing codebase using Repomix 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>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/opsx:explore I would like to remove the maybe option in RSVP, use repomix mcp to understand existing code
</code></pre></div></div>

<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>

<h2 id="conclusion">Conclusion</h2>

<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>

<iframe width="560" height="315" src="https://www.youtube.com/embed/gJvwn-nuSc8" title="Spec-Driven Development with Brownfield Projects" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>

<hr />

<p><strong><a href="https://intent-driven.dev/blog/2026/03/10/spec-driven-development-brownfield/">Read the full article on intent-driven.dev →</a></strong></p>

<p><em>Originally published on intent-driven.dev on March 10, 2026</em></p>]]></content><author><name>Hari Krishnan</name></author><category term="openspec" /><category term="legacy code" /><category term="brownfield" /><category term="incremental development" /><category term="repomix" /><summary type="html"><![CDATA[How to apply Spec-Driven Development to brownfield projects — codebases that lack specifications and rely solely on existing implementation.]]></summary></entry><entry><title type="html">OpenSpec 1.2 Release</title><link href="https://blog.harikrishnan.io/2026-02-25/openspec-1-2-release" rel="alternate" type="text/html" title="OpenSpec 1.2 Release" /><published>2026-02-25T00:00:00+00:00</published><updated>2026-02-25T00:00:00+00:00</updated><id>https://blog.harikrishnan.io/2026-02-25/openspec-1-2-release</id><content type="html" xml:base="https://blog.harikrishnan.io/2026-02-25/openspec-1-2-release"><![CDATA[<p><img src="/assets/images/posts/intent-driven/openspec-1-2-release-banner.jpg" alt="OpenSpec 1.2 Release" /></p>

<p>OpenSpec 1.2 is <a href="https://github.com/Fission-AI/OpenSpec/releases/tag/v1.2.0">officially released</a>.</p>

<p>The 1.2 release focuses on balancing workflow simplicity from 0.x releases with advanced customization introduced in release 1.0.</p>

<h2 id="openspec-profiles-and-schemas">OpenSpec Profiles and Schemas</h2>

<p>The primary addition in 1.2 is <strong>profiles</strong>, which manage the command workflow.</p>

<h3 id="profiles">Profiles</h3>

<ul>
  <li><strong>Core Profile</strong>: The new default uses a simplified process: explore, propose, apply, and archive. The propose command generates all change proposal artifacts at once.</li>
  <li><strong>Custom Profile</strong>: Provides access to advanced commands, allowing you to step through proposal artifacts individually using the continue command, or generate them all at once using the fast-forward command.</li>
</ul>

<h3 id="schemas">Schemas</h3>

<p>While profiles manage workflow, schemas control which artifacts are generated during the proposal phase. The default OpenSpec schema is “Spec-Driven,” which generates proposal.md, spec.md, design.md, and tasks.md.</p>

<p>Custom schema examples include:</p>
<ul>
  <li><strong>Minimalist</strong>: Reduces output to strictly spec and task artifacts.</li>
  <li><strong>Event-Driven</strong>: Tailored for event-driven architectures with specialized artifacts.</li>
</ul>

<h2 id="customizability">Customizability</h2>

<p>Release 1.2 balances keeping basic workflow easy to adopt while retaining customizability essential for enterprise-scale adoption.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/Y1zfpJHY_4s" title="OpenSpec 1.2 Release" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>

<hr />

<p><strong><a href="https://intent-driven.dev/blog/2026/02/25/openspec-1-2-release/">Read the full article on intent-driven.dev →</a></strong></p>

<p><em>Originally published on intent-driven.dev on February 25, 2026</em></p>]]></content><author><name>Hari Krishnan</name></author><category term="openspec" /><category term="release" /><category term="workflows" /><category term="profiles" /><category term="schemas" /><summary type="html"><![CDATA[OpenSpec 1.2 introduces new workflow capabilities — here is what is new in this release.]]></summary></entry><entry><title type="html">The Intent Harness</title><link href="https://blog.harikrishnan.io/2026-02-23/intent-harness" rel="alternate" type="text/html" title="The Intent Harness" /><published>2026-02-23T00:00:00+00:00</published><updated>2026-02-23T00:00:00+00:00</updated><id>https://blog.harikrishnan.io/2026-02-23/intent-harness</id><content type="html" xml:base="https://blog.harikrishnan.io/2026-02-23/intent-harness"><![CDATA[<p><img src="/assets/images/posts/intent-driven/intent-harness-banner.jpg" alt="The Intent Harness" /></p>

<p>An agentic harness is the execution layer that channels LLM capability into useful work. It does this by combining the model’s reasoning with tools, workflow control, memory, and guardrails. For sustained autonomous execution, it relies on sufficiently structured context that makes intent, constraints, and success conditions explicit. Without this structure, the agent may act in ways that are not aligned with the intended outcome. This results in constant supervision being necessary.</p>

<p>In order to achieve sustained autonomous execution without the risk of losing alignment between intent and implementation, we need to close the gap in shared understanding. The Intent Harness fills this void by helping transform ideas into well-articulated intent that an agent can execute with less supervision.</p>

<h2 id="intent-harness">Intent Harness</h2>

<p>Most useful ideas do not begin as fully formed specifications. They begin as intuition.</p>

<p>A team senses a feature that should exist. A product manager sees a pattern in customer behavior. An engineer notices an architectural weakness. A founder feels that a workflow should be simpler. Sometimes that intuition comes from expertise. Sometimes it is supported by data. Either way, it starts out incomplete.</p>

<p>That incompleteness is not a flaw. It is actually useful.</p>

<p>Intuition is valuable precisely because it leaves room to explore options, test assumptions, and discover better paths before committing to implementation. The problem is not that ideas begin vaguely. The problem is what happens when we send that vagueness straight into an execution system.</p>

<p>Without a disciplined process for clarification, the result is shallow prompting, weak task framing, and low-quality execution. The agent may still produce output, but that output remains tightly coupled to constant human supervision.</p>

<p>The Intent Harness exists to solve this. Being a layer above the Agentic Harness, its job is to help humans articulate intent clearly before execution begins. It achieves this by enabling dialog between humans and AI to establish shared understanding. Just as the agentic harness helps channel raw LLM capability into useful work, the intent harness helps channel raw intuition and ideas into well-engineered intent.</p>

<p><strong>Spec-Driven Development</strong> plays a major role here by giving that intent a structured, reviewable form. It helps us harness intent without forcing us to prematurely lock down every detail.</p>

<p>That means creating a system that helps us:</p>

<ul>
  <li>examine an idea from multiple angles</li>
  <li>challenge assumptions</li>
  <li>make constraints explicit</li>
  <li>define success criteria</li>
  <li>decide what should and should not be built</li>
  <li>break work into meaningful units before execution starts</li>
</ul>

<h2 id="harness-engineering">Harness Engineering</h2>

<p>If the questions we ask, the review discipline we apply, and the framework we use to think all shape the resulting intent, then the quality of that system is critical. Engineering the harness determines how well we articulate intent and how much reliable autonomy we can expect from our agents.</p>

<p>Weak intent engineering produces weak execution:</p>

<ul>
  <li>specs become shallow</li>
  <li>task boundaries become fuzzy</li>
  <li>review becomes ceremonial</li>
  <li>agents need constant correction</li>
</ul>

<p>Strong intent engineering produces better outcomes:</p>

<ul>
  <li>clearer specifications</li>
  <li>better task decomposition</li>
  <li>earlier surfacing of ambiguities</li>
  <li>longer, more focused independent agent execution</li>
</ul>

<p>This is why the conversation around AI-assisted delivery should not stop at model capability or coding-agent ergonomics. The real leverage increasingly comes from the quality of the harness that shapes intent before execution starts.</p>

<p>Looking at it from this angle, how we interpret bugs, mismatches, and execution failures also changes.</p>

<p><img src="/assets/images/posts/intent-driven/intent-harness-feedback-loop.jpg" alt="Harness Feedback Loop" /></p>

<p><em>Image from my <a href="https://www.infoq.com/articles/enterprise-spec-driven-development/">InfoQ article about Spec-Driven Development Adoption at Enterprise Scale</a>.</em></p>

<p>A defect in implementation is not always just an implementation problem. Sometimes it is a signal that the harness itself needs improvement.</p>

<p>For example:</p>

<ul>
  <li>a bug in code may point to a gap in the spec</li>
  <li>a gap in the spec may point to insufficient human review</li>
  <li>insufficient review may point to a pattern of high-volume, low-quality specs being generated</li>
  <li>the structure and quality of those specs may ultimately indicate a weak workflow</li>
</ul>

<p>Seen this way, execution failures are not only quality issues in the output. They are also feedback on the quality of the system that produced the output.</p>

<p>That is an important shift.</p>

<p>It means we should not ask only, “Why did the agent get this wrong?”</p>

<p>We should also ask, “What in our elicitation, specification, review, or validation process allowed this ambiguity to survive?”</p>

<p>This is where the harness metaphor becomes genuinely useful. The purpose of the harness is not just to make the agent productive. It is to make the overall human–AI system learnable and improvable.</p>

<h2 id="closing-thoughts">Closing thoughts</h2>

<p>A good Intent Harness should do more than help teams generate artifacts. Its primary responsibility is to enable human and AI collaboration that helps elicit intent thoroughly, encourages meaningful review, and ultimately ensures alignment between intent and implementation.</p>

<p><em>This post is a living document. I intend to continue updating it.</em></p>

<hr />

<p><strong><a href="https://intent-driven.dev/blog/2026/02/23/intent-harness/">Read the full article on intent-driven.dev →</a></strong></p>

<p><em>Originally published on intent-driven.dev on February 23, 2026</em></p>]]></content><author><name>Hari Krishnan</name></author><category term="intent harness" /><category term="spec driven development" /><category term="agent harness" /><category term="vibe coding" /><category term="context engineering" /><summary type="html"><![CDATA[Between human ideas and agent execution there is a gap. The Intent Harness is the layer that transforms raw ideas into structured, durable instructions the agent can act on independently.]]></summary></entry><entry><title type="html">Enterprise-Scale Spec-Driven Development: New InfoQ Article</title><link href="https://blog.harikrishnan.io/2026-02-19/enterprise-spec-driven-development-infoq" rel="alternate" type="text/html" title="Enterprise-Scale Spec-Driven Development: New InfoQ Article" /><published>2026-02-19T00:00:00+00:00</published><updated>2026-02-19T00:00:00+00:00</updated><id>https://blog.harikrishnan.io/2026-02-19/enterprise-spec-driven-development-infoq</id><content type="html" xml:base="https://blog.harikrishnan.io/2026-02-19/enterprise-spec-driven-development-infoq"><![CDATA[<p>My article on InfoQ, <strong>“Spec-Driven Development – Adoption at Enterprise Scale”</strong>, was published today. It explores what it takes to move Spec-Driven Development beyond individual workflows and into organisations at scale.</p>

<p>Read the full article on InfoQ: <a href="https://www.infoq.com/articles/enterprise-spec-driven-development/">Spec-Driven Development – Adoption at Enterprise Scale</a></p>]]></content><author><name>Hari Krishnan</name></author><category term="software-architecture" /><category term="spec-driven-development" /><category term="openspec" /><category term="API" /><category term="architecture" /><category term="coding-agents" /><summary type="html"><![CDATA[My article on InfoQ explores how organisations can adopt Spec-Driven Development at scale — from brownfield integration and role-specific harnesses to cross-functional collaboration and long-term quality engineering.]]></summary></entry><entry><title type="html">OpenSpec Custom Schemas</title><link href="https://blog.harikrishnan.io/2026-02-12/openspec-custom-schemas" rel="alternate" type="text/html" title="OpenSpec Custom Schemas" /><published>2026-02-12T00:00:00+00:00</published><updated>2026-02-12T00:00:00+00:00</updated><id>https://blog.harikrishnan.io/2026-02-12/openspec-custom-schemas</id><content type="html" xml:base="https://blog.harikrishnan.io/2026-02-12/openspec-custom-schemas"><![CDATA[<p><img src="/assets/images/posts/intent-driven/openspec-custom-schemas-banner.jpg" alt="OpenSpec Custom Schemas" /></p>

<p>In the <a href="https://intent-driven.dev/blog/2026/01/26/openspec-1-0-release/">OpenSpec 1.0 release post</a>, I mentioned how <code class="language-plaintext highlighter-rouge">config.yaml</code> lets you tailor the OpenSpec workflow to your team’s needs. Custom schemas take that idea further. Instead of just configuring the workflow, you define the <strong>artifacts themselves</strong>, shaping what gets generated and in what order.</p>

<p>OpenSpec ships with a default schema called <strong>spec-driven</strong>. It produces four artifacts in sequence: <code class="language-plaintext highlighter-rouge">proposal.md</code>, <code class="language-plaintext highlighter-rouge">specs.md</code>, <code class="language-plaintext highlighter-rouge">design.md</code>, and <code class="language-plaintext highlighter-rouge">tasks.md</code>. Each artifact feeds into the next, creating a deliberate path from idea to implementation. This works well for general-purpose projects, but not every project may fit that mold.</p>

<h2 id="custom-schemas">Custom Schemas</h2>

<p>I built a few custom schemas to explore what different workflows could look like: <strong><a href="https://github.com/intent-driven-dev/openspec-schemas">openspec-schemas on GitHub</a></strong>. Let us look at what is in this repository.</p>

<h2 id="example-1-the-minimalist-schema">Example 1: The Minimalist Schema</h2>

<p>Not every project needs four artifacts we discussed above. For well-scoped, low-risk changes, the <strong>minimalist</strong> schema strips the workflow down to two: <code class="language-plaintext highlighter-rouge">specs.md</code> and <code class="language-plaintext highlighter-rouge">tasks.md</code>.</p>

<p>Specs are authored as user stories with Given/When/Then acceptance criteria. Tasks follow directly from those specs. There is no separate proposal or design step. Details like tech stack and project constraints live in <code class="language-plaintext highlighter-rouge">config.yaml</code>, so the schema can stay lean without losing context.</p>

<p>This is a good fit when the scope is clear and the team does not need a formal proposal or design review before moving to implementation.</p>

<h2 id="example-2-event-driven-architectures">Example 2: Event-Driven Architectures</h2>

<p>For complex systems built around asynchronous messaging, the <strong>event-driven</strong> schema adds discovery and modeling steps before the usual spec-design-task flow.</p>

<p>The workflow starts with <a href="https://en.wikipedia.org/wiki/Event_storming">event storming</a>, capturing domain events, commands, actors, and bounded contexts. Next, <strong>event modeling</strong> transforms those into structured flows with Mermaid diagrams that visualize interactions and timelines. From there, the schema moves through <code class="language-plaintext highlighter-rouge">specs.md</code> and <code class="language-plaintext highlighter-rouge">design.md</code> into <a href="https://www.asyncapi.com/">AsyncAPI</a> spec generation, producing a validated <code class="language-plaintext highlighter-rouge">asyncapi.yaml</code> before any implementation tasks are created.</p>

<p>This schema is purpose-built for teams working with message brokers and event-driven patterns, ensuring that the async contract is specified and validated before code is written.</p>

<h2 id="getting-started-with-custom-schemas">Getting started with custom schemas</h2>

<p>The quickest way to get started is with the OpenSpec CLI. To create a new schema from scratch:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>openspec schema init my-workflow --description "My custom workflow" --artifacts "specs,design,tasks"
</code></pre></div></div>

<p>This scaffolds a complete schema folder under <code class="language-plaintext highlighter-rouge">openspec/schemas/my-workflow/</code> with a <code class="language-plaintext highlighter-rouge">schema.yaml</code> and starter templates for each artifact.</p>

<p>To start from an existing schema and customize it:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>openspec schema fork minimalist
</code></pre></div></div>

<p>This copies the schema into your project as <code class="language-plaintext highlighter-rouge">minimalist-custom</code>, ready for you to modify. You can also provide a custom name:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>openspec schema fork minimalist my-lightweight
</code></pre></div></div>

<p>You can also grab schemas directly from the <a href="https://github.com/intent-driven-dev/openspec-schemas">openspec-schemas repository</a> by copying a schema folder into your project’s <code class="language-plaintext highlighter-rouge">openspec/schemas/</code> directory.</p>

<p>Once a schema is in place, set the <code class="language-plaintext highlighter-rouge">schema</code> field in your <code class="language-plaintext highlighter-rouge">config.yaml</code> to activate it:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">schema</span><span class="pi">:</span> <span class="s">minimalist</span>

<span class="na">context</span><span class="pi">:</span> <span class="pi">|</span>
  <span class="s">Project: My project</span>
  <span class="s">...</span>
</code></pre></div></div>

<p>OpenSpec resolves schemas in this order:</p>

<ol>
  <li><strong>Project-level</strong> — <code class="language-plaintext highlighter-rouge">openspec/schemas/&lt;name&gt;/schema.yaml</code> in your repo</li>
  <li><strong>User-level</strong> — your global OpenSpec config folder (e.g. <code class="language-plaintext highlighter-rouge">~/.openspec/schemas/&lt;name&gt;/schema.yaml</code>) for schemas shared across projects</li>
  <li><strong>Built-in</strong> — schemas bundled with the OpenSpec package (like <code class="language-plaintext highlighter-rouge">spec-driven</code>)</li>
</ol>

<p>The first match wins. This means a project-level schema always takes precedence, so you can override a built-in schema without modifying the package.</p>

<h2 id="understanding-what-is-inside-a-schema">Understanding what is inside a schema</h2>

<p>If you want to understand how a schema works or build your own, here is what is inside. A schema is a folder containing a <code class="language-plaintext highlighter-rouge">schema.yaml</code> file and a <code class="language-plaintext highlighter-rouge">templates/</code> directory with the Markdown templates it references. Using the minimalist schema as an example:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>openspec/
├── config.yaml
└── schemas/
    └── minimalist/
        ├── schema.yaml
        └── templates/
            ├── specs/
            │   └── spec.md
            └── tasks.md
</code></pre></div></div>

<p>The <code class="language-plaintext highlighter-rouge">templates/</code> directory contains the Markdown files referenced by the <code class="language-plaintext highlighter-rouge">template</code> field in each artifact definition.</p>

<p>The <code class="language-plaintext highlighter-rouge">schema.yaml</code> defines the artifacts, their output paths, templates, and dependencies:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">name</span><span class="pi">:</span> <span class="s">minimalist</span>
<span class="na">version</span><span class="pi">:</span> <span class="m">1</span>
<span class="na">description</span><span class="pi">:</span> <span class="s">Lightweight schema for well-scoped, low-risk changes</span>
<span class="na">artifacts</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">id</span><span class="pi">:</span> <span class="s">specs</span>
    <span class="na">generates</span><span class="pi">:</span> <span class="s">specs/**/*.md</span>
    <span class="na">description</span><span class="pi">:</span> <span class="s">Specifications authored as user stories with Given/When/Then acceptance criteria</span>
    <span class="na">template</span><span class="pi">:</span> <span class="s">specs/spec.md</span>
    <span class="na">requires</span><span class="pi">:</span> <span class="pi">[]</span>
  <span class="pi">-</span> <span class="na">id</span><span class="pi">:</span> <span class="s">tasks</span>
    <span class="na">generates</span><span class="pi">:</span> <span class="s">tasks.md</span>
    <span class="na">description</span><span class="pi">:</span> <span class="s">Implementation checklist with trackable tasks</span>
    <span class="na">template</span><span class="pi">:</span> <span class="s">tasks.md</span>
    <span class="na">requires</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="s">specs</span>
<span class="na">apply</span><span class="pi">:</span>
  <span class="na">requires</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="s">tasks</span>
  <span class="na">tracks</span><span class="pi">:</span> <span class="s">tasks.md</span>
</code></pre></div></div>

<p>Each artifact declares what it <code class="language-plaintext highlighter-rouge">generates</code>, which <code class="language-plaintext highlighter-rouge">template</code> to use, and what it <code class="language-plaintext highlighter-rouge">requires</code> before it can be created. The <code class="language-plaintext highlighter-rouge">apply</code> block tells OpenSpec which artifact gates implementation and which file tracks progress.</p>

<h2 id="video-walkthrough">Video Walkthrough</h2>

<iframe width="560" height="315" src="https://www.youtube.com/embed/k01nbZfwB34" title="OpenSpec Custom Schemas" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>

<p>Custom schemas let OpenSpec fit your process rather than the other way around. Pick one from the <a href="https://github.com/intent-driven-dev/openspec-schemas">schemas repository</a> or use it as a starting point to build your own.</p>

<hr />

<p><strong><a href="https://intent-driven.dev/blog/2026/02/12/openspec-custom-schemas/">Read the full article on intent-driven.dev →</a></strong></p>

<p><em>Originally published on intent-driven.dev on February 12, 2026</em></p>]]></content><author><name>Hari Krishnan</name></author><category term="openspec" /><category term="spec driven development" /><category term="custom schemas" /><category term="workflow" /><summary type="html"><![CDATA[Customising OpenSpec workflow with schemas and config.yaml to tailor spec-driven workflows to your domain, defining exactly what artifacts your team needs and how they connect.]]></summary></entry><entry><title type="html">OpenSpec 1.0 Release</title><link href="https://blog.harikrishnan.io/2026-01-26/openspec-1-0-release" rel="alternate" type="text/html" title="OpenSpec 1.0 Release" /><published>2026-01-26T00:00:00+00:00</published><updated>2026-01-26T00:00:00+00:00</updated><id>https://blog.harikrishnan.io/2026-01-26/openspec-1-0-release</id><content type="html" xml:base="https://blog.harikrishnan.io/2026-01-26/openspec-1-0-release"><![CDATA[<p><img src="/assets/images/posts/intent-driven/openspec-1-0-release-workflow.jpg" alt="OpenSpec 1.0 Release Workflow" /></p>

<p><a href="https://intent-driven.dev/assets/blog/openspec-1-0-release/openspec-1-0-release-workflow.jpg">View the full-size workflow diagram →</a></p>

<p>OpenSpec 1.0 is <a href="https://github.com/Fission-AI/OpenSpec/releases/tag/v1.0.0">officially released</a>.</p>

<p>In an earlier post, I wrote about how the <a href="https://intent-driven.dev/blog/2025/11/09/spec-driven-development-openspec-source-truth/">OpenSpec workflow anchors development to specs as the source of truth</a>, ensuring that what gets built stays aligned with what was intended. This spec-anchored approach has been central to OpenSpec from the beginning.</p>

<p>In this post, let us look at some of the major changes that come with the 1.0 release.</p>

<h3 id="explore-before-you-build">Explore Before You Build</h3>

<p>One of the most significant additions is the <strong>Explore Mode</strong>. Before diving into implementation, you can now use OpenSpec to think through ideas which require more clarity, investigate problems, and clarify requirements.</p>

<h3 id="step-by-step-generation">Step-by-Step Generation</h3>

<p>OpenSpec 1.0 introduces a more deliberate artifact creation process. Instead of generating everything at once, you can now step through each artifact such as <code class="language-plaintext highlighter-rouge">proposal.md</code>, <code class="language-plaintext highlighter-rouge">design.md</code>, etc. one at a time.</p>

<p>This step-by-step approach helps improve the review process as each artifact can be checked before the next one is generated.</p>

<h3 id="intent-verification">Intent Verification</h3>

<p>Before archiving a completed change, OpenSpec now includes a verification step. This checks that the implementation actually matches what was specified in the change artifacts. It’s a final checkpoint that catches any intent alignment issues.</p>

<h3 id="noteworthy-mentions-in-10-release">Noteworthy mentions in 1.0 release</h3>

<p>The <code class="language-plaintext highlighter-rouge">config.yaml</code> file in OpenSpec 1.0 looks really interesting.</p>

<h4 id="seamless-integrations">Seamless Integrations</h4>

<p>OpenSpec’s config system makes it straightforward to integrate with external tools. For example, you can connect OpenSpec with Linear using MCP to automatically sync issues and track progress. I had <a href="https://intent-driven.dev/blog/2026/01/11/linear-mcp-openspec-sdd-workflow/">earlier achieved this by forking and modifying OpenSpec</a>, that may not be necessary anymore.</p>

<h4 id="customizable-workflows">Customizable Workflows</h4>

<p>Beyond integrations, <code class="language-plaintext highlighter-rouge">config.yaml</code> lets you tailor the OpenSpec workflow to your team’s needs.</p>

<h3 id="video-walkthrough">Video Walkthrough</h3>

<iframe width="560" height="315" src="https://www.youtube.com/embed/JrI-P64y7H8" title="OpenSpec Release 1.0 - Workflow Changes" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>

<hr />

<p><strong><a href="https://intent-driven.dev/blog/2026/01/26/openspec-1-0-release/">Read the full article on intent-driven.dev →</a></strong></p>

<p><em>Originally published on intent-driven.dev on January 26, 2026</em></p>]]></content><author><name>Hari Krishnan</name></author><category term="openspec" /><category term="spec driven development" /><category term="release" /><category term="workflow" /><summary type="html"><![CDATA[OpenSpec 1.0 marks a major milestone for spec-driven development workflows, introducing Explore Mode, step-by-step generation, and intent verification capabilities.]]></summary></entry><entry><title type="html">Linear MCP + OpenSpec: A Spec-Driven Development Workflow</title><link href="https://blog.harikrishnan.io/2026-01-11/linear-mcp-openspec-sdd-workflow" rel="alternate" type="text/html" title="Linear MCP + OpenSpec: A Spec-Driven Development Workflow" /><published>2026-01-11T00:00:00+00:00</published><updated>2026-01-11T00:00:00+00:00</updated><id>https://blog.harikrishnan.io/2026-01-11/linear-mcp-openspec-sdd-workflow</id><content type="html" xml:base="https://blog.harikrishnan.io/2026-01-11/linear-mcp-openspec-sdd-workflow"><![CDATA[<p>Spec driven development Workflows</p>

<p><img src="/assets/images/posts/intent-driven/linear-mcp-openspec-sdd-workflow-cover.jpg" alt="Linear MCP + OpenSpec: A Spec-Driven Development Workflow" /></p>

<p>There are three high-level topics that often come up during my discussions with people trying to adopt Spec-Driven Development (SDD):</p>

<ol>
  <li>The Starting Point: Can I pick a story from my existing backlog in Jira, Azure DevOps (ADO), or GitHub Issues?</li>
  <li>Roles and Handoffs: Do all my team members, including the Product Team, now require Git access just to view the specs?</li>
  <li>All artifacts in a single monorepo: While colocation of artifacts may have its advantages, should we risk overcrowding the repository with business use cases, technical designs, tasks, and code?</li>
</ol>

<p>While many of us eventually switch to entirely new workflows, adoption is much smoother when we provide onboarding ramps. It helps to see the value of SDD before making fundamental changes to how we work. In this article, I attempt to address these questions through a demo workflow using <a href="https://openspec.dev/">OpenSpec</a> for SDD and <a href="https://linear.app/">Linear</a> for product planning.</p>

<h3 id="starting-where-the-backlog-lives">Starting Where the Backlog Lives</h3>

<p>One of the most frequent questions I get regarding Spec-Driven Development (SDD) is: <strong>Where is the starting point?</strong> Should you pick a story from Jira, Azure DevOps, or Linear? The answer is: <strong>Wherever your backlog lives.</strong> If that is where your requirements start, that is where your SDD workflow can begin. With most SDD tools largely focused on maintaining all artifacts in a single place, it can take a while to figure out how we integrate them into our workflows. We may also need to sync progress back to the team and keep everyone in the loop without forcing non-developers into a code repository. In this walkthrough, I use <strong>Linear</strong> and <strong>OpenSpec</strong> to explore a workflow that lets us use a project management tool or board view alongside an SDD-based workflow.</p>

<p><a href="/assets/images/posts/intent-driven/linear-mcp-openspec-sdd-workflow-diagram.jpg">Click here to view the workflow diagram →</a></p>

<hr />

<p>It is easy enough to feed a ticket to an AI agent. But what happens as the agent makes progress? In a typical siloed workflow, the developer has to manually update the ticket status. In this walkthrough, I demonstrate how <strong>OpenSpec</strong> (via MCP) can handle the paperwork for you. As the agent moves through the <em>Propose, Apply,</em> and <em>Archive</em> stages, the corresponding Linear issue automatically shifts from <strong>Backlog</strong> to <strong>In Progress</strong> and finally to <strong>Done</strong>. This ensures that the source of truth for project status is updated in real-time, without manual intervention.</p>

<h3 id="roles-and-handoffs">Roles and Handoffs</h3>

<p>A common friction point in SDD is the Git barrier. Do Product Owners or stakeholders now need to learn Git to view the latest application specifications? By keeping the product backlog in Linear in sync with the specs in the repo, we can address this point to an extent.</p>

<ul>
  <li><strong>Product Owners</strong> can stay in the tools they love (like Linear) to define the business use case and monitor progress.</li>
  <li><strong>Developers/Agents</strong> handle the technical detailing of the use cases and implementation within the repository.</li>
</ul>

<p>This workflow uses the backlog as a communication bridge, allowing for human-AI collaboration without forcing every role into the codebase.</p>

<hr />

<h3 id="separate-the-what-from-the-how">Separate the What from the How</h3>

<p>An important point to think about is the separation of concerns.</p>

<ul>
  <li><strong>The What:</strong> The business use cases and acceptance criteria (stored in Linear or other product backlogs).</li>
  <li><strong>The How:</strong> The technical design and detailed task list (stored in the Git Repo).</li>
</ul>

<p>Maintaining this separation is a necessary first step in addressing another important point, which is about the suitability of SDD for non-monorepo code organization. If we can separate the “What” from the “How”, then whether the “How” is handled in a monorepo or several repos (example: frontend, backend, etc.) can be tackled later.</p>

<p><img src="/assets/images/posts/intent-driven/linear-mcp-openspec-sdd-workflow-diagram.jpg" alt="Linear MCP + OpenSpec SDD Workflow Diagram" /></p>

<p><em><a href="/assets/images/posts/intent-driven/linear-mcp-openspec-sdd-workflow-diagram.jpg">Click here to view the workflow diagram in full size</a></em></p>

<p>GitHub code: <a href="https://github.com/intent-driven-dev/OpenSpec/tree/intent-driven-dev">OpenSpec Linear MCP fork</a></p>

<h3 id="whats-next">What’s Next?</h3>

<p>To keep this article focused, I have not yet touched on:</p>

<ul>
  <li><strong>Multi-repo use cases:</strong> How to manage specs that span across code repos.</li>
  <li><strong>AI-Assisted Backlog Generation:</strong> Using AI to help write the stories in the first place.</li>
  <li><strong>And more:</strong> Parallel implementation of stories, sync issues, etc.</li>
</ul>

<p>I will be covering these in future articles.</p>

<p><strong>I would love to hear your feedback.</strong> How are you integrating SDD into your existing toolset? Are you finding success in syncing your AI progress back to your project management boards?</p>

<hr />

<p><strong><a href="https://intent-driven.dev/blog/2026/01/11/linear-mcp-openspec-sdd-workflow/">Read the full article on intent-driven.dev →</a></strong></p>

<p><em>Originally published on intent-driven.dev on January 11, 2026</em></p>]]></content><author><name>Hari Krishnan</name></author><category term="openspec" /><category term="linear" /><category term="mcp" /><category term="spec-driven-development" /><category term="workflow" /><summary type="html"><![CDATA[This article explores how to integrate Spec-Driven Development (SDD) into existing workflows by combining Linear project management with OpenSpec. The piece addresses adoption challenges including where to start, handling team roles without forcing Git access, and separating business requirements from technical implementation details.]]></summary></entry><entry><title type="html">Which Spec-Driven Development Tool Should You Choose?</title><link href="https://blog.harikrishnan.io/2025-12-26/choosing-spec-driven-development-tool" rel="alternate" type="text/html" title="Which Spec-Driven Development Tool Should You Choose?" /><published>2025-12-26T00:00:00+00:00</published><updated>2025-12-26T00:00:00+00:00</updated><id>https://blog.harikrishnan.io/2025-12-26/choosing-spec-driven-development-tool</id><content type="html" xml:base="https://blog.harikrishnan.io/2025-12-26/choosing-spec-driven-development-tool"><![CDATA[<p><img src="/assets/images/posts/intent-driven/choosing-spec-driven-development-tool-cover.jpg" alt="Article cover: Which Spec-Driven Development Tool Should You Choose?" /></p>

<p><em><a href="/assets/images/posts/intent-driven/choosing-spec-driven-development-tool-cover.jpg">Click here to view the diagram in full size</a></em></p>

<p>Before selecting a tool for Spec-Driven Development (SDD) it is good to get a bearing on our workflow and the level of rigor our project demands. This post intends to provide a practical way of thinking through which tool to use.</p>

<h2 id="context-engineering-approaches">Context Engineering Approaches</h2>

<p>Before we jump into Spec-Driven Development, itself let us quickly look at how it differs from “Plan Mode”. This is a question I often get asked and thought I will start with that first. There are two ways to look at Context Engineering.</p>

<h3 id="tactical-plan-mode">Tactical (Plan-Mode)</h3>

<p><strong>What it is:</strong> Best for rapid problem-solving. We create a plan or to-do list to think through the solution, build it, and then discard the plan. The code is the only long-term asset. Now based on our preference for CLI vs IDE based tools, there are several choices. Here are some examples that I have used.</p>

<p><strong>Tools:</strong></p>
<ul>
  <li><strong><a href="https://claude.com/product/claude-code">Claude Code</a> (CLI)</strong>: Plan mode creates temporary implementation plans</li>
  <li><strong><a href="https://antigravity.google/">Antigravity</a> (IDE)</strong>: Implementation plans that guide development. Even though the plan appears in your IDE window it is not part of your repo.</li>
</ul>

<h3 id="strategic-spec-driven">Strategic (Spec-Driven)</h3>

<p><strong>What it is:</strong> Here the specification is a first-class citizen. It is as important as the implementation itself. Maybe even more important in comparison to the code itself (Theoretically, we can generate the code all over again if we have the spec). These specs are persistent and version controlled or stored through other means.</p>

<p>Again here, based on our preference for CLI vs IDE based approaches we have several choices.</p>

<p><strong>Tools:</strong></p>
<ul>
  <li><strong>IDE</strong>
    <ul>
      <li><a href="https://kiro.dev/">Kiro</a></li>
    </ul>
  </li>
  <li><strong>CLI</strong>
    <ul>
      <li><a href="https://openspec.dev/">OpenSpec</a></li>
      <li><a href="https://github.com/github/spec-kit">SpecKit</a></li>
      <li><a href="https://github.com/bmad-code-org/BMAD-METHOD">BMAD-Method</a></li>
    </ul>
  </li>
</ul>

<h2 id="other-considerations">Other Considerations</h2>

<h3 id="1-levels-of-spec-driven">1. Levels of “Spec-Driven”</h3>

<p>Not all of the above tools handle the relationship between spec and code the same way.</p>

<p><strong>Spec-First:</strong></p>
<ul>
  <li><strong>Tools</strong>: <a href="https://kiro.dev/">Kiro</a>, <a href="https://github.com/github/spec-kit">SpecKit</a></li>
  <li><strong>Philosophy</strong>: The purpose of the spec is to articulate intent. Over time, the code and spec might not be aligned.</li>
</ul>

<p><strong>Spec-Anchored:</strong></p>
<ul>
  <li><strong>Tool</strong>: <a href="https://openspec.dev/">OpenSpec</a></li>
  <li><strong>Philosophy</strong>: In addition to articulating intent, the spec remains aligned at all times with the implementation.</li>
</ul>

<p>For a deeper dive into the spec-anchored philosophy, see my LinkedIn post on <a href="https://www.linkedin.com/pulse/spec-driven-development-openspec-source-truth-hari-krishnan--obrfc/">Spec-Driven Development with OpenSpec: Source of Truth Specification</a>.</p>

<h3 id="2-rigor-vs-speed">2. Rigor vs. Speed</h3>

<p>How many steps do you actually want to follow?</p>

<ul>
  <li><strong>Lightweight (3-4 phases)</strong>: <a href="https://openspec.dev/">OpenSpec</a></li>
  <li><strong>Comprehensive (Full Agile lifecycle)</strong>: <a href="https://github.com/bmad-code-org/BMAD-METHOD">BMAD-Method</a></li>
</ul>

<p>More rigor is not always better, it depends on how much groundwork we have already done. If we already have stories in our familiar tools like Linear, GitHub boards, Jira, etc. then maybe better to choose a tool that works with smaller features. If we want to think through a solution from an overall nebulous idea, BMAD may be necessary.</p>

<h3 id="3-legacy-code-and-lock-in">3. Legacy Code and Lock-in</h3>

<p><strong>Compatibility: Greenfield vs. Legacy</strong></p>
<ul>
  <li><strong>Greenfield-friendly</strong>: Most tools work well with new projects where you can establish patterns from day one</li>
  <li><strong>Legacy-specialized</strong>: <a href="https://openspec.dev/">OpenSpec</a> claims to be specifically designed to handle the complexity of existing codebases (brownfield and 0 to 1 projects)</li>
</ul>

<p><strong>Exit Strategy: Portability and Lock-in</strong>
Since most of us are evaluating these tools, it may be a good idea to see if the approach allows being able to switch from one tool to another without context loss when we switch spec formats.</p>

<h2 id="video-walkthrough">Video Walkthrough</h2>

<p>For a visual explanation of this decision framework and tool landscape, watch this walkthrough:</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/I0x01WZq1Zw" title="Spec-Driven Development - Which tool should I use?" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>

<h2 id="conclusion">Conclusion</h2>

<p>Better not to overthink it, start with the tool that feels most aligned with your workflow, and adjust as you learn what works for your team.</p>

<p>Want to dive deeper into spec-driven development practices? Explore the <a href="https://intent-driven.dev/knowledge/">Knowledge Hub</a> for detailed guides on <a href="https://intent-driven.dev/knowledge/workflows/">workflows</a>, <a href="https://intent-driven.dev/knowledge/best-practices/">best practices</a>, and <a href="https://intent-driven.dev/knowledge/openspec/">OpenSpec</a>.</p>

<hr />

<p><strong><a href="https://intent-driven.dev/blog/2025/12/26/choosing-spec-driven-development-tool/">Read the full article on intent-driven.dev →</a></strong></p>

<p><em>Originally published on intent-driven.dev on December 26, 2025</em></p>]]></content><author><name>Hari Krishnan</name></author><category term="openspec" /><category term="kiro" /><category term="speckit" /><category term="bmad-method" /><category term="claude-code" /><category term="antigravity" /><category term="spec-driven-development" /><category term="tools" /><summary type="html"><![CDATA[A practical framework for evaluating and selecting appropriate spec-driven development tools by considering workflow requirements and project rigor levels.]]></summary></entry><entry><title type="html">Vibe Coding vs Spec-Driven Development: Intent to Implementation Deviation and Context Engineering</title><link href="https://blog.harikrishnan.io/2025-12-15/vibe-coding-vs-spec-driven-development" rel="alternate" type="text/html" title="Vibe Coding vs Spec-Driven Development: Intent to Implementation Deviation and Context Engineering" /><published>2025-12-15T00:00:00+00:00</published><updated>2025-12-15T00:00:00+00:00</updated><id>https://blog.harikrishnan.io/2025-12-15/vibe-coding-vs-spec-driven-development</id><content type="html" xml:base="https://blog.harikrishnan.io/2025-12-15/vibe-coding-vs-spec-driven-development"><![CDATA[<p><img src="/assets/images/posts/intent-driven/spec-driven-workflow-cover.jpg" alt="Article cover: Spec-driven development workflow" /></p>

<h2 id="article-summary">Article Summary</h2>

<p>The article contrasts two approaches to AI-assisted coding, arguing that workflow structure—not just technical limitations—determines success in maintaining alignment between original intent and final implementation.</p>

<h2 id="the-vibe-coding-lifecycle">The Vibe Coding Lifecycle</h2>

<p><img src="/assets/images/posts/intent-driven/vibe-coding-workflow.jpg" alt="Vibe coding workflow showing iterative prompt-feedback cycles" /></p>

<p><strong>How Vibe Coding Works:</strong></p>

<p>The workflow follows a linear loop: single-line prompt → general-purpose agent interpretation → code generation → human review → iteration. This approach optimizes for speed and momentum using chat-based interfaces.</p>

<p><strong>Implicit Assumptions Accumulate:</strong></p>

<p>Each prompt focuses on immediate concerns, causing agents to revise earlier decisions. “Constraints that were previously implied or loosely stated are weakened or forgotten.” Over time, corrections become fragile, creating a sustained negotiation loop where humans repeatedly restate intent.</p>

<h2 id="the-spec-driven-development-workflow">The Spec-Driven Development Workflow</h2>

<p><img src="/assets/images/posts/intent-driven/spec-driven-workflow.jpg" alt="Spec-driven development four-phase workflow with review gates" /></p>

<p>Spec-driven development emphasizes establishing clear intent before implementation through four phases with review gates:</p>

<p><strong>Phase 1: What (Specify/Propose/Requirements)</strong></p>
<ul>
  <li>Feature requirements and acceptance criteria</li>
  <li>User needs and business goals</li>
  <li>Scope, boundaries, and non-goals</li>
  <li>Success metrics</li>
</ul>

<p><strong>Phase 2: How (Design/Plan)</strong></p>
<ul>
  <li>Architecture and technical approach</li>
  <li>Technology and pattern choices</li>
  <li>Data models, APIs, and interfaces</li>
  <li>Risks and dependencies</li>
</ul>

<p><strong>Phase 3: Task (Granular Steps with Checks)</strong></p>
<ul>
  <li>Small, verifiable work items</li>
  <li>Clear validation criteria per task</li>
  <li>Explicit dependencies and ordering</li>
  <li>Testing and verification strategy</li>
</ul>

<p><strong>Phase 4: Build (Implementation)</strong></p>
<ul>
  <li>Tasks executed sequentially or in parallel</li>
  <li>Validation against acceptance criteria</li>
  <li>Automated tests run</li>
  <li>Implementation reviewed against specs</li>
</ul>

<h2 id="conversation-matters">Conversation Matters</h2>

<p>The article explains that spec-driven development facilitates “structured conversation between humans and coding agents.” Specs function as scaffolding to “clarify and stabilize intent” rather than serving as documentation ends in themselves. This aligns with Agile values emphasizing collaboration.</p>

<h2 id="key-insight">Key Insight</h2>

<p><strong>Vibe coding</strong> prioritizes speed with minimal planning, suitable for prototypes and scripts.</p>

<p><strong>Spec-driven development</strong> prioritizes intent alignment through structure and validation, better suited for production systems and team environments.</p>

<p>The critical differentiator is intent management: “Vibe coding accepts deviation as a cost of speed. Spec-driven development reduces deviation by introducing structure, review gates, and explicit intent articulation.”</p>

<hr />

<p><strong><a href="https://intent-driven.dev/blog/2025/12/15/vibe-coding-vs-spec-driven-development/">Read the full article on intent-driven.dev →</a></strong></p>

<p><em>Originally published on intent-driven.dev on December 15, 2025</em></p>]]></content><author><name>Hari Krishnan</name></author><category term="vibe-coding" /><category term="spec-driven-development" /><category term="ai-coding" /><category term="context-engineering" /><category term="intent-alignment" /><category term="ai-agents" /><category term="development-practices" /><summary type="html"><![CDATA[Contrasting vibe coding and spec-driven development approaches to AI-assisted coding, examining how workflow structure affects alignment between intent and implementation.]]></summary></entry></feed>