Communitygithub.com

plan-canvas

計画やHTMLアーティファクトをローカルブラウザで開き、人間が要素に注釈を付け、チャットし、ページから離れることなく承認または変更を要求できるようにします。計画のレビューを提示するときや、フィードバックが必要なときに使用します。

plan-canvas とは?

Plan Canvasは、AIエージェントが作成した計画やHTMLアーティファクトを人間がブラウザ上で直接レビューできるようにするスキルです。人間は、特定の要素を指し示す注釈(アノテーション)、自由形式のチャット、そして「承認」または「変更要求」の判定を、CLI呼び出し1つでエージェントに返すことができます。エージェント側は`ecc-plan-canvas await`コマンドで応答を待機し、JSON形式のフィードバックを受け取ります。このスキルは、Claude Code、Codex、Cursor、Gemini、OpenCode、Copilotなど、シェルコマンドを実行できる任意のAIエージェントと連携可能で、計画の確認ループをブラウザベースのビジュアルレビューに置き換えます。特に、Mermaid図を含む計画ドキュメントのレビューや、複数の要素に対する具体的なフィードバックが必要な場面で威力を発揮します。

対応✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/plan-canvas

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

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

ドキュメント

Plan Canvas

計画とビジュアルアーティファクトのためのレビューループ:あなたがアーティファクトを作成し、人間がブラウザでそれをレビューします。人間は、意味する正確な要素に注釈を付け、チャットし、計画を承認/変更を要求の判定を下し、その間あなたは単一のCLI呼び出しでブロックし、フィードバックをJSONとして受け取ります。

lavish-axi に触発されました。ECCネイティブとして /plan 確認ゲートを中心に再構築され、依存関係はゼロです。

使用するタイミング

  • あなたが計画アーティファクト(/plan から生成された .claude/plans/*.plan.md)を書いたばかりで、CONFIRM/承認の決定が必要な場合 — キャンバスの判定が、タイプ入力による「はい/進める」を置き換えます。
  • ユーザーが「どこを変更するか」を指し示す必要がある場合:デザイン、比較、レポート、またはローカルの .md / .html アーティファクトのレビュー。
  • ユーザーが /plan-canvas、ビジュアルレビュー、または「ブラウザで開いて」を要求した場合。

使用しない場合:差分のコードレビュー(/code-review)、実行中のWebアプリ、リモートURL。キャンバスはローカルアーティファクトファイルのみを提供します。

仕組み

CLIは ecc-plan-canvas として呼び出します — ecc-universal パッケージによって提供されるバイナリです(グローバルまたはプラグインインストール後にPATHに追加されます。プラグインインストールの場合は node "$CLAUDE_PLUGIN_ROOT/scripts/plan-canvas.js" も使用できます)。レビュー対象のプロジェクトから実行します。どのワーキングディレクトリからでも動作します。すべてのセッションで共有されるデタッチされたループバックサーバー(127.0.0.1:4517)を管理し、アーティファクトパスをキーとします — セッションIDを追跡する必要はありません。

ワークフローはプレーンなCLIとJSONのループであるため、モデルやハーネスに依存しません:シェルコマンドを実行しstdoutを読み取れるエージェントなら、同じ方法で動作します(Claude Code、Codex、Cursor、Gemini、OpenCode、Copilot)。ハーネスがスキルを公開する方法に応じてトリガーします — 例えば、Claude Codeでは /plan-canvas、Codexでは $plan-canvas — または ecc-plan-canvas コマンドを直接実行するだけです。

# 1. アーティファクトをユーザーのブラウザで開く(すぐに戻る)
ecc-plan-canvas open .claude/plans/feature.plan.md

# 2. 人間が応答するまでブロックする。実行したままにしておく;中断された場合は再実行する:
#    キューに入ったフィードバックは決して失われない。
ecc-plan-canvas await .claude/plans/feature.plan.md

リッスンし続けること、さもなければ人間は空の椅子に話しかけることになる

フィードバックがあなたに届くのは、await が実際にセッションに待機している間だけです。あなたのターンが何もリッスンしていない状態で終了すると、メッセージはキューに残り、人間の側から見ると、送信しても何も起こっていないように見えます。

そのため、ハーネスがバックグラウンドタスクをサポートしている場合は、await をバックグラウンドタスクとして実行してください(Claude Codeでは、run_in_background: true を指定したBash呼び出し)。フィードバックが到着するとすぐに終了し、ハーネスがJSONをあなたに渡します。これにより、フォアグラウンド呼び出しで終了する代わりに、ターンをまたいでループを生かし続けることができます。フォアグラウンドの await も動作しますが、ハーネスが時間制限をかけるまでです。

2つのバックストップが存在しますが、どちらも上記をスキップする言い訳にはなりません:

  • ecc-plan-canvas pending は、リスナーなしでキューに入れられたフィードバックを一覧表示します。何かを見逃したかどうかわからないときにいつでも確認してください。
  • stop:plan-canvas-pending フックは、キャンバスのフィードバックが未配信である間はあなたのターンが終了するのを防ぎ、メッセージをあなたに渡します。そのフックからフィードバックを読んでいる場合、あなたはリッスンの開始が早すぎたということです。

await は人間が行動したときにJSONを出力します:

{
  "status": "feedback",
  "items": [
    { "kind": "annotation", "text": "これを2つのフェーズに分割してください",
      "anchor": { "selector": "h2:nth-of-type(3)", "tag": "h2", "snippet": "フェーズ2: 移行" } },
    { "kind": "verdict", "verdict": "request-changes" }
  ]
}
  • kind: "chat" — 自由形式のメッセージ;キャンバス内で返信し、ターミナルでは返信しないでください。
  • kind: "annotation" — 要素にアンカーされたフィードバック(anchor.selector、anchor.snippet はユーザーが指したものを示します;ユーザーがテキスト範囲をハイライトした場合は anchor.textRange.text)。
  • kind: "verdict" — approve は計画が確認されたことを意味します:ポーリングを停止し、セッションを終了し、実装を開始します。request-changes はアーティファクトを修正する(キャンバスはライブリロードされます)ことを意味し、ループを継続します。

3. 常にキャンバス内で応答し、その後リッスンを続けます。1つのコマンドで両方を実行できます:

ecc-plan-canvas await <file> --reply "ご依頼の通り、フェーズ2を分割しました。ご確認ください。"

すべての人間のメッセージには、キャンバス内で返信します。「今すぐリスクテーブルを書き直します」のような一言でも構いません。チャットパネル内の沈黙は、壊れたキャンバスと区別がつかず、まさにこのループが防止しようとしている障害です。ターミナルだけでなく、必ずキャンバス内で応答してください。

作業中は、アクティビティインジケーターでチャットの誠実さを保ちます:

# アニメーションする「エージェントが考えています...」バブル;長時間の作業中は更新する
ecc-plan-canvas typing <file> --state thinking
# 返信が届く直前に「エージェントが入力中...」に切り替える
ecc-plan-canvas typing <file> --state typing

await は、バッチをあなたに渡した時点で thinking を設定し、--reply はそれをクリアします。両方の状態は自動的に期限切れになるため、クラッシュしたエージェントは、人間に永遠にドットを見せ続ける代わりに、誠実な「キューイング中」状態に移行します。修正に1分以上かかる場合は、thinking を更新してください。

4. レビューが終了したら 終了します:ecc-plan-canvas end <file>。

図(Mermaid)

計画の一部がフロー、アーキテクチャ、シーケンス、ステートマシン、ERモデル、または依存関係グラフである場合、ASCIIアートや散文の代わりに、フェンス付きの ```mermaid ブロックとして作成してください — キャンバスはそれをテーマ化された図としてレンダリングし、人間が指し示すことができます。画像が段落よりも速く読める場合に使用し、単純なリストやテーブルの場合は省略します。

```mermaid
flowchart LR
  A[市場が確定] --> B{ウォッチャーは?}
  B -->|はい| C[ジョブをキューに入れる] --> D[ファンアウトワーカー]
```

図はACCセントパレットを使用したECCダークテーマでレンダリングされます。Mermaidは固定CDNからブラウザにロードされます;それが利用できない場合(オフライン)、ブロックはソースを表示するように劣化するため、レビューが妨げられることはありません。エアギャップ環境で使用するには、ECC_PLAN_CANVAS_MERMAID_URL にローカルミラーを指定します。

ルール

  • MarkdownアーティファクトはECCの計画テンプレート(Mermaidブロックを含む)でレンダリングされます;.html アーティファクトはそのままレンダリングされ、注釈レイヤーが注入されます。HTML作成のガイダンスについては、frontend-design-direction および artifact-design スキルを参照してください。
  • 修正するにはアーティファクトファイルを編集します — キャンバスは保存時にライブリロードされます。更新のために open を再実行しないでください。
  • {"status": "ended", "endedBy": "user"}(またはフィードバックバッチの sessionEnded: true)は、ユーザーがレビューを閉じたことを意味します:ポーリングを停止し、残りの更新をチャットで配信し、再開しないでください。そのセッションに対する単純な open は拒否されます;ユーザーが再開を要求した場合にのみ --reopen を渡してください。
  • 関連するアセット(画像、CSS)はアーティファクトと同じ場所に配置し、相対パスで参照する必要があります。
  • サーバーはループバックのみで、30分間アイドル状態が続くと終了します(ECC_PLAN_CANVAS_IDLE_MS);stop は明示的にシャットダウンします。状態は ~/.claude/plan-canvas/(ECC_PLAN_CANVAS_STATE_DIR)に保存されます。

例

計画承認フロー — /plan が .claude/plans/notifications.plan.md を作成し、確認を待つ必要があります:

ecc-plan-canvas open .claude/plans/notifications.plan.md
ecc-plan-canvas await .claude/plans/notifications.plan.md
# → {"status":"feedback","items":[{"kind":"verdict","verdict":"approve"}]}
ecc-plan-canvas end .claude/plans/notifications.plan.md
# 計画が確認されました — 実装を開始

修正ループ — フィードバックが届き、ファイルを編集し、返信し、リッスンを続ける:

# awaitが注釈を返した → .plan.mdを編集する(キャンバスはライブリロードされる)
ecc-plan-canvas await <file> --reply "リスクテーブルをやり直しました。"
# → 次の応答まで再度ブロックされる

アンチパターン

  • --timeout-ms を使用したループでのポーリング。テスト用に存在します。代わりにプレーンな await を実行したままにしてください。
  • レビューがまだ開いている間に、リッスン中の await がない状態でターンを終了すること。これこそが、人間が「メッセージを送ったのに何も起こらなかった」と感じる唯一の障害です。
  • フィードバックを読んだが、ターミナルでのみ応答すること。人間はキャンバスを見ています。
  • ユーザー主導で終了した後に、「ちょっと見せるためだけに」再開すること。
  • 計画全体をチャットに貼り付け、かつ キャンバスを開くこと — キャンバスを選び、ターミナルの要約は1行に抑えてください。
  • 状態ファイルからキャンバスのチャットを解析すること — 必要なものはすべて await を介して届きます。

デザインノートと起源: docs/design/plan-canvas.md。

Individual skills in this repo

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

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

関連スキル