cawcut-generate について
CawCut の公式ノード機能で画像や動画を生成するスキルです。公開 App カタログを先に確認し、該当する依頼は cawcut-app-run に引き継ぎます。
主な機能
- 01画像と動画の生成
- 02最新 App カタログとの照合
- 03該当する依頼を cawcut-app-run に引き継ぎ
- 04機能、モデル、設定の選択支援
活用シーン
- 01プロンプトから画像を生成
- 02公式機能で動画を作成
- 03生成依頼の設定を選択
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cawcut/ skill --skill cawcut-generateインストール後、Claude Code で/cawcut-generateを入力して読み込まれたか確認します。
同梱ファイルreferences/models.mdreferences/troubleshooting.md
詳細
CawCut Generate
CawCut の公式ノード機能を使って画像や動画を生成します。cawcut generate をラップしています。生成前に、公開済みの類似 App がないかライブ App カタログを必ず確認し、適切な App が見つかった場合は cawcut-app-run に引き継ぎます。
スキルファイルは英語のみで記述してください。 SKILL.md と references/ には、中国語やその他の英語以外の文章(YAML の description にあるトリガーフレーズを含む)を含めないでください。ユーザーの言語に合わせるのは、ライブ応答の reply_language でのみ行います。
ステップ 0 — 初期化
実行環境に応じてログインモードを選択する
コマンドが実際に実行される場所に基づいて選択してください。ユーザー自身のコンピューターで実行する場合は、cawcut auth login --browser --json を実行します。CLI がブラウザーを開き、承認を待機します。ユーザーのブラウザーにアクセスできないリモート環境、VM、またはコンテナーで実行する場合は、cawcut auth login --device-auth --json を実行し、ユーザー自身のコンピューターで開いて承認できるように authorization_url を送信します。どちらのモードも JSON に対応しています。構造化出力が必要だからといって、デバイス認証を選択する必要はありません。エージェント名、非 TTY シェル、localhost の URL だけでは、コマンドの実行場所を判断できません。既知の実行コンテキストと明示的なモードフラグを使って、CLI の自動検出を上書きしてください。
デバイスログインの場合は、その後 cawcut auth login --complete --wait --timeout 60 --json を実行してください。ツールの実行タイムアウトが短い場合は、代わりに --complete --json の呼び出しを単独で行い、next_poll_after_seconds に従ってください。デバイスログインが中断された場合、または wait_timeout が返された場合は、新しいリンクを作成せず、保存済みの現在のリクエストを再開してください。ブラウザーログインでは従来のループバックコールバックを使用します。中断された場合は、--complete を使わずに cawcut auth login --browser --json を再実行してください。status=pending は認証成功を意味しません。status=authenticated になってから、元の操作を再試行してください。拒否または期限切れになった場合、このリクエストは終了します。承認リンクを延々と作成し続けてはいけません。パスワード、トークン、ウェブページからコピーしたコードをユーザーに尋ねてはいけません。
初期化は、ユーザー向けのフェーズとしてではなく、裏側のガードレールとして実行してください。
- AI セッションごとに最大 1 回です。 この AI セッションですでにいずれかの
cawcutコマンドが成功している場合は、すべてのブートストラップ確認をスキップして続行します。 - 明示的な確認コマンドは 1 つだけ使用します:
cawcut upgrade check --json。cawcut --version、command -v cawcut、cawcut auth statusも実行しないでください。"update_available": trueの場合は、Bash から自分でcawcut upgradeを実行します(ユーザーに入力を求めないでください)。これにより CLI とスキルが更新されます。成功したら、このスキルのステップ 1 から続行します。停止したり、ユーザーに再度呼び出すよう求めたりしないでください。"ahead_of_registry": true(ローカルのcurrentが npm のlatestより新しい)の場合は、アップグレードせず続行します。これは通常、ローカル/開発ビルドを意味します。ダウングレードやcawcut upgradeの実行をユーザーに求めないでください。cawcutが見つからず確認に失敗した場合は、npm で CLI をインストールするようユーザーに依頼します(外部ユーザー向けです。git clone やリポジトリの./setupは使用しません)。
インストールが成功したら、ブートストラップを続行します。認証については以下のステップ 4 で処理します。npm install -g @ubnt/cawcut- その他の確認エラーの場合は続行し、後続の CLI コマンドが失敗した場合に限り警告に言及します。
- ブートストラップ後に「bootstrap checks passed」と表示しないでください。ステップ 1 に直接進みます(または、bare-invoke の例外に該当する場合は、生成するものを尋ねます)。
- 最初の実際のコマンド(
cawcut app list --json、cawcut capabilities list --models --json --capability <cap>、またはcawcut generate)で認証を検証します。トークン/認証エラー(Token expiredを含む)で失敗した場合は、上記のログイン手順に従います。実行環境に適したモードを使用し、status=authenticatedになった後でのみ、失敗したコマンドを 1 回だけ再試行します。CLI コマンドは自分で実行します。ユーザーに求めるのは、ブラウザーでの承認のみです。 - このスキルの参照ファイル(
references/troubleshooting.md、references/models.md)は、このスキル本文の先頭に表示されたベースディレクトリ配下にあります。Readで<base_dir>/references/<file>.mdを直接読み取ってください。場所を特定するためにfind/grepを使わないでください。ベースディレクトリはシンボリックリンクの場合があり、通常のfind <dir>ではリンク先をたどらず、ファイルが見つからないことがあります。 - 構造化されたユーザー選択ツール(毎セッション確認)。 Claude Code では、選択肢から選ぶ質問すべてに
AskUserQuestionを使用します。Cursor ではAskQuestionを使用します。どちらかのツールが許可ツールの一覧にある場合、このスキルにおける列挙可能なすべての選択(App 生成と公式生成のどちらにするか、機能/モード、モデルの選択、Phase A/B の設定、enum の--param値、メディアソース、アップロードの復旧)に必ず使用してください。ただし、選択肢が多すぎてあふれる場合は、その選択のまとまりに限り、Interactive selection の説明に従って番号付きテキスト表を使用できます。AskUserQuestion/AskQuestionが利用可能で、選択肢数が収まる場合は、番号付きのテキストメニューを既定で使用しないでください。ユーザーがこの呼び出しを一度断ったとしても、次の選択での使用をやめる理由にはなりません。拒否メッセージの読み取り方については、Interactive selection 冒頭のルールを参照してください。
カタログの最新性(必須)
情報源: 現在の対象/機能/スタイルについて、このユーザーメッセージのターン中に実行した cawcut app list … コマンドの出力のみを正とします。以前のメッセージにあるアプリ名、ID、件数、JSON を正しい情報として扱わないでください。会話の記憶はカタログではありません。以前のユーザーメッセージでの「一致する App がない」という結論は、再利用できません。
ユーザーメッセージごとのルール(最優先): 新しいユーザーメッセージを受け取るたびに、返信の作成やほかのツールの呼び出しより先に、必ず cawcut app list --json を実行してください。これは判断ではなく機械的な手順です。メッセージが App との照合に「関係する可能性があるか」を考えてから実行してはいけません。サーバー上のカタログは、最後のメッセージ以降に変更されている可能性があります(例:ユーザーがウェブ上で新しい App を公開した場合)。以下の単独呼び出しの例外だけが内容に基づく例外です。類推して別の例外を作らないでください。
単独呼び出しの例外(内容に基づく唯一のスキップ): メッセージがスキルの呼び出しだけで、プロンプト、対象、メディア、機能についての記載がどこにもない場合、App の名前や説明との照合対象がないため、このメッセージでは app list をスキップし、ユーザーに何を生成したいかを自由記述で尋ねてください(ワークフローの手順 3 の単独呼び出しの処理を参照)。ユーザーの返信に実際の内容が含まれた時点で、それは新しいユーザーメッセージです。持ち越しはせず、上記のルールに従って、ほかの処理より先に app list --json を実行してください。
次のいずれかに該当する場合も、手順 1 を再実行してください:
- ユーザーのツール呼び出し(
AskUserQuestion/AskQuestion/メニュー)が拒否または中断され、次のメッセージで対象、機能、スタイルが変更された場合。このやり取り中の「続き」であっても、新しいユーザーメッセージと同様に扱い、手順 1 からやり直してください - ユーザーがアカウントを切り替えた、再ログインした、または
cawcut auth loginが正常に完了した場合 - ユーザーが新しい App を公開、共有、作成したと伝えた場合
- ユーザーが App の更新または再表示を求めた場合
次の条件をすべて満たす場合に限り、手順 1 のカタログ確認をスキップできます(同じユーザーメッセージのターンで、同じ対象/機能/スタイル):
- このユーザーメッセージについて
cawcut app list --jsonをすでに実行し、臭気テストを完了している(または、一致する可能性のある App の確認後にユーザーが公式の生成を選択した) - ユーザーが、すでに進行中のプランの設定(アスペクト比、解像度、品質、件数、長さ、「もう 1 つ」、「もっと大きく」など)だけを調整している
- またはこのターンが
cawcut-app-runからの引き継ぎで始まり、ユーザーがこのユーザーメッセージ内ですでに「代わりに公式の生成を使う」を選択している(手順 1 の一度だけ選択するためのガードを参照)
ユーザーメッセージをまたいで app list を省略してはいけません。 対象、機能、スタイル、表現が変わらない場合も同様です。
必須ゲート: ワークフローの手順 9 では、cawcut generate の直前に事前チェックを実行します。該当箇所を参照してください。
ステップ 1 — まず App カタログを確認する(cawcut generate を呼び出す前に毎回)
一度だけ判定するガード(同じユーザーメッセージ内のみ) — このターンが、cawcut-app-run によってこのユーザーメッセージ内でユーザーごとの app list がすでに実行され、一致する App がないと判定された場合、またはユーザーがそこで「公式の生成を続ける」を選択した場合は、このステップ全体をスキップします。以下の機能/モデルの確認に進みます。このユーザーメッセージ内ですでに下した判定を再確認するために、app list を再実行しないでください。
それ以外の場合は、上記のカタログの最新性にあるユーザーメッセージごとのルール、引数なし呼び出しの例外、ステップ 1 をスキップの各チェックリストを適用します。このユーザーメッセージに対してまだ cawcut app list --json を実行しておらず、引数なし呼び出しの例外も適用されない場合は、以下のステップ 1 を実行してください。前のメッセージで実行した一覧や「一致なし」という判定を再利用しないでください。
--schemaを付けずにcawcut app list --jsonを実行します(軽量な JSON:name、description、credits、source —input_schemaなし。トークン効率を重視した簡易チェックです)。- いずれかの App の
name/descriptionがユーザーの依頼と明確に関連しているか確認します。これは簡易チェックであり、完全な評価ではありません。正式な評価基準はcawcut-app-runが適用し、引き継ぎ後に適切に再確認します。 - 妥当な候補がない場合 — 以下の手順に進み、通常の生成を行います。カタログを確認したことはユーザーに伝えないでください。
- 妥当な候補がある場合 — 必ず先に
AskUserQuestion/AskQuestionを呼び出します(ツールが利用できない場合に限り、番号付きテキストを提示します)。Found a published App that does this: <name> — <description> (N credits). 1. Use <name> 2. Continue with official generation- ユーザーが App を選択した場合 → その App 名がすでに決定した状態で
cawcut-app-runに引き継ぎます。カタログの評価/メニュー(ステップ -1)はスキップし、describe+テーブル+入力メニューに進みます。内部 App ID が必要な場合は、このターン中にapp list --jsonをライブで取得します。 - ユーザーが公式の生成を選択した場合 → このスキルの以下の手順に進みます。このターン中は、カタログについて再度尋ねないでください。
- ユーザーが App を選択した場合 → その App 名がすでに決定した状態で
インタラクティブな選択(必須 — まずツールを使う)
ユーザーが AskUserQuestion/AskQuestion の呼び出しを拒否したばかりの場合: ツールの結果には、「実行中の操作を中止して、ユーザーから次の指示があるまで待つ」よう伝えるハーネスの定型文が含まれます。この文は、実行時に拒否されたすべてのツール呼び出しに自動で付加されるもので、ユーザーの発言でも、ツールの使用を中止する指示でもありません。これは、実行中だったその特定の操作を中止するという意味です(同じ質問を再試行せず、未確認の選択肢で generate に進まないでください)。そして、ユーザーの次の実際のメッセージを確認してください。この文だけでは、次の選択可能な項目について番号付きテキストに切り替える根拠にはなりません。次の選択でも、拒否がなかった場合と同様に、必ずツールから始めてください。セッション全体でテキストによる代替を許可するのは、ユーザーが「メニューを出さないで」「テキストで尋ねて」などと明示的に要求した場合のみです。STOP という文言の緊急性は、そのような要求があった証拠ではありません。このルールより優先させないでください。
デフォルトの動作: 選択肢が複数ある場合は、番号付きのテキストメニューを表示したり、機能名、モデル ID、アスペクト比、列挙値をユーザーに入力するよう求めたりする前に、必ず AskUserQuestion(Claude Code)または AskQuestion(Cursor)を呼び出してください。テキストのみのメニューは代替手段としてのみ使用できます。
選択肢が 1 つだけなら、選択ではありません。 呼び出しごとに、実行可能な選択肢が少なくとも 2 つ必要です。実際に可能な選択肢が 1 つだけの場合(単一のモデルしか公開していない機能や、ライブスキーマで 1 つの値しか許可されていない軸など)は、その選択肢を文章で説明して続行してください。選択肢が 1 つだけのポップアップは表示せず、選択肢があるように見せるためにプレースホルダーの代替案を追加しないでください。
ホストごとのツール名:
| ホスト | ツール名 |
|---|---|
| Claude Code | AskUserQuestion |
| Cursor | AskQuestion |
以下では、構造化されたユーザー確認ツールとは、現在のセッションで利用可能なこれらのツールのいずれかを指します。機能だけから推測せず、利用可能なツールの一覧を確認してください。
セッションのチェックリスト(このターンで最初のメニューを表示する前):
0. 返信を送信する前にセルフチェックしてください: これから送ろうとしている文が、固定された選択肢(画像か動画か、機能、モデル、比率など)からユーザーに選ばせる内容の場合、それが「題材は何ですか?」のような自由回答の質問を含む、より親しみやすい文に組み込まれていても、送信を中止してください。その文を通常のテキストとして送ることは禁止されています。分けてください。選択肢のある部分については、今すぐ AskUserQuestion/AskQuestion を実行し、自由回答の部分だけを別の文として質問してください(同じターン内でもかまいませんが、1つの文にまとめてはいけません)。
AskUserQuestionまたはAskQuestionを利用できますか? 利用できる場合、以下の表にある項目のうち1回の呼び出しで処理できるものは、すべて必ずそのツールを使用してください。- 利用できるツールがない場合(CLI のみのホスト)は、
reply_languageで番号付きのテキストを使用してください。 - ツールは利用できるものの、候補数が1回の呼び出しで扱える数を超える場合(モデルリストの超過、長い列挙型など)は、そのバッチに限って番号付きのテキスト表を使用してください。その後の小さな選択では、
AskUserQuestion/AskQuestionの使用を再開してください。
ツールを利用できる場合に禁止されること: 番号付きのテキストメニュー(1. … 2. …)、「番号または名前で回答してください」と尋ねること、機能名、モデル ID、列挙値をユーザーに記憶から入力するよう求めること。
| 手順 | 構造化されたユーザー質問ツールを必ず使用する項目 |
|---|---|
| 画像か動画か | 出力タイプ |
| 機能/入力モード | テキストから画像、画像から画像、テキストから動画など |
| モデル | プランで選択可能な各モデル(ラベルにデフォルトを明記)— 候補数がツールの上限を超える場合は、モデルリストの超過(ルール10、フェーズA、選択肢2)を参照してください |
| 設定の確認 | デフォルト/モデルを変更/設定をカスタマイズ(フェーズA、単一選択) |
| 設定 — カスタマイズ | 現在のモデルのライブスキーマから各軸について1つずつ質問する、構造化されたユーザー質問ツールの呼び出し1回(フェーズB)— 複数の軸を1つの単一選択にまとめてはいけません |
各列挙型 --param | JSON のすべての options 値 |
| メディア | cawcut-app-run と同じ3つの分岐 |
| 複数の画像が利用可能 | 複数の参照画像として1回の呼び出しでまとめるか、画像ごとに1つの出力にするか — ルール19を参照してください。3つの分岐に進む前に質問してください |
フォールバックの場合のみ: AskUserQuestion/AskQuestion が利用できない場合、または選択肢の数/構造がそのバッチでツールが扱える範囲を超える場合(モデルリストの超過、長い列挙型リスト)に限り、reply_language で番号付きのテキストメニューを使用してください。ある選択でフォールバックしても、次の小さな選択まで免除されるわけではありません。次の選択がツールで扱える場合は、利用可能かどうかを再確認してツールを使用してください。UXルール10とワークフローの手順7にあるテキスト例は、フォールバック時の形式であり、ツールが利用可能な場合のデフォルトではありません。自由入力のテキストとして尋ねてよいのは、ユーザーが「カスタム」/URL/パスの分岐を選択した後のプロンプト内容またはURL/パスだけです。
UXルール
- 簡潔にしてください。デフォルトでは 結果の URL のみを出力します。デバッグ時以外、生の JSON をそのまま出力しないでください。
- 必ず
--waitを渡してください。ジョブは非同期で実行されます。CLI は完了まで待機し、完了後に URL を出力します。 - 画像と動画を生成する場合は、必ず
--downloadを渡してください。CLI がプラットフォームに適したダウンロードフォルダーを自動で解決します(macOS/Linux では~/Downloads、Windows では%USERPROFILE%\Downloads)。パスをハードコードしたり、自分で結果をダウンロードしたりしないでください。ユーザーが URL のみを明示的に希望した場合に限り、--downloadを省略してください。 - 返信言語:
- スキルの単独呼び出し → 英語。 ユーザーが実質的な文章を添えずにスキルコマンドだけを実行した場合(例:
/cawcut-generate、cawcut-generate、またはスキル名のみ)は、メニュー、概要、質問のreply_languageを 英語 に設定してください。 - その後は会話に合わせてください。 ユーザーが別の言語で実際の依頼や追加指示をしたら、そのセッションの残りはその言語に
reply_languageを切り替えてください(英語を明示的に求められた場合を除きます)。 - すべての説明文、状況の概要、選択肢のラベル、質問、復旧方法の案内には
reply_languageを使用してください。 - CLI コマンド/フラグ、モデル ID、アプリ ID、JSON キー、URL、生のエラーコードは英語のままにしてください。
- ユーザー向けの回答に、生の英語の CLI 出力を貼り付けないでください。
reply_languageで要約してください。
- スキルの単独呼び出し → 英語。 ユーザーが実質的な文章を添えずにスキルコマンドだけを実行した場合(例:
- CawCut の HTTP API を curl で呼び出さないでください。認証とメディアのアップロードは CLI が処理します。認証情報の期限が切れた場合は、Step 0 のログイン手順が必要です。トークンの自動更新には対応していません。
- テンプレートを先に確認 — 上記の Step 1(まず App カタログを確認)を参照してください。テンプレートらしい依頼に限らず、すべての依頼で実行してください。ユーザーが提示された App を選んだ場合は、
cawcut-app-runの 選択時に App を明示するルールに従ってください。App 名を示し、メタデータと入力項目の表を表示してから、メニューで入力を集めてください。詳細を示さず「このアプリ」とだけ言わないでください。 - 段階的な探索(必須) — すべての機能をスキーマ込みで一度に取得しないでください(
--capabilityを指定せずにcawcut capabilities list --models --schema --jsonを実行すると、約 100 KB の出力が切り詰められる場合があります)。代わりに、次の順序で進めてください。- 機能が判明した後 →
cawcut capabilities list --simple --capability <cap>(または--models --json --capability <cap>)を実行してモデルを選びます。 - モデルが決まった後 → そのモデルのパラメーターだけを取得するため、
cawcut capabilities list --models --schema --json --capability <cap> --model "<model_id>"を実行します。 禁止事項: Python/シェルスクリプトを書いて機能の JSON を解析しないでください。CLI の--capability、--model、--simpleフィルターを使用してください(または、ホストにすでにインストールされている場合に限り、1 行のjqを使用してください)。
- 機能が判明した後 →
- 選択肢を先に提示 — ユーザーが十分な情報を指定していない場合は、必ず最初に
AskUserQuestion/AskQuestionを呼び出してください(ツールが使えない場合、または選択肢が上限を超える場合に限り、番号付きテキストを使用します)。固定値または列挙可能なパラメーターは、必ずクリック可能なメニューにしてください — ユーザー自身に選択してもらいます。パラメーター名、機能名、モデル ID、列挙値を記憶に頼って入力させないでください。- 画像出力か動画出力か
- テキストのみ、画像入力、動画入力、音声入力、またはオムニ入力か
- ライブ探索で取得したモデルの選択肢(BE のデフォルトを先頭にする)
- 選択したモデルのパラメーターの列挙値/選択肢/範囲
- 範囲の定まらない希望確認はしない — 「解像度、アスペクト比、品質、または画像数に希望はありますか?」だけを尋ねないでください。
AskUserQuestion/AskQuestionを使用し、ライブスキーマに基づく具体的な選択肢を必ず提示してください(上記の インタラクティブな選択 を参照)。カスタマイズ可能な場合は、「デフォルトを使用」と「カスタム」も提示してください。 - 実行前に設定メニューを提示 — プロンプト/メディア/機能/モデルが決まったら、設定を 2 段階で確定します。画像と動画の手順は同じです。 優先順位: ツールが使える場合、Phase A(デフォルト/モデル変更/カスタマイズ)には必ず
AskUserQuestion/AskQuestionを 1 回呼び出し、Phase B(軸ごとに質問する一括呼び出し)にも必ず 1 回呼び出してください。番号付きテキストブロックにまとめないでください。ワークフローの Step 7 にある一括テキストの例は、フォールバック表示に限ります(ツールが使えない場合、またはモデル一覧/長い列挙値が上限を超える場合)。
- Phase A — ゲート(
AskUserQuestion/AskQuestionを 1 回呼び出す):- 選択肢 1:現在のモデルでスキーマのデフォルト値を使用して今すぐ実行します(デフォルト値を表示)。
- 選択肢 2:モデルを変更 —
cawcut capabilities list --simple --capability <cap>(または情報量を抑えた同等の JSON)で取得したモデルをすべて表示し、"default": trueのモデルに印を付けます。モデル一覧が上限を超える場合:AskUserQuestion/AskQuestionは通常、1 つの質問につき選択肢が約 2~4 個に制限されます。この機能のモデル数がそれを超える場合は、番号なしの一覧ではなく、番号付きテキスト表(列:#、名前、デフォルトの印、主な仕様)を提示してください。また、ユーザーは 番号またはモデル名で返信できると伝えてください。これはcawcut-app-runの App 選択肢の上限超過時の扱い(インタラクティブな選択ルール 7)に準じます。同じ番号付きテーブルの方式を、上限を超える他のライブスキーマ由来の候補一覧(モデル、機能、長い--param列挙値)にも適用してください。選択されたら、新しいモデルのスキーマを再取得し(--capability <cap> --model "<id>" --schema --json)、新しいモデルで Phase A を再度実行します。 - 選択肢 3:設定をカスタマイズ — Phase B に進みます。
- Phase B — カスタマイズ(
AskUserQuestion/AskQuestionを 1 回呼び出し、軸ごとに質問する一括呼び出し): 軸の一覧は 現在のモデルのライブスキーマのみから作成してください(Step 5)。モデルによって公開される軸は異なります(例:GPT Image 2 はratio/resolution/quality/num_images、Kling 3.0 Pro はduration/aspect_ratio/generate_audioを公開し、resolutionはありません)。存在する、コストまたは見た目に影響する軸(アスペクト比、解像度/サイズ、品質、長さ、画像数、音声のオン/オフなど)ごとに、それぞれ独立した質問を 1 つ提示してください。各質問には独自の選択肢を用意し、最初の選択肢は必ず「デフォルトを使用(値を表示)」にしてください。 - 異なる 2 つの軸を 1 つの単一選択肢にまとめないでください。 Phase B の目的は、選ばれなかった軸を黙ってデフォルトにしながら、ユーザーが任意の軸を個別に変更できるようにすることです。軸の間で 1 つだけ選ぶ形式(例:「長さをカスタマイズ」か「比率をカスタマイズ」のどちらか)にすると、選ばれなかった軸を一度も提示せずに除外することになります。
AskUserQuestion/AskQuestionは 1 回の呼び出しにつき質問が 4 つまでです。現在のモデルにコストまたは見た目に影響する軸が 4 つを超えてある場合は、影響が大きい 4 つを先にまとめて提示してください。残りはルール 12 に従い、詳細/影響の小さいパラメーターとして質問せず、デフォルトのままにします。- カスタムの数値(例:
duration_range内の長さ)は、別のトップレベルの選択肢ではなく、その軸専用の質問内の選択肢です。
- よく使う設定(それぞれ Phase B で独立した質問/軸として扱います):
- アスペクト比:
aspect_ratiosのすべての値、または選択したモデルの ratio/aspect_ratio パラメーターのoptionsを列挙し、デフォルトに印を付けてください。スキーマにアスペクト比のフィールドがない場合は、--paramを独自に作らないでください。 - 解像度/サイズ/品質/スタイル:該当パラメーターの
optionsを列挙し、デフォルトに印を付けてください。最小/最大範囲の場合は、デフォルト、最小値、最大値、「範囲内でカスタム」を表示してください。 - 画像数:スキーマに別の指定がない限り、
1にデフォルトの印を付けて、1、2、3、4を提示してください。モデルにnum_imagesがある場合は--param num_images=Nを使用し、そうでない場合は--loop Nを使用してください。 - 動画の長さ:
durationsを列挙してください。duration_rangeの場合は、デフォルト、最小値、最大値、範囲内のカスタム秒数を表示してください。 - ブール値の切り替え(例:
generate_audio):パラメーターの説明にコスト/時間への影響が記載されている場合は、その軸の質問に「オン(デフォルト)」と「オフ」の 2 つの選択肢を提示してください(ルール 14)。
- ユーザーが言及していない詳細パラメーターは、必須または明らかにコスト/見た目に影響する場合を除き、質問しないでください。それ以外は、ライブモデルスキーマのデフォルトを使用してください。
- セッションの再利用 — 最初の生成後、JSON の結果から
workflow_idを取得してください。同じセッション内で以降の すべてのgenerateに--workflow-id <id>を渡してください。機能やモデルを変更する場合も同様です(例:テキストから画像 → 画像から画像 → テキストから動画)。呼び出しごとに新しい生成ノードがそのワークフローへ追加されます(履歴は保持されます)。ユーザーが新しいプロジェクトを明示的に希望する場合、または依頼が明らかにこのセッションと無関係な場合に限り、--workflow-idを省略してください。 - 複数画像/複数候補(
--loop) —loopは、この依頼で追加する 並列生成ノードの数です(最大 4)。ワークフロー全体を実行する回数ではありません。ユーザーが 4 を超える候補(例:「候補を 5 個」)を希望する場合は、CLI を呼び出さず、モデル/プラットフォームが並列候補を最大 4 個までしかサポートしていないと返信してください。N≤4の場合、モデルスキーマにnum_imagesがあり、ユーザーが API 呼び出し 1 回で複数画像を希望するなら--param num_images=Nを優先してください。それ以外は--loop Nを使用します(画像と動画の両方で使用可能)。クレジットと処理時間は、おおむねloopに比例し、num_imagesを設定した場合はノードごとのnum_imagesにも比例します。このルールは、同じ入力からの候補出力に関するものです。入力に複数の異なる参照画像がある場合は、ルール 19 を参照してください。 - 学習データからモデルやパラメーターを推測しないでください — 利用可能なモデルはユーザーのプランによって異なります。必ず最初に CLI で確認してください。
- 説明用のメディア例を実際の入力として使わないでください。
--image、--video、--audioが必要なとき、SKILL.md、references/、モデルスキーマ、ドキュメント内の例示 URL やパス(cdn.example.com、@/path/to/fileのようなプレースホルダーを含む)はすべて参考情報であり、使用可能なリソースではありません。ユーザーがこの会話でそのファイルまたは URL を明示的に提供した場合を除き、CLI に渡さないでください。 - メディア入力 — 作り出した素材ではなくメニュー — インタラクティブな選択(上記)に従い、必ず
AskUserQuestion/AskQuestionで 3 つの選択肢を提示してください。以下の番号付きリストはテキストによるフォールバック形式に限ります。cawcut-app-runと同じ基準を適用してください。必須メディアについて、次の選択肢を提示します:1)チャット内にすでにあるファイル、2)HTTPS URL、3)ローカルパス。選択に応じて、--image/--video/--audioを自分で対応付けてください。必須のメディアが不足している場合は、このメニューを表示して待機してください。捏造した例やプレースホルダーを使って実行しないでください。 generateを試す前にローカルメディアを事前確認しないでください — 実行前にローカルファイルのサイズや寸法を調べるため、ls/file/sips -g pixelWidth/pixelHeightなど(または同様のコマンド)を実行しないでください。cawcut generateを直接試してください。アップロード前のチェックに失敗した場合、CLI のエラーに正確なサイズ/寸法と上限が示されるため、先に手動確認した結果ではなく、そのエラーに基づいて対応してください(上記の「アップロード上限」/以下の「エラー」を参照)。- 複数の画像が入力として選ばれた場合 — 結合するか個別にするかは質問し、推測しないでください。
--imageは繰り返し指定できます。また、画像から画像/画像から動画/オムニから動画のモデルでは、スキーマ(Step 5)にあるmedias[].maxによって、1 回の生成呼び出しに複数の画像を並列参照入力として渡せる場合があります(例:GPT Image 2 は最大 16 枚を受け付けます)。これは--loop/num_images(ルール 14)とは異なる軸です。ルール 14 は同じ入力からの出力数を変えるものですが、ルール 19 は入力として渡す異なる候補画像が複数ある場合(引き継ぎで渡された複数の素材、チャット内で共有された複数のファイル、ユーザーが指定した一括画像など)の扱いです。このような場合は、コマンドを作成する前に、必ず次の選択肢をAskUserQuestion/AskQuestionで提示してください。- 1 回の生成にまとめる — 選択した画像をすべて、繰り返し指定する
--imageの値として渡します(最大medias[].max枚)。モデルは画像をまとめて参照入力として使用します。 - 画像ごとに別の出力を生成する — 画像ごとに 1 回ずつ
generateを実行し、それぞれ独自の結果を生成します。 引き継ぎの指示や、使用する画像だけを列挙した自由形式の回答(例:「画像 A とセット B の最初の 5 枚を使って」)だけでは、どちらかに決まったとはみなせません。この表現はどちらの解釈も可能なため、上記のメニューが引き続き必要です。選択した枚数がモデルのmedias[].maxを超える場合は、そのことを伝え、ユーザーにリストを短くするか「画像ごとに 1 つ」を選んでもらってください。黙って枚数を切り詰めないでください。
- 1 回の生成にまとめる — 選択した画像をすべて、繰り返し指定する
機能
--capability | 機能 | メディア入力 |
|---|---|---|
text-to-image | テキスト → 画像 | — |
text-to-video | テキスト → 動画 | — |
image-to-image | 画像を編集/スタイル変換 | --image 必須、複数指定可能 — 候補画像が複数ある場合はルール 19 を参照してください |
image-to-video | 静止画をアニメーション化 | --image 必須 |
omni-to-video | 任意のメディア → 動画 | --image/--video/--audio のいずれか 1 つ以上が 必須です。種類は組み合わせられます(例:アバター画像 + 音楽音声) |
モデルとパラメーターを確認する(必須)
段階的な CLI による確認を行ってください。5 つの機能すべてのスキーマを一度に取得しないでください。
ステップ A — 機能を選択する(ユーザーのリクエストから明らかでない場合):
cawcut capabilities list
ステップ B — その機能のモデルのみを一覧表示する(機能が判明した後):
cawcut capabilities list --simple --capability text-to-video
# or: cawcut capabilities list --models --json --capability text-to-image
各 --simple 行は model_id: name 形式で、該当する場合は (default) が付きます。区切りには最初のコロンのみを使用してください。
ステップ C — 選択したモデルのパラメーターのみを読み込む:
cawcut capabilities list --models --schema --json --capability text-to-video --model "Seedance 2.0"
これにより、BE から取得したメタデータを含む小さな JSON ペイロードが返されます(機能 1 つ、モデル 1 つ)。
model_id、name、defaultparameters— 名前、型、デフォルト値、選択肢、最小値/最大値、説明- 該当する場合は
aspect_ratios、durations、duration_range medias— 画像/動画/音声機能の入力制限(数、役割、およびモデルごとの任意のlimit)
ユーザーがすべての機能の完全なスキーマを一度に確認するよう明示的に求めない限り、単独の cawcut capabilities list --models --schema --json(全機能)を実行しないでください。
アップロード制限(プラットフォーム): ローカルファイルをアップロードする前に、CLI は GET /developer/config を読み込み、サイズ/形式/寸法を検証します。CLI は圧縮しません。失敗した場合、エラーを表示して終わりにしてはいけません。また、回避策として CawCut Web を提案してはいけません。必ずまず AskUserQuestion/AskQuestion を呼び出し、次の選択肢を提示してください:(1)今すぐ sips/ffmpeg で圧縮/サイズ変更し、自動的に再試行する、(2)ユーザーが修正して再アップロードする、(3)キャンセルする。ツールが使用できない場合に限り、番号付きのテキストのみで提示してください。(1)を選択した場合は、修正コマンドを自分で実行してからアップロードを再試行してください。失敗の種類ごとの正確なコマンドについては references/troubleshooting.md を参照してください。現在の上限を表示するには cawcut config limits を実行してください。
ルール:
--modelに指定または提案できる値は、選択した機能の JSON に表示されているものに限ります。--paramのキーと許可される値は、そのモデルのparameters(および関連フィールド)から読み取ってください。パラメーター名を作り出してはいけません。- BE の
"default": trueを信頼できる情報源として扱ってください。各機能にはデフォルトが 1 つだけ存在する必要があります。存在しない場合、または複数ある場合は、一覧にあるモデルから選ぶようユーザーに確認してください。 - デフォルトモデルでは、
--modelを省略するか、そのmodel_idを明示的に指定してください。 - ライブでの確認ができず、それでもユーザーが続行を求める場合に限り、フォールバックのデフォルトを使用してください:画像/画像編集 =
gpt-image-2、動画/アニメーション/オムニ =Seedance 2.0。 - スペースまたは括弧を含む
model_idの値は引用符で囲んでください。
人間が読みやすい概要(名前のみ、パラメーターなし):
cawcut capabilities list --models
人間が読みやすいパラメーター付きの概要(テキスト形式、JSON ではありません — すぐに確認するためのもので、以下の表の作成には使用しないでください):
cawcut capabilities list --schema
簡単なガイドについては references/models.md を参照してください。モデルカタログではありません。
パラメーターをユーザーに提示する(必須)
cawcut capabilities list --models だけでは名前のみが一覧表示され、パラメーターは表示されません。cawcut capabilities list --schema(--models を含みます)を指定すると、パラメーターごとにプレーンテキストの詳細な 1 行が追加され、簡単な確認には便利ですが、ユーザーには対象を絞った --json 形式から Markdown の表を作成して提示してください。モデルを説明する際に、CLI の生テキスト/JSON を貼り付けたり、文章だけの箇条書きにしたりしないでください。
cawcut capabilities list --models --json --capability <cap> は簡易形式で、モデルを 1 つの機能内から選ぶために model_id/name/capability/default のみを返します。1 つのモデルの parameters、aspect_ratios、durations/duration_range、または medias が必要な場合は、--schema と --model "<id>" を追加してください。
cawcut capabilities list --simple --capability <cap> は、モデルメニュー向けの最も簡潔な人間向け出力です(モデルごとに1行)。
ユーザーがモデルの対応機能や選ぶべき設定について尋ねた場合は、選択した機能とモデルのライブ JSON から Markdown テーブルを作成します。
| 名前 | 型 | 制約/オプション | デフォルト | 必須 | 備考 |
|---|
JSON の parameters[] からテーブルへのマッピング:
| JSON フィールド | テーブル列 |
|---|---|
name | 名前 — --param キー |
type | 型(string、number、boolean、array、…) |
options または min/max | 制約 — options はコンマ区切り。範囲は 1–4 の形式 |
default | デフォルト — 値がない場合は — |
required | 必須 — required が required の場合のみ yes、それ以外は no |
description + CLI ヒント | 備考 — 例:--param ratio=16:9。配列には JSON 値を使用 |
存在する場合は、parameters 以外のフィールドも含めます。
| ソースフィールド | 表示方法 |
|---|---|
aspect_ratios | ratio パラメーターがない場合は、比率の追加行または注記 |
durations/duration_range | 動画の長さの行 |
medias | 別のメディア入力テーブル(下記) |
トップレベルの prompt(暗黙) | 行:prompt/string/—/—/yes/CLI の位置引数 |
CLI フラグのテーブル — cawcut generate の説明時に1回だけ表示します(モデルごとには表示しません)。
| 名前 | 型 | 制約/オプション | デフォルト | 必須 | 備考 |
|---|---|---|---|---|---|
prompt | string | — | — | yes | 位置引数 |
--capability | enum | text-to-image、text-to-video、image-to-image、image-to-video、omni-to-video | — | yes | 入出力モードを設定 |
--model | string | JSON の model_id 値のみ | 機能のデフォルト | no | スペースを含む場合は引用符で囲む |
--param | key=value | 選択したモデルの parameters に基づく | フィールドごとのデフォルト | no | 繰り返し指定可能。配列/オブジェクトは JSON 文字列 |
--image | file | url | asset_id | ローカルパス、HTTPS、または UUID の asset_id | — | image/omni 機能では必須 | 繰り返し指定可能。ローカルファイルは自動アップロード |
--video | file | url | asset_id | ローカルパス、HTTPS、または UUID の asset_id | — | omni では任意 | 繰り返し指定可能 |
--audio | file | url | asset_id | ローカルパス、HTTPS、または UUID の asset_id | — | omni では任意 | 繰り返し指定可能 |
--loop | number | 1–4 | 1 | no | 並列候補数。ワークフローの実行回数ではありません |
--workflow-id | string | 既存のワークフロー UUID | — | no | セッション内のすべての後続処理で同じプロジェクトを再利用 |
--wait | flag | — | off | 推奨 | タスクが完了するまで待機 |
--download | flag | path | 省略時はシステムの Downloads | off | 推奨 | 画像/動画を自動保存 |
--json | flag | — | off | 推奨 | 構造化出力。署名付き URL を保持 |
例 — GPT Image 2/text-to-image(形式の参考。値はライブ JSON と一致させてください):
| 名前 | 型 | 制約/オプション | デフォルト | 必須 | 備考 |
|---|---|---|---|---|---|
prompt | string | — | — | yes | テキストによる説明 |
ratio | string | 16:9、9:16、1:1、21:9、3:2、4:3、5:4、2:3、3:4、4:5 | 16:9 | no | --param ratio=16:9 |
resolution | string | 1K、2K、4K | 1K | no | --param resolution=2K |
quality | string | low、medium、high | low | no | --param quality=high |
num_images | number | 1–4 | 1 | no | API 呼び出しごとの画像数。あるいは --loop を使用 |
例 — GPT Image 2/image-to-image — 同じパラメーターに加えて:
| 名前 | 型 | 制約/オプション | デフォルト | 必須 | 備考 |
|---|---|---|---|---|---|
--image | file | url | asset_id | 参照画像は最大16枚 | — | yes | --image @/path、URL、または asset_id |
提示する前に、必ず JSON を再取得してください。プランや BE の設定は変更されることがあります。
ワークフロー
- App カタログを確認する — 上記のステップ 1 を参照してください(決定を一度だけ行うガードとベアインボークの例外を適用し、リクエストごとに実行します)。ユーザーが公式の生成を選択するか、一致する App がない場合に限り、以下に進みます。
- 機能を特定する — ユーザーのリクエストから推測するか、画像と動画のどちらにするか、および入力モードの選択肢を提示します。
- モデルを一覧表示する —
cawcut capabilities list --simple --capability <cap>(または簡潔な--models --json --capability <cap>)を実行します。メニューではデフォルトモデルを先頭に配置します。 - 選択肢を提示して、出力と入力モードを選んでもらう(明らかでない場合):
- 画像出力:
text-to-imageまたはimage-to-image - 動画出力:
text-to-video、image-to-video、またはomni-to-videoユーザーのプロンプトやメディアから答えが明らかな場合は、推測した選択を伝えて続行します。そうでない場合は、必ず先にAskUserQuestion/AskQuestionを呼び出します(上記の Interactive selection に従ってください)。ツールが利用できない場合に限り、reply_languageで番号付きメニューを提示します。 ベアインボークで手掛かりがない場合: このターンで画像と動画のどちらにするかを尋ねるために、AskUserQuestion/AskQuestionを呼び出します。件名をプレーンテキストで尋ねるのと一緒に回収しようとして、画像/動画の質問を後回しにしてはいけません。件名やアイデアを自由記述で尋ねる質問は、画像/動画の選択質問と一文にまとめず、並行して行います。
- 画像出力:
- モデルを選ぶ — ステップ 2 の出力のみから選びます。
"default": true/(default)のモデルを先頭に置いて推奨と明記します。画像と動画の両方で、設定メニューにモデルを変更する選択肢を再度提示します(UX ルール 10)。 - スキーマを読み込む — パラメータ表や設定メニューを作成する前に、
cawcut capabilities list --models --schema --json --capability <cap> --model "<model_id>"を実行します。 - プロンプト/メディアを収集する — 生成プロンプトと、必要な
--image、--video、--audio入力を尋ねます。必要なメディアが不足している場合は、3 択メニュー(UX ルール 16~17)を表示し、ユーザーが実際のファイルまたは URL を指定するまで待ちます。ドキュメントやスキーマにある例やプレースホルダーのメディアで代用してはいけません。複数の候補画像がすでにある場合(別のスキルから引き継いだもの、チャット内の複数ファイルなど)は、generateの呼び出し回数を決める前に、統合するか個別に扱うかを確認します(ルール 19)。 - ルール 10 の 2 段階の手順に従って、生成前に設定メニューを提示します。フェーズ A にはモデルを変更する選択肢を必ず含めます(画像と動画の両方)。自由回答形式の希望確認はしないでください。
フォールバック例(英語) — AskUserQuestion / AskQuestion が利用できない場合、またはオーバーフローが適用される場合(形式の参考のみ — 「(default)」を含め、ここに示すすべての値は、この例ではなく、対象モデルのライブスキーマから取得してください):
フェーズ A — 単一選択のゲート(テキストによるフォールバック):
Run with defaults, change model, or customize settings:
1. Use defaults (recommended) on GPT Image 2: ratio 16:9, resolution 1K, quality low, count 1
2. Change model: GPT Image 2 (default) / GPT Image 1 / …
3. Customize settings
ユーザーが 3 を選択した場合、フェーズ B(1 つの項目軸に対するテキストフォールバックの形式。軸ごとに繰り返すか、AskUserQuestion / AskQuestion でまとめて提示します):
- Aspect ratio: 16:9 (default) / 1:1 / 9:16 / 4:3 / 3:4 / custom
- Resolution: 1K (default) / 2K / 4K
- Quality: low (default) / medium / high
- Count: 1 (default) / 2 / 3 / 4
AskUserQuestion / AskQuestion が利用可能な場合(必須の方法) — 同じ GPT Image 2 / text-to-image のシナリオを分解して提示します(ラベルは reply_language で記述):
- フェーズ A のゲート —
AskUserQuestion/AskQuestionを 1 回呼び出します:Use defaults— 現在のモデルのスキーマ既定値を使用して実行します(既定値を表示)Change model— モデル選択画面を開きます(上限を超える場合はオーバーフローとなり、ルール 10 に従って番号付きテキスト表を表示します)Customize settings— フェーズ B に進みます
- フェーズ B のカスタマイズ —
AskUserQuestion/AskQuestionを 1 回呼び出し、各軸につき質問を 1 つずつ提示します(軸をまたいで 1 つの選択肢にまとめてはいけません):- アスペクト比 — ライブスキーマの選択肢を提示します。最初の選択肢はデフォルトを使用するもので、値も表示します
- 解像度 — 同じ形式です
- 品質 — 同じ形式です
- 数量 — 同じ形式です
動画の例 — フェーズ B の軸は GPT Image 2 ではなく、そのモデル自身のスキーマから取得します(ツールが利用可能な場合は、軸ごとに質問を 1 つずつまとめて提示する同じ形式を使用します。テキストフォールバックの形式は次のとおりです):
- Duration: 5s (default) / 10s / 15s / custom (4–15s)
- Aspect ratio: adaptive (default) / 16:9 / 9:16 / 1:1 / 21:9 / 4:3 / 3:4
- Resolution: 720p (default) / 480p / 1080p / 4k
- Audio: On (default) / Off
Kling 3.0 Pro のようなモデルには resolution 軸はありませんが、generate_audio はあります。フェーズ B は、そのモデルのライブな parameters/aspect_ratios/duration_range のみから厳密に構成します。他のモデルの軸リストやデフォルト表示を再利用してはいけません。
ユーザーが後で別の言語で入力した場合は、同じメニューを reply_language で表示します。
選択したモデルのスキーマに存在するオプションのみを含めます。スキーマで異なる値(たとえば square、portrait、landscape、1024x1024、数値の秒数)が使われている場合は、その値をそのまま表示します。
8. 選択したモデルの parameters/durations/aspect_ratios から --param フラグを構成します。 選択された値を使うか、ユーザーがデフォルトのオプションを選んだ場合は、スキーマのデフォルト値を使います。
9. --wait --json を付けて実行します。
実行前チェック(コマンドを構成する直前に必ず行います): 現在の対象/機能/スタイルについてルーティングする前に、このユーザーメッセージに対して cawcut app list --json を実行しましたか? いいえの場合 → 停止して、今すぐステップ 1に戻ります。先に cawcut generate を呼び出してはいけません。以前のユーザーメッセージでのカタログ確認や「一致なし」は該当しません。
cawcut generate "<prompt>" \
--capability <capability> \
[--model "<model_id from JSON>"] \
[--param key=value ...] \
[--loop <1-4>] \
[--image|--video|--audio <file|url|asset_id>] \
--wait --download --json
配列/オブジェクト型のパラメーターは、値に JSON を使います。
--param 'colors=[]'
--param 'colors=["#004035","#008C65","#025940","#008C3E","#072621"]'
- すべてのセッションの後続処理で
workflow_idを取得します(機能やモデルを問いません)。
cawcut generate "<revised prompt>" \
--capability <cap> \
--workflow-id <id from prior JSON> \
--wait --download --json
メディア機能に切り替える場合(例:テキストから画像を生成した後に画像から画像を生成する場合)は、前の result_urls エントリーまたはユーザー提供ファイルを指定して --image/--video/--audio を渡します。ノードは横並びで追加され、BE は前の出力を自動で接続しません。
明らかに無関係なリクエストの場合、またはユーザーが新しいプロジェクトを求めている場合に限り、--workflow-id を省略します。
-
結果を提示します — JSON を解析し、すべての
result_urls/local_pathsを共有します。署名付き URL はクエリパラメーターを削除せず、そのまま使用します。同じ JSON に含まれるcredits_used(存在しない場合はcredits_estimate)とcredits_balance(またはcredits_balance_error)も、必ず報告します。同じセッション内で生成を連続して行った場合も、完了した生成ごとに毎回報告します。前のタスクですでに表示したからといって、これを省略してはいけません。 -
VN スキルに引き継ぎます — 結果を提示した後、すべての
local_pathsエントリー(1 つのみの場合はlocal_path)を添えて、必ずcawcut-vnに引き継ぎます。VN のプレビューとインポート、編集の流れ、何もしない場合の判断など、VN に関する判断はすべてこのスキルが担当します。VN がインストールされているかどうかも同様です。ここで VN のメニューをユーザーに尋ねたり、cawcut vnコマンドを実行したり、引き継ぎ先のスキルが担当する判断をやり直したりしてはいけません(一度だけ判断します)。
非同期タスク
CLI はポーリングの前に Task: <task_id> を出力します。復旧用の識別子として取得してください。
--waitを指定した場合:CLI はブロックし、成功すると結果 URL を出力します。--waitを指定しない場合:cawcut task status <task_id> --wait- タイムアウトした場合:
cawcut task status <task_id> --waitで再開します。
エラー
| 症状 | 対応 |
|---|---|
Token expired | ステップ 0 のログイン手順に従います。status=authenticated になった後、失敗したコマンドを 1 回だけ再試行します |
Unknown capability | cawcut capabilities list |
Category: content_policy | プロンプトを書き換え(疑わしいレジスター全体を削除)て 1 回だけ再試行し、その後プロバイダーを切り替えます — references/troubleshooting.md を参照 |
無効な --param/不明なモデル | このユーザーに対して cawcut capabilities list --models --schema --json --capability <cap> --model "<id>" を再実行します |
| CLI が見つからない | npm install -g @ubnt/cawcut(ステップ 0)。その後、上記のログイン手順に従います |
references/troubleshooting.md と references/models.md(ディスカバリーガイドのみ)を参照してください。