{"id":5655,"date":"2026-04-17T08:15:21","date_gmt":"2026-04-17T08:15:21","guid":{"rendered":"https:\/\/www.aviator.co\/blog\/?p=5655"},"modified":"2026-04-17T08:50:33","modified_gmt":"2026-04-17T08:50:33","slug":"inside-runbooks-how-spec-driven-development-works","status":"publish","type":"post","link":"https:\/\/www.aviator.co\/blog\/inside-runbooks-how-spec-driven-development-works\/","title":{"rendered":"Inside Runbooks: How Spec-Driven Development Works"},"content":{"rendered":"\n<figure class=\"wp-block-image aligncenter size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/Inside_Runbooks-1024x535.png\" alt=\"\" class=\"wp-image-5656\" srcset=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/Inside_Runbooks-1024x535.png 1024w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/Inside_Runbooks-300x157.png 300w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/Inside_Runbooks-768x401.png 768w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/Inside_Runbooks.png 1320w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Coding with AI agents is fast, but speed isn\u2019t always a good thing. In the rush to write prompts quickly, planning can easily be left behind. Agents will do what you tell them to (most of the time, at least), and before you know it, you\u2019re deep into implementation. This often results in inconsistent output, unpredictable behavior on complex codebases, and very little insight into why the agent did what it did.<\/p>\n\n\n\n<p>As you can see, when it comes to agentic setups, there\u2019s a clear absence of the planning phase. There are no shared specifications that both the agent and the developer can rely on. So, how should we introduce them, you may ask?<\/p>\n\n\n\n<p>Meet Aviator Runbooks. It uses Claude (no shade, GPT) to plan and execute tasks in a sandbox. You provide a description of what you want, review the specs it generates, and then let the agent implement them.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Issue of Prompting Without a Direction<\/h2>\n\n\n\n<p>Ah, vibe coding: throw a prompt at an AI agent, iterate, and pray something works. This is fine for greenfield projects, where you\u2019ve got a blank template and a simple goal. The agent executes the steps, you review the output, and move on without thinking twice (or looking at the billing tab).<\/p>\n\n\n\n<p>Brownfield enterprise codebases are a completely different matter. You\u2019re dealing with the existing architecture, implicit conventions, and years of accumulated context that no prompt (or context window) can fully capture.<\/p>\n\n\n\n<p>In that environment, without structure, the AI agent may need to make too many undocumented micro-decisions. This does not mean that the agent is inherently bad, though. It\u2019s just that, without structure, it\u2019s forced to make bunch of decisions related to the scope, the approach, and tradeoffs that are not visible to the dev reviewing the output. In the end, it may produce code that <strong>looks<\/strong> correct but isn\u2019t really, which is what we call an <a href=\"https:\/\/www.aviator.co\/blog\/how-to-avoid-ai-code-slop\/\" target=\"_blank\" rel=\"noopener\" title=\"\">AI slop<\/a>.<\/p>\n\n\n\n<p>Let&#8217;s hop inside Runbooks so that I can show you a step-by-step workflow that will keep you from tearing your hair out trying to figure out why Claude made 1,337 line changes.<\/p>\n\n\n\n<figure class=\"wp-block-image alignfull size-large\"><img decoding=\"async\" width=\"100\" height=\"520\" src=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/claude_1337_lines_meme.svg\" alt=\"What happens when you let AI loose from the leash\" class=\"wp-image-5658\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Runbooks Workflow: Plan \u2192 Execute \u2192 Collaborate<\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"139\" src=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-diagram-1-1024x139.png\" alt=\"\" class=\"wp-image-5659\" srcset=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-diagram-1-1024x139.png 1024w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-diagram-1-300x41.png 300w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-diagram-1-768x104.png 768w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-diagram-1-1536x209.png 1536w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-diagram-1-2048x278.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Inside <a href=\"https:\/\/app.aviator.co\/runbooks\" target=\"_blank\" rel=\"noopener\" title=\"\">Runbooks<\/a>, it&#8217;s like chatting with your good, old ChatGPT or Claude, but with a few differences.<\/p>\n\n\n\n<p>Let\u2019s see how it all works.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Gettng started with Aviator Runbooks\" width=\"1490\" height=\"838\" src=\"https:\/\/www.youtube.com\/embed\/8c2ATjFXQzQ?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li>You enter the starter prompt: what the overall goal is, what you want to accomplish, and how.<\/li>\n\n\n\n<li>You select a repository (<a href=\"https:\/\/docs.aviator.co\/manage\/github-app-permissions\" target=\"_blank\" rel=\"noopener\" title=\"\">connect your GitHub beforehand<\/a>).<\/li>\n\n\n\n<li>You can also choose the \u201cOne Shot\u201d mode for smaller and descriptive task for agents to perform uninterrupted.<\/li>\n\n\n\n<li>Press <strong>Start<\/strong> and wait.<\/li>\n<\/ol>\n\n\n\n<p>In a couple of moments, Runbooks will generate a plan with <a href=\"https:\/\/docs.aviator.co\/runbooks\/concepts\/runbook-format#steps\" target=\"_blank\" rel=\"noopener\" title=\"\">steps<\/a>. You are free to edit the plan and fine tune it. A good rule of thumb: the more detailed you are, the more detailed the output.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"How to generate plan in Aviator Runbooks\" width=\"1490\" height=\"838\" src=\"https:\/\/www.youtube.com\/embed\/YnINERCC3lc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Next, you can hit <strong>Execute Step<\/strong>, which will take you one step ahead in the workflow (with actual code being written). You can also press <strong>Execute All<\/strong> from the dropdown menu of the same button. This one goes over all steps without a hiccup.<\/p>\n\n\n\n<p>Now, you can grab your matcha latte or pet your kitten a bit while Runbooks works its magic.<\/p>\n\n\n\n<p>After some Hogwarts-level sorcery is done behind the scenes, press <strong>Create PR<\/strong> in the top right corner.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"474\" src=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-create-pr-1024x474.png\" alt=\"Creating a PR with Runbooks\" class=\"wp-image-5660\" srcset=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-create-pr-1024x474.png 1024w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-create-pr-300x139.png 300w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-create-pr-768x356.png 768w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-create-pr-1536x711.png 1536w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-create-pr.png 1918w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Creating a PR with Runbooks<\/em><\/p>\n\n\n\n<p>When you head to the repo, you will see the neatly generated PR.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"474\" src=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-draft-pr-1024x474.png\" alt=\"The PR draft on GitHub\" class=\"wp-image-5661\" srcset=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-draft-pr-1024x474.png 1024w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-draft-pr-300x139.png 300w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-draft-pr-768x356.png 768w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-draft-pr-1536x711.png 1536w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/aviator-draft-pr.png 1918w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>The PR draft on GitHub<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Real World Example<\/h2>\n\n\n\n<p>After a sprint or two, your team says you need to add rate limiting to a REST API. You\u2019re not playing anymore: you have actual traffic, and this has become a priority.<\/p>\n\n\n\n<p>This sounds simple on paper. In practice, you\u2019ve got middleware layering from three engineers that have left the company and a custom auth wrapper (spoiler alert: nobody fully remembers how it works). Yikes.<\/p>\n\n\n\n<p>It&#8217;s not a shame to ask AI for help, especially Runbooks. It can actually orchestrate a concrete plan so that you can implement the rate limiter confidently. The whole process can go along these lines:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>You drop the prompt into Runbooks.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;Add per-user rate limiting to the public API endpoints using Redis, respecting the existing auth middleware and request lifecycle.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Runbooks start working by reading your repo first.<\/li>\n\n\n\n<li>Before any code change, Runbooks presents you with a plan.<\/li>\n\n\n\n<li>You edit and approve the plan.<\/li>\n\n\n\n<li>Runbooks starts executing.<\/li>\n<\/ol>\n\n\n\n<p>With this, you can actually see the course of action rather than blindly trusting an agent.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Who Gets the Most Out of This<\/h3>\n\n\n\n<p>Runbooks is really helpful for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Teams on large or legacy codebases<\/strong>: The more implicit context your repo has, the more planning you need.<\/li>\n\n\n\n<li><strong>Engineers doing code review<\/strong>: The generated specs also count as documentation. There\u2019s no need to reverse-engineer what the agent did. Reviewers can work directly alongside the generated plan.<\/li>\n\n\n\n<li><strong>Solo devs moving fast<\/strong>: <a href=\"https:\/\/docs.aviator.co\/runbooks\/how-to-guides\/one-shot-mode\" target=\"_blank\" rel=\"noopener\" title=\"\">One-shot mode<\/a> handles smaller, well-scoped tasks without interruption. For anything non-linear, the plan-first workflow spares you an afternoon of untangling AI gibberish.<\/li>\n<\/ul>\n\n\n\n<p>This list isn\u2019t exhaustive. I just pointed out some specifics where I found Runbooks <strong>really<\/strong> helpful.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Next Steps and Resources<\/h2>\n\n\n\n<p>AI coding agents are not going away anytime soon, nor are the headaches caused by hasty agents that don\u2019t think ahead. When you want reliable execution, you need to establish the right process before the execution is run.<\/p>\n\n\n\n<p>Aviator&#8217;s Runbooks fill that gap perfectly. Define what you want, review the agent&#8217;s plan, execute, and voila! The generated PR comes for less than the price of a Starbucks you\u2019ll be sipping on while waiting.<\/p>\n\n\n\n<p>If you want to get started (and you should :D), these docs will get you moving in a couple of minutes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.aviator.co\/manage\/github-app-permissions\" target=\"_blank\" rel=\"noopener\" title=\"\">Connecting your GitHub repository to Runbooks<\/a>, the prerequisite;<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.aviator.co\/runbooks\/concepts\" target=\"_blank\" rel=\"noopener\" title=\"\">Runbooks Concepts<\/a>, if you want to see what happens under the hood.<\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/app.aviator.co\/runbooks\" target=\"_blank\" rel=\"noopener\" title=\"\">Open Runbooks<\/a> and stop playing the guessing game with your agent. Cheers!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently Asked Questions (FAQ)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">What AI model does Runbooks use under the hood?<\/h3>\n\n\n\n<p>Runbooks currently runs on the Claude code agents, and support for Gemini and Codex is expected down the line. You can also use your own Claude API keys, as Runbooks supports both direct API access and AWS Bedrock.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What programming languages and frameworks does Runbooks support?<\/h3>\n\n\n\n<p>All of them, since Runbooks is language and framework agnostic. The only thing that matters is that your GitHub repo is connected and Runbooks can access all code.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Is there a mode for smaller, quicker tasks?<\/h3>\n\n\n\n<p>Yes. <a href=\"https:\/\/docs.aviator.co\/runbooks\/how-to-guides\/one-shot-mode\" target=\"_blank\" rel=\"noopener\" title=\"\">One-shot mode<\/a> lets the agent execute a well-scoped task from start to finish without stopping for your review at each step.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can Runbooks handle large codebases?<\/h3>\n\n\n\n<p>There are no hard limits on repository size. That said, larger codebases naturally consume more tokens. If you are working at that scale, it helps to break big tasks into smaller, more focused Runbooks rather than trying to tackle everything in one go. The <a href=\"https:\/\/docs.aviator.co\/runbooks\/concepts\/working-with-large-codebases\" target=\"_blank\" rel=\"noopener\" title=\"\">Working With Large Codebases<\/a> doc covers this in more detail.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What happens if the build or tests fail?<\/h3>\n\n\n\n<p>Runbooks will not just halt. The agent will automatically analyze the build and test output, then iterate on the changes to fix the issues.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Meet Aviator Runbooks, a Claude-powered tool that plans and runs tasks in a sandbox. You describe what you want, review the specs and let the agent execute them.<\/p>\n","protected":false},"author":48,"featured_media":5662,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[106],"tags":[311,312],"class_list":["post-5655","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai"],"blocksy_meta":[],"acf":[],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2026\/04\/Inside_Runbooks-1.png","post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/posts\/5655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/comments?post=5655"}],"version-history":[{"count":7,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/posts\/5655\/revisions"}],"predecessor-version":[{"id":5674,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/posts\/5655\/revisions\/5674"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/media\/5662"}],"wp:attachment":[{"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/media?parent=5655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/categories?post=5655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/tags?post=5655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}