Communitygithub.com

レゴ計画

決定済みの変更を、シンプルなプリミティブから実動機能へと積み上げる階層化DAG(有向非巡回グラフ)に変換します。計画のみを行い、その後は停止します。

レゴ計画 とは?

このスキルは、あらかじめ決定された変更(「何を作るか」が確定している変更)を、サブエージェントが独立して実行できる小さなブロックに分割し、依存関係を明確にしたDAG(有向非巡回グラフ)として可視化します。各ブロックは「レイヤー」に分類され、同じレイヤー内のブロックは並行実行が可能です。この計画はチャット上でMermaid図とJSON形式で表示され、さらに`.agent/scratch/lego-plan.json`としてファイルにも保存されるため、後続のドライバーエージェントが進捗状況を追跡・更新できます。このスキルの最大の特徴は「計画のみ」に徹することです。コードの実装、テストの作成、サブエージェントの起動、他のスキルの呼び出しはいっさい行いません。設計思想は「監視可能なアトミックな単位への分割」であり、各ノードは他の進行中のノードを待たずに独立して実装・テスト可能でなければなりません。同じファイルを編集するノードは同じレイヤーに置かず、依存関係にサイクルが発生するノードはさらに分割するといった厳格なルールが、並行作業の衝突を防止します。主な使用プラットフォームはClaude Code, Cursor, CodexなどのAIエージェントツールです。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AlemTuzlak/skills/tree/HEAD/skills/lego-plan

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

レゴ計画 は何をしますか?

決定済みの変更を、シンプルなプリミティブから実動機能へと積み上げる階層化DAGに変換します。計画のみ。その後は停止します。

グラフはピラミッド構造です。最下層に独立したブロック、その上に合成されたブロック、そして1つの完了ノードが最上位にあります。後続のドライバーは、同じレイヤーのノードを並行実行したり、statusを切り替えたり、このグラフを再描画できます。このスキルはサブエージェントを起動しません。他のスキルをロードしません。

使用するタイミング

決定済みの変更を、ドライバーが従える実装マップに変換する作業が発生したらロードします。

  • 必要なとき: 構築するものがすでに選択されている場合。この会話内にすでにファイルリストやパスの選定がある場合はそれを使用します。ない場合は、確定した意図とコードから導出します。第二のシステムマップを発明してはいけません。
  • スキップ: タイプミス、コメント、フォーマット、コードを伴わないドキュメント。
  • 意図がまだ確定していない場合: 停止します。変更が確定するまで質問します。選択されていない機能のためにブロックを積み上げてはいけません。

ノードが1つだけでもDAGです。完全な契約を出力します。

厳格なゲート

  1. 計画のみ。 プロダクションコードを書かないでください。テストを書かないでください。done whenにチェック方法を記述し、ここで実装しないでください。
  2. 出力後に停止。 チャットのDAGとスクラッチファイルのみ。サブエージェントを起動しないでください。次のスキルをロードしないでください。
  3. サイクル禁止。 ブロックが後続のブロックに依存している場合、分割が間違っています。再分割してください。
  4. 承認を待たない。 DAGを表示して停止します。間違っている場合はユーザーが割り込みます。
  5. ユーザーにスクラッチファイルを開かないでください。docs/以下に計画を書き込まないでください。

ノードの粒度

グラフノード(並行単位): サブエージェントが他の進行中のノードを待たずに所有できる、独立した出荷可能なプリミティブ。

例:write fetchOrder、write OrderCard、wire fetchOrder into the loader。

大きすぎる例:implement auth。分割してください。小さすぎる例:rename a variable。それを必要とするノードに統合してください。

パーツ(ノード内部): そのノードがコンパイルできるようにするために一緒に実装されなければならない関数群。1つのサブエージェントがパーツを順番に実行します。パーツをファンアウトしてはいけません。

ノード fetch-order の例:

  • files: src/fetchOrder.ts, src/fetchOrder.test.ts
  • parts: Order 型、次に fetchOrder、次に src/fetchOrder.test.ts を書くか拡張する
  • これらのパーツは別々のグラフノードではありません

グラフの形状

  • レイヤー0: depends on: none のノード。ドライバーはこれらすべてを並行実行できます。
  • レイヤーN: 依存関係がすべて前のレイヤーにあるノード。
  • 最終レイヤー: 機能がエンドツーエンドで動作することを意味する1つのノード(または密接に関連したセット)。
  • 相互に依存しない2つのノードは同じレイヤーを共有する(または互いに待たないレイヤーに配置する)必要があります。
  • depends on はノードIDのリストであり、ファイル名ではありません。

同一ファイル: 2つのノードが同じパスを作成または編集する場合、それらは同じレイヤーを共有してはいけません。マージするか、depends on のエッジを追加して一方を待たせてください。並行実行のためにファイルを分割してはいけません。パスを読み取り専用で使用する2つのノードは同じレイヤーを共有できます。files は作成または編集するパスのみをリストします。同一ファイルルールにはテストファイルも含まれます。

ノードのフィールド

すべてのノードは以下の7つのフィールドを持ちます:

  1. id: ケバブケース。この計画内で一意で、安定している(後続のドライバーがこのIDを完了としてマークします)。
  2. name: 短い英語の名前。
  3. depends on: 他のID、または none。
  4. files: 作成または編集するパス。done when のテストパスを含めてください。
  5. parts: 順序付きリスト。最後のパーツはそのテストを書くか拡張します。done when が手動チェックでテストファイルがない場合、最後のパーツはそのチェックであり、files にはテストパスは含まれません。
  6. done when: ドライバーが依存ノードを開始する前に実行できるテストファイルまたはコマンド。
  7. status: このスキルは常に pending と書きます。後続のドライバーが in-progress または done を設定できます。このスキルはこれらの2つを書きません。

計画に完全なソースコードを入れないでください。

ライブボード

パス: <repo>/.agent/scratch/lego-plan.json

チャットのフェンスと同じJSON。エージェントはこのファイルに従います。ユーザー向けの成果物はチャットの図です。

  • 必要に応じて .agent/scratch/ を作成します。
  • 常に上書きします。既存のノードが in-progress または done であっても、尋ねないでください。
  • リポジトリにgitがある場合、.gitignore に .agent/scratch/ が含まれていることを確認します。.gitignore が存在し行がない場合は追記します。.gitignore がない場合はその1行だけを含むファイルを作成します。
  • ファイルを開かないでください。チャットに2番目のコピーとしてダンプしないでください。JSONフェンスがユーザーが見るコピーです。

手順

手順 1: 決定済みの変更を確認する

  1. 変更が明確であれば続行します。
  2. ユーザーがまだ何を望むか選択している場合は、停止します。質問します。決定後にここに戻ります。

手順 2: セッション内の入力を収集する

  1. この会話にすでに完了ラインのファイルリスト、パーツ、またはパスの選定がある場合は、それらを開始セットとして使用します。
  2. ない場合は、決定済みの意図と、ファイルに名前を付けるために読む必要のあるコードからブロックを導出します。リポジトリ全体をツアーしないでください。

手順 3: ノードとパーツに分割する

  1. 候補となるプリミティブ(B粒度)をリストします。
  2. 各プリミティブについて、一緒にコンパイルする必要があるCパーツをリストします。最後にテストを書くか拡張する(または手動チェック)で終わります。
  3. depends on を描画します。ノードは、そのノードの結果を呼び出すか埋め込む場合にのみ、別のノードに依存します。
  4. 依存関係からレイヤーを割り当てます。独立したノード→同じレイヤー。
  5. 2つのノードが同じパスを作成または編集し、同じレイヤーを共有する場合、マージするかエッジを追加します。その後、再レイヤリングします。
  6. サイクルが発生した場合、間違ったノードを分割し、この手順を繰り返します。

手順 4: 各ノードに入力する

7つのフィールドを入力します。すべてのノードで status は pending です。

手順 5: チャットでDAGを表示する

以下の順序で表示します:

  1. レイヤー: レイヤー0から最終レイヤーまで。各レイヤーの下に、そのレイヤーのノード。
  2. ノード: 各IDの7つのフィールド。
  3. Mermaid: 常に。1つの flowchart(または graph TD)。図内のノードIDは計画IDと一致している必要があります。classDef は使用しません。ステータスの色は使用しません。すべてのノードはpendingです。
  4. JSONフェンス: ライブボードオブジェクトを含む json ブロック。ID、依存関係、ファイル、パーツ、doneWhen、status の信頼できる情報源。レイヤーは depends から導出されます。layer フィールドは保存しないでください。

次に手順6に進みます。

Mermaid形式:

flowchart TD
  fetch-order[fetch-order]
  order-card[order-card]
  wire-loader[wire-loader]
  fetch-order --> wire-loader
  order-card --> wire-loader

同じレイヤーのノード間にはエッジがありません。

JSON形式:

{
  "version": 1,
  "nodes": [
    {
      "id": "fetch-order",
      "name": "fetch order",
      "depends": [],
      "files": ["src/fetchOrder.ts", "src/fetchOrder.test.ts"],
      "parts": ["Order type", "fetchOrder", "write or extend src/fetchOrder.test.ts"],
      "doneWhen": "pnpm test src/fetchOrder.test.ts",
      "status": "pending"
    }
  ]
}

depends はIDの配列です。空はなしを意味します。

手順 6: ライブボードを書き込む

  1. 同じJSONを .agent/scratch/lego-plan.json に書き込みます(上書き)。
  2. ライブボードの説明に従い、.gitignore が .agent/scratch/ を無視することを確認します。
  3. ファイルを開かないでください。

手順 7: 停止

手順6の後、停止します。コードを書かないでください。サブエージェントを起動しないでください。他のスキルをロードしないでください。

決定木

  • 意図が確定していない → 手順1。
  • 決定済みの変更、実装マップが必要 → 手順2 → 3 → 4 → 5 → 6 → 7。
  • ノードが1つ → それでも手順2 → 7(完全な契約)。
  • タイプミス / フォーマット / ドキュメントのみ → このスキルは適用されません。
  • 依存関係にサイクル → 手順3のステップ6。
  • 同じレイヤーの2つのノードが同じパスを編集 → 手順3のステップ5。
  • ノードが「機能全体を実装」 → 分割(手順3)。

レッドフラグ

信号意味代わりにするべきこと
このスキルでfetch関数を書いている計画が実装になってしまった手順7。停止。
レイヤーのない1つの線形リストファンアウトできない独立したノードを同じレイヤーに配置する。
ここからサブエージェントを起動リーフがドライバーになってしまった手順7。停止。
MermaidのIDがノードIDと異なるドライバーが完了をマークできない両方の場所で同じケバブケースIDを使用する。
JSONフェンスがスクラッチファイルと異なる2つの情報源1つのオブジェクトを書き、両方にコピーする。
サイクル(a → b → a)分割が間違っている分割して再レイヤリングする。
同じレイヤーの2つのノードが order.ts を編集並行書き込みの衝突マージするか、depends on のエッジを追加する。
2つのノードを並行実行するためにファイルを分割要求されていない設計ファイルを維持し、ノードを順序付ける。
テストパスが files / 最後のパーツにないノードが出荷可能でない手順3のステップ2。
計画Mermaidに classDef やステータスの色があるこのスキルが進捗を描いているスタイルなし。すべてpending。
1つのノードのパーツが、単独ではコンパイルできない並列ノードに分割されているCがBとして扱われているそれらのパーツを1つのノード内に保持する。
1つのノードとしての「Implement auth」大きすぎるプリミティブに分割する。
「looks good?」と待つゲートは表示して停止出力して停止する。
スクラッチファイルの上書き前に確認を求めるライブボードは1つのスロット手順6。上書き。
.agent/scratch/lego-plan.json を開くユーザー向けの余分なものチャットのみ。ファイルはエージェント用。
docs/lego-plan.md を書く余分なアーティファクトチャット+スクラッチ。docsの計画ファイルはなし。

エラーハンドリング

  • セッションにファイルリストがない: 意図と対象を絞った読み取りから導出します。ファイルに名前を付けられない場合は、停止して何が不足しているかを伝えます。パスを発明しないでください。
  • サイクル: IDでサイクルを報告します。分割します。手順3を再実行します。循環Mermaidを計画として表示しないでください。
  • 最終レイヤーが機能を意味しない: 構成されたピース(ワイヤーアップ)に依存する完了ノードを追加するか、現在の最終レイヤーがすでにエンドツーエンドのパスである理由を説明します。
  • ユーザーがノードが間違っていると割り込む: そのノードと、それを指していたすべての depends on を編集します。ノードがまだ存在する場合はIDを安定に保ちます。ノードを削除する場合は、MermaidとJSONからも削除します。スクラッチファイルを上書きします。DAGを再度表示します。停止します。
  • done when があいまい(「it works」): コマンドまたはテストパスに置き換えます。プロジェクトにまだテストコマンドがない場合は、手動チェックを1行で命名します。最後のパーツはそのチェックです。
  • gitリポジトリでない: ワークスペースが書き込み可能であれば、それでも .agent/scratch/lego-plan.json を書き込みます。gitignoreの手順はスキップします。1行でチャットに伝えます。
  • スクラッチ書き込みに失敗(権限、ディスク): それでもチャットのDAGとJSONフェンスを表示します。ライブボードが書き込まれなかったことを伝えます。ファイルが存在するふりをしないでください。
  • 既存のスクラッチJSONが無効または実行中: 上書きします。マージしないでください。質問しないでください。

Individual skills in this repo

This repo contains 14 individual skills — each has its own dedicated page.

AlemTuzlak/skills

Use when the user wants to write a blog post about a feature, product change, PR, git diff, or any technical topic - accepts marketing briefs, PRs, git refs, codebase paths, or freeform descriptions as input

AlemTuzlak/skills

Use when the user wants to generate a changelog, release notes, or document what changed between versions, tags, or PRs

AlemTuzlak/skills

Use when writing, editing, or organizing documentation, when planning what docs a feature needs, and whenever planning or implementing a new feature or change in a repo (docs ship with the code). Also use when tempted to write docs without showing the discovered readers to the user, without asking for tone, or without loading simple-english and i-have-adhd. Triggers on "write docs for X", "document this feature", "add a guide", "update the docs", "reorganize the docs", "plan feature X", "implement X", or /docs.

AlemTuzlak/skills

Use when a bug is in play: a test fails, CI is red, an API returns the wrong result, a stack trace appears, or the user says it is broken or fix this. Don't use for a new feature with no failure, for types-only work, or for docs.

AlemTuzlak/skills

Use when the user invokes /i-have-adhd, says they have ADHD, or asks for ADHD-friendly output. Also used as a required writing filter by the docs skill. Don't use for marketing copy or after the user says "stop adhd mode" or "normal mode".

AlemTuzlak/skills

Use when the user wants to write a product update email, feature announcement newsletter, or digest email for users or subscribers

AlemTuzlak/skills

Use when the user wants to turn a raw talking-head / screen-share recording into a finished, edited, annotated video plus a full content package. Removes silences, flags mistakes for the user to cut, transcribes, adds transcript-synced overlays (code, on-screen code highlights, word highlights, lists, comparisons, diagrams, section labels, punch-in zooms), renders with original audio, then generates blog/socials/YouTube content. Triggers on "produce a video", "edit my video", "annotate my recording", "/produce-video".

AlemTuzlak/skills

Use when the user runs /prove-it or says prove it, prove the changes, show me in the browser, or asks to prove a UI or API change. Don't use only because the agent is about to say done, for types-only work, or for docs with no behavior to prove.

AlemTuzlak/skills

Use when the user wants to write, draft, or author an RFC (Request for Comments) / technical design doc for a feature, change, or architectural decision. Interactively interviews the user, grounds the proposal in the actual codebase, presents 2-3 concrete API/code-snippet approaches to choose from, then writes a review-ready RFC. Triggers on "write an RFC", "draft an RFC", "RFC for X", "design doc for X", or /rfc.

AlemTuzlak/skills

Use when the user wants to deeply learn a new topic from scratch. Runs a pre-interview (current knowledge, end-goal proficiency, depth, practice load, background, scope), researches online (articles, niche-influencer blogs, canonical docs, subtopic landscape), then produces a structured markdown course with mandatory visual diagrams, evidence-based learning-science features (retrieval practice, spaced callbacks, worked-example fading, concept ledger, jargon gate, analogy hygiene), and a self-contained interactive HTML mini-course. Triggers on /teach-me, "teach me about X", "I want to learn X", "deep dive on X", "create a course on X", "study X with me".

AlemTuzlak/skills

Use when the change intent is already settled and the agent must map what a behavior change touches before an implementation plan or any code. Use for new features, bug fixes, and refactors that move a boundary. Don't use for typos, comments, formatting, lockfile-only diffs, docs with no code, or while the user is still deciding what they want.

AlemTuzlak/skills

Use when the user wants to transcribe a video or audio file to text with word-level timestamps — spins up a self-contained local Whisper (whisper.cpp) Docker service bundled in this skill and returns transcript.txt, transcript.srt, and word-level transcript.words.json. Also used as a building block by /produce-video. Triggers on "transcribe this video", "get a transcript", "transcribe-video".

AlemTuzlak/skills

Use when the user wants to write a video script for a product demo, feature walkthrough, launch video, or social media video about a feature or product change

AlemTuzlak/skills

Use when the user wants YouTube metadata for a video — a click-worthy title, an SEO/above-the-fold description, tags, and timestamped chapters. Accepts a transcript (ideally timestamped SRT), a topic, a PR, or a freeform description. Used standalone and by /produce-video. Triggers on "youtube title", "youtube description", "youtube chapters", "youtube tags", "youtube metadata", "youtube-copy".

関連スキル