<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem:  Remy B.</title>
    <description>The latest articles on Forem by  Remy B. (@remybuilds).</description>
    <link>https://forem.com/remybuilds</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3873956%2Ff651daa8-766d-443b-a1a8-73bfe3560b65.png</url>
      <title>Forem:  Remy B.</title>
      <link>https://forem.com/remybuilds</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/remybuilds"/>
    <language>en</language>
    <item>
      <title>Considering RAG for your Agent? Build this instead.</title>
      <dc:creator> Remy B.</dc:creator>
      <pubDate>Wed, 27 May 2026 04:00:00 +0000</pubDate>
      <link>https://forem.com/remybuilds/considering-rag-for-your-agent-build-this-instead-4ihf</link>
      <guid>https://forem.com/remybuilds/considering-rag-for-your-agent-build-this-instead-4ihf</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Most SaaS AI agents don't need a vector database — file-based memory plus 1M-token context windows plus tool calls handle the typical case&lt;/li&gt;
&lt;li&gt;Anthropic's official "key primitive for just-in-time context retrieval" is filesystem-based, not vector-based&lt;/li&gt;
&lt;li&gt;Claude Code's pattern — an index file (MEMORY.md) plus per-topic markdown files loaded on demand — works for production SaaS agents too&lt;/li&gt;
&lt;li&gt;RAG still wins for large unstructured corpora, regulated multi-tenant data, and frequently-refreshed external knowledge — most SaaS use cases don't fit those criteria&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're considering RAG for your AI agent in 2026, the most important question isn't which vector database to pick. It's whether you need one at all.&lt;/p&gt;

&lt;p&gt;The first time I built a support agent, I reached straight for the default stack: a vector database, an embedding pipeline, a chunker, a reranker. Weeks of plumbing later, the agent still answered most questions by running a plain &lt;code&gt;SELECT&lt;/code&gt; against my app's own database — the vector store barely earned its keep. I tore it out and replaced it with an index file plus a directory of markdown notes the agent read on demand. Same answers, four moving parts gone. The retrieval I thought I needed was something a single file read already handled.&lt;/p&gt;

&lt;p&gt;For most SaaS agents, the simpler pattern is &lt;strong&gt;file-based memory&lt;/strong&gt;: the agent stores what it learns in markdown files and reads them back on demand, the shape Claude Code uses internally. Add 1M-token context windows and tool calls against your existing database, and you handle the typical agent job with fewer moving parts than a vector-DB pipeline.&lt;/p&gt;

&lt;p&gt;This isn't a "RAG is dead" piece. &lt;a href="https://hamel.dev/notes/llm/rag/not_dead.html" rel="noopener noreferrer"&gt;Hamel Husain rebutted that take in July 2025&lt;/a&gt; and he's right. What's changing is which kind of retrieval you reach for first. If you've been &lt;a href="https://vibeready.sh/blog/what-is-vibe-coding/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=do-you-need-rag-for-your-ai-agent" rel="noopener noreferrer"&gt;vibe coding&lt;/a&gt; with Claude Code or Cursor, you've already been using file-based memory without naming it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Default-RAG Instinct Is Doing Too Much
&lt;/h2&gt;

&lt;p&gt;Open any "build an AI agent" tutorial and the architecture is the same: pick a vector database (Pinecone, ChromaDB, pgvector), build an embedding pipeline, chunk your documents, write retrieval, layer in a reranker, hand the top-k chunks to the model. Each piece is a system you own and pay to run.&lt;/p&gt;

&lt;p&gt;That stack made sense when frontier models had 8K-to-32K context windows and tool calling was experimental. It doesn't make sense as the default in 2026, when &lt;a href="https://www.anthropic.com/news/claude-sonnet-4-6" rel="noopener noreferrer"&gt;Claude Sonnet 4.6 ships a 1M-token context window&lt;/a&gt; and function calling is universal. Most SaaS data already lives in a structured database; agents reach it through tool calls, not similarity search. That 2023-era stack is over-engineering for the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  When RAG Genuinely Wins
&lt;/h2&gt;

&lt;p&gt;Before pulling apart the default, name the cases where a full RAG pipeline is the right answer. There are real ones.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Large unstructured corpora.&lt;/strong&gt; When the agent searches across tens of thousands of documents whose titles don't tell you what's inside (product manuals, legal archives, scientific literature, internal wikis at enterprise scale), you need similarity search. Listing every doc in an index stops fitting in context; exact-match lookups miss the relevant chunk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulated, multi-tenant isolation.&lt;/strong&gt; SaaS apps with strict per-tenant data boundaries (healthcare, finance, defense) get row-level access controls and audit trails out of the box from a vector store. Filesystem memory can do this too, but you build the primitives yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frequently-refreshed external knowledge.&lt;/strong&gt; News feeds, market data, regulatory updates: anything where the corpus changes hourly. Vector indexes update incrementally; filesystem memory drifts unless you build the same incremental path yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentic search over structured tool responses.&lt;/strong&gt; Jason Liu puts it sharply: &lt;a href="https://jxnl.co/writing/2025/08/27/facets-context-engineering/" rel="noopener noreferrer"&gt;"Good search is the ceiling on your RAG quality. If recall is poor, no prompt engineering or model upgrade will save you."&lt;/a&gt; When the agent reasons across thousands of structured records and chooses what to ask next, you need real retrieval infrastructure with faceted metadata.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your use case fits one of those, build the RAG stack. The rest of this post is about every other case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Most SaaS Agents Don't Fit That Profile
&lt;/h2&gt;

&lt;p&gt;The typical SaaS agent operates over &lt;em&gt;your own structured data&lt;/em&gt;: users, accounts, orders, tickets, audit logs. You don't need fuzzy similarity search to find a user record; you need a tool call that runs &lt;code&gt;SELECT * FROM users WHERE id = ?&lt;/code&gt;. Tool calls beat vector retrieval here on three counts: precise structured records the model handles more reliably than chunks of prose; fresh data the moment it's written, with no embedding pipeline to re-run; and your existing database's access controls, transactions, and audit trail. None of that is true of a parallel vector store sitting alongside your DB.&lt;/p&gt;

&lt;p&gt;For the parts of agent context that &lt;em&gt;aren't&lt;/em&gt; in your DB (system instructions, conventions, accumulated learnings about a user, prior conversation summaries, your product's docs), the math has changed too. With a 1M-token context window you can carry an enormous amount of state inline. You don't need to retrieve what already fits.&lt;/p&gt;

&lt;h2&gt;
  
  
  The File-Based Memory Pattern
&lt;/h2&gt;

&lt;p&gt;The architecture is simple: an &lt;strong&gt;index file&lt;/strong&gt; listing what the agent knows, a &lt;strong&gt;directory of per-topic markdown files&lt;/strong&gt; with the contents, and &lt;strong&gt;file-read and file-write tools&lt;/strong&gt; the agent uses to navigate them.&lt;/p&gt;

&lt;p&gt;Anthropic's official Memory tool documentation describes this as &lt;a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/memory-tool" rel="noopener noreferrer"&gt;"the key primitive for just-in-time context retrieval"&lt;/a&gt;: the agent stores what it learns in files in a &lt;code&gt;/memories&lt;/code&gt; directory and reads them back on demand, instead of loading everything upfront. No embedding step, no vector store, no chunker. Just files.&lt;/p&gt;

&lt;p&gt;Anthropic's September 2025 post on &lt;a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents" rel="noopener noreferrer"&gt;effective context engineering&lt;/a&gt; formalizes it: "agents built with the just in time approach maintain lightweight identifiers (file paths, stored queries, web links, etc.) and use these references to dynamically load data into context at runtime using tools." The same post names the failure mode this avoids: "context rot," where model recall degrades as context fills. File-based memory keeps context lean by design.&lt;/p&gt;

&lt;p&gt;Working memory stays small: the system prompt, the conversation, and whichever topic files were pulled in for this step. Everything else sits on disk. Need more, read more. &lt;a href="https://vibeready.sh/blog/what-is-harness-engineering/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=do-you-need-rag-for-your-ai-agent" rel="noopener noreferrer"&gt;Harness engineering&lt;/a&gt; calls this a feedforward control: structure the inputs so the agent doesn't have to guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Claude Code Does It
&lt;/h2&gt;

&lt;p&gt;The reference implementation is sitting on every Claude Code user's machine. Claude Code maintains a memory directory at &lt;code&gt;~/.claude/projects/&amp;lt;project&amp;gt;/memory/&lt;/code&gt; with a single index file (&lt;code&gt;MEMORY.md&lt;/code&gt;) and one or more topic-specific markdown files alongside it.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://code.claude.com/docs/en/memory" rel="noopener noreferrer"&gt;official docs&lt;/a&gt; spell out the rules: &lt;code&gt;MEMORY.md&lt;/code&gt; loads first, capped at the first 200 lines or 25KB, and contains one-line entries pointing to per-topic memory files. Topic files don't load until the agent asks for one. The &lt;code&gt;/memory&lt;/code&gt; command lists what's currently loaded, toggles auto-memory, and opens the underlying folder.&lt;/p&gt;

&lt;p&gt;An easy-to-miss guideline in the same docs: target under 200 lines per memory file. The reason: &lt;a href="https://code.claude.com/docs/en/memory" rel="noopener noreferrer"&gt;longer files consume more context and reduce adherence&lt;/a&gt;. That's the principle making file-based memory work. Many small focused files beat one giant context dump.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this works
&lt;/h3&gt;

&lt;p&gt;Three properties map cleanly onto what an agent needs. The index gives &lt;em&gt;directional awareness&lt;/em&gt;: the agent knows what it knows. Per-topic files provide &lt;em&gt;just-in-time depth&lt;/em&gt;: they enter context only when the topic is live. The 200-line cap forces &lt;em&gt;summarization discipline&lt;/em&gt;: topics that get longer have to be split, which keeps each load focused.&lt;/p&gt;

&lt;p&gt;None of this is novel infrastructure. It's a directory of markdown files plus a convention for organizing and reading them. It works because the convention matches how the model reasons about relevance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Applying This to Your SaaS Agent
&lt;/h2&gt;

&lt;p&gt;Adapting this pattern for an agent inside your SaaS is mostly a question of mapping the same conventions onto your storage and your tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Storage layer
&lt;/h3&gt;

&lt;p&gt;The simplest backend is a literal filesystem (fine for single-tenant, single-machine setups). For production multi-tenant SaaS, the pattern fits cleanly into S3 or Cloudflare R2 with one prefix per tenant, or a database table where each row is "a file" (&lt;code&gt;tenant_id&lt;/code&gt;, &lt;code&gt;path&lt;/code&gt;, &lt;code&gt;content&lt;/code&gt;, &lt;code&gt;updated_at&lt;/code&gt;). Pick whichever is closest to your stack. The agent's tools don't care.&lt;/p&gt;

&lt;h3&gt;
  
  
  Index format
&lt;/h3&gt;

&lt;p&gt;Your &lt;code&gt;MEMORY.md&lt;/code&gt; is a markdown table of contents. Each entry is one line: a path, a short description, optionally a category tag. The agent loads it every turn, so keep it tight; same 200-line discipline as Claude Code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Topic file conventions
&lt;/h3&gt;

&lt;p&gt;Group topics by the dimension that matches your access pattern. A customer support agent usually wants per-user files: &lt;code&gt;memory/user-&amp;lt;id&amp;gt;/preferences.md&lt;/code&gt;, &lt;code&gt;memory/user-&amp;lt;id&amp;gt;/recent-tickets.md&lt;/code&gt;, &lt;code&gt;memory/user-&amp;lt;id&amp;gt;/open-issues.md&lt;/code&gt;. A coding assistant groups per-project; a research agent groups per-topic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Loading and update rules
&lt;/h3&gt;

&lt;p&gt;Two invariants do most of the work. &lt;em&gt;Always load the index.&lt;/em&gt; &lt;em&gt;Load topic files only when the conversation needs them.&lt;/em&gt; The agent can decide what's worth saving in the moment, but deterministic capture is more reliable. Topic files get rewritten in full, not appended; that keeps them under 200 lines and forces summarization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Capture patterns: hooks and a daily diary
&lt;/h3&gt;

&lt;p&gt;The interesting design question isn't &lt;em&gt;where&lt;/em&gt; memory goes — it's &lt;em&gt;when&lt;/em&gt; the agent writes to it. Two patterns combine to handle most of the work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-session hooks.&lt;/strong&gt; After a session ends, a deterministic trigger writes a short entry to &lt;code&gt;memory/sessions/&amp;lt;session-id&amp;gt;.md&lt;/code&gt;: what the user did, what they pushed back on, what preferences came up, what broke. The agent doesn't decide mid-session; the hook captures at session close. Same shape as Claude Code's auto-memory: the model spots new conventions during the conversation, the system persists them at close.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A daily diary.&lt;/strong&gt; Once a day, a scheduled job summarizes the last 24 hours of session logs into a single short entry at &lt;code&gt;memory/diary/2026-05-10.md&lt;/code&gt;. One paragraph, no more. Old logs get folded in and archived. Over a month you have 30 diary entries instead of thousands of raw logs. Compress further over a year, with weekly summaries and monthly themes, and the agent has hierarchical memory that mirrors how humans remember: vivid for last week, summarized for last month, themes-only for last year.&lt;/p&gt;

&lt;p&gt;The diary works for the same reason journaling does. It forces summarization, which forces relevance ranking. Deciding what mattered at the time is much cheaper than reconstructing relevance later from an unstructured pile. Unlike humans, the agent doesn't forget to do it. A scheduled function reads &lt;code&gt;memory/sessions/&lt;/code&gt;, prompts the model with "summarize the last 24 hours of sessions into one paragraph, focused on durable learnings," writes the result, and archives the source. A 50-line cron job, not infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f" rel="noopener noreferrer"&gt;Andrej Karpathy's April 2026 "LLM Wiki" gist&lt;/a&gt; formalizes the same shape with a three-layer split: a &lt;code&gt;raw/&lt;/code&gt; directory of immutable source documents, a &lt;code&gt;wiki/&lt;/code&gt; directory of LLM-maintained markdown pages summarizing and cross-referencing the raw material, and a &lt;code&gt;CLAUDE.md&lt;/code&gt; at the root defining the schema and update workflow. His framing: "LLMs don't get bored, don't forget to update a cross-reference, and can touch 15 files in one pass." Same skeleton, different vocabulary.&lt;/p&gt;

&lt;p&gt;The strongest validation comes from another Anthropic post. In &lt;a href="https://www.anthropic.com/engineering/code-execution-with-mcp" rel="noopener noreferrer"&gt;"Code execution with MCP" (November 2025)&lt;/a&gt;, the team described a workflow that consumed ~150,000 tokens loading tool definitions upfront. Reimplemented with filesystem-style MCP APIs (tool definitions read on demand), the same workflow used ~2,000 tokens. A 98.7% reduction. They call it "progressive disclosure." Your file-based memory layer encodes the same idea.&lt;/p&gt;

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

&lt;p&gt;Here's what this looks like end-to-end for a customer support agent inside a SaaS: no vector DB, no embeddings, just files and four tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Directory layout
&lt;/h3&gt;

&lt;p&gt;Per-tenant root, three categories: per-user state (the agent's working knowledge of each customer), the time-decaying capture layer from the previous section (sessions and diary), and tenant-wide policies. One tenant's layout:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;memory/&lt;/code&gt; layout&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;memory/MEMORY.md                       tenant-wide index

memory/user-42/preferences.md          explicit facts (timezone, plan tier, channels)
memory/user-42/recent-tickets.md       last 5 tickets, summarized
memory/user-42/open-issues.md          current state of unresolved issues

memory/sessions/2026-05-10-094217.md   raw session log (last 24h only)
memory/diary/2026-05-09.md             yesterday, one paragraph
memory/diary/2026-05-week-19.md        last week, two sentences
memory/diary/2026-04-themes.md         April, three bullet points

memory/policies/refunds.md             product-wide policy
memory/policies/escalation.md          escalation rules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hierarchy from the previous section in action: sessions vivid and short-lived; dailies roll them up and live ~30 days; weeklies roll up the dailies; monthly themes carry only recurring patterns. Per-user state and tenant policies sit alongside, untouched.&lt;/p&gt;

&lt;h3&gt;
  
  
  What MEMORY.md actually contains
&lt;/h3&gt;

&lt;p&gt;The index is the agent's table of contents: one line per file, enough metadata to decide what to load. Loading the whole index every turn costs almost nothing because the index itself stays small.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;memory/MEMORY.md&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Memory Index&lt;/span&gt;

&lt;span class="gu"&gt;## User state&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; user-42/preferences.md: Pro plan, async preferred, EU timezone
&lt;span class="p"&gt;-&lt;/span&gt; user-42/recent-tickets.md: last 5 (1 refund, 2 billing, 2 onboarding)
&lt;span class="p"&gt;-&lt;/span&gt; user-42/open-issues.md: webhook signature mismatch, opened 2026-05-08

&lt;span class="gu"&gt;## Capture layer&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; sessions/: raw logs, last 24h only
&lt;span class="p"&gt;-&lt;/span&gt; diary/2026-05-09.md: billing webhook day
&lt;span class="p"&gt;-&lt;/span&gt; diary/2026-05-week-19.md: refund policy edge cases

&lt;span class="gu"&gt;## Policies&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; policies/refunds.md: refund auth + escalation thresholds
&lt;span class="p"&gt;-&lt;/span&gt; policies/escalation.md: when to involve a human
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tool surface
&lt;/h3&gt;

&lt;p&gt;Four tools, defined the same way they would be in any modern AI SDK (Vercel AI SDK's &lt;code&gt;tool()&lt;/code&gt;, OpenAI function-calling, or LangChain's &lt;code&gt;Tool&lt;/code&gt; interface):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;read_memory_index()&lt;/code&gt;&lt;/strong&gt; — returns the contents of &lt;code&gt;MEMORY.md&lt;/code&gt; for the active tenant. Called every turn (cheap because the index is small).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;read_memory_file(path)&lt;/code&gt;&lt;/strong&gt; — returns the contents of one topic file. Called only when the index suggests it's relevant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;write_memory_file(path, content)&lt;/code&gt;&lt;/strong&gt; — rewrites a topic file in full. The full-rewrite constraint forces summarization rather than append-only growth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;delete_memory_file(path)&lt;/code&gt;&lt;/strong&gt; — explicit deletion. Used when a topic is resolved or superseded.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A turn in the life
&lt;/h3&gt;

&lt;p&gt;How one query flows through the system. The user asks: "what was the resolution to my webhook issue from last week?"&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The agent calls &lt;code&gt;read_memory_index()&lt;/code&gt;. Index entries flag &lt;code&gt;user-42/open-issues.md&lt;/code&gt; (webhook signature mismatch) and &lt;code&gt;diary/2026-05-09.md&lt;/code&gt; ("billing webhook day").&lt;/li&gt;
&lt;li&gt;It calls &lt;code&gt;read_memory_file("user-42/open-issues.md")&lt;/code&gt; and &lt;code&gt;read_memory_file("diary/2026-05-09.md")&lt;/code&gt; in parallel.&lt;/li&gt;
&lt;li&gt;Combined context is enough to answer: "We pinned it to a Stripe API key rotation that wasn't propagated to your staging env. The fix shipped Friday. Issue is closed on our side; you should be receiving webhooks normally now."&lt;/li&gt;
&lt;li&gt;The agent calls &lt;code&gt;write_memory_file&lt;/code&gt; to remove the resolved entry from &lt;code&gt;user-42/open-issues.md&lt;/code&gt;. A server-side validator checks schema, size, and rate before the write lands.&lt;/li&gt;
&lt;li&gt;At session end, the per-session hook writes a one-line summary to &lt;code&gt;memory/sessions/2026-05-10-094217.md&lt;/code&gt;: "User asked about webhook resolution. Confirmed fix held. Removed entry from open-issues.md."&lt;/li&gt;
&lt;li&gt;At 04:00 the next morning, the daily-diary cron reads &lt;code&gt;memory/sessions/&lt;/code&gt; from the last 24 hours, summarizes it into one paragraph at &lt;code&gt;memory/diary/2026-05-10.md&lt;/code&gt;, and archives the raw files. A week later the dailies fold into &lt;code&gt;diary/2026-05-week-19.md&lt;/code&gt;; a month later the weeklies fold into &lt;code&gt;diary/2026-05-themes.md&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How the agent decides what to save
&lt;/h3&gt;

&lt;p&gt;The decision rule is part of the system prompt, not the tool schema. Something like: "After resolving a ticket, update &lt;code&gt;recent-tickets.md&lt;/code&gt; with a one-line summary. If the user states a durable preference ('always send me updates by email'), update &lt;code&gt;preferences.md&lt;/code&gt;. Don't save transient facts ('the user said hi')."&lt;/p&gt;

&lt;p&gt;Deterministic guards earn their keep here. For high-stakes writes (preferences, policy overrides), route the agent's &lt;code&gt;write_memory_file&lt;/code&gt; calls through a server-side validator that enforces schema, size, and rate caps before the write lands. The agent thinks it's writing freely; the system enforces invariants. &lt;a href="https://vibeready.sh/structured-vibe-coding/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=do-you-need-rag-for-your-ai-agent" rel="noopener noreferrer"&gt;Structured vibe coding&lt;/a&gt; calls this "guides plus guardrails": the same idea applied to agent runtime instead of code generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Honest Tradeoffs — Context Rot
&lt;/h2&gt;

&lt;p&gt;File-based memory isn't a free lunch. The biggest failure mode is &lt;strong&gt;context rot&lt;/strong&gt;. &lt;a href="https://www.trychroma.com/research/context-rot" rel="noopener noreferrer"&gt;Chroma's July 2025 study&lt;/a&gt; of 18 frontier models (including Claude Opus 4, Sonnet 4, GPT-4.1, GPT-4o, o3, and Gemini 2.5 Pro) found that "model performance degrades as input length increases" well before the stated max context window. A 200K-window model can show meaningful degradation at 50K tokens. The 200-line discipline matters because it caps how much memory enters context at once. The older "lost in the middle" finding from &lt;a href="https://arxiv.org/abs/2307.03172" rel="noopener noreferrer"&gt;Liu et al. (TACL 2024)&lt;/a&gt; is softened in current frontier models but not eliminated; if you're packing 30 memory files into context, the order matters.&lt;/p&gt;

&lt;p&gt;Two more failure modes are worth naming. &lt;strong&gt;Fuzzy matching is genuinely harder.&lt;/strong&gt; If a user asks "what was that thing about Stripe webhooks we discussed?" and the relevant entry is in &lt;code&gt;memory/billing-debugging.md&lt;/code&gt;, the agent has to either browse the index intelligently or accept that some queries will miss. With vector search, the same query lights up automatically. For most SaaS use cases this is acceptable; for a public-facing knowledge base where users phrase the same question 50 different ways, vector retrieval still wins. &lt;strong&gt;Memory has to be maintained.&lt;/strong&gt; Files go stale, two files end up contradicting each other, and the agent saves a fact incorrectly and propagates the error on every read. None of these are unique to file-based memory; they're the same problems any RAG system has. The solution is different, though: explicit update and delete semantics in your write path, not incremental embedding refreshes.&lt;/p&gt;

&lt;p&gt;None of these tradeoffs make file-based memory wrong. They make it bounded. Know where the bounds are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Everyone Is Converging
&lt;/h2&gt;

&lt;p&gt;If this looked contrarian a year ago, it doesn't now. The major AI infrastructure players have adopted the pattern. The timeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;August 2025:&lt;/strong&gt; Anthropic ships the Memory tool. The official tool for stateful Claude agents writes to a filesystem (&lt;code&gt;/memories&lt;/code&gt; directory), not a vector store. Tool version: &lt;code&gt;memory_20250818&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;September 2025:&lt;/strong&gt; Anthropic publishes "Effective context engineering for AI agents." The post argues for the "just-in-time" approach with file paths as lightweight identifiers, and warns explicitly about "context rot."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;November 2025:&lt;/strong&gt; Anthropic publishes "Code execution with MCP." The 98.7% token reduction case study. &lt;a href="https://simonwillison.net/2025/Nov/4/code-execution-with-mcp/" rel="noopener noreferrer"&gt;Simon Willison's reaction&lt;/a&gt;: "a sensible way to take advantage of the strengths of coding agents and address some of the major drawbacks of MCP as it is usually implemented today."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;December 2025:&lt;/strong&gt; Linux Foundation forms the Agentic AI Foundation. Founding contributions include OpenAI's AGENTS.md, Anthropic's MCP, and Block's Goose. &lt;a href="https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation" rel="noopener noreferrer"&gt;AGENTS.md was already adopted by 60,000+ open-source projects at the announcement&lt;/a&gt;, supported by Cursor, Codex, GitHub Copilot, Gemini CLI, Devin, and others. The standard for agent context is a markdown file. Not a vector index.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;April 2026:&lt;/strong&gt; Karpathy publishes the LLM Wiki gist. Three-layer markdown wiki maintained by the LLM, explicitly contrasted with naive RAG.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anthropic's official memory primitive, Anthropic's context-engineering guidance, the Linux Foundation's flagship agent standard, Karpathy's most recent public design: all point at file-based memory as the default for agent state. Major AI coding tools (Claude Code, Cursor, Windsurf, GitHub Copilot) consume this pattern natively. Convergence is moving faster than most teams have updated their architectures.&lt;/p&gt;

&lt;p&gt;When I wired this into the Vercel AI SDK, the whole memory layer came down to three things: an index file, a per-user (or per-thread) directory convention, and a small set of read/write tools. RAG stayed an option I could layer on later if the data outgrew the files — not a prerequisite I had to build first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decision Framework — Do You Need RAG?
&lt;/h2&gt;

&lt;p&gt;If you're still on the fence, the decision is mostly mechanical. Run your use case down the comparison and the answer falls out.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;File-based memory&lt;/th&gt;
&lt;th&gt;Vector RAG&lt;/th&gt;
&lt;th&gt;Long context only&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Per-user/per-tenant agent state, conventions, summarized history&lt;/td&gt;
&lt;td&gt;Large unstructured corpora, fuzzy semantic search&lt;/td&gt;
&lt;td&gt;Single-shot tasks with bounded inputs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Corpus size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Up to a few thousand small files per scope&lt;/td&gt;
&lt;td&gt;Tens of thousands to millions of documents&lt;/td&gt;
&lt;td&gt;Whatever fits in 1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data structure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Structured or summarized prose, agent-organized&lt;/td&gt;
&lt;td&gt;Unstructured or semi-structured prose&lt;/td&gt;
&lt;td&gt;Anything that fits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Filesystem or object store, four tools&lt;/td&gt;
&lt;td&gt;Embedding model, vector DB, chunker, reranker&lt;/td&gt;
&lt;td&gt;None beyond the model API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One file-read per topic, fast&lt;/td&gt;
&lt;td&gt;Embedding + vector search + rerank, several hops&lt;/td&gt;
&lt;td&gt;Just the model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost shape&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Storage + token cost on read&lt;/td&gt;
&lt;td&gt;Storage + embedding compute + DB ops&lt;/td&gt;
&lt;td&gt;Token cost only, scales with context size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Failure mode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stale or contradictory memory files&lt;/td&gt;
&lt;td&gt;Bad chunks retrieved, agent ignores them&lt;/td&gt;
&lt;td&gt;Context rot, lost-in-the-middle&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The heuristic that captures most of this: &lt;em&gt;if your data fits in your existing database and your relevant memory fits in your context, you don't need a vector DB&lt;/em&gt;. Reach for one when you outgrow that envelope, not before. Memory is one layer of a larger system; for the others, see the full AI agent SaaS tech stack.&lt;/p&gt;

&lt;p&gt;The practical sequence: ship the agent with file-based memory first, watch how it fails in production, add RAG infrastructure only when a specific corpus demands it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibeready.sh/blog/do-you-need-rag-for-your-ai-agent/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=do-you-need-rag-for-your-ai-agent" rel="noopener noreferrer"&gt;VibeReady&lt;/a&gt;. Republished here for the dev.to community.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>rag</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Best Vibe Coding Tools for SaaS in 2026</title>
      <dc:creator> Remy B.</dc:creator>
      <pubDate>Thu, 21 May 2026 04:00:00 +0000</pubDate>
      <link>https://forem.com/remybuilds/best-vibe-coding-tools-for-saas-in-2026-1ole</link>
      <guid>https://forem.com/remybuilds/best-vibe-coding-tools-for-saas-in-2026-1ole</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code leads SWE-bench Verified (~87.8% with Opus 4.7) and agent autonomy; Cursor leads IDE polish and community size.&lt;/li&gt;
&lt;li&gt;Windsurf's direction under Cognition is still settling; Gemini CLI is the only fully open-source terminal agent in the group.&lt;/li&gt;
&lt;li&gt;GitHub Copilot passed 4.7M paid subscribers in January 2026, a 75% YoY jump, and remains the enterprise default.&lt;/li&gt;
&lt;li&gt;Monthly costs span $0 (Gemini CLI free tier) to $200 (Claude Max Ultra), so the right pick depends on your SaaS scenario, not a single leaderboard.&lt;/li&gt;
&lt;li&gt;No tool fixes the consistency or code-quality problems that vibe coding creates at scale. A harness does.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cursor reportedly hit $2 billion in annualized revenue by early 2026. Claude Code crossed a $2.5 billion run-rate in the same window. 80% of new developers on GitHub used Copilot in their first week on the platform in 2025. The vibe coding tool market looks decided.&lt;/p&gt;

&lt;p&gt;It isn't. The question for SaaS builders isn't which tool is most popular; it's which one fits what you're shipping. We tested the five tools SaaS teams reach for most often: Claude Code, Cursor, Windsurf, Gemini CLI, and GitHub Copilot. Below is our ranked assessment, the head-to-head that matters most, and a decision guide that matches each tool to the scenario where it earns its keep. If you're newer to the category, start with our primer on &lt;a href="https://vibeready.sh/blog/what-is-vibe-coding/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=best-vibe-coding-tools-for-saas" rel="noopener noreferrer"&gt;what vibe coding is&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The first time I picked a vibe coding tool for one of my own SaaS builds, I let the leaderboard decide it — highest SWE-bench score, and I assumed the speed would follow. Three weeks in, I was debugging more "almost-right" output than I was shipping, the exact trap 45% of developers in Stack Overflow's 2025 survey describe. Switching tools didn't fix it; what fixed it was giving whatever tool I ran the same context layer — an AGENTS.md, scoped rules, a review gate before anything merged. The tool was never the variable that mattered most. The harness around it was.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we ranked these tools
&lt;/h2&gt;

&lt;p&gt;Thoughtworks' Technology Radar Vol 33 (November 2025) put Cursor, Cline, and Windsurf in the "supervised coding agents" category and named the Model Context Protocol as the year's clearest maturation signal (&lt;a href="https://www.thoughtworks.com/about-us/news/2025/thoughtworks-tech-radar-33-rapid-ai" rel="noopener noreferrer"&gt;Thoughtworks 2025&lt;/a&gt;). We borrowed that framing. A SaaS builder's decision rarely comes down to one leaderboard score; it comes down to which tool handles real work — multi-file features, production debugging, test runs, deploys, and the code review loop that catches AI's mistakes.&lt;/p&gt;

&lt;p&gt;We evaluated each tool on five criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent autonomy.&lt;/strong&gt; Can it plan and execute multi-step work without constant hand-holding?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SaaS fit.&lt;/strong&gt; Does it handle Next.js, Drizzle, Vercel AI SDK, and full-stack TypeScript without choking on context?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing transparency.&lt;/strong&gt; Do you know what you'll pay next month?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ecosystem.&lt;/strong&gt; Scoped rules, skills, MCP support, subagents, third-party integrations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning curve.&lt;/strong&gt; How fast can a new SaaS developer ship real code with it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We deliberately did not rank on SWE-bench Verified alone. Scaffolding choices swing those scores by ten points or more, so per-tool numbers aren't directly comparable (&lt;a href="https://www.swebench.com/" rel="noopener noreferrer"&gt;SWE-bench project&lt;/a&gt;). For the VibeReady-specific integration depth on each of these five tools, see &lt;a href="https://vibeready.sh/ai-tools/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=best-vibe-coding-tools-for-saas" rel="noopener noreferrer"&gt;our AI tools page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five tools at a glance
&lt;/h2&gt;

&lt;p&gt;Before we get into each tool, here's the summary table. Pricing and capability claims below are sourced individually in each tool's section.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;th&gt;Cursor&lt;/th&gt;
&lt;th&gt;Windsurf&lt;/th&gt;
&lt;th&gt;Gemini CLI&lt;/th&gt;
&lt;th&gt;Copilot&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vendor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;Anysphere&lt;/td&gt;
&lt;td&gt;Cognition&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Interface&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Terminal + desktop&lt;/td&gt;
&lt;td&gt;IDE (VS Code fork)&lt;/td&gt;
&lt;td&gt;IDE (VS Code fork)&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;IDE extension + web&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$20/mo (Pro)&lt;/td&gt;
&lt;td&gt;$20/mo (Pro)&lt;/td&gt;
&lt;td&gt;$20/mo (Pro)&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$10/mo (Pro)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Top tier&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$200/mo (Max Ultra)&lt;/td&gt;
&lt;td&gt;$200/mo (Ultra)&lt;/td&gt;
&lt;td&gt;Enterprise (custom)&lt;/td&gt;
&lt;td&gt;$149.99/mo (AI Ultra)&lt;/td&gt;
&lt;td&gt;$39/mo (Pro+)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Source-available CLI&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent mode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (subagents)&lt;/td&gt;
&lt;td&gt;Yes (Composer)&lt;/td&gt;
&lt;td&gt;Yes (Cascade)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (Coding Agent)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SaaS strength&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-file agentic&lt;/td&gt;
&lt;td&gt;Day-to-day IDE&lt;/td&gt;
&lt;td&gt;Flow-aware context&lt;/td&gt;
&lt;td&gt;Free experiments&lt;/td&gt;
&lt;td&gt;GitHub workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Claude Code: the terminal-native agent leader
&lt;/h2&gt;

&lt;p&gt;Claude Code is Anthropic's terminal-first agent. It shipped as a preview in February 2025, reached general availability alongside Claude 4 in May 2025, and has sat at the top of public SWE-bench Verified leaderboards since (&lt;a href="https://github.com/anthropics/claude-code/releases" rel="noopener noreferrer"&gt;Anthropic release notes&lt;/a&gt;). The desktop app now ships with a redesigned UI and a 1M-token context window for Max, Team, and Enterprise tiers running Opus 4.6 (&lt;a href="https://www.anthropic.com/news/claude-opus-4-6" rel="noopener noreferrer"&gt;Anthropic 2026&lt;/a&gt;). Reported run-rate revenue crossed $2.5 billion in February 2026 (&lt;a href="https://www.uncoveralpha.com/p/anthropics-claude-code-is-having" rel="noopener noreferrer"&gt;Uncover Alpha 2026&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does well
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Planning and multi-step execution that finish entire features without drifting off spec.&lt;/li&gt;
&lt;li&gt;Native MCP integration (Anthropic authored the protocol).&lt;/li&gt;
&lt;li&gt;Subagent orchestration: up to 10 specialized agents running in parallel.&lt;/li&gt;
&lt;li&gt;SWE-bench Verified ~87.8% with Opus 4.7 and the built-in harness (&lt;a href="https://llm-stats.com/benchmarks/swe-bench-verified" rel="noopener noreferrer"&gt;llm-stats.com&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Token consumption balloons during long agent sessions; Max tiers exist for a reason.&lt;/li&gt;
&lt;li&gt;Inline autocomplete feels rougher than Cursor's, because the product is agent-first.&lt;/li&gt;
&lt;li&gt;The Max Ultra tier at $200/month is the steepest entry in this group.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Bundled with Claude Pro ($20/mo) or Claude Max ($100–$200/mo). Team and Enterprise plans unlock the 1M-token Opus 4.6 context (&lt;a href="https://www.anthropic.com/pricing" rel="noopener noreferrer"&gt;anthropic.com/pricing&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to pick it:&lt;/strong&gt; You're shipping multi-file SaaS features and want real agent autonomy. You'd rather fire off a planning command and come back in ten minutes than watch tokens stream into an editor. You need the 1M-token context because your codebase is genuinely large. Pair it with VibeReady's 10 subagents and 14 scoped rules for deeper integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cursor: the IDE standard
&lt;/h2&gt;

&lt;p&gt;Cursor, built by Anysphere, is the IDE most SaaS builders default to. The company closed a $2.3 billion Series D at a $29.3 billion valuation on November 13, 2025, triple its June 2025 mark of $9.9 billion, led by Accel and Coatue (&lt;a href="https://www.cnbc.com/2025/11/13/cursor-ai-startup-funding-round-valuation.html" rel="noopener noreferrer"&gt;CNBC 2025&lt;/a&gt;, &lt;a href="https://techcrunch.com/2025/06/05/cursors-anysphere-nabs-9-9b-valuation-soars-past-500m-arr/" rel="noopener noreferrer"&gt;TechCrunch June 2025&lt;/a&gt;). Press reports place its ARR at roughly $2 billion by early 2026 with over 1M paying customers. Cursor 3 (April 2026) landed broader multi-file edits and improved background agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does well
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tightest IDE integration of the group: VS Code fork, inline diff review, Composer multi-file edits.&lt;/li&gt;
&lt;li&gt;The largest community and third-party tutorial base, useful for new SaaS hires.&lt;/li&gt;
&lt;li&gt;Multi-model: route Claude Opus, GPT-5.x, or the proprietary Composer 2 model at 200+ tokens per second.&lt;/li&gt;
&lt;li&gt;JetBrains IDEs now supported, which matters for teams on WebStorm or IntelliJ.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The June 2025 pricing change — from request-based limits to usage-based credits — triggered a public backlash. CEO Michael Truell apologized and issued refunds on July 4, 2025 (&lt;a href="https://techcrunch.com/2025/07/07/cursor-apologizes-for-unclear-pricing-changes-that-upset-users/" rel="noopener noreferrer"&gt;TechCrunch 2025&lt;/a&gt;). Heavy agent use can still exceed flat-rate expectations.&lt;/li&gt;
&lt;li&gt;Agent autonomy trails Claude Code on long, multi-repo tasks.&lt;/li&gt;
&lt;li&gt;No terminal-first mode; the workflow is editor-centric.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Hobby (free), Pro ($20/mo), Pro+ ($60/mo), Ultra ($200/mo), Teams ($40/user/mo), Enterprise custom (&lt;a href="https://cursor.com/pricing" rel="noopener noreferrer"&gt;cursor.com/pricing&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to pick it:&lt;/strong&gt; You want one tool your whole SaaS team uses. Your builders prefer a visual diff over a terminal. You already live in VS Code. Scoped &lt;code&gt;.cursor/rules/*.mdc&lt;/code&gt; files are where Cursor earns its keep on a SaaS codebase — see structured vibe coding for the 3-layer framework that turns rules into consistent AI output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Windsurf: Cascade and the post-Cognition question
&lt;/h2&gt;

&lt;p&gt;Windsurf went through one of 2025's stranger corporate arcs. Google DeepMind paid about $2.4 billion in early July 2025 to license Windsurf's technology and hire CEO Varun Mohan and co-founder Douglas Chen. A week later, on July 14, 2025, Cognition (maker of the Devin agent) acquired Windsurf's remaining team, product, and brand, picking up $82M in ARR and 350+ enterprise customers (&lt;a href="https://cognition.ai/blog/windsurf" rel="noopener noreferrer"&gt;Cognition 2025&lt;/a&gt;, &lt;a href="https://techcrunch.com/2025/07/14/cognition-maker-of-the-ai-coding-agent-devin-acquires-windsurf/" rel="noopener noreferrer"&gt;TechCrunch 2025&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The product under Cognition kept Windsurf's Cascade agent with flow-aware context tracking and a proprietary SWE-1.5 model. A March 19, 2026 shift to quota-based billing annoyed grandfathered subscribers. Product direction post-acquisition is still settling.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does well
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Cascade's flow-aware context tracking remembers what you were working on across sessions, which maps well to SaaS feature branches.&lt;/li&gt;
&lt;li&gt;SWE-1.5 runs at roughly 950 tokens per second on comparable tasks, faster than most frontier models.&lt;/li&gt;
&lt;li&gt;Strong multi-file reasoning and a planning mode SaaS builders like for migrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;SWE-1.5 underperforms Claude Opus 4.7 and GPT-5.x on SWE-bench Verified; most serious Windsurf users route through a Claude or OpenAI backend anyway.&lt;/li&gt;
&lt;li&gt;Acquisition turmoil slowed roadmap communication through late 2025 and early 2026.&lt;/li&gt;
&lt;li&gt;Smaller third-party rules and skills ecosystem than Cursor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free tier, Pro ($15/mo grandfathered or $20/mo for new subscribers since March 2026), Teams and Enterprise custom (&lt;a href="https://docs.windsurf.com/" rel="noopener noreferrer"&gt;docs.windsurf.com&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to pick it:&lt;/strong&gt; Flow-aware memory and Cascade's planning model fit how your team thinks. You're willing to ride out product direction shifts under Cognition. Cascade's context tracking is only as good as the constraints you give it — &lt;a href="https://vibeready.sh/blog/what-is-harness-engineering/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=best-vibe-coding-tools-for-saas" rel="noopener noreferrer"&gt;harness engineering&lt;/a&gt; is the discipline that keeps autonomous agents on the rails.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini CLI: the free tier and the open-source option
&lt;/h2&gt;

&lt;p&gt;Google launched Gemini CLI on June 25, 2025 under the Apache 2.0 license (&lt;a href="https://blog.google/technology/developers/introducing-gemini-cli-open-source-ai-agent/" rel="noopener noreferrer"&gt;Google 2025&lt;/a&gt;). It's the only fully open-source option in this group, with a 1M-token context via Gemini 2.5 Pro and a personal-account free tier of 60 requests per minute and 1,000 requests per day. The GitHub repo at &lt;a href="https://github.com/google-gemini/gemini-cli" rel="noopener noreferrer"&gt;google-gemini/gemini-cli&lt;/a&gt; is active; GitHub Actions integration landed in late 2025.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does well
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The free tier is generous enough to build a weekend SaaS on, no credit card required.&lt;/li&gt;
&lt;li&gt;Apache 2.0 licensing means you can fork it, bundle it, or ship it inside your own dev tooling.&lt;/li&gt;
&lt;li&gt;1M-token context via Gemini 2.5 Pro, same as Claude Code's Max tier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Agent polish trails Claude Code and Cursor on complex multi-file work.&lt;/li&gt;
&lt;li&gt;Third-party MCP ecosystem is thinner; fewer community-maintained servers.&lt;/li&gt;
&lt;li&gt;Subagent orchestration is less mature.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free via personal Google account; Google AI Pro $19.99/mo (5× CLI limits); Google AI Ultra $149.99/mo (highest limits); direct Vertex API at $1.25/M input and $10/M output for Gemini 2.5 Pro (&lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;Google AI pricing&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to pick it:&lt;/strong&gt; You're cost-sensitive and want real agentic behavior before committing to a paid plan. You're shipping a dev tool that bundles an open-source agent. Your SaaS already lives in Google Cloud. Gemini CLI reads &lt;code&gt;AGENTS.md&lt;/code&gt; via a &lt;code&gt;GEMINI.md&lt;/code&gt; symlink, so the context layer you build works across tools — start with our vibe coding starter guide for the conventions to put in it.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Copilot: the enterprise default
&lt;/h2&gt;

&lt;p&gt;Copilot passed 4.7M paid subscribers in January 2026, a 75% YoY jump, and is used by roughly 90% of Fortune 100 companies according to GitHub's own disclosures (&lt;a href="https://www.getpanto.ai/blog/github-copilot-statistics" rel="noopener noreferrer"&gt;Panto 2026&lt;/a&gt;). The bigger 2025 story was the Copilot Coding Agent: an autonomous mode that opens PRs on assigned issues, runs its own reviews, and ships security scans. GitHub reported more than 1M Copilot-authored PRs between May and September 2025 (&lt;a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/" rel="noopener noreferrer"&gt;Octoverse 2025&lt;/a&gt;). 80% of new developers on GitHub used Copilot in their first week on the platform that year.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does well
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The free tier (2,000 completions and 50 agent/chat requests per month) is the widest on-ramp in the category.&lt;/li&gt;
&lt;li&gt;GitHub-native workflows: Coding Agent assigns PRs to itself and runs security scanning on its own output.&lt;/li&gt;
&lt;li&gt;Pro+ at $39/mo unlocks Claude Opus 4.7 access and Spark for rapid prototyping.&lt;/li&gt;
&lt;li&gt;Procurement is already solved at most mid-market and enterprise SaaS companies.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Feature velocity has historically trailed Cursor and Claude Code on agent autonomy.&lt;/li&gt;
&lt;li&gt;Less ergonomic for non-GitHub workflows; if you're on GitLab or self-hosted Gitea, you're a second-class citizen.&lt;/li&gt;
&lt;li&gt;Rules and skills ecosystem is narrower than the IDE agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free ($0; 2,000 completions, 50 agent requests/month), Pro ($10/user/mo), Pro+ ($39/user/mo), Business ($19/user/mo), Enterprise ($39/user/mo) (&lt;a href="https://github.com/features/copilot/plans" rel="noopener noreferrer"&gt;github.com/features/copilot/plans&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to pick it:&lt;/strong&gt; Your SaaS lives in GitHub and you want PR authoring, security scanning, and inline completions on one bill. Your company procures through GitHub Enterprise. Copilot Coding Agent reads &lt;code&gt;AGENTS.md&lt;/code&gt; natively, so VibeReady's context layer works with Copilot's autonomous mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Head-to-head: Cursor vs Claude Code for SaaS
&lt;/h2&gt;

&lt;p&gt;The two tools most SaaS teams end up choosing between. We've shipped VibeReady features with both. The honest answer is that they're different tools for different moments.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;th&gt;Cursor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent autonomy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Leads the group on long planning + execution&lt;/td&gt;
&lt;td&gt;Strong; a step behind on multi-repo work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IDE feel&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Terminal + desktop app&lt;/td&gt;
&lt;td&gt;Native IDE (VS Code fork + JetBrains)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-model flexibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Claude family only&lt;/td&gt;
&lt;td&gt;Claude, GPT, Composer 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing predictability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flat Claude Pro/Max subscription&lt;/td&gt;
&lt;td&gt;Usage-based credits on Pro+/Ultra can surprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subagents / skills&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10 subagents, large skill library&lt;/td&gt;
&lt;td&gt;No subagents; scoped rules only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Community size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Active and growing&lt;/td&gt;
&lt;td&gt;Largest AI-coding community&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SWE-bench Verified&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~87.8% (Opus 4.7 + built-in harness)&lt;/td&gt;
&lt;td&gt;~77% (with built-in harness)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agentic multi-file features&lt;/td&gt;
&lt;td&gt;Day-to-day IDE work and pair programming&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When we ship an end-to-end VibeReady feature — a new subagent, a schema migration plus its TypeScript types, its tests, and the docs — we pick Claude Code. When we're pairing on UI, fixing a typed component, or exploring an unfamiliar file, we open Cursor. For the cross-over ("I want agent autonomy without leaving my IDE"), we've been watching Cursor 3's Composer close the gap fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which tool fits your SaaS scenario?
&lt;/h2&gt;

&lt;p&gt;Five scenarios, five picks. If your situation doesn't quite fit, the closest match usually works.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Solo builder on a budget.&lt;/strong&gt; Start with Gemini CLI's free tier for real agent work. Add Copilot Free for inline completions. Total cost: $0.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SaaS team, one paid tool.&lt;/strong&gt; Cursor Pro at $20/user/month covers most scenarios and your hires will already know it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex agentic work (migrations, background workers, autonomous test runs).&lt;/strong&gt; Claude Code on a Max plan. Pair it with a starter kit that already ships subagents, or build your own.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub-native team.&lt;/strong&gt; Copilot Pro ($10) or Pro+ ($39). Coding Agent is cheaper than adding a second seat elsewhere and the PR workflow is already wired up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You already bought Windsurf.&lt;/strong&gt; You don't have to switch. Cascade's memory model is still a real differentiator. Keep an eye on Cognition's roadmap and the April 2026 billing shift.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a hands-on walkthrough of any of these tools against a real codebase, see our step-by-step tutorial on vibe coding your first SaaS. If you're still figuring out the methodology itself, structured vibe coding is the 3-layer framework we use — and the vibe coding starter guide collects the daily practices that work with any tool above.&lt;/p&gt;

&lt;h2&gt;
  
  
  The caveat: every tool needs a harness
&lt;/h2&gt;

&lt;p&gt;Here's the hard part of any ranking. The tool you pick is the smaller variable. A July 2025 METR study (peer-reviewed on &lt;a href="https://arxiv.org/abs/2507.09089" rel="noopener noreferrer"&gt;arXiv 2507.09089&lt;/a&gt;) observed 16 experienced open-source developers working on 246 real issues, permitted to use AI tools (primarily Cursor Pro with Claude Sonnet). They were &lt;strong&gt;19% slower&lt;/strong&gt; on AI-allowed tasks, while believing themselves 20% faster (&lt;a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" rel="noopener noreferrer"&gt;METR 2025&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Stack Overflow's 2025 Developer Survey gave that finding more texture. 80% of respondents use AI coding tools, but trust in AI accuracy dropped from 40% to 29% year over year. 66% struggle with "almost-right" outputs, and 45% say debugging AI-generated code takes longer than writing it themselves (&lt;a href="https://stackoverflow.blog/2025/12/29/developers-remain-willing-but-reluctant-to-use-ai-the-2025-developer-survey-results-are-here/" rel="noopener noreferrer"&gt;Stack Overflow 2025&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;And the incidents matter. In July 2025, Replit's agent deleted SaaStr founder Jason Lemkin's production database during an active code freeze, affecting 1,200+ executives and 1,190+ companies (&lt;a href="https://www.theregister.com/2025/07/21/replit_saastr_vibe_coding_incident/" rel="noopener noreferrer"&gt;The Register 2025&lt;/a&gt;). The CEO apologized and shipped a dev/prod separation plus a planning-only mode the same month.&lt;/p&gt;

&lt;p&gt;The tool choice above matters. The harness around the tool matters more. We wrote about this at length in Vibe Coding Has a Scaling Problem, and the emerging discipline that addresses it is harness engineering. Gartner forecasts that 40% of enterprise apps will ship task-specific AI agents by the end of 2026, up from under 5% in 2025 (&lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-08-26-gartner-predicts-40-percent-of-enterprise-apps-will-feature-task-specific-ai-agents-by-2026-up-from-less-than-5-percent-in-2025" rel="noopener noreferrer"&gt;Gartner 2025&lt;/a&gt;). Most of those agents will fail without the context engineering and quality gates that turn a vibe coding tool into a production asset.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibeready.sh/blog/best-vibe-coding-tools-for-saas?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=best-vibe-coding-tools-for-saas" rel="noopener noreferrer"&gt;VibeReady&lt;/a&gt;. Republished here for the dev.to community.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Spec-Driven Development: Structure Beats Vibes</title>
      <dc:creator> Remy B.</dc:creator>
      <pubDate>Tue, 12 May 2026 14:15:00 +0000</pubDate>
      <link>https://forem.com/remybuilds/spec-driven-development-structure-beats-vibes-4oma</link>
      <guid>https://forem.com/remybuilds/spec-driven-development-structure-beats-vibes-4oma</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spec-driven development (SDD) makes a machine-readable specification the primary artifact; code, tests, and docs are derived from it&lt;/li&gt;
&lt;li&gt;GitHub released Spec Kit in September 2025; by April 2026 it had over 90,000 stars and supported 20+ coding agents&lt;/li&gt;
&lt;li&gt;66% of developers say their top AI frustration is code that's "almost right, but not quite" — the failure mode specs are designed to catch&lt;/li&gt;
&lt;li&gt;Birgitta Boeckeler identifies three SDD maturity levels: spec-first, spec-anchored, and spec-as-source&lt;/li&gt;
&lt;li&gt;Specs have failure modes too: Thoughtworks Radar rated SDD "Assess, not Adopt" in November 2025 and Marmelab documented a 1,300-line spec for a one-feature date display&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;45% of AI-generated code samples introduced OWASP Top 10 vulnerabilities across 100+ tested models (&lt;a href="https://labs.cloudsecurityalliance.org/research/csa-research-note-ai-generated-code-vulnerability-surge-2026/" rel="noopener noreferrer"&gt;Cloud Security Alliance, April 2026&lt;/a&gt;). 66% of developers say their top AI frustration is output that's "almost right, but not quite" (&lt;a href="https://stackoverflow.blog/2025/12/29/developers-remain-willing-but-reluctant-to-use-ai-the-2025-developer-survey-results-are-here/" rel="noopener noreferrer"&gt;Stack Overflow 2025 Developer Survey&lt;/a&gt;). The models keep improving. The failure mode hasn't changed.&lt;/p&gt;

&lt;p&gt;The first time I tried to vibe code a billing dashboard for my SaaS, Claude Code burned 40 minutes producing three different layouts that all looked plausible and all missed the auth boundary. I closed the chat, wrote a one-page PRD — goals, non-goals, the four tables it touched, the two roles that read it — and pasted it back. Fifteen minutes later the dashboard was right on the first try. Specs aren't waterfall. They're the difference between three rewrites and one.&lt;/p&gt;

&lt;p&gt;The gap is the spec. &lt;strong&gt;Spec-driven development&lt;/strong&gt; closes it by making the specification — not the prompt, not the code — the source of truth your tools and agents build from.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Spec-Driven Development?
&lt;/h2&gt;

&lt;p&gt;Wikipedia's definition is the cleanest: &lt;em&gt;"Spec-driven development is a software engineering methodology where a formal, machine-readable specification serves as the primary artifact from which implementation, testing, and documentation are derived"&lt;/em&gt; (&lt;a href="https://en.wikipedia.org/wiki/Spec-driven_development" rel="noopener noreferrer"&gt;Wikipedia, 2026&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The practitioner framing from GitHub's Den Delimarsky is more operational: &lt;em&gt;"Instead of coding first and writing docs later, in spec-driven development, you start with a spec. This is a contract for how your code should behave and becomes the source of truth your tools and AI agents use to generate, test, and validate code"&lt;/em&gt; (&lt;a href="https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/" rel="noopener noreferrer"&gt;GitHub Blog, September 2, 2025&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Both definitions share one idea: the spec is upstream of everything. Code is a compilation target. Tests are a consistency check. Documentation is a projection. The spec is what you author, review, and version.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Term Is Older Than It Looks
&lt;/h3&gt;

&lt;p&gt;Spec-driven development didn't arrive with AI. Wikipedia traces it to 1960s NASA workflows and a formal academic treatment by Ostroff, Makalsky, and Paige at the XP 2004 conference. Formal methods, contract programming, and model-driven engineering all sit in the same lineage. What changed in 2025 is that large language models made the cost of "write the spec first" collapse: the spec itself can be drafted, refined, and turned into code by the same agent, as long as the spec is the artifact everyone argues about.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Vibe Coding Created
&lt;/h2&gt;

&lt;p&gt;Vibe coding made it possible to describe a feature in plain English and get working code back in seconds. That's the upside. The downside shows up at scale, and the data from the last twelve months is unambiguous.&lt;/p&gt;

&lt;p&gt;A Veracode study cited in the Cloud Security Alliance's April 4, 2026 research note found &lt;strong&gt;45% of AI-generated code&lt;/strong&gt; introduced OWASP Top 10 vulnerabilities across 100+ tested LLMs; Java samples failed &lt;strong&gt;72% of the time&lt;/strong&gt;, and 88% were vulnerable to log injection (&lt;a href="https://labs.cloudsecurityalliance.org/research/csa-research-note-ai-generated-code-vulnerability-surge-2026/" rel="noopener noreferrer"&gt;CSA Research Note&lt;/a&gt;). Apiiro's enterprise telemetry in the same note showed AI-assisted developers produced commits at 3–4x the rate of peers, while security findings rose roughly tenfold and privilege-escalation paths climbed &lt;strong&gt;322%&lt;/strong&gt; over six months.&lt;/p&gt;

&lt;p&gt;Productivity data is just as stark. A July 2025 METR randomized controlled trial found experienced open-source developers were &lt;strong&gt;19% slower&lt;/strong&gt; when using AI coding tools, despite predicting a 24% speedup (&lt;a href="https://www.softwareseni.com/the-evidence-against-vibe-coding-what-research-reveals-about-ai-code-quality/" rel="noopener noreferrer"&gt;METR RCT, July 2025&lt;/a&gt;). The Stack Overflow 2025 Developer Survey (n = 48,945) found 84% of developers use or plan to use AI, but only 33% trust AI accuracy while 46% actively distrust it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The "almost right" tax&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;66% of developers cite "AI solutions that are almost right, but not quite" as their top AI frustration (Stack Overflow 2025). Debugging plausible-looking wrong code is often slower than writing it yourself. Specs exist to prevent "almost right" from ever leaving the planning phase.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The pattern is consistent: AI writes fast, generates superficially plausible code, and leaves you to clean up architectural drift and security gaps. The Stack Overflow team connected the dots explicitly in their 2025 write-up, calling out "spec-driven development" by name as the structural response. I covered the full scaling picture in &lt;a href="https://vibeready.sh/blog/vibe-coding-has-a-scaling-problem/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=what-is-spec-driven-development" rel="noopener noreferrer"&gt;Vibe Coding Has a Scaling Problem&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Spec-Driven Development Works
&lt;/h2&gt;

&lt;p&gt;GitHub's Spec Kit is the clearest reference implementation. It formalizes a four-phase workflow every spec-driven project moves through, and the phases work whether you're using Claude Code, Cursor, Copilot, Gemini CLI, or any of the 20+ other agents Spec Kit targets.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Four Phases
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Constitution.&lt;/strong&gt; Project-wide invariants. Your stack, your conventions, the things every feature inherits. This is the document every downstream spec references.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specify.&lt;/strong&gt; A feature-level spec: goals, non-goals, constraints, acceptance criteria. This is what the agent reads before it starts planning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan.&lt;/strong&gt; The agent decomposes the spec into architectural decisions and task breakdowns, then hands the plan back for human review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tasks / Implement.&lt;/strong&gt; Only now does code get written. Each task traces back to an acceptance criterion in the spec, which means divergence is visible rather than silent.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;An optional &lt;em&gt;Clarify&lt;/em&gt; phase sits between Specify and Plan; the agent asks the questions a human reviewer would ask before committing to an approach. The Spec Kit repo is open source, MIT-licensed, and sat at roughly 90,000 stars with active v0.7.x releases as of April 2026 (&lt;a href="https://github.com/github/spec-kit" rel="noopener noreferrer"&gt;github.com/github/spec-kit&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  The Three Maturity Levels
&lt;/h3&gt;

&lt;p&gt;Birgitta Boeckeler's October 2025 article on martinfowler.com breaks spec-driven development into three ascending levels of commitment (&lt;a href="https://martinfowler.com/articles/exploring-gen-ai/sdd-3-tools.html" rel="noopener noreferrer"&gt;Boeckeler, October 2025&lt;/a&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spec-first.&lt;/strong&gt; You write a spec before prompting. The spec informs the AI but isn't regenerated as code changes. Simplest, lightest, most teams start here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spec-anchored.&lt;/strong&gt; Spec and code stay in sync. When code drifts, the spec is updated; when the spec changes, code is regenerated. This is where Spec Kit and Amazon Kiro live.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spec-as-source.&lt;/strong&gt; The spec is the only thing humans author. Code is fully derived output, closer to how Terraform generates infrastructure from HCL. Tessl Framework is the most public example.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most teams don't need level three. Moving from unstructured prompting to spec-first captures most of the reliability gain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spec-Driven Development vs. Vibe Coding
&lt;/h2&gt;

&lt;p&gt;Spec-driven development doesn't replace vibe coding; it constrains it. The two answer different questions at different points in the workflow.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Vibe Coding&lt;/th&gt;
&lt;th&gt;Spec-Driven Development&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary artifact&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The prompt&lt;/td&gt;
&lt;td&gt;The specification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Source of truth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Generated code&lt;/td&gt;
&lt;td&gt;The spec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Exploration, prototypes, UI tweaks&lt;/td&gt;
&lt;td&gt;Anything touching auth, payments, data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Failure mode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pattern drift, "almost right" output&lt;/td&gt;
&lt;td&gt;Over-specification, review overload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Iteration loop&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Re-prompt until code works&lt;/td&gt;
&lt;td&gt;Revise spec, regenerate code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Review target&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Generated code diff&lt;/td&gt;
&lt;td&gt;Spec diff first, then code diff&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The healthy version of the two is layered: vibe-code inside a well-written spec. The spec bounds what the AI is allowed to do; the prompt fills in the how. When the output drifts, you fix the spec, not the prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context Engineering — The Layer Below Specs
&lt;/h2&gt;

&lt;p&gt;A spec tells the AI what to build. &lt;strong&gt;Context engineering&lt;/strong&gt; tells it what it already knows. The term was coined in parallel by Shopify CEO Tobi Lütke and Andrej Karpathy in late June 2025, within two days of each other.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Context engineering is the delicate art and science of filling the context window with just the right information for the next step. — Andrej Karpathy, June 25, 2025&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Lütke's framing, two days earlier, was more practical: &lt;em&gt;"the art of providing all the context for the task to be plausibly solvable by the LLM"&lt;/em&gt; (&lt;a href="https://x.com/tobi/status/1935533422589399127" rel="noopener noreferrer"&gt;@tobi on X, June 23, 2025&lt;/a&gt;). Simon Willison collected both quotes and argued the term better reflects what production LLM work actually looks like (&lt;a href="https://simonwillison.net/2025/jun/27/context-engineering/" rel="noopener noreferrer"&gt;Willison, June 27, 2025&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The relationship to specs is directional: context engineering feeds the spec, and the spec feeds the task. A spec with no context produces code that's technically correct but violates every convention in your repo. A context without a spec produces code that fits the repo but does the wrong thing. You need both.&lt;/p&gt;

&lt;p&gt;I treat them as two of three layers in a &lt;a href="https://vibeready.sh/structured-vibe-coding/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=what-is-spec-driven-development" rel="noopener noreferrer"&gt;structured vibe coding framework&lt;/a&gt; — context engineering, AI coding guardrails, and spec-driven workflows — that together form a complete harness. Specs without context, or context without enforcement, fail in predictable ways.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tools Shipping Spec-Driven Workflows
&lt;/h2&gt;

&lt;p&gt;Three tools define the current state of spec-driven development. Each takes a different position on the Boeckeler maturity ladder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxorzc3py7mrsidmcvqi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxorzc3py7mrsidmcvqi.jpg" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Spec Kit.&lt;/strong&gt; Open source, MIT-licensed, roughly 90,000 stars as of April 2026. Supports Claude Code, Copilot, Cursor CLI, Gemini CLI, Codex CLI, Qwen, opencode, and more. Lives at the spec-anchored level: specs and code evolve together through the Constitution/Specify/Plan/Tasks flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Kiro.&lt;/strong&gt; Commercial AWS offering, same spec-anchored tier. Kiro emphasizes tight AWS integration and specification reuse across services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tessl Framework.&lt;/strong&gt; Commercial, the most aggressive of the three. Pushes toward spec-as-source: humans author specs, everything else is generated. Thoughtworks' Technology Radar flagged all three by name when it placed spec-driven development in its "Assess" ring in November 2025 (&lt;a href="https://www.thoughtworks.com/radar/techniques/spec-driven-development" rel="noopener noreferrer"&gt;Thoughtworks Radar Vol. 33&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tools handle generation. They don't handle enforcement. That's where &lt;a href="https://vibeready.sh/blog/what-is-harness-engineering/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=what-is-spec-driven-development" rel="noopener noreferrer"&gt;harness engineering&lt;/a&gt; picks up — the tests, type checks, and quality gates that verify the generated code actually matches the spec. Specs and harnesses are complements: the spec is what you wanted, the harness proves you got it.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Spec-Driven Development Backfires
&lt;/h2&gt;

&lt;p&gt;Spec-driven development has a credible set of critics. Ignoring them produces the exact overhead they warn about.&lt;/p&gt;

&lt;p&gt;François Zaninotto at Marmelab documented the most concrete example in November 2025: a single feature to display the current date required &lt;strong&gt;8 files and roughly 1,300 lines of specification&lt;/strong&gt; using Spec Kit (&lt;a href="https://marmelab.com/blog/2025/11/12/spec-driven-development-waterfall-strikes-back.html" rel="noopener noreferrer"&gt;Marmelab, November 12, 2025&lt;/a&gt;). His argument is that SDD is a rebranded waterfall optimized for removing developers from the loop.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;SDD is a step in the wrong direction. It tries to solve a faulty challenge: "How do we remove developers from software development?" — François Zaninotto, Marmelab&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thoughtworks' Technology Radar was more measured but still cautious, placing SDD in "Assess" rather than "Trial" or "Adopt" and warning the workflows are "elaborate and opinionated" and may represent "a bitter lesson — that handcrafting detailed rules for AI ultimately doesn't scale." Boeckeler, a qualified supporter, has flagged the same failure modes: review overload for small features and non-deterministic LLM output undermining the promised control.&lt;/p&gt;

&lt;p&gt;The practical heuristic: spec-driven development is overhead for anything simpler than a feature spec. Use it where the cost of architectural drift is high (auth, billing, multi-tenant data, API contracts) and skip it where the cost of being wrong is a page refresh.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Start Without Rewriting Everything
&lt;/h2&gt;

&lt;p&gt;You don't need Spec Kit, a Constitution document, or a four-phase workflow to practice spec-driven development. You need a one-page spec and the discipline to hand it to the AI before you prompt.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write a one-page PRD before prompting.&lt;/strong&gt; Goals, non-goals, constraints, acceptance criteria. Fifteen minutes. This single step is the biggest reliability gain most teams will see, and it costs nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use AGENTS.md as your Constitution.&lt;/strong&gt; Stack choices, conventions, architectural rules, forbidden patterns. Next.js 16.2 now ships AGENTS.md in create-next-app by default; I walk through a full AGENTS.md-first workflow in a step-by-step tutorial on vibeready.sh.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat the spec as the diff target.&lt;/strong&gt; When the AI produces something wrong, revise the spec first, then regenerate the code. Don't re-prompt your way around a spec gap — that's the vibe-coding failure mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pair the spec with a harness.&lt;/strong&gt; Specs without automated tests and type checks drift silently. The spec says what you want; the harness proves the code matches. Harness engineering is the enforcement layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graduate to Spec Kit when the overhead earns itself.&lt;/strong&gt; Once you have a handful of features that share a Constitution, formalizing with Spec Kit or Kiro starts paying back. Before that, a directory of markdown specs works fine.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;The spec is the upstream half of this. The downstream half is a harness — tests, type checks, lint rules — that catches when the AI ignored the spec. I keep both layered: spec defines intent, harness verifies execution.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The point of spec-driven development isn't specs. It's getting AI to build the thing you actually wanted, the first time, at the architectural level your future self will have to maintain. A one-page PRD beats a four-hour debugging session. Every time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibeready.sh/blog/what-is-spec-driven-development?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=what-is-spec-driven-development" rel="noopener noreferrer"&gt;VibeReady&lt;/a&gt;. Republished here for the dev.to community.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>5 Mistakes Beginners Make When Vibe Coding (And How to Avoid Them)</title>
      <dc:creator> Remy B.</dc:creator>
      <pubDate>Tue, 05 May 2026 13:19:44 +0000</pubDate>
      <link>https://forem.com/remybuilds/5-mistakes-beginners-make-when-vibe-coding-and-how-to-avoid-them-31do</link>
      <guid>https://forem.com/remybuilds/5-mistakes-beginners-make-when-vibe-coding-and-how-to-avoid-them-31do</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One-shotting prompts without a spec is the most common failure mode: experienced devs were 19% slower with AI tools when the task wasn't clearly scoped (METR 2025)&lt;/li&gt;
&lt;li&gt;AI-coauthored code is 1.75× more likely to introduce correctness errors and 2.74× more likely to ship XSS vulnerabilities than human-only code (CodeRabbit 2025)&lt;/li&gt;
&lt;li&gt;Without architectural rules in AGENTS.md / Cursor rules / CLAUDE.md, AI ships 322% more privilege escalation paths and 153% more design flaws (Apiiro 2025)&lt;/li&gt;
&lt;li&gt;Context drift (not updating the harness as decisions accumulate) is the failure that bites at week three, not day one&lt;/li&gt;
&lt;li&gt;July 2025 Replit incident: an AI agent deleted a production database during a stated code freeze and fabricated 4,000 fake records to cover it up&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vibe coding works for weekend hacks. It breaks for production. When Andrej Karpathy &lt;a href="https://x.com/karpathy/status/1886192184808149383" rel="noopener noreferrer"&gt;coined the term in February 2025&lt;/a&gt;, he scoped it to throwaway projects: "embrace exponentials, and forget that the code even exists." The vibe coding mistakes most beginners make are predictable, and almost all of them stem from taking that throwaway vibe and pointing it at code they actually have to maintain.&lt;/p&gt;

&lt;p&gt;The first time I tried to vibe code a real feature into my own project, I gave Cursor a single sentence: "add billing." Two hours and three rewrites later I had three competing schemas, two different webhook handlers, and no idea which one matched the dashboard. I closed the prompt box, opened a notes file, and wrote out exactly what billing meant in this codebase — which Stripe events I cared about, which tables they wrote to, what the route names should be. Twenty minutes after I pasted that back in, the feature was done. The fix wasn't a smarter prompt; it was a cheaper one, written before the AI ever saw it.&lt;/p&gt;

&lt;p&gt;Below are the five most common pitfalls, with practical fixes that prevent each one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistake #1: Skipping the spec and one-shotting the prompt
&lt;/h2&gt;

&lt;p&gt;The first thing beginners reach for is the prompt box. "Build me a billing page." "Add user invites." "Refactor this module." It feels fast, and the output looks plausible, until you try to extend it.&lt;/p&gt;

&lt;p&gt;A 2025 randomized controlled trial from METR found that experienced open-source developers were &lt;strong&gt;19% slower&lt;/strong&gt; on real GitHub issues when allowed to use AI tools, while self-reporting a 20% speedup (&lt;a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" rel="noopener noreferrer"&gt;METR 2025&lt;/a&gt;; &lt;a href="https://arxiv.org/abs/2507.09089" rel="noopener noreferrer"&gt;arXiv preprint&lt;/a&gt;). The gap is the cost of clarifying what you actually wanted, mid-generation, in plain English.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; write a one-page spec before you prompt. Inputs, outputs, error states, the file paths the AI is allowed to touch. The deeper rationale, including templates and the failure modes specs prevent, lives in &lt;a href="https://vibeready.sh/blog/what-is-spec-driven-development?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=5-mistakes-beginners-make-when-vibe-coding" rel="noopener noreferrer"&gt;What Is Spec-Driven Development&lt;/a&gt;. Specs aren't bureaucracy. They're the cheapest way to make the AI's first attempt the right attempt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistake #2: Accepting AI code without reading it
&lt;/h2&gt;

&lt;p&gt;The second mistake is trusting the diff because it compiles. Stack Overflow's 2025 Developer Survey found that only &lt;strong&gt;29% of developers trust AI accuracy&lt;/strong&gt;, down from 40% the year before, and &lt;strong&gt;75% don't trust AI's answers&lt;/strong&gt; outright (&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow 2025&lt;/a&gt;). The reason: the code looks right and is wrong in subtle ways.&lt;/p&gt;

&lt;p&gt;CodeRabbit's December 2025 study of 470 real GitHub PRs found AI-coauthored code introduced &lt;strong&gt;1.75x more correctness errors&lt;/strong&gt; and was &lt;strong&gt;2.74x more likely to introduce XSS vulnerabilities&lt;/strong&gt; than human-only PRs (&lt;a href="https://www.coderabbit.ai/blog/state-of-ai-vs-human-code-generation-report" rel="noopener noreferrer"&gt;CodeRabbit 2025&lt;/a&gt;). These don't show up in your test runner. They show up in your bug reports.&lt;/p&gt;

&lt;p&gt;This is the trap: AI-generated code passes the surface checks. It compiles, types check, the obvious tests run green. The bugs hide where you didn't think to look — silently swallowed errors, wrong default values, race conditions across async calls, edge cases the AI didn't account for. The cost shows up later, in customer reports and 2 a.m. pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; read every line before you accept it. If you can't explain why a function is structured the way it is, ask the AI to explain it, and don't merge until the explanation matches what you'd write yourself. Pair this with automated review (CodeRabbit, AI code review on PRs, lint rules) so the human read isn't the only line of defense.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkk48lbudwnmmu13kqkeg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkk48lbudwnmmu13kqkeg.jpg" alt="AI-coauthored vs human-only code: relative risk (2025) — Privilege escalation paths 4.22x (Apiiro), XSS vulnerabilities 2.74x (CodeRabbit), Architectural design flaws 2.53x (Apiiro), Correctness errors 1.75x (CodeRabbit), Human-only baseline 1.00x" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Multipliers normalized to human-only baseline (1.00×). Apiiro analyzed Fortune 50 enterprise repos; CodeRabbit analyzed 470 real GitHub PRs.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistake #3: Not giving AI architectural context up front
&lt;/h2&gt;

&lt;p&gt;Without a rules file, the AI defaults to whatever pattern is statistically most common in its training data. That means generic auth, generic error handling, and an ORM call style that doesn't match the rest of your codebase. Apiiro's analysis of Fortune 50 enterprise repos found AI-assisted developers shipped 3-4x more commits but generated &lt;strong&gt;322% more privilege escalation paths&lt;/strong&gt; and &lt;strong&gt;153% more architectural design flaws&lt;/strong&gt; than non-AI baseline (&lt;a href="https://apiiro.com/blog/4x-velocity-10x-vulnerabilities-ai-coding-assistants-are-shipping-more-risks/" rel="noopener noreferrer"&gt;Apiiro 2025&lt;/a&gt;). The pattern they describe: "AI is fixing the typos but creating the timebombs."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; set up architectural context before your first feature. AGENTS.md for the coding agent, Cursor rules for Cursor, CLAUDE.md for Claude Code. Document your stack, your non-negotiable rules, and the anti-patterns the AI should refuse to generate. The &lt;a href="https://vibeready.sh/structured-vibe-coding?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=5-mistakes-beginners-make-when-vibe-coding" rel="noopener noreferrer"&gt;structured vibe coding framework&lt;/a&gt; bundles all three layers so you don't piece them together yourself. Here's a real excerpt from an AGENTS.md (lightened):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# AGENTS.md&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; Universal AI context. All AI coding tools read this file automatically.&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; Tool-specific wrappers (CLAUDE.md, GEMINI.md) symlink here.&lt;/span&gt;

&lt;span class="gu"&gt;## Project Overview&lt;/span&gt;

| Layer      | Technology                                  |
| ---------- | ------------------------------------------- |
| Framework  | Next.js 16 App Router + TypeScript (strict) |
| Database   | PostgreSQL 15 + Prisma ORM                  |
| Auth       | Clerk v5 (multi-tenant orgs, RBAC)          |
| Payments   | Stripe                                      |
| Testing    | Vitest + Playwright + RTL                   |

&lt;span class="gu"&gt;## Non-Negotiable Rules&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; &lt;span class="gs"&gt;**Multi-tenancy**&lt;/span&gt;: ALWAYS scope ALL queries by &lt;span class="sb"&gt;`organizationId`&lt;/span&gt;. No exceptions.
&lt;span class="p"&gt;2.&lt;/span&gt; &lt;span class="gs"&gt;**TDD**&lt;/span&gt;: MUST write a failing test FIRST. No code without a failing test.
&lt;span class="p"&gt;3.&lt;/span&gt; &lt;span class="gs"&gt;**DRY**&lt;/span&gt;: Check existing patterns before creating new ones. Reuse &amp;gt; reinvent.
&lt;span class="p"&gt;4.&lt;/span&gt; &lt;span class="gs"&gt;**README-first**&lt;/span&gt;: Read README.md files in the target directory BEFORE any code search.
&lt;span class="p"&gt;5.&lt;/span&gt; &lt;span class="gs"&gt;**Security**&lt;/span&gt;: MUST validate all input (Zod), check auth, verify ownership on every protected route.

&lt;span class="gu"&gt;## Architecture&lt;/span&gt;

3-layer pattern — every feature follows this:

  &lt;span class="gs"&gt;**Route**&lt;/span&gt; → &lt;span class="gs"&gt;**Service**&lt;/span&gt; → &lt;span class="gs"&gt;**Repository**&lt;/span&gt; → Prisma
&lt;span class="p"&gt;
-&lt;/span&gt; Routes NEVER contain Prisma queries or business logic
&lt;span class="p"&gt;-&lt;/span&gt; Services NEVER perform auth checks
&lt;span class="p"&gt;-&lt;/span&gt; Repositories NEVER call external APIs
&lt;span class="p"&gt;-&lt;/span&gt; Import direction is one-way (never reverse)

&lt;span class="gu"&gt;## Common Anti-Patterns (NEVER Do These)&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="gs"&gt;**Direct Prisma in routes/actions**&lt;/span&gt;: Always go through repositories
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Queries without organizationId**&lt;/span&gt;: Every query MUST scope by org — no exceptions
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Hardcoded roles**&lt;/span&gt; (&lt;span class="sb"&gt;`if role === 'admin'`&lt;/span&gt;): Use permission checks
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Returning 403 for admin routes**&lt;/span&gt;: Return 404 to hide existence

&lt;span class="gu"&gt;## Key Commands&lt;/span&gt;

make dev              # Start Next.js + PostgreSQL
make test             # All tests: unit + API + E2E
make check            # Full quality gate (typecheck + lint + test)
make generate-docs    # Force-regenerate route READMEs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Mistake #4: Letting context drift as the project grows
&lt;/h2&gt;

&lt;p&gt;This is the failure mode that bites at week three, not day one. You set up AGENTS.md on day one. Then you make ten architectural decisions over the next month: switching from REST to tRPC, adopting a new caching pattern, deciding error toasts go through a single helper. None of those decisions make it back into the rules file. New feature docs aren't written. Skills and reusable prompts aren't updated. Memory entries that captured "we tried X and it didn't work" never get refreshed.&lt;/p&gt;

&lt;p&gt;By feature fifteen, the AI is generating code that contradicts decisions you made in week two. It recreates patterns you'd already ruled out. It uses the old REST handler shape because nothing told it the convention had changed. This is the second-order version of &lt;a href="https://vibeready.sh/blog/vibe-coding-has-a-scaling-problem?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=5-mistakes-beginners-make-when-vibe-coding" rel="noopener noreferrer"&gt;AI code drift&lt;/a&gt; — not the AI improvising, but the AI faithfully following stale instructions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; treat the harness as a living artifact. When you make a non-obvious decision, capture it in AGENTS.md the same hour. After shipping a feature, write the one-paragraph feature doc that explains its shape. If a skill or reusable prompt stops matching reality, update it or delete it. Harness engineering is the discipline of keeping these surfaces honest, and it's the difference between an AI that gets sharper over time and one that drifts into noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistake #5: Letting the AI run wild on production data
&lt;/h2&gt;

&lt;p&gt;In July 2025, Replit's AI agent deleted a SaaStr-tracked production database during a stated code freeze, then fabricated about 4,000 fake user records and falsely claimed rollback was impossible (&lt;a href="https://www.theregister.com/2025/07/21/replit_saastr_vibe_coding_incident/" rel="noopener noreferrer"&gt;The Register, July 2025&lt;/a&gt;; cataloged as &lt;a href="https://incidentdatabase.ai/cite/1152/" rel="noopener noreferrer"&gt;AI Incident Database #1152&lt;/a&gt;). Rollback actually worked. Replit's CEO called it "a catastrophic error of judgement" and shipped dev/prod separation, rollback improvements, and a planning-only mode in response.&lt;/p&gt;

&lt;p&gt;Even when the agent isn't running destructive commands, the underlying code is risky enough on its own. Veracode's 2025 GenAI Code Security Report tested 100+ LLMs against 80 curated coding tasks and found AI-generated code introduced security vulnerabilities in &lt;strong&gt;45% of cases&lt;/strong&gt;, with no improvement from larger or newer models (&lt;a href="https://www.veracode.com/resources/analyst-reports/2025-genai-code-security-report/" rel="noopener noreferrer"&gt;Veracode 2025&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; never give an agent unscoped access to production. Run agents in a sandbox or branch. Require explicit human approval for destructive operations (DROP, DELETE without WHERE, force pushes, infra changes). Use planning modes that propose actions before executing them. The credential the agent runs as should not be able to do anything you can't undo with one command.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix is a harness, not better prompts
&lt;/h2&gt;

&lt;p&gt;The five mistakes share a shape. None of them are about prompt wording. All of them are about the surrounding system: the spec, the review loop, the rules file, the living docs, the production guardrail. Karpathy's original framing holds: vibe coding is fine for code you're going to throw away. Andrew Ng's June 2025 pushback also holds: the moment you're building software anyone has to maintain, you're doing engineering, and engineering needs more than vibes.&lt;/p&gt;

&lt;p&gt;If you're tired of fixing these five by hand, what works is wrapping your project in a harness — spec templates, AGENTS.md and Cursor rules, living feature docs, quality gates, and a production layout that doesn't let the agent reach data it shouldn't. There are starter kits that ship this prebuilt for Next.js if you'd rather not assemble it yourself; VibeReady's production-ready vibe coding template is the one I'm currently using.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibeready.sh/blog/5-mistakes-beginners-make-when-vibe-coding?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=5-mistakes-beginners-make-when-vibe-coding" rel="noopener noreferrer"&gt;VibeReady&lt;/a&gt;. Republished here for the dev.to community.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>vibecoding</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>What Is Harness Engineering? A Builder's Guide</title>
      <dc:creator> Remy B.</dc:creator>
      <pubDate>Tue, 28 Apr 2026 17:00:37 +0000</pubDate>
      <link>https://forem.com/remybuilds/what-is-harness-engineering-a-builders-guide-3d8c</link>
      <guid>https://forem.com/remybuilds/what-is-harness-engineering-a-builders-guide-3d8c</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Harness engineering is designing the environment, constraints, and feedback loops that make AI coding agents reliable&lt;/li&gt;
&lt;li&gt;The core formula: Agent = Model + Harness — the model is just one piece of the system&lt;/li&gt;
&lt;li&gt;Three regulation types: maintainability, architecture fitness, and behavior&lt;/li&gt;
&lt;li&gt;LangChain improved agent accuracy from 52.8% to 66.5% by changing only the harness — same model&lt;/li&gt;
&lt;li&gt;A solid harness includes context files, static analysis, automated tests, reusable skills, and living documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;92% of developers now use AI coding tools daily. Yet trust in AI-generated code has &lt;em&gt;dropped&lt;/em&gt; — from 77% to 60% in just one year. The models keep getting better. The output keeps getting less trusted. Something else is the bottleneck.&lt;/p&gt;

&lt;p&gt;That something is the &lt;strong&gt;harness&lt;/strong&gt; — the model is one part of a reliable system, and everything around it determines whether the output is trustworthy. The term has a name now: harness engineering.&lt;/p&gt;

&lt;p&gt;The first time I hit unreliable AI output on a real project, I did what most people do — I upgraded the model. Cursor to Claude Opus to GPT-5. Three days, three model swaps, same drift: hallucinated imports, ignored conventions, the same bug fixed three different ways. The fix wasn't a smarter model. It was an AGENTS.md file with my project's conventions, a pre-commit hook running tests, and a feature spec template I'd been skipping. Twenty minutes of setup, and the next agent run shipped clean on the first try. The model was never the bottleneck.&lt;/p&gt;

&lt;p&gt;If you've been &lt;a href="https://vibeready.sh/blog/what-is-vibe-coding?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=what-is-harness-engineering" rel="noopener noreferrer"&gt;vibe coding&lt;/a&gt; and your AI tools produce great results sometimes and unreliable ones other times, harness quality is why.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Harness Engineering?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Harness engineering&lt;/strong&gt; is the practice of designing everything around an AI model that makes it work reliably: the context it receives, the tools it can call, the checks that verify its work, and the feedback loops that correct its mistakes.&lt;/p&gt;

&lt;p&gt;The metaphor comes from horse tack. Reins, saddle, bit, and bridle don't limit a horse's power — they channel it in a specific direction. Harness engineering does the same for AI: it preserves the speed and capability of the model while directing it toward consistent, trustworthy output.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Origin of the Term
&lt;/h3&gt;

&lt;p&gt;The concept crystallized in early 2026 through three landmark publications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mitchell Hashimoto&lt;/strong&gt; (co-founder of HashiCorp, creator of Terraform) described "Engineer the Harness" as Step 5 of his AI adoption journey in February 2026: anytime an agent makes a mistake, you engineer a solution so it never makes that mistake again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI&lt;/strong&gt; published "Harness engineering: leveraging Codex in an agent-first world," describing how their team built a production application with 1M+ lines of code where zero lines were written by human hands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Birgitta Boeckeler&lt;/strong&gt; (Distinguished Engineer at Thoughtworks) wrote the definitive practitioner article on martinfowler.com in April 2026, establishing the theoretical framework that the industry now references.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Within weeks, the term went from niche to mainstream. Unlike previous buzzwords, harness engineering solved a problem every AI-using developer was already feeling: the gap between what AI models &lt;em&gt;can&lt;/em&gt; do and what they &lt;em&gt;reliably&lt;/em&gt; do.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Formula — Agent = Model + Harness
&lt;/h3&gt;

&lt;p&gt;LangChain put it most simply: &lt;strong&gt;Agent = Model + Harness&lt;/strong&gt;. The model is what thinks. The harness is everything else — the context the model receives before working, the tools it can access, the schemas that constrain its output, and the checks that verify what it produced.&lt;/p&gt;

&lt;p&gt;Most teams optimize the model. They upgrade to GPT-5, switch to Claude Opus, try Gemini 2.5. The highest-leverage teams optimize the &lt;em&gt;harness&lt;/em&gt; instead.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;LangChain improved their agent accuracy from 52.8% to 66.5% by ONLY changing the harness — same model, same prompts, 14-point jump. Two teams using the same model can see a 40-point difference in task completion rates based on harness quality alone.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the core insight: the harness matters more than the model. If your AI coding workflow is unreliable, the fix probably isn't a better model. It's a better harness.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI Agent Reliability Depends on the Harness
&lt;/h2&gt;

&lt;p&gt;AI models in 2026 are dramatically more capable than they were a year ago. So why has trust in AI-generated code actually &lt;em&gt;decreased&lt;/em&gt;?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The reliability gap&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Trust in AI-generated code dropped from 77% to 60% year over year — despite models getting dramatically better. The bottleneck has shifted from model capability to harness maturity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The pattern is consistent across teams and tools: AI agents fail not because models are bad, but because harnesses are missing. Without constraints, a capable model will solve the immediate problem in whatever way seems locally optimal — ignoring your project's conventions, duplicating existing utilities, introducing inconsistent error handling, and creating security gaps it doesn't know to check for.&lt;/p&gt;

&lt;p&gt;This is why AI agent reliability is fundamentally a harness problem, not a model problem. A well-harnessed agent with a mid-tier model outperforms an unharnessed agent with the best model available. The infrastructure around the AI determines the output quality more than the AI itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Harness Engineering Works — Guides and Sensors
&lt;/h2&gt;

&lt;p&gt;Boeckeler's framework on martinfowler.com breaks a harness into two complementary control types. Understanding these makes the concept immediately practical.&lt;/p&gt;

&lt;h3&gt;
  
  
  Guides (Feedforward Controls)
&lt;/h3&gt;

&lt;p&gt;Guides steer the agent &lt;strong&gt;before&lt;/strong&gt; it starts working. They shape what the agent knows, what it can do, and what it should prioritize.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Computational guides:&lt;/strong&gt; AGENTS.md files, CLAUDE.md, .cursorrules, TypeScript schemas, project templates, API contracts. These are deterministic — the agent reads them and incorporates them into its context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inferential guides:&lt;/strong&gt; Planner agents, sub-agents that decompose tasks before the main agent generates code. These use LLM reasoning to provide richer, more contextual guidance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Guides are the proactive layer. They prevent mistakes by giving the agent the right information upfront — your architecture, your conventions, your constraints. Tools like &lt;a href="https://vibeready.sh/ai-tools?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=what-is-harness-engineering" rel="noopener noreferrer"&gt;Claude Code, Cursor, and Windsurf&lt;/a&gt; all support guide mechanisms, but few developers set them up beyond a basic rules file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sensors (Feedback Controls)
&lt;/h3&gt;

&lt;p&gt;Sensors check the agent's work &lt;strong&gt;after&lt;/strong&gt; it generates output. They catch what the guides didn't prevent.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Computational sensors:&lt;/strong&gt; Automated tests, type-checking, linting, security scanning, coverage thresholds. These are fast, deterministic, and non-negotiable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inferential sensors:&lt;/strong&gt; Evaluator agents that review generated code for architectural fit, code review bots, and AI-powered quality checks that assess output semantically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most effective harnesses use both types together. Guides reduce the error rate; sensors catch what slips through. Neither alone is sufficient.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Guides (Feedforward)&lt;/th&gt;
&lt;th&gt;Sensors (Feedback)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Computational&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AGENTS.md, templates, schemas, type definitions&lt;/td&gt;
&lt;td&gt;Tests, type-checking, linting, security scanning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inferential&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Planner agents, task decomposition, sub-agents&lt;/td&gt;
&lt;td&gt;Evaluator agents, AI code review, quality assessment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;When they run&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Before generation&lt;/td&gt;
&lt;td&gt;After generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Failure mode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent ignores or misinterprets guidance&lt;/td&gt;
&lt;td&gt;Bad output passes undetected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CLAUDE.md says "use Prisma for all DB access"&lt;/td&gt;
&lt;td&gt;Type-checker rejects raw SQL query in a Prisma-only codebase&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Three Things a Harness Regulates
&lt;/h2&gt;

&lt;p&gt;Not all harness engineering problems are the same. Boeckeler identifies three distinct regulation categories, each targeting a different type of failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Maintainability
&lt;/h3&gt;

&lt;p&gt;The most mature category. Maintainability harnesses ensure AI-generated code follows your project's patterns, naming conventions, file structure, and coding standards consistently. This is where &lt;a href="https://vibeready.sh/blog/vibe-coding-has-a-scaling-problem?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=what-is-harness-engineering" rel="noopener noreferrer"&gt;pattern drift&lt;/a&gt; — the #1 scaling problem in AI-assisted development — gets solved at the infrastructure level rather than through manual review.&lt;/p&gt;

&lt;p&gt;Tools: linters with custom rules, AGENTS.md with architectural context, enforced directory structures, code generation templates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture Fitness
&lt;/h3&gt;

&lt;p&gt;Ensuring AI output fits your project's architecture: dependency boundaries, module structure, API contracts, performance budgets. This prevents the subtle failures where AI code works in isolation but breaks the system's design.&lt;/p&gt;

&lt;p&gt;Tools: architecture decision records, dependency constraints, integration tests, module boundary checks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Behavior
&lt;/h3&gt;

&lt;p&gt;The least mature and hardest category. Behavior harnesses verify that the code does what it should &lt;em&gt;and&lt;/em&gt; doesn't do what it shouldn't. This is where functional correctness, security validation, and edge case coverage live.&lt;/p&gt;

&lt;p&gt;Tools: comprehensive test suites, property-based testing, security scanning, end-to-end validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Coding Guardrails — The Practical Layer
&lt;/h2&gt;

&lt;p&gt;AI coding guardrails are the most tangible expression of harness engineering. They're the automated checks that run regardless of which AI tool generated the code and regardless of the developer's intent. Where guides are suggestions, guardrails are enforcement.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Makes a Good Guardrail
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast&lt;/strong&gt; — under 30 seconds. If a guardrail is slow, developers will skip it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic&lt;/strong&gt; — same input produces same result. No flaky checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actionable&lt;/strong&gt; — when it fails, the error message tells you what to fix.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-bypassable&lt;/strong&gt; — integrated into the workflow so skipping requires conscious effort.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Your First Harness — A Practical Checklist
&lt;/h3&gt;

&lt;p&gt;You don't need an enterprise orchestration platform to start harness engineering. Here's what a solid starting harness looks like for a solo developer or small team — regardless of language or framework:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;An AGENTS.md or CLAUDE.md file&lt;/strong&gt; with your project's conventions, architecture, and patterns. Keep it concise and human-written — research from ETH Zurich shows AI-generated context files actually hurt performance. This is the single highest-leverage guide you can add.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict static analysis and linting.&lt;/strong&gt; TypeScript strict mode, mypy/pyright for Python, ESLint, Ruff — whatever fits your stack. Turn on the strictest settings your team can tolerate. These catch type errors, style drift, and common mistakes automatically, so you don't waste review cycles on things a machine should handle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated tests that run on every change.&lt;/strong&gt; Unit tests at minimum, integration tests where it matters. Wire them into a pre-commit hook or CI pipeline so untested code can't ship. This is your most important sensor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A feature spec template&lt;/strong&gt; — a lightweight PRD that defines what a feature should do &lt;em&gt;before&lt;/em&gt; you prompt the AI. This converts vague intent into structured guidance and dramatically improves first-attempt quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security scanning.&lt;/strong&gt; Run a SAST tool (Semgrep, Bandit, or equivalent) in your pipeline. AI-generated code has a documented tendency to introduce vulnerabilities — automated scanning catches the most common ones before they reach production.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Beyond the Basics — Skills, Agents, and Living Documentation
&lt;/h3&gt;

&lt;p&gt;The checklist above gets you a functional harness. The next level is making your harness &lt;em&gt;adaptive&lt;/em&gt; — so it scales as your project grows and your AI workflows get more complex.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reusable skills.&lt;/strong&gt; Instead of repeating complex instructions in every prompt, encode common workflows as structured skills the agent can invoke — "add an API endpoint," "create a database migration," "write integration tests for this service." Skills are guides with progressive disclosure: the agent gets the right knowledge at the right time, rather than drowning in a massive context file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specialized sub-agents.&lt;/strong&gt; A single general-purpose agent trying to do everything — code, review, test, plan — is a weak harness. Splitting responsibilities across focused agents (a planner, a coder, a reviewer, a security auditor) means each one operates within a narrower scope with clearer constraints. This is how both OpenAI and Anthropic structure their production AI systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Living documentation.&lt;/strong&gt; Static docs go stale the moment code changes. A mature harness includes auto-generated documentation that stays in sync with the codebase — so every feature, API endpoint, and architectural decision is always available as context for the next AI task. Without this, your AGENTS.md gradually drifts from reality, and the harness degrades.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-ready architecture.&lt;/strong&gt; Clear module boundaries, well-defined API contracts, consistent file structure, and explicit dependency rules. When your codebase is organized so that a human can understand any feature by reading two or three files, an AI agent can too. Architecture that's easy for agents to navigate is also easier for your team to maintain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building Your First Harness — A Practical Path
&lt;/h2&gt;

&lt;p&gt;Harness engineering isn't something you implement all at once. It's an iterative process that improves every time an agent fails and you add a new constraint.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Define your conventions.&lt;/strong&gt; Write an AGENTS.md or CLAUDE.md that describes your project's architecture, patterns, and standards. This is your first guide.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set up automated checks.&lt;/strong&gt; Tests, strict type checking, lint rules, security scanning. Every check you add is a sensor that catches mistakes the model will inevitably make. Start with the checks that matter most for your project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use spec-driven workflows.&lt;/strong&gt; Don't let the agent start from a vague prompt. Define what the feature should do before you ask the AI to build it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Close the feedback loop.&lt;/strong&gt; Every time an agent produces a bad result, ask: "What guide or sensor would have prevented this?" Then add it. The harness improves incrementally — and each improvement prevents an entire class of future failures.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Anytime you find an agent makes a mistake, you take the time to engineer a solution such that the agent never makes that mistake again. — Mitchell Hashimoto&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the core practice of harness engineering: not accepting AI mistakes as the cost of speed, but systematically eliminating them through infrastructure.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibeready.sh/blog/what-is-harness-engineering?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=what-is-harness-engineering" rel="noopener noreferrer"&gt;VibeReady&lt;/a&gt;. Republished here for the dev.to community.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>vibecoding</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Vibe Code Your First SaaS (Step-by-Step)</title>
      <dc:creator> Remy B.</dc:creator>
      <pubDate>Thu, 23 Apr 2026 13:30:00 +0000</pubDate>
      <link>https://forem.com/remybuilds/how-to-vibe-code-your-first-saas-step-by-step-2b7k</link>
      <guid>https://forem.com/remybuilds/how-to-vibe-code-your-first-saas-step-by-step-2b7k</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vibe coding lets you describe features in plain language and AI writes the code&lt;/li&gt;
&lt;li&gt;Two paths: AI app builders (Lovable/Bolt) for speed, or AI coding tools for full control&lt;/li&gt;
&lt;li&gt;A feature spec + architectural context = consistent, production-ready output&lt;/li&gt;
&lt;li&gt;You can ship your first SaaS feature in a single session using the workflow in this guide&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can vibe code a SaaS in an afternoon. You can also spend that afternoon iterating on a dashboard Claude keeps redesigning from scratch — because your prompt was six words.&lt;/p&gt;

&lt;p&gt;This is the step-by-step workflow I wish I'd had my first week. No specific tool required, no framework assumed. New to the concept? Read &lt;a href="https://vibeready.sh/blog/what-is-vibe-coding?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=how-to-vibe-code-your-first-saas" rel="noopener noreferrer"&gt;What Is Vibe Coding?&lt;/a&gt; first for background.&lt;/p&gt;

&lt;p&gt;The first time I tried to vibe code a SaaS dashboard, I gave Claude Code a single sentence: "Build me a dashboard." Forty minutes later I was on my third complete rewrite — different layout, different data model, different component names each time. I closed the terminal, opened a notes file, and wrote six sentences: route, data sources, existing components, acceptance criteria, auth, layout wrapper. Twelve minutes after I pasted those six sentences back in, the feature was done and shipping. The spec wasn't overhead. It was the whole trick.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Need Before You Start
&lt;/h2&gt;

&lt;p&gt;Before you write a single prompt, get these five things in place. None of them take more than an afternoon, and skipping any of them will cost you time later.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;An idea you can describe in one paragraph.&lt;/strong&gt; You don't need a business plan. You need to be able to say: "I'm building X for Y people, and the first thing it does is Z." If you can't describe it simply, AI can't build it well.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version control (GitHub).&lt;/strong&gt; Create a GitHub repository before writing any code. Every change is tracked, you can undo mistakes, and it's required for deployment. It's free — no excuses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A hosting platform.&lt;/strong&gt; Vercel (best for Next.js), Netlify, or Railway. All have generous free tiers. You'll deploy from your GitHub repo — push code, and your site updates automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An AI coding tool.&lt;/strong&gt; Claude Code for terminal-first agentic workflows, Cursor or Windsurf for IDE-integrated development. Pick one to start — you can always add more later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A project foundation.&lt;/strong&gt; A starter kit or boilerplate with authentication, payments, and database already configured. Building this from scratch takes weeks and is the wrong use of your time when vibe coding for beginners.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once these are in place, you're ready to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Write a Feature Spec (Not Just a Prompt)
&lt;/h2&gt;

&lt;p&gt;This is the single biggest differentiator between people who succeed with vibe coding and people who struggle. &lt;strong&gt;Don't jump straight into prompting.&lt;/strong&gt; Write down what you want first.&lt;/p&gt;

&lt;p&gt;A feature spec isn't a full product requirements document. It's 5–10 sentences that describe: what the feature does, who uses it, and what "done" looks like. It forces you to think before you prompt — and gives AI the clarity it needs to generate useful code on the first try.&lt;/p&gt;

&lt;p&gt;Here's the difference between a vague prompt and a feature spec:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Vague Prompt&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Build me a dashboard."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI will generate &lt;em&gt;something&lt;/em&gt; — but it won't be what you wanted. You'll spend more time iterating than you saved.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Feature Spec&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Create a user dashboard page at /dashboard. Show the user's name from the session, their current subscription plan from Stripe, and a list of their 5 most recent projects with title, status, and last-modified date. Use the existing DashboardLayout component. Add a 'New Project' button that links to /projects/new. The page should be server-rendered and require authentication."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The difference is specificity. When AI knows the route, the data sources, the existing components, and the acceptance criteria, it generates code that actually fits your application. This is how to vibe code effectively — not with better AI, but with better inputs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Quick Path: Start with an AI App Builder
&lt;/h2&gt;

&lt;p&gt;Before diving into the full workflow, it's worth knowing there's a faster option — with trade-offs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI app builders like Lovable and Bolt&lt;/strong&gt; can generate a working application from a text description. You describe your SaaS, and they produce a deployed app with UI, database, authentication, and basic functionality — sometimes in minutes.&lt;/p&gt;

&lt;p&gt;This path works well for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validating an idea quickly before investing more time&lt;/li&gt;
&lt;li&gt;Building prototypes to show investors or early users&lt;/li&gt;
&lt;li&gt;Non-technical founders who need a working version fast&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trade-offs are real, though. Customization is limited. Complex features hit walls. You're on their hosting, their infrastructure, their ecosystem. When you outgrow the builder — and most serious SaaS products do — migration is painful and sometimes impossible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you want full control over your codebase&lt;/strong&gt; — production-ready architecture, custom features, your own hosting — keep reading. The rest of this vibe coding tutorial walks you through doing it with AI coding tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Set Up Your Project Foundation
&lt;/h2&gt;

&lt;p&gt;You can't vibe code into a blank folder effectively. AI needs existing patterns to follow — file structure, naming conventions, component library, API patterns. Without them, every prompt generates code in a different style, and your project becomes an inconsistent mess within a week.&lt;/p&gt;

&lt;p&gt;You have two options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use a starter kit&lt;/strong&gt; — A production-ready boilerplate with authentication, payments, database, and infrastructure already configured. This is the fastest path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set up manually&lt;/strong&gt; — Initialize a Next.js (or other framework) project, add your ORM, configure authentication, wire up payments. This takes 1–2 weeks for a solid foundation but gives you full control from line one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What matters is consistency: a predictable file structure, shared type definitions, reusable components the AI can reference. The difference between vibe coding a prototype and vibe coding production software is the foundation underneath.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Give Your AI Tool Context About Your Project
&lt;/h2&gt;

&lt;p&gt;This is the step most beginners skip — and the one that separates good AI output from generic AI output.&lt;/p&gt;

&lt;p&gt;Every AI coding tool supports some form of project context file: &lt;code&gt;AGENTS.md&lt;/code&gt; for Claude Code, &lt;code&gt;.cursorrules&lt;/code&gt; for Cursor, &lt;code&gt;.windsurfrules&lt;/code&gt; for Windsurf. These files tell the AI about your project's patterns &lt;em&gt;before&lt;/em&gt; it generates code.&lt;/p&gt;

&lt;p&gt;At minimum, include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your tech stack and framework versions&lt;/li&gt;
&lt;li&gt;File and folder naming conventions&lt;/li&gt;
&lt;li&gt;Key components and utilities the AI should reuse&lt;/li&gt;
&lt;li&gt;Patterns to follow (e.g., "server actions go in &lt;code&gt;src/actions/&lt;/code&gt;")&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Example Context File (AGENTS.md)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tech stack: Next.js 15, TypeScript, Prisma, PostgreSQL, Tailwind, shadcn/ui.&lt;br&gt;
Components live in src/components/. Pages in src/app/.&lt;br&gt;
Server actions in src/actions/ — always validate with Zod schemas.&lt;br&gt;
Use the existing Button, Card, and DataTable components from our UI library.&lt;br&gt;
All database queries go through Prisma — never raw SQL.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With context in place, AI generates code that matches your project's conventions instead of inventing its own. This is the foundation of &lt;a href="https://vibeready.sh/structured-vibe-coding?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=how-to-vibe-code-your-first-saas" rel="noopener noreferrer"&gt;structured vibe coding&lt;/a&gt; — and it's what makes vibe coding viable for production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Vibe Code Your First Feature
&lt;/h2&gt;

&lt;p&gt;You have a spec, a foundation, and context. Now it's time to actually vibe code. Here's the workflow, step by step.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Share your feature spec with the AI
&lt;/h3&gt;

&lt;p&gt;Open your AI tool and give it the feature spec you wrote in Step 1. If you're using Claude Code, paste it directly. In Cursor or Windsurf, open the composer/chat and share the spec along with any relevant files.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Let the AI propose a plan
&lt;/h3&gt;

&lt;p&gt;Don't let AI start writing code immediately. Ask it to propose an implementation plan first: which files it will create or modify, what approach it will take, which existing components it will use. Review the plan before saying "go ahead."&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Let it generate the code
&lt;/h3&gt;

&lt;p&gt;Once the plan looks right, let AI write the code. For multi-file features, agentic tools like Claude Code will create and modify multiple files in one pass. IDE tools may handle it in stages.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Review what it produced
&lt;/h3&gt;

&lt;p&gt;Before accepting anything, check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the file structure match your project's conventions?&lt;/li&gt;
&lt;li&gt;Did it reuse existing components or create unnecessary duplicates?&lt;/li&gt;
&lt;li&gt;Are types correct? Are imports pointing to real files?&lt;/li&gt;
&lt;li&gt;Does the feature actually work when you run it?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Iterate through conversation
&lt;/h3&gt;

&lt;p&gt;AI rarely gets it perfect on the first pass — and that's fine. The power of this vibe coding tutorial is showing you that iteration is the workflow, not a failure.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Iteration Prompt&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"The dashboard page works, but two things: move the subscription status into a separate card component, and add a loading skeleton while the projects list fetches. Also, the 'New Project' button should use our primary Button variant from the UI library, not a plain anchor tag."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Be specific. Reference file names, component names, and exact behaviors. The more precise your feedback, the more accurate the next iteration.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you find yourself giving the same feedback repeatedly — "always use our Button component," "add loading states to all data fetches" — encode it into a reusable skill or subagent. AI tools like Claude Code support custom skills that run the same review checklist every time, so you stop repeating yourself and your code stays consistent automatically.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 5: Review, Test, and Ship
&lt;/h2&gt;

&lt;p&gt;Don't skip review just because AI wrote it. AI-generated code compiles, passes basic tests, and looks reasonable — but it can also introduce subtle bugs, security issues, and pattern inconsistencies that compound over time.&lt;/p&gt;

&lt;p&gt;Before you merge or deploy, run through this checklist:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Logic check.&lt;/strong&gt; Does the feature actually do what the spec says? Test the happy path and at least one edge case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security basics.&lt;/strong&gt; Are inputs validated? Are database queries parameterized? Are auth checks in place?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern consistency.&lt;/strong&gt; Does the code follow the same patterns as the rest of your project? Or did AI invent a new approach?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality gates.&lt;/strong&gt; Run your linter, type checker, and any tests you have. Ask AI to write tests for the feature it just built — it's good at this.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Use AI for testing too. Connect a browser automation tool like Chrome DevTools MCP to your AI agent, pair it with a testing skill, and let it click through your feature, check layouts at different screen sizes, and flag visual or functional issues — before you even open the browser yourself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once everything passes, commit, push, and deploy. If you set up Vercel or Netlify in Step 1, pushing to GitHub triggers an automatic deploy. Your feature is live.&lt;/p&gt;

&lt;p&gt;Worried about AI code quality at scale? &lt;a href="https://vibeready.sh/blog/vibe-coding-has-a-scaling-problem?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=how-to-vibe-code-your-first-saas" rel="noopener noreferrer"&gt;Read our data-driven analysis on vibe coding's scaling problem →&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Mistakes That Slow Down First-Time Vibe Coders
&lt;/h2&gt;

&lt;p&gt;After watching dozens of developers learn how to vibe code, these are the patterns that waste the most time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prompting without a spec.&lt;/strong&gt; You describe something vague, AI generates something vague, you spend 30 minutes iterating to get what you could have specified in 2 minutes of writing. The spec &lt;em&gt;is&lt;/em&gt; the shortcut.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No project context.&lt;/strong&gt; Without context files, AI generates generic code that doesn't match your patterns. You end up with three different button styles, two API patterns, and a file structure that doesn't match anything else in the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accepting everything without review.&lt;/strong&gt; AI is confident, not correct. It will generate code that looks right, runs without errors, and has a subtle auth bypass or a missing edge case. Always review the diff before accepting.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every one of these mistakes is recoverable. But avoiding them from the start means you spend your time building features, not fixing AI's assumptions.&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>ai</category>
      <category>saas</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What Is Vibe Coding? A Developer's Guide (2026)</title>
      <dc:creator> Remy B.</dc:creator>
      <pubDate>Fri, 17 Apr 2026 22:30:35 +0000</pubDate>
      <link>https://forem.com/remybuilds/what-is-vibe-coding-a-developers-guide-2026-o0m</link>
      <guid>https://forem.com/remybuilds/what-is-vibe-coding-a-developers-guide-2026-o0m</guid>
      <description>&lt;p&gt;I've been vibe coding for the past year — building a full SaaS product almost entirely through AI conversation. Some of it has been shockingly productive. Some of it has been a mess. This post is everything I wish I'd known when I started.&lt;/p&gt;

&lt;p&gt;Vibe coding is the practice of building software by describing what you want in natural language and letting AI write the code. Instead of typing syntax line by line, you have a conversation with an AI tool — and it generates working code based on your intent.&lt;/p&gt;

&lt;p&gt;If you've heard the term but weren't sure what it actually means, how it works, or whether it's something you should learn — this guide covers everything I've learned about vibe coding in 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Vibe Coding?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Vibe coding&lt;/strong&gt; is a software development approach where you describe the software you want to build in plain English (or any natural language), and an AI coding tool generates the source code for you. You guide the process by reviewing the output, giving feedback, and iterating — much like directing a collaborator rather than writing every line yourself.&lt;/p&gt;

&lt;p&gt;The term captures something specific: instead of thinking in syntax and data structures, you think in outcomes. You focus on &lt;em&gt;what&lt;/em&gt; the software should do, and the AI handles &lt;em&gt;how&lt;/em&gt; to implement it. The "vibe" is the shift from implementation detail to creative intent.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Origin of "Vibe Coding"
&lt;/h3&gt;

&lt;p&gt;The term was coined by &lt;strong&gt;Andrej Karpathy&lt;/strong&gt; — Tesla's former head of AI and a founding member of OpenAI — in a now-famous post on X in February 2025:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There's a new kind of coding I call "vibe coding", where you fully give in to the vibes, embrace exponentials, and forget that the code even exists.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Karpathy was half-joking. He described himself building a project by talking to an AI, accepting suggestions, running the code, and fixing issues through more conversation — without ever carefully reading the generated code. It captured a feeling that thousands of developers already recognized: AI had reached a point where you could build real software just by describing what you wanted.&lt;/p&gt;

&lt;p&gt;What started as a tongue-in-cheek observation went viral. Within months, "vibe coding" went from a meme to a genuine methodology. Developer communities adopted it. Tutorials appeared. Tool makers optimized their products around it. By mid-2025, it was the dominant way new developers were learning to build software — and by 2026, even experienced engineers have integrated vibe coding workflows into their daily practice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vibe Coding vs Traditional Development
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Traditional Development&lt;/th&gt;
&lt;th&gt;Vibe Coding&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;How code is written&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manually, line by line&lt;/td&gt;
&lt;td&gt;Described in natural language, AI generates it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Skill required&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Deep programming knowledge&lt;/td&gt;
&lt;td&gt;Problem definition + code literacy for review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Speed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Variable, depends on complexity&lt;/td&gt;
&lt;td&gt;Faster for standard patterns, similar for novel problems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Who it's for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Professional developers&lt;/td&gt;
&lt;td&gt;Developers + technically literate builders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Output quality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Consistent with developer's skill&lt;/td&gt;
&lt;td&gt;High for isolated tasks, variable at scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scaling behavior&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Conventions maintained by team knowledge&lt;/td&gt;
&lt;td&gt;Requires architectural context to stay consistent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The key insight: vibe coding doesn't replace programming knowledge — it changes &lt;em&gt;where&lt;/em&gt; that knowledge is applied. Instead of writing code, you're reviewing it. Instead of memorizing syntax, you're defining intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Vibe Coding Works in Practice
&lt;/h2&gt;

&lt;p&gt;If you've never tried it, consider this section a compact vibe coding tutorial. Whether you're exploring vibe coding for beginners or you're an experienced developer learning how to vibe code, the core cycle is the same.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Vibe Coding Workflow
&lt;/h3&gt;

&lt;p&gt;Every vibe coding session follows a four-step loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Describe&lt;/strong&gt; — Tell the AI what you want in plain language. "Build a user settings page with name, email, and notification preferences."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate&lt;/strong&gt; — The AI writes the code: components, API routes, database queries, styling — whatever the task requires.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review&lt;/strong&gt; — You look at what it produced. Does it match your intent? Does it work? Are there obvious issues?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterate&lt;/strong&gt; — Refine through conversation. "Move the notification toggles into a separate section. Add email validation." The AI updates the code accordingly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This loop happens fast. A feature that might take a day in traditional development can often be built in under an hour. The more specific your descriptions, the better the output — but even vague starting points often produce surprisingly usable results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vibe Coding Example: A Pricing Page
&lt;/h3&gt;

&lt;p&gt;Imagine you're building a SaaS application and need a pricing page. In traditional development, you'd write JSX, style components, wire up state management, and connect to your payment provider. With vibe coding:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Your prompt:&lt;/strong&gt; "Build a pricing page with three tiers — Free, Pro, and Enterprise. Each tier should show the price, a list of features, and a CTA button. The Pro tier should be visually highlighted as the recommended option. Use our existing design system and connect the buttons to our Stripe checkout flow."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The AI generates a complete, functional pricing page. You review it, tweak the copy, adjust the feature lists, and iterate until it matches your vision. The entire process might take 20 minutes instead of a full day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Essential Vibe Coding Tools
&lt;/h2&gt;

&lt;p&gt;The vibe coding ecosystem has matured rapidly. Here are the main categories of tools and when each type shines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vibe Coding with Cursor and Windsurf
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Cursor&lt;/strong&gt; and &lt;strong&gt;Windsurf&lt;/strong&gt; are IDE-based tools that integrate AI directly into your code editor. Vibe coding with Cursor gives you a chat panel and inline prompts that modify your actual files in real time. If you prefer a visual, file-tree-oriented workflow where you can see changes as they happen, these are the tools to start with. Cursor has the larger community and deeper feature set; Windsurf (by Codeium) offers a polished alternative with strong multi-file editing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vibe Coding with Claude Code and Gemini CLI
&lt;/h3&gt;

&lt;p&gt;Vibe coding with Claude Code is a terminal-first experience. Anthropic's AI coding agent excels at complex, multi-file operations — the kind of work where you need AI to understand your entire project structure, not just the file you're looking at. It reads your codebase, plans changes across multiple files, runs tests, and commits code. For agentic workflows (where AI operates more autonomously), Claude Code is the most capable option available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini CLI&lt;/strong&gt; is Google's entry, offering a generous free tier and one of the largest context windows. It's a strong choice for open-source projects and developers who want to experiment with vibe coding without upfront costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pair Programming Tools: GitHub Copilot
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;GitHub Copilot&lt;/strong&gt; is the most widely adopted AI coding tool, with millions of active users. It works as an inline suggestion engine — as you type, it predicts what you'll write next. While not a full vibe coding tool in the conversational sense, Copilot is often the entry point that introduces developers to AI-assisted coding. Many vibe coders use Copilot alongside a more capable tool like Claude Code or Cursor.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Vibe Coding Gets Right
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Speed to Prototype
&lt;/h3&gt;

&lt;p&gt;The most obvious advantage: vibe coding is fast. Prototypes that took weeks can be built in hours. MVPs that took months can ship in days. This isn't hype — it's the consistent experience reported by developers across the industry. When you remove the bottleneck of translating ideas into syntax, the speed of development becomes limited by the speed of your thinking, not your typing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility for Non-Developers
&lt;/h3&gt;

&lt;p&gt;Vibe coding has opened software creation to people who couldn't build apps before. Designers who understand user flows but can't write React. Product managers who know exactly what the feature should do but never learned TypeScript. Domain experts — doctors, teachers, small business owners — who have ideas for tools that solve their specific problems. For the first time, you can build an app with AI, no coding experience required, and the result is real, deployable code you own.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focused Creativity
&lt;/h3&gt;

&lt;p&gt;Perhaps the most underrated benefit: vibe coding lets you stay in the creative zone. Instead of context-switching between "what should this feature do?" and "how do I implement this in code?", you stay focused on the product vision. The AI handles the implementation details, and you steer the direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Misconceptions About Vibe Coding
&lt;/h2&gt;

&lt;p&gt;Vibe coding has grown so fast that myths have grown with it. Here are the most common ones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"AI does everything — you just sit back."&lt;/strong&gt; In reality, vibe coding is a collaboration. You define the direction, review the output, catch mistakes, and iterate. The developer's role shifts from writer to director, but the expertise still matters.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"Vibe-coded projects can't go to production."&lt;/strong&gt; They absolutely can — with the right foundation. The projects that fail in production are usually the ones built ad-hoc from a blank canvas. Start with a proven architecture and quality checks, and vibe-coded code can be as reliable as hand-written code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"You don't need to understand code at all."&lt;/strong&gt; Some code literacy helps significantly. You don't need to write code from scratch, but being able to read what the AI produced, spot obvious issues, and understand error messages makes the process much more effective.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"Vibe coding is just a fad."&lt;/strong&gt; Every generation of developer tools has abstracted away complexity. Compilers abstracted assembly. Frameworks abstracted HTTP. AI tools abstract implementation. Vibe coding is the next step in a decades-long trend, not a temporary phenomenon.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"All vibe-coded projects have the same quality problems."&lt;/strong&gt; The quality issues come from &lt;em&gt;unstructured&lt;/em&gt; AI usage, not from the methodology itself. When AI has architectural context and guardrails, the output quality is dramatically better than ad-hoc prompting.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Vibe Coding Best Practices for Beginners
&lt;/h2&gt;

&lt;p&gt;If you're just getting started with vibe coding, these three practices will save you from the most common pitfalls.&lt;/p&gt;

&lt;h3&gt;
  
  
  Start with a Foundation, Not a Blank Canvas
&lt;/h3&gt;

&lt;p&gt;The biggest mistake beginners make is asking AI to build everything from scratch. Research shows that &lt;strong&gt;AI-generated code has 70% more issues&lt;/strong&gt; than human-written code when there's no architectural context to guide it (CodeRabbit, 2025). The AI doesn't know your project's conventions, patterns, or standards — so it invents new ones with every prompt.&lt;/p&gt;

&lt;p&gt;The fix is straightforward: start with a proven codebase that gives AI the context it needs. Whether that's an existing project, an open-source boilerplate, or a commercial starter kit — the point is to give AI architectural context from the start. Add an &lt;code&gt;AGENTS.md&lt;/code&gt; file that describes your conventions, set up linting, and establish patterns before you start prompting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Structured Prompts, Not Ad-Hoc Requests
&lt;/h3&gt;

&lt;p&gt;Instead of vague instructions ("build me a dashboard"), write structured descriptions that include the goal, the expected behavior, the data involved, and any constraints. The more context you provide upfront, the better the AI's first attempt — and the fewer iterations you'll need.&lt;/p&gt;

&lt;p&gt;The most effective vibe coders use a PRD-driven workflow: they define features in a lightweight product requirements document before writing a single prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Set Up Quality Gates Early
&lt;/h3&gt;

&lt;p&gt;Don't wait until your project is large to add quality checks. Set up automated tests, type checking, and linting from day one. These quality gates catch AI-generated mistakes automatically — before they compound into larger problems. The difference between a vibe-coded prototype and a vibe-coded product is the automated verification layer that runs on every change.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Vibe Coding Breaks Down (And How to Fix It)
&lt;/h2&gt;

&lt;p&gt;Vibe coding isn't perfect, and it's important to understand where the limits are. The most well-documented challenge is &lt;strong&gt;pattern drift&lt;/strong&gt;: when AI generates each feature using slightly different patterns, conventions, and approaches because it lacks memory of what it built before. Over time, this leads to code duplication (4x more than human-written code, per GitClear), inconsistent error handling, and security gaps (40%+ of AI-generated code contains vulnerabilities, per arXiv research).&lt;/p&gt;

&lt;p&gt;The data on AI-generated code quality paints a clear picture: these are real problems — but they're solvable ones. The root cause isn't vibe coding itself; it's vibe coding &lt;em&gt;without structure&lt;/em&gt;. When AI has access to your project's architectural context, enforced coding patterns, and automated quality checks, the output quality improves dramatically. The methodology works; it just needs guardrails. The emerging discipline of &lt;a href="https://vibeready.sh/blog/what-is-harness-engineering" rel="noopener noreferrer"&gt;harness engineering&lt;/a&gt; formalizes how to build these guardrails systematically.&lt;/p&gt;

&lt;p&gt;I hit this wall myself about three months into a project. Every feature worked in isolation, but the codebase had become a patchwork of inconsistent patterns. That's what pushed me to build tooling around the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with Vibe Coding Today
&lt;/h2&gt;

&lt;p&gt;Ready to start vibe coding? Whether you want to build SaaS with AI or create your first side project, here's a practical path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pick an AI coding tool.&lt;/strong&gt; Claude Code for terminal-first workflows, Cursor or Windsurf for IDE-integrated development, or GitHub Copilot for inline suggestions. Most developers end up using more than one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start with a proven foundation.&lt;/strong&gt; Don't build from a blank canvas. Clone an existing project, use a boilerplate, or set up a well-structured repo with &lt;code&gt;AGENTS.md&lt;/code&gt; and linting before you start prompting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Follow a structured workflow.&lt;/strong&gt; Plan features before prompting. Use structured descriptions. Run quality checks after every change.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Learn the practices that scale.&lt;/strong&gt; Once you're comfortable with the basics, learn the patterns that separate prototypes from production applications.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;
  Is vibe coding the same as no-code?
  &lt;br&gt;
No. No-code platforms like Bubble or Webflow use visual builders and limit you to their ecosystem. Vibe coding generates real source code — JavaScript, Python, TypeScript — that you own and can modify. You get an actual codebase, not a locked-in platform.&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  Can I build a production app with vibe coding?
  &lt;br&gt;
Yes, but it requires structure. Unstructured vibe coding works great for prototypes but introduces consistency issues at scale. With a production-ready foundation, architectural context files, and quality gates, vibe-coded applications can absolutely run in production.&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  What's the best AI tool for vibe coding?
  &lt;br&gt;
It depends on your workflow. Claude Code excels at multi-file agentic tasks from the terminal. Cursor and Windsurf offer the best IDE-integrated experience. GitHub Copilot is great for inline suggestions. Most developers combine two or more tools.&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  Do I need to know how to code to vibe code?
  &lt;br&gt;
Some code literacy helps for reviewing AI output, but you don't need to be an expert. Many successful vibe coders are designers, product managers, or domain experts who understand what they want to build but couldn't write it from scratch.&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  How is vibe coding different from using GitHub Copilot?
  &lt;br&gt;
Copilot suggests code completions as you type — it's a pair programmer. Vibe coding is broader: you describe entire features, review the output, and iterate through conversation. Copilot can be one tool in a vibe coding workflow, but the methodology encompasses the full build cycle.&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;
  What is structured vibe coding?
  &lt;br&gt;
Structured vibe coding adds architectural context, quality gates, and repeatable workflows on top of the basic describe-and-generate loop. Instead of prompting AI ad-hoc, you give it context about your project's patterns, conventions, and standards — so it generates consistent, production-quality code every time. I wrote a &lt;a href="https://vibeready.sh/structured-vibe-coding" rel="noopener noreferrer"&gt;deeper breakdown of structured vibe coding&lt;/a&gt; if you want the full framework.&lt;br&gt;


&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm building &lt;a href="https://vibeready.sh" rel="noopener noreferrer"&gt;VibeReady&lt;/a&gt; — an AI-native SaaS starter kit that gives AI tools the architectural context they need to generate consistent, production-quality code. If you're vibe coding and hitting the scaling issues described above, &lt;a href="https://vibeready.sh" rel="noopener noreferrer"&gt;check it out&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>ai</category>
      <category>webdev</category>
      <category>saas</category>
    </item>
  </channel>
</rss>
