[{"data":1,"prerenderedAt":681},["ShallowReactive",2],{"blog-matt-pocock-claude-code-skills-beyond-vibe-coding":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"publishedAt":10,"tags":11,"body":17,"_type":675,"_id":676,"_source":677,"_file":678,"_stem":679,"_extension":680},"\u002Fblog\u002Fmatt-pocock-claude-code-skills-beyond-vibe-coding","blog",false,"","Beyond Vibe Coding: How Matt Pocock's Claude Code Skills Bring Discipline to AI Agents","Why uncontrolled 'vibe coding' leads to architectural rot, and how Matt Pocock's open-source skills turn AI coding agents into disciplined, test-driven software engineers.","2026-08-28",[12,13,14,15,16],"AI Agents","Claude Code","Software Engineering","TDD","Developer Tools",{"type":18,"children":19,"toc":656},"root",[20,28,33,38,64,76,92,96,103,108,138,148,151,157,162,171,176,179,201,218,230,285,290,293,306,318,330,333,346,351,369,372,384,396,430,435,438,450,462,485,488,494,507,527,532,631,634,640,645,650],{"type":21,"tag":22,"props":23,"children":24},"element","p",{},[25],{"type":26,"value":27},"text","We've all experienced the initial rush of \"vibe coding\": you prompt an AI agent with a loose idea, watch it spew 400 lines of code across six files, and feel like you've unlocked superpowers.",{"type":21,"tag":22,"props":29,"children":30},{},[31],{"type":26,"value":32},"Then reality sets in.",{"type":21,"tag":22,"props":34,"children":35},{},[36],{"type":26,"value":37},"Two hours later, you hit a subtle regression. The agent hallucinates an API, refactors a working subsystem without asking, and drifts further from your original intent with every follow-up prompt. You find yourself stuck oscillating between two extremes:",{"type":21,"tag":39,"props":40,"children":41},"ul",{},[42,54],{"type":21,"tag":43,"props":44,"children":45},"li",{},[46,52],{"type":21,"tag":47,"props":48,"children":49},"strong",{},[50],{"type":26,"value":51},"YOLO Mode",{"type":26,"value":53},": Blindly accepting every diff until the codebase becomes an untestable house of cards.",{"type":21,"tag":43,"props":55,"children":56},{},[57,62],{"type":21,"tag":47,"props":58,"children":59},{},[60],{"type":26,"value":61},"OH NO Mode",{"type":26,"value":63},": Giving up on the agent and manually rewriting everything line-by-line because guiding it feels like herding cats.",{"type":21,"tag":22,"props":65,"children":66},{},[67,69,74],{"type":26,"value":68},"This breakdown isn't a failure of the underlying model—it's a failure of ",{"type":21,"tag":47,"props":70,"children":71},{},[72],{"type":26,"value":73},"process",{"type":26,"value":75},". Real software engineering has never been about typing code as fast as possible; it’s about domain modeling, clarifying requirements, isolating vertical slices, test-driven development, and rigorous code review.",{"type":21,"tag":22,"props":77,"children":78},{},[79,81,90],{"type":26,"value":80},"Enter ",{"type":21,"tag":82,"props":83,"children":87},"a",{"href":84,"rel":85},"https:\u002F\u002Fgithub.com\u002Fmattpocock\u002Fskills",[86],"nofollow",[88],{"type":26,"value":89},"Matt Pocock's Claude Code skills",{"type":26,"value":91},"—an open-source toolkit that replaces unstructured \"vibe coding\" with disciplined, repeatable engineering workflows.",{"type":21,"tag":93,"props":94,"children":95},"hr",{},[],{"type":21,"tag":97,"props":98,"children":100},"h2",{"id":99},"what-are-agent-skills",[101],{"type":26,"value":102},"What Are Agent Skills?",{"type":21,"tag":22,"props":104,"children":105},{},[106],{"type":26,"value":107},"Rather than treating AI agents as magic code generators, agent skills package proven software engineering practices into declarative, invocable workflows.",{"type":21,"tag":22,"props":109,"children":110},{},[111,113,120,122,128,130,136],{"type":26,"value":112},"Think of skills as specialized playbooks. When you invoke a skill like ",{"type":21,"tag":114,"props":115,"children":117},"code",{"className":116},[],[118],{"type":26,"value":119},"\u002Fgrill-me",{"type":26,"value":121},", ",{"type":21,"tag":114,"props":123,"children":125},{"className":124},[],[126],{"type":26,"value":127},"\u002Ftdd",{"type":26,"value":129},", or ",{"type":21,"tag":114,"props":131,"children":133},{"className":132},[],[134],{"type":26,"value":135},"\u002Fcode-review",{"type":26,"value":137},", you aren't just sending a prompt—you are equipping the agent with a rigorous methodology, boundary constraints, and structured operational steps.",{"type":21,"tag":22,"props":139,"children":140},{},[141,143],{"type":26,"value":142},"These skills are built around a central insight: ",{"type":21,"tag":47,"props":144,"children":145},{},[146],{"type":26,"value":147},"the hardest part of building software is making decisions and eliminating ambiguity before writing code.",{"type":21,"tag":93,"props":149,"children":150},{},[],{"type":21,"tag":97,"props":152,"children":154},{"id":153},"the-5-stage-engineering-loop",[155],{"type":26,"value":156},"The 5-Stage Engineering Loop",{"type":21,"tag":22,"props":158,"children":159},{},[160],{"type":26,"value":161},"Matt Pocock's skills are architected around a structured feature development lifecycle:",{"type":21,"tag":163,"props":164,"children":166},"pre",{"code":165},"  ┌──────────────┐      ┌──────────┐      ┌─────────────┐\n  │  \u002Fgrill-me   │ ───> │ \u002Fto-spec │ ───> │ \u002Fto-tickets │\n  └──────────────┘      └──────────┘      └─────────────┘\n   (Interactive                           (Tracer bullets\n    Design Tree)                           & dependencies)\n                                                 │\n                                                 ▼\n  ┌──────────────┐                        ┌─────────────┐\n  │ \u002Fcode-review │ \u003C───────────────────── │    \u002Ftdd     │\n  └──────────────┘                        └─────────────┘\n  (Standards & Spec)                      (Red-Green-Refactor)\n",[167],{"type":21,"tag":114,"props":168,"children":169},{"__ignoreMap":7},[170],{"type":26,"value":165},{"type":21,"tag":22,"props":172,"children":173},{},[174],{"type":26,"value":175},"Let’s look at how each phase transforms the AI development experience.",{"type":21,"tag":93,"props":177,"children":178},{},[],{"type":21,"tag":180,"props":181,"children":183},"h3",{"id":182},"_1-the-grilling-phase-grill-me-grill-with-docs",[184,186,191,193,199],{"type":26,"value":185},"1. The Grilling Phase (",{"type":21,"tag":114,"props":187,"children":189},{"className":188},[],[190],{"type":26,"value":119},{"type":26,"value":192}," & ",{"type":21,"tag":114,"props":194,"children":196},{"className":195},[],[197],{"type":26,"value":198},"\u002Fgrill-with-docs",{"type":26,"value":200},")",{"type":21,"tag":22,"props":202,"children":203},{},[204,206,211,213],{"type":26,"value":205},"In traditional prompting, you give instructions and hope the agent understands. In ",{"type":21,"tag":47,"props":207,"children":208},{},[209],{"type":26,"value":210},"Grilling",{"type":26,"value":212},", the dynamic flips: ",{"type":21,"tag":47,"props":214,"children":215},{},[216],{"type":26,"value":217},"the agent interviews you.",{"type":21,"tag":22,"props":219,"children":220},{},[221,223,228],{"type":26,"value":222},"The agent models your feature as a ",{"type":21,"tag":47,"props":224,"children":225},{},[226],{"type":26,"value":227},"design tree",{"type":26,"value":229}," and traverses its decision frontier round by round:",{"type":21,"tag":39,"props":231,"children":232},{},[233,243,253],{"type":21,"tag":43,"props":234,"children":235},{},[236,241],{"type":21,"tag":47,"props":237,"children":238},{},[239],{"type":26,"value":240},"Facts are the agent's job",{"type":26,"value":242},": It inspects your filesystem, dependencies, and configuration automatically rather than asking you for details it can discover itself.",{"type":21,"tag":43,"props":244,"children":245},{},[246,251],{"type":21,"tag":47,"props":247,"children":248},{},[249],{"type":26,"value":250},"Decisions are your job",{"type":26,"value":252},": It presents the open questions on the decision frontier, provides clear multiple-choice options with a recommended default, and waits for your confirmation.",{"type":21,"tag":43,"props":254,"children":255},{},[256,267,269,275,277,283],{"type":21,"tag":47,"props":257,"children":258},{},[259,261,266],{"type":26,"value":260},"Documentation on the fly (",{"type":21,"tag":114,"props":262,"children":264},{"className":263},[],[265],{"type":26,"value":198},{"type":26,"value":200},{"type":26,"value":268},": As decisions crystallize, it records architectural decisions in ",{"type":21,"tag":114,"props":270,"children":272},{"className":271},[],[273],{"type":26,"value":274},"docs\u002Fadr\u002F",{"type":26,"value":276}," (Architecture Decision Records) and updates your domain glossary in ",{"type":21,"tag":114,"props":278,"children":280},{"className":279},[],[281],{"type":26,"value":282},"CONTEXT.md",{"type":26,"value":284},".",{"type":21,"tag":22,"props":286,"children":287},{},[288],{"type":26,"value":289},"By the time the grilling round finishes, all hidden assumptions, edge cases, and architectural trade-offs have been resolved.",{"type":21,"tag":93,"props":291,"children":292},{},[],{"type":21,"tag":180,"props":294,"children":296},{"id":295},"_2-formal-specification-to-spec",[297,299,305],{"type":26,"value":298},"2. Formal Specification (",{"type":21,"tag":114,"props":300,"children":302},{"className":301},[],[303],{"type":26,"value":304},"\u002Fto-spec",{"type":26,"value":200},{"type":21,"tag":22,"props":307,"children":308},{},[309,311,316],{"type":26,"value":310},"Once the grilling phase resolves the design tree, ",{"type":21,"tag":114,"props":312,"children":314},{"className":313},[],[315],{"type":26,"value":304},{"type":26,"value":317}," synthesizes the entire conversation into a concrete, unambiguous specification or Product Requirements Document (PRD).",{"type":21,"tag":22,"props":319,"children":320},{},[321,323,328],{"type":26,"value":322},"Crucially, it focuses purely on ",{"type":21,"tag":47,"props":324,"children":325},{},[326],{"type":26,"value":327},"requirements, behavioral contracts, and domain boundaries",{"type":26,"value":329},"—keeping premature implementation details from derailing the design.",{"type":21,"tag":93,"props":331,"children":332},{},[],{"type":21,"tag":180,"props":334,"children":336},{"id":335},"_3-vertical-slicing-to-tickets",[337,339,345],{"type":26,"value":338},"3. Vertical Slicing (",{"type":21,"tag":114,"props":340,"children":342},{"className":341},[],[343],{"type":26,"value":344},"\u002Fto-tickets",{"type":26,"value":200},{"type":21,"tag":22,"props":347,"children":348},{},[349],{"type":26,"value":350},"Monolithic prompts often cause AI agents to bite off more than they can chew, hitting token limits or losing context mid-implementation.",{"type":21,"tag":22,"props":352,"children":353},{},[354,359,361,367],{"type":21,"tag":114,"props":355,"children":357},{"className":356},[],[358],{"type":26,"value":344},{"type":26,"value":360}," decomposes the specification into \"tracer-bullet\" tickets. Each ticket represents a thin, end-to-end vertical slice of functionality with explicit dependency tracking (e.g., using GitHub's native issue dependencies via the ",{"type":21,"tag":114,"props":362,"children":364},{"className":363},[],[365],{"type":26,"value":366},"gh",{"type":26,"value":368}," CLI). The agent only tackles tickets whose dependencies are completely closed.",{"type":21,"tag":93,"props":370,"children":371},{},[],{"type":21,"tag":180,"props":373,"children":375},{"id":374},"_4-verified-execution-tdd",[376,378,383],{"type":26,"value":377},"4. Verified Execution (",{"type":21,"tag":114,"props":379,"children":381},{"className":380},[],[382],{"type":26,"value":127},{"type":26,"value":200},{"type":21,"tag":22,"props":385,"children":386},{},[387,389,394],{"type":26,"value":388},"When it is time to code, the agent doesn't guess—it follows strict ",{"type":21,"tag":47,"props":390,"children":391},{},[392],{"type":26,"value":393},"Test-Driven Development",{"type":26,"value":395},":",{"type":21,"tag":397,"props":398,"children":399},"ol",{},[400,410,420],{"type":21,"tag":43,"props":401,"children":402},{},[403,408],{"type":21,"tag":47,"props":404,"children":405},{},[406],{"type":26,"value":407},"Red",{"type":26,"value":409},": Write a minimal, failing unit or integration test that asserts the required behavior.",{"type":21,"tag":43,"props":411,"children":412},{},[413,418],{"type":21,"tag":47,"props":414,"children":415},{},[416],{"type":26,"value":417},"Green",{"type":26,"value":419},": Write the leanest implementation necessary to pass the test.",{"type":21,"tag":43,"props":421,"children":422},{},[423,428],{"type":21,"tag":47,"props":424,"children":425},{},[426],{"type":26,"value":427},"Refactor",{"type":26,"value":429},": Clean up the implementation while keeping all tests passing.",{"type":21,"tag":22,"props":431,"children":432},{},[433],{"type":26,"value":434},"By anchoring every implementation step in automated verification, hallucinations and silent regressions are caught immediately.",{"type":21,"tag":93,"props":436,"children":437},{},[],{"type":21,"tag":180,"props":439,"children":441},{"id":440},"_5-dual-axis-review-code-review",[442,444,449],{"type":26,"value":443},"5. Dual-Axis Review (",{"type":21,"tag":114,"props":445,"children":447},{"className":446},[],[448],{"type":26,"value":135},{"type":26,"value":200},{"type":21,"tag":22,"props":451,"children":452},{},[453,455,460],{"type":26,"value":454},"Before work is merged, ",{"type":21,"tag":114,"props":456,"children":458},{"className":457},[],[459],{"type":26,"value":135},{"type":26,"value":461}," spins up parallel review processes evaluating two distinct axes:",{"type":21,"tag":39,"props":463,"children":464},{},[465,475],{"type":21,"tag":43,"props":466,"children":467},{},[468,473],{"type":21,"tag":47,"props":469,"children":470},{},[471],{"type":26,"value":472},"Standards",{"type":26,"value":474},": Does the new code follow the repo's documented coding standards and refactoring principles (inspired by Martin Fowler's clean architecture)?",{"type":21,"tag":43,"props":476,"children":477},{},[478,483],{"type":21,"tag":47,"props":479,"children":480},{},[481],{"type":26,"value":482},"Spec",{"type":26,"value":484},": Does the implementation faithfully satisfy every requirement outlined in the original issue\u002Fspec?",{"type":21,"tag":93,"props":486,"children":487},{},[],{"type":21,"tag":97,"props":489,"children":491},{"id":490},"setting-it-up-in-your-repo",[492],{"type":26,"value":493},"Setting It Up in Your Repo",{"type":21,"tag":22,"props":495,"children":496},{},[497,499,505],{"type":26,"value":498},"Getting started is lightweight. You can install the skills via your agent tooling (or clone them into ",{"type":21,"tag":114,"props":500,"children":502},{"className":501},[],[503],{"type":26,"value":504},".agents\u002Fskills\u002F",{"type":26,"value":506},"), then run the initialization command:",{"type":21,"tag":163,"props":508,"children":512},{"code":509,"language":510,"meta":7,"className":511,"style":7},"\u002Fsetup-matt-pocock-skills\n","bash","language-bash shiki shiki-themes github-light github-dark",[513],{"type":21,"tag":114,"props":514,"children":515},{"__ignoreMap":7},[516],{"type":21,"tag":517,"props":518,"children":521},"span",{"class":519,"line":520},"line",1,[522],{"type":21,"tag":517,"props":523,"children":525},{"style":524},"--shiki-default:#6F42C1;--shiki-dark:#B392F0",[526],{"type":26,"value":509},{"type":21,"tag":22,"props":528,"children":529},{},[530],{"type":26,"value":531},"This interactive setup scaffolds your repository's agent configuration:",{"type":21,"tag":397,"props":533,"children":534},{},[535,568,607],{"type":21,"tag":43,"props":536,"children":537},{},[538,543,545,550,552,558,560,566],{"type":21,"tag":47,"props":539,"children":540},{},[541],{"type":26,"value":542},"Issue Tracker",{"type":26,"value":544},": Connects the skills to GitHub Issues (",{"type":21,"tag":114,"props":546,"children":548},{"className":547},[],[549],{"type":26,"value":366},{"type":26,"value":551},"), GitLab (",{"type":21,"tag":114,"props":553,"children":555},{"className":554},[],[556],{"type":26,"value":557},"glab",{"type":26,"value":559},"), or local ",{"type":21,"tag":114,"props":561,"children":563},{"className":562},[],[564],{"type":26,"value":565},".scratch\u002F",{"type":26,"value":567}," markdown files.",{"type":21,"tag":43,"props":569,"children":570},{},[571,576,578,584,585,591,592,598,599,605],{"type":21,"tag":47,"props":572,"children":573},{},[574],{"type":26,"value":575},"Triage Labels",{"type":26,"value":577},": Configures the canonical label vocabulary (",{"type":21,"tag":114,"props":579,"children":581},{"className":580},[],[582],{"type":26,"value":583},"needs-triage",{"type":26,"value":121},{"type":21,"tag":114,"props":586,"children":588},{"className":587},[],[589],{"type":26,"value":590},"ready-for-agent",{"type":26,"value":121},{"type":21,"tag":114,"props":593,"children":595},{"className":594},[],[596],{"type":26,"value":597},"ready-for-human",{"type":26,"value":121},{"type":21,"tag":114,"props":600,"children":602},{"className":601},[],[603],{"type":26,"value":604},"wontfix",{"type":26,"value":606},").",{"type":21,"tag":43,"props":608,"children":609},{},[610,615,617,622,624,629],{"type":21,"tag":47,"props":611,"children":612},{},[613],{"type":26,"value":614},"Domain Documentation",{"type":26,"value":616},": Establishes ",{"type":21,"tag":114,"props":618,"children":620},{"className":619},[],[621],{"type":26,"value":282},{"type":26,"value":623}," and ",{"type":21,"tag":114,"props":625,"children":627},{"className":626},[],[628],{"type":26,"value":274},{"type":26,"value":630}," conventions so future agent sessions maintain complete architectural continuity.",{"type":21,"tag":93,"props":632,"children":633},{},[],{"type":21,"tag":97,"props":635,"children":637},{"id":636},"the-verdict-craftsmanship-over-chaos",[638],{"type":26,"value":639},"The Verdict: Craftsmanship Over Chaos",{"type":21,"tag":22,"props":641,"children":642},{},[643],{"type":26,"value":644},"AI coding agents are only as reliable as the guardrails we give them. Unstructured prompts produce quick prototypes that quickly degrade into unmaintainable legacy code.",{"type":21,"tag":22,"props":646,"children":647},{},[648],{"type":26,"value":649},"By combining interactive grilling, tracer-bullet ticketing, and test-driven development, Matt Pocock's skills demonstrate what the future of AI-assisted engineering actually looks like: not the replacement of software engineering principles, but their ultimate amplification.",{"type":21,"tag":651,"props":652,"children":653},"style",{},[654],{"type":26,"value":655},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":7,"searchDepth":657,"depth":657,"links":658},2,[659,660,673,674],{"id":99,"depth":657,"text":102},{"id":153,"depth":657,"text":156,"children":661},[662,665,667,669,671],{"id":182,"depth":663,"text":664},3,"1. The Grilling Phase (\u002Fgrill-me & \u002Fgrill-with-docs)",{"id":295,"depth":663,"text":666},"2. Formal Specification (\u002Fto-spec)",{"id":335,"depth":663,"text":668},"3. Vertical Slicing (\u002Fto-tickets)",{"id":374,"depth":663,"text":670},"4. Verified Execution (\u002Ftdd)",{"id":440,"depth":663,"text":672},"5. Dual-Axis Review (\u002Fcode-review)",{"id":490,"depth":657,"text":493},{"id":636,"depth":657,"text":639},"markdown","content:blog:matt-pocock-claude-code-skills-beyond-vibe-coding.md","content","blog\u002Fmatt-pocock-claude-code-skills-beyond-vibe-coding.md","blog\u002Fmatt-pocock-claude-code-skills-beyond-vibe-coding","md",1787943483797]