Claude Code Plugins

Community-maintained marketplace

Feedback

Use when design is complete and you need detailed implementation tasks - breaks epics into coarse-grained Beans issues with TDD guidance, exact file paths, and verification steps

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name making-plans
description Use when design is complete and you need detailed implementation tasks - breaks epics into coarse-grained Beans issues with TDD guidance, exact file paths, and verification steps

Making Plans

Overview

Write comprehensive implementation plans assuming the engineer has zero context for our codebase and questionable taste. Document everything they need to know: which files to touch, code examples, testing approach, verification steps, docs they might need to check. But instead of a single big plan document, split the entire plan into bite-sized tasks, one Beans issue ("bean") per task. Each bean should represent a logical unit of work (e.g., "Implement auth middleware with TDD") with detailed guidance in the description.

Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.

Announce at start: "I'm using the making-plans skill to create implementation tasks."

⚠️ PREREQUISITE: Linear ↔ Beans Epic

BEFORE continuing, you MUST read your issue-tracking-with-beans-and-linear skill.

Before breaking down tasks, you MUST have:

  1. A Linear ticket (e.g., ZCO-123)
  2. A Beans epic referencing that ticket in its title, e.g. "ZCO-123 - "</li> </ol> <p>If either is missing, STOP and create them first. Use <code>brainstorming</code> skill if no design exists yet.</p> <h2>Task Granularity</h2> <p><strong>Each Beans issue is one logical unit:</strong></p> <ul> <li>"Implement auth middleware with TDD" — issue</li> <li>"Add user model and migrations" — issue</li> <li>"Create login endpoint with validation" — issue</li> </ul> <p><strong>Within each issue description, include step-by-step guidance:</strong></p> <ol> <li>Write the failing test</li> <li>Run it to verify failure</li> <li>Implement minimal code to pass</li> <li>Run tests to verify</li> <li>Commit</li> </ol> <h2>Beans Issue Structure</h2> <p>For each task, create a Beans issue:</p> <pre><code class="language-bash">beans create "Implement <component>" --type task --link parent:<epic-id> --body "<description>" </code></pre> <p><strong>Issue description should include:</strong></p> <pre><code class="language-markdown">**Files:** - Create: `exact/path/to/file.py` - Modify: `exact/path/to/existing.py:123-145` - Test: `tests/exact/path/to/test.py` **Steps:** 1. Write failing test: ```python def test_specific_behavior(): result = function(input) assert result == expected ``` Run: `pytest tests/path/test.py::test_name -v` Expected: FAIL 2. Implement: ```python def function(input): return expected ``` Run: `pytest tests/path/test.py::test_name -v` Expected: PASS 3. Commit: ```bash git commit -m "feat: add specific feature" -- tests/path/test.py src/path/file.py ``` **Verification:** - [ ] Tests pass - [ ] No type errors - [ ] Committed </code></pre> <h2>Remember</h2> <ul> <li>Exact file paths always</li> <li>Complete code examples (not "add validation")</li> <li>Exact commands with expected output</li> <li>Each task issue is a child of the epic</li> </ul> <h2>Execution Handoff</h2> <p>After creating all issues:</p> <pre><code class="language-bash">beans list --links parent:<epic-id> </code></pre> <p><strong>"Tasks created under epic <code><epic-id></code>. Run <code>beans list --status open</code> to see unblocked work. Want me to start implementing?"</strong></p> <p>When implementing:</p> <ul> <li><code>beans update <id> --status in-progress</code> before starting</li> <li><code>beans update <id> --status done</code> when done</li> </ul> </div> </article> </section> </div> </main> <vercel-analytics data-props="{}" data-params="{"slug":"@czottmann/claude-code-stuff/making-plans"}" data-pathname="/skills/@czottmann/claude-code-stuff/making-plans"></vercel-analytics> <script type="module">var f="@vercel/analytics",l="1.5.0",w=()=>{window.va||(window.va=function(...r){(window.vaq=window.vaq||[]).push(r)})};function d(){return typeof window<"u"}function u(){try{const e="production"}catch{}return"production"}function v(e="auto"){if(e==="auto"){window.vam=u();return}window.vam=e}function m(){return(d()?window.vam:u())||"production"}function c(){return m()==="development"}function b(e,r){if(!e||!r)return e;let n=e;try{const t=Object.entries(r);for(const[a,i]of t)if(!Array.isArray(i)){const o=s(i);o.test(n)&&(n=n.replace(o,`/[${a}]`))}for(const[a,i]of t)if(Array.isArray(i)){const o=s(i.join("/"));o.test(n)&&(n=n.replace(o,`/[...${a}]`))}return n}catch{return e}}function s(e){return new RegExp(`/${h(e)}(?=[/?#]|$)`)}function h(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function y(e){return e.scriptSrc?e.scriptSrc:c()?"https://va.vercel-scripts.com/v1/script.debug.js":e.basePath?`${e.basePath}/insights/script.js`:"/_vercel/insights/script.js"}function g(e={debug:!0}){var r;if(!d())return;v(e.mode),w(),e.beforeSend&&((r=window.va)==null||r.call(window,"beforeSend",e.beforeSend));const n=y(e);if(document.head.querySelector(`script[src*="${n}"]`))return;const t=document.createElement("script");t.src=n,t.defer=!0,t.dataset.sdkn=f+(e.framework?`/${e.framework}`:""),t.dataset.sdkv=l,e.disableAutoTrack&&(t.dataset.disableAutoTrack="1"),e.endpoint?t.dataset.endpoint=e.endpoint:e.basePath&&(t.dataset.endpoint=`${e.basePath}/insights`),e.dsn&&(t.dataset.dsn=e.dsn),t.onerror=()=>{const a=c()?"Please check if any ad blockers are enabled and try again.":"Be sure to enable Web Analytics for your project and deploy again. See https://vercel.com/docs/analytics/quickstart for more information.";console.log(`[Vercel Web Analytics] Failed to load script from ${n}. ${a}`)},c()&&e.debug===!1&&(t.dataset.debug="false"),document.head.appendChild(t)}function p({route:e,path:r}){var n;(n=window.va)==null||n.call(window,"pageview",{route:e,path:r})}function k(){try{return}catch{}}customElements.define("vercel-analytics",class extends HTMLElement{constructor(){super();try{const r=JSON.parse(this.dataset.props??"{}"),n=JSON.parse(this.dataset.params??"{}");g({...r,disableAutoTrack:!0,framework:"astro",basePath:k(),beforeSend:window.webAnalyticsBeforeSend});const t=this.dataset.pathname;p({route:b(t??"",n),path:t})}catch(r){throw new Error(`Failed to parse WebAnalytics properties: ${r}`)}}});</script> </body></html>