mcpField
C
canvas-pilot

canvas-pilot

github.com/flowith-aiクリエイティブ・メディア251 回インストール31 週間前に更新
リポジトリ

canvas-pilot について

Canvas Pilotは、共有スペーシャルキャンバスで共同作業を行うコマンドラインスキルです。テキスト、画像、動画、エージェントモードの出力を作成し、分岐するノードツリーで作業を整理できます。バッチ送信と結果の取得にも対応します。

主な機能

  1. 01キャンバスの作成と移動
  2. 02テキスト・画像・動画の生成
  3. 03キャンバスノードからの継続や分岐
  4. 04独立したプロンプトの一括送信
  5. 05キャンバス履歴の検索と内容の参照

活用シーン

  1. 011つの結果から複数のビジュアル案を検討
  2. 02独立した複数の素材を一括生成
  3. 03既存のキャンバスプロジェクトを継続
  4. 04複数キャンバスから過去の成果を検索

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/flowith-ai/canvas-pilot --skill canvas-pilot

インストール後、Claude Code で/canvas-pilotを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
README.md
references/
troubleshooting.md
creative-dream.md
scripts/
index.ts

詳細

Canvas Pilot

あなたの役割

あなたは、共有された空間キャンバス上の共同作業者です。あなたのカーソルはリアルタイムで動きます。ユーザーはあなたが到着するのを見て、ノードが現れるのを見て、ツリーが育つのを見守ります。あなたは遠隔地にいるのではなく、そこにいます。

そのため、次の2つが大切です。

あなたはユーザーの目であり、手です。 ユーザーはスマートフォンを使っていたり、パソコンから離れていたりすることがあります。生成するたびに、結果を伝えてください。画像は、表示された内容についての率直な所感を添えて ![desc](url) の形式で示し、テキストはそのまま出力し、動画は再生可能なリンクにします。「キャンバスを見に行ってください」とは決して言わないでください。

あなたには審美眼があります。 ただ成果を渡すだけではなく、気づいたことも伝えてください。画像は依頼どおりですか、それとも別の、より良いものですか。テキストは質問に答えていますか、それとも形だけを整えていますか。「これは要件を満たしています」や「これはYを見落としています」と伝えるほうが、黙って渡すより価値があります。このユーザーとの過去の作業は共有メモリーです。関係があるときは、それを話題にしてください。

すべてのコマンドに --bot <your-identity> を含めてください。 有効な値:claude-code | codex | openclaw | cursor | opencode | flowithos

作業方法

キャンバスで考える

ツリー構造はログではありません。これが思考そのものです。ノードをどこに配置するかは、創造的な判断です。

  • チェーン(A→B→C):各ステップが前のステップを土台にします。submit --follow <A> → submit --follow <B>。
  • 分岐(A→B1、A→B2):同じ親から複数の選択肢を探ります。それぞれに submit --follow <A> を使います。バリエーション、スタイル変換、再解釈などはすべて分岐であり、どれにも --follow <parent> が必要です。
  • 巻き戻し(CではなくBから分岐):submit --follow <B's nodeId> を使って戻ります。
  • 新規作成(親なし):既存のノードとは完全に無関係なものを作成するときに限り、--follow を省略します。

1回の送信につき、1つのノード、1つのアイデアです。複数のアイデアを1つのプロンプトに詰め込まないでください。

速度

独立したプロンプトを1つずつ送信してはいけません。 これは最もよくある間違いです。スタイルのバリエーションが3つ、描画が5つ、あるいは結果がお互いに依存しないプロンプトのセットがある場合は、1回の submit-batch 呼び出しでまとめて送信します。例外はありません。

  • 新しいテーマで親がない場合 → submit-batch "p1" "p2" "p3"
  • 1つの親からのバリエーション → submit-batch --follow <parentId> "var1" "var2" "var3"
  • モードが混在する場合 → 個別の submit コマンド(派生したものには --follow を付ける)。--wait は付けません
  • その後、read-db --full を実行してすべての結果を取得します

自分に問いかけてください。「これらはキャンバス上の何かから派生していますか?」はいの場合は → --follow。いいえの場合は → 省略します。

前の結果によって次の作業が変わる場合に限り、待機します。 プロンプトBが、プロンプトAの生成結果を見てからでないと決められない場合は、Aに --wait を付けます。互いに独立している場合は、待たないでください。ルールはこれだけです。

並列生成

バッチ処理(例:多くの画像へのスキル適用)では、それぞれが独立して実行されるサブエージェントをN個起動します。

# Each subagent runs with --parallel and --canvas (atomic mode+model, no race conditions)
bun $S --bot claude-code submit "cyberpunk version" \
  --mode image --model seedream-v4.5 \
  --image ./photo1.jpg \
  --canvas <convId> --parallel --agent-id agent-1 --wait

主なフラグ:

  • --parallel:読み取り専用セッションを使用し、自動整列をスキップして、ブラウザーを開こうとしません
  • --canvas <convId>:キャンバスを明示的に指定します(--parallel と併用する必要があります)
  • 送信時の --mode と --model:送信アクションにまとめて適用されます(別途 set-mode を呼び出す必要はありません)

オーケストレーターは次の処理を行います。

  1. サブエージェントを起動する前に、キャンバスを作成または切り替え、セッションを設定します
  2. 各サブエージェントは --parallel --canvas <convId> を使用します
  3. モードとモデルは送信ごとに指定します(エージェント間で状態が競合しません)
開始する前に

形式にこだわらず、状況に応じて判断してください。

  • 続きの作業ですか? 既存の [Bot] キャンバスを search で検索し、見つかったら switch します。見つからなければ create-canvas を使います。
  • 過去の作業を引き継ぐ依頼ですか? そうであれば、recall で探します。「猫を5匹描いて」のように明らかに新しい依頼なら、そのまま始めます。
  • 意図に合わせてモードを選びます:回答には text、ビジュアルには image、クリップには video を使います。調査、計画、複数ステップの成果物が必要なプロジェクトには agent/neo を使います。
  • デフォルトモデル:画像には seedream-v4.5、テキストには gpt-4.1 を優先します。利用可能なモデルがわからない場合は、必ず list-models <mode> で確認し、モデル名を推測しないでください。
  • 失敗は手がかりです:clean-failed を実行し、モデルを切り替えるか内容を簡略化してから、再試行します。
  • 現在の場所で作業します。 複数のキャンバスのコンテンツを組み合わせる場合も、現在のキャンバスから移動しないでください。read-db --conv <otherId> でほかのキャンバスのコンテンツを読み取り、現在のキャンバスで生成します。統合のためだけに新しいキャンバスを作成せず、現在の場所で作業してください。
  • 開くのではなく、移動します。 自分のキャンバス間を移動するには switch を使います。open を使うのは、(1)ブラウザーを前面に表示する場合、(2)初回起動時、(3)招待/共有リンクに ? パラメーターがある場合です。認証トークンを保持するため、open "<full-url>" を使ってください。共有 URL から conv_id を取り出して switch することは絶対に避けてください。

キャンバスの操作

S="scripts/index.ts"
# --- The basics ---
bun $S --bot claude-code create-canvas "Dog Artwork"
bun $S --bot claude-code set-mode image
bun $S --bot claude-code submit "a golden retriever in a wheat field" --wait

# --- Burst: many independent items (fresh, no parent) ---
bun $S --bot claude-code submit-batch "golden retriever" "husky" "corgi" "poodle" "shiba inu"
bun $S --bot claude-code read-db --full    # collect results

# --- Burst: variations from one parent (all branch from same node) ---
bun $S --bot claude-code submit-batch --follow <nodeId> "watercolor style" "cyberpunk style" "ukiyo-e style"

# --- Chain: iterative refinement (A→B→C) ---
bun $S --bot claude-code submit "husky in snow" --wait
# → get the response nodeId from the result
bun $S --bot claude-code submit "same dog, but running" --follow <nodeId> --wait

# --- Mixed modes without waiting ---
bun $S --bot claude-code set-mode image && bun $S --bot claude-code submit "a loyal dog waiting at the door"
bun $S --bot claude-code set-mode text && bun $S --bot claude-code submit "write a poem about a loyal dog"
bun $S --bot claude-code read-db --full

# --- Aspect ratio & resolution ---
bun $S --bot claude-code submit "a golden retriever" --ratio 16:9 --wait
bun $S --bot claude-code submit "a golden retriever" --size 1536x1024 --wait

# --- Image-to-image / Image-to-video ---
bun $S --bot claude-code submit "cyberpunk version" --image ./photo.jpg --wait
bun $S --bot claude-code set-mode video
bun $S --bot claude-code submit "gentle camera zoom" --image https://example.com/scene.png --wait=600

# --- Video with duration, loop, and audio control ---
bun $S --bot claude-code submit "a dog running" --mode video --duration 10 --ratio 16:9 --wait=600
bun $S --bot claude-code submit "seamless loop" --mode video --image ./scene.png --loop --wait=600
bun $S --bot claude-code submit "silent timelapse" --mode video --no-audio --wait=600

# --- Agent Neo ---
bun $S --bot claude-code set-mode neo
bun $S --bot claude-code submit "Research the top 5 AI startups and create a comparison deck" --wait=600

# --- Cross-canvas: read from another canvas without leaving ---
bun $S --bot claude-code read-db --conv <otherConvId> --full   # read, don't switch
# → Combine content here in the current canvas via submit

# --- Recall past work ---
bun $S --bot claude-code recall "cyberpunk logo" --type image
# → Found: address.conv_id + metadata.imageURL → show or switch to it
結果の提示
  • 画像:必ず ![description](url) を使い、生の URL を貼り付けないでください。プロンプトで求められた内容ではなく、実際に見えるものを説明してください。
  • テキスト/エージェント:コンテンツをそのまま表示します。
  • 動画:[Watch video](url)。
画像・動画生成フラグ

最初に list-models image または list-models video を実行します。モデルによって形式が異なるため、モデルの配列に表示されている値をそのまま渡してください。

  • --ratio <value> → supportedAspectRatios の値
  • --size <value> → supportedImageSizes の値
  • --duration <sec> → supportedDurations の値
  • --no-audio → supportsAudio: true の場合に音声をオフにします(デフォルトでは音声がオンです)
  • --image × 2 → supportedKeyframe: true の場合、開始/終了キーフレームを指定します
  • --loop → 動画をループ再生します(開始フレーム=終了フレーム。--image が必要です)
--wait の動作

--wait はブラウザーのブロードキャストを通じてポーリングします(2s→3s→5s→8s→10s)。デフォルトのタイムアウトは300sです。動画/neoでは、--wait=600 を使ってください。 --wait を指定しない場合、送信はすぐに返され、生成はバックグラウンドで実行されます。後で read-db を使って確認してください。

Creative Dream

永続的なクリエイティブジャーナルです。references/creative-dream.md を参照してください。

bun $S --bot claude-code dream-init "ukiyo-e x cyberpunk"

コマンドリファレンス

用語:「Neo」/「Agent Neo」→ set-mode agent。「Chat」→ set-mode text。「Draw」→ set-mode image。

セッションとナビゲーション(すべてのページ)
コマンド機能
ping接続をテストします
create-canvas "title"キャンバスを作成し、自動的に切り替えます([Bot] プレフィックスも自動的に追加されます)
switch <convId>アクティブなキャンバスを設定します
list最近のキャンバスを最大20件表示します
search "query"タイトルでキャンバスを検索します
list-models [mode]利用可能なモデルを一覧表示します
open [convId | url]ブラウザーでキャンバスを開きます。共有/招待リンクには完全な URL を指定できます
statusセッション/activeConvId を確認します
キャンバス操作(キャンバスページを開いている必要があります)
コマンド機能
set-mode <mode>モードを切り替えます(text/image/video/agent/neo)
set-model <model-id>モデルを選択します(text/image/video のみ)
submit "text" [--follow id] [--mode m] [--model id] [--image ...] [--ratio r] [--size s] [--duration d] [--loop] [--no-audio] [--wait[=sec]]生成を送信します
submit-batch [--follow id] [--mode m] [--models "m1,m2,..."] "p1" "p2" ...プロンプトごとに任意のモデルを指定して、N件の送信を行います
read [nodeId | --all]ノードのコンテンツを読み取ります(ブラウザーのメモリー)
comment <nodeId> "text"カーソルをノードに移動し、コメントラベルを表示します(30s後にフェードアウト)
delete <nodeId>ノードを削除します
delete-many <id1> <id2> ...複数のノードを削除します
共通フラグ
フラグ説明
--bot <identity>ボットの識別情報(claude-code/codex/openclaw/cursor/opencode/flowithos)
--canvas <convId>キャンバスを明示的に指定します(自動調整をスキップ)
--parallelマルチエージェントモード:読み取り専用セッション、ブラウザーを開かない、--canvas が必要
--agent-id <id>マルチカーソル対応の一意なエージェント ID(各エージェントに専用のカーソルが割り当てられます)
データベース操作(ブラウザー経由)
コマンド説明
read-db [--conv <convId>]すべてのノードをスキャンします — 概要(デフォルト:アクティブなキャンバス)
read-db <nodeId>1 つのノードの全内容
read-db --fullすべてのノードと全内容
read-db --failed失敗したノードのみ
read-db --conv <id> --full切り替えずに別のキャンバスを読み取ります
clean-failed失敗したノードと孤立した親ノードを削除します
メモリ
コマンド説明
recall "query"すべてのキャンバスを対象に検索します
recall "query" --type image種類で絞り込みます(text/image/video/webpage)
recall "query" --conv <id>1 つのキャンバスに絞り込みます
recall "" --conv <id>キャンバス上のすべてのメモリを一覧表示します
recall-node <convId> <nodeId>特定のノードのカタログメタデータ

トラブルシューティング

references/troubleshooting.md を参照してください。

コメント