chore(i18n): refresh ja-JP translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-15 04:47:45 +00:00
parent 1e6d6ed00e
commit 61bea4e4bf
11 changed files with 2507 additions and 2685 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,35 +1,34 @@
---
read_when:
- メモリ昇格を自動的に実行したい
- 各 dreaming フェーズの役割を理解したい
- '`MEMORY.md`を汚さずに統合を調整したい'
summary: Light、Deep、REMフェーズとDream Diaryを備えたバックグラウンドメモリ統合
- メモリ昇格を自動的に実行したい場合
- 各Dreamingフェーズが何をするのかを理解したい場合
- MEMORY.mdを汚さずに統合を調整したい場合
summary: 軽い、深い、REMの各フェーズに加え、Dream Diaryを備えたバックグラウンドメモリ統合
title: Dreaming実験的
x-i18n:
generated_at: "2026-04-09T01:27:52Z"
generated_at: "2026-04-15T04:43:33Z"
model: gpt-5.4
provider: openai
source_hash: 26476eddb8260e1554098a6adbb069cf7f5e284cf2e09479c6d9d8f8b93280ef
source_hash: 5882a5068f2eabe54ca9893184e5385330a432b921870c38626399ce11c31e25
source_path: concepts/dreaming.md
workflow: 15
---
# Dreaming実験的
Dreamingは、`memory-core`のバックグラウンドメモリ統合システムです。
これによりOpenClawは、プロセスを説明可能かつレビュー可能な状態に保ちながら、
強い短期シグナルを永続的なメモリへ移動できます。
Dreamingは、`memory-core` におけるバックグラウンドメモリ統合システムです。
これにより、OpenClawは説明可能かつレビュー可能な形で、強い短期シグナルを永続的なメモリへ移すことができます。
Dreamingは**オプトイン**で、デフォルトでは無効です。
## Dreamingが書き込む内容
## Dreamingが書き込むもの
Dreamingは2種類の出力を保持します。
- `memory/.dreams/`内の**マシン状態**(リコールストア、フェーズシグナル、取り込みチェックポイント、ロック)。
- `DREAMS.md`(または既存の`dreams.md`)内の**人が読める出力**と、`memory/dreaming/<phase>/YYYY-MM-DD.md`配下の任意のフェーズレポートファイル。
- `memory/.dreams/` 内の**マシン状態**recall store、フェーズシグナル、取り込みチェックポイント、ロック)。
- `DREAMS.md`(または既存の `dreams.md`)内の**人が読める出力**と、`memory/dreaming/<phase>/YYYY-MM-DD.md` 配下の任意のフェーズレポートファイル。
長期メモリへの昇格は、引き続き`MEMORY.md`にのみ書き込まれます。
長期プロモーションは引き続き `MEMORY.md` にのみ書き込みます。
## フェーズモデル
@ -37,93 +36,85 @@ Dreamingは、協調して動作する3つのフェーズを使用します。
| フェーズ | 目的 | 永続的な書き込み |
| ----- | ----------------------------------------- | ----------------- |
| Light | 最近の短期素材を整理して段階化する | いいえ |
| Deep | 永続化候補をスコアリングして昇格する | はい`MEMORY.md` |
| REM | テーマと繰り返し現れる考えを振り返る | いいえ |
| Light | 最近の短期マテリアルを分類してステージする | なし |
| Deep | 永続化候補をスコアリングして昇格する | あり`MEMORY.md` |
| REM | テーマと繰り返し現れるアイデアを振り返る | なし |
これらのフェーズは内部実装の詳細であり、ユーザーが別々に設定する
「モード」ではありません。
これらのフェーズは内部実装の詳細であり、ユーザーが個別に設定する「モード」ではありません。
### Lightフェーズ
Lightフェーズは、最近の日次メモリシグナルとリコールトレースを取り込み、
重複を排除し、候補行を段階化します。
Lightフェーズは、最近の日次メモリシグナルとrecallトレースを取り込み、それらを重複排除して候補行をステージします。
- 利用可能な場合は、短期リコール状態、最近の日次メモリファイル、マスク済みセッショントランスクリプトから読み取ります。
- ストレージにインライン出力が含まれる場合、管理された`## Light Sleep`ブロックを書き込みます。
- 後続のDeepランキングのための強化シグナルを記録します。
- `MEMORY.md`には決して書き込みません。
- 利用可能な場合、短期recall状態、最近の日次メモリファイル、伏せ字化されたセッショントランスクリプトから読み取ります。
- ストレージにインライン出力が含まれる場合、管理された `## Light Sleep` ブロックを書き込みます。
- 後のDeepランキングのために強化シグナルを記録します。
- `MEMORY.md` には決して書き込みません。
### Deepフェーズ
Deepフェーズは、何を長期メモリにするかを決定します。
Deepフェーズは、何が長期メモリになるかを決定します。
- 重み付きスコアリングとしきい値ゲートを使って候補を順位付けします。
- 通過には`minScore`、`minRecallCount`、`minUniqueQueries`が必要です。
- 書き込む前にライブの日次ファイルからスニペットを再取得するため、古くなったスニペットや削除されたスニペットはスキップされます。
- 昇格したエントリを`MEMORY.md`に追記します。
- `DREAMS.md`に`## Deep Sleep`サマリーを書き込み、必要に応じて`memory/dreaming/deep/YYYY-MM-DD.md`にも書き込みます。
- 重み付きスコアリングとしきい値ゲートを使って候補をランキングします。
- `minScore`、`minRecallCount`、`minUniqueQueries` をすべて満たす必要があります。
- 書き込み前にライブの日次ファイルからスニペットを再取得するため、古いスニペットや削除済みスニペットはスキップされます。
- 昇格したエントリを `MEMORY.md` に追記します。
- `DREAMS.md` `## Deep Sleep` サマリーを書き込み、必要に応じて `memory/dreaming/deep/YYYY-MM-DD.md` にも書き込みます。
### REMフェーズ
REMフェーズは、パターンと内省的シグナルを抽出します。
- 最近の短期トレースからテーマと内省のサマリーを構築します。
- ストレージにインライン出力が含まれる場合、管理された`## REM Sleep`ブロックを書き込みます。
- Deepランキングで使用されるREM強化シグナルを記録します。
- `MEMORY.md`には決して書き込みません。
- 最近の短期トレースからテーマと振り返りサマリーを構築します。
- ストレージにインライン出力が含まれる場合、管理された `## REM Sleep` ブロックを書き込みます。
- Deepランキングで使れるREM強化シグナルを記録します。
- `MEMORY.md` には決して書き込みません。
## セッショントランスクリプトの取り込み
Dreamingは、マスク済みセッショントランスクリプトをDreamingコーパスに取り込めます。
トランスクリプトが利用可能な場合、それらは日次メモリシグナルやリコールトレースとともに
Lightフェーズに投入されます。個人的な内容や機微な内容は、取り込み前にマスクされます。
Dreamingは、伏せ字化されたセッショントランスクリプトをDreamingコーパスに取り込むことができます。
トランスクリプトが利用可能な場合、それらは日次メモリシグナルやrecallトレースとともにLightフェーズへ入力されます。個人的な内容や機微な内容は、取り込み前に伏せ字化されます。
## Dream Diary
Dreamingはまた、`DREAMS.md`内に物語形式の**Dream Diary**を保持します。
各フェーズに十分な素材がそろうと、`memory-core`はベストエフォートのバックグラウンド
subagentターンデフォルトのランタイムモデルを使用を実行し、短い日記エントリを追記します。
Dreamingは、`DREAMS.md` に物語形式の**Dream Diary**も保持します。
各フェーズに十分な材料がそろうと、`memory-core` はベストエフォートのバックグラウンドsubagentターンデフォルトのランタイムモデルを使用を実行し、短い日記エントリを追記します。
この日記はDreams UIで人が読むためのものであり、昇格ソースではありません。
この日記はDreams UIで人間が読むためのものであり、プロモーション元ではありません。
Dreamingによって生成された日記やレポートの成果物は、短期プロモーションの対象外です。`MEMORY.md` へ昇格できるのは、根拠のあるメモリスニペットだけです。
レビューや復旧作業のために、根拠付きの履歴バックフィルレーンもあります。
レビューや復旧作業のために、根拠付きの履歴バックフィル経路もあります。
- `memory rem-harness --path ... --grounded`は、過去の`YYYY-MM-DD.md`ノートから根拠付き日記出力をプレビューします。
- `memory rem-backfill --path ...`は、可逆な根拠付き日記エントリを`DREAMS.md`に書き込みます。
- `memory rem-backfill --path ... --stage-short-term`は、根拠付きの永続候補を、通常のDeepフェーズがすでに使っている短期エビデンスストアと同じ場所に段階化します。
- `memory rem-backfill --rollback`と`--rollback-short-term`は、通常の日記エントリやライブ短期リコールに触れずに、それらの段階化されたバックフィル成果物を削除します。
- `memory rem-harness --path ... --grounded` は、過去の `YYYY-MM-DD.md` ノートから生成される根拠付き日記出力をプレビューします。
- `memory rem-backfill --path ...` は、元に戻せる根拠付き日記エントリを `DREAMS.md` に書き込みます。
- `memory rem-backfill --path ... --stage-short-term` は、通常のDeepフェーズがすでに使用しているのと同じ短期エビデンスストアに、根拠付きの永続候補をステージします。
- `memory rem-backfill --rollback``--rollback-short-term` は、通常の日記エントリやライブの短期recallには触れずに、それらのステージ済みバックフィル成果物を削除します。
Control UIは同じ日記バックフィル/リセットフローを公開しているため、根拠付き候補が
昇格に値するか判断する前に、Dreamsシーンで結果を確認できます。Sceneには独立した
groundedレーンも表示されるため、どの段階化済み短期エントリが履歴リプレイ由来か、
どの昇格済みアイテムがgrounded主導だったかを確認でき、通常のライブ短期状態には
触れずにgrounded専用の段階化済みエントリだけを消去できます。
Control UIは同じ日記バックフィルリセットフローを提供しているため、根拠付き候補が昇格に値するかを判断する前に、Dreamsシーンで結果を確認できます。
このシーンは独立したgroundedレーンも表示し、どのステージ済み短期エントリが履歴リプレイ由来か、どの昇格済みアイテムがgrounded主導だったかを確認でき、通常のライブ短期状態に触れずにgrounded専用のステージ済みエントリだけをクリアできます。
## Deepランキングシグナル
Deepランキングは、6つの重み付きベースシグナルに加えてフェーズ強化を使用します。
Deepランキングは、6つの重み付き基本シグナルとフェーズ強化を使用します。
| シグナル | 重み | 説明 |
| ------------------- | ------ | ------------------------------------------------- |
| 頻度 | 0.24 | そのエントリが蓄積した短期シグナルの数 |
| 関連性 | 0.30 | そのエントリの平均取得品質 |
| クエリ多様性 | 0.15 | それが現れた個別のクエリ/日コンテキスト |
| 新しさ | 0.15 | 時間減衰付きの鮮度スコア |
| 統合 | 0.10 | 複数日にわたる再出現の強さ |
| 概念的豊かさ | 0.06 | スニペット/パス由来の概念タグ密度 |
| 頻度 | 0.24 | エントリが蓄積した短期シグナルの数 |
| 関連性 | 0.30 | エントリの平均取得品質 |
| クエリ多様性 | 0.15 | そのエントリが現れた異なるクエリ/日コンテキスト |
| 新しさ | 0.15 | 時間減衰を考慮した鮮度スコア |
| 統合 | 0.10 | 複数日にまたがる再出現の強さ |
| 概念的豊かさ | 0.06 | スニペット/パスから得られる概念タグ密度 |
LightフェーズとREMフェーズのヒットは、
`memory/.dreams/phase-signals.json`から小さな時間減衰付きブーストを追加します。
LightフェーズとREMフェーズのヒットは、`memory/.dreams/phase-signals.json` から小さな時間減衰付きブーストを追加します。
## スケジューリング
有効にすると、`memory-core`は完全なDreamingスイープ用のcronジョブを1つ自動管理します。
各スイープは順番にフェーズを実行します: light -> REM -> deep。
有効にすると、`memory-core` は完全なDreamingスイープのためのCronジョブを1つ自動管理します。各スイープは、light -> REM -> deep の順にフェーズを実行します。
デフォルトの実行間隔の動作:
| 設定 | デフォルト |
| 設定 | デフォルト |
| -------------------- | ----------- |
| `dreaming.frequency` | `0 3 * * *` |
@ -178,7 +169,7 @@ Dreamingを有効にする:
## CLIワークフロー
プレビューまたは手動適用には、CLI昇格を使用します。
プレビューまたは手動適用にはCLIプロモーションを使用します。
```bash
openclaw memory promote
@ -187,17 +178,16 @@ openclaw memory promote --limit 5
openclaw memory status --deep
```
手動の`memory promote`は、CLIフラグで上書きしない限り、
デフォルトでDeepフェーズのしきい値を使用します。
手動の `memory promote` は、CLIフラグで上書きしない限り、デフォルトでDeepフェーズのしきい値を使用します。
特定の候補が昇格する理由、または昇格しない理由を説明する:
特定の候補が昇格する、または昇格しない理由を説明する:
```bash
openclaw memory promote-explain "router vlan"
openclaw memory promote-explain "router vlan" --json
```
何も書き込まずに、REMの内省、候補となる真実、Deep昇格の出力をプレビューする:
何も書き込まずに、REMの振り返り、候補の事実、Deepプロモーション出力をプレビューする:
```bash
openclaw memory rem-harness
@ -206,29 +196,27 @@ openclaw memory rem-harness --json
## 主なデフォルト値
すべての設定は`plugins.entries.memory-core.config.dreaming`の下にあります。
すべての設定は `plugins.entries.memory-core.config.dreaming`下にあります。
| キー | デフォルト |
| キー | デフォルト |
| ----------- | ----------- |
| `enabled` | `false` |
| `frequency` | `0 3 * * *` |
フェーズポリシー、しきい値、ストレージ動作は内部実装の詳細であり、
ユーザー向け設定ではありません。
フェーズポリシー、しきい値、ストレージ動作は内部実装の詳細であり、ユーザー向け設定ではありません。
完全なキー一覧は[メモリ設定リファレンス](/ja-JP/reference/memory-config#dreaming-experimental)
を参照してください。
完全なキー一覧は、[メモリ設定リファレンス](/ja-JP/reference/memory-config#dreaming-experimental) を参照してください。
## Dreams UI
有効にすると、Gatewayの**Dreams**タブには次が表示されます。
- 現在のDreaming有効状態
- フェーズレベルのステータスと管理対象スイープの有無
- 短期、grounded、シグナル、本日昇格済みの件数
- 次回スケジュール実行の時刻
- 段階化された履歴リプレイエントリ用の独立したgrounded Sceneレーン
- `doctor.memory.dreamDiary`に支えられた、展開可能なDream Diaryリーダー
- フェーズレベルの状態と管理対象スイープの有無
- 短期、grounded、シグナル、本日昇格済みの件数
- 次回の予定実行時刻
- ステージ済みの履歴リプレイエントリ用の独立したgroundedシーンレーン
- `doctor.memory.dreamDiary` を基盤とする展開可能なDream Diaryリーダー
## 関連

View File

@ -1,28 +1,28 @@
---
read_when:
- 自分のGPUマシンからモデルを提供したい場合
- LM StudioまたはOpenAI互換プロキシを設定している場合
- LM StudioまたはOpenAI互換プロキシを接続している場合
- 最も安全なローカルモデルのガイダンスが必要な場合
summary: OpenClawをローカルLLMLM Studio、vLLM、LiteLLM、カスタムOpenAIエンドポイントで実行する
title: ローカルモデル
x-i18n:
generated_at: "2026-04-14T13:04:22Z"
generated_at: "2026-04-15T04:43:32Z"
model: gpt-5.4
provider: openai
source_hash: 1544c522357ba4b18dfa6d05ea8d60c7c6262281b53863d9aee7002464703ca7
source_hash: 8778cc1c623a356ff3cf306c494c046887f9417a70ec71e659e4a8aae912a780
source_path: gateway/local-models.md
workflow: 15
---
# ローカルモデル
ローカル運用は可能ですが、OpenClawは大きなコンテキストと強力なプロンプトインジェクション耐性を前提としています。小規模なカードではコンテキストが切り詰められ、安全性も低下します。目標は高く設定してください: **最大構成のMac Studioを2台以上、または同等のGPUリグ約$30k以上**。単一の**24 GB** GPUで動かせるのは、より軽いプロンプトに限られ、レイテンシも高くなります。実行可能な中で**最大 / フルサイズのモデルバリアント**を使ってください。強く量子化された、または「small」なチェックポイントは、プロンプトインジェクションのリスクを高めます([Security](/ja-JP/gateway/security)を参照)。
ローカルでも運用は可能ですが、OpenClawは大きなコンテキストと、プロンプトインジェクションに対する強力な防御を前提としています。小規模なGPUカードではコンテキストが切り詰められ、安全性も低下します。目安としては、**最大構成のMac Studio 2台以上、または同等のGPUリグ約3万ドル以上** を推奨します。**24 GB** のGPU 1枚でも、より軽いプロンプトで高いレイテンシを許容すれば動作します。実行できる範囲で **最大級 / フルサイズのモデルバリアント** を使ってください。強く量子化されたものや「small」チェックポイントは、プロンプトインジェクションのリスクを高めます([Security](/ja-JP/gateway/security)を参照)。
最も手間の少ないローカルセットアップを望むなら、[LM Studio](/ja-JP/providers/lmstudio)または[Ollama](/ja-JP/providers/ollama)から始めて、`openclaw onboard`を実行してください。このページは、より高性能なローカルスタックやカスタムのOpenAI互換ローカルサーバー向けの、方針を明確にしたガイドです。
最も手間の少ないローカルセットアップを求めるなら、まずは [LM Studio](/ja-JP/providers/lmstudio) または [Ollama](/ja-JP/providers/ollama) と `openclaw onboard` から始めてください。このページは、より高性能なローカル構成や、カスタムのOpenAI互換ローカルサーバー向けの、方針を明確にしたガイドです。
## 推奨: LM Studio + 大規模ローカルモデルResponses API
現時点で最適なローカルスタックです。LM Studioに大規模モデルたとえばフルサイズのQwen、DeepSeek、Llamaビルドを読み込み、ローカルサーバーデフォルトは`http://127.0.0.1:1234`を有効にし、推論を最終テキストから分離するためにResponses APIを使用します。
現時点で最良のローカル構成です。LM Studioで大規模モデルたとえば、フルサイズのQwen、DeepSeek、Llamaビルドを読み込み、ローカルサーバーデフォルトでは `http://127.0.0.1:1234`を有効にし、Responses APIを使って推論を最終テキストから分離します。
```json5
{
@ -62,15 +62,15 @@ x-i18n:
**セットアップチェックリスト**
- LM Studioをインストール: [https://lmstudio.ai](https://lmstudio.ai)
- LM Studioで、**利用可能な中で最大のモデルビルド**をダウンロードし「small」や強い量子化バリアントは避ける、サーバーを起動して、`http://127.0.0.1:1234/v1/models`に一覧表示されることを確認します。
- `my-local-model`を、LM Studioに表示されている実際のモデルIDに置き換えます。
- モデルは読み込んだままにしてください。コールドロードは起動レイテンシを増やします。
- LM Studioのビルドに応じて`contextWindow`と`maxTokens`を調整します。
- WhatsAppでは、最終テキストだけが送信されるよう、Responses APIを使ってください。
- LM Studioで、利用可能な **最大のモデルビルド** をダウンロードし「small」や強い量子化バリアントは避ける、サーバーを起動して、`http://127.0.0.1:1234/v1/models` に表示されることを確認します。
- `my-local-model` を、LM Studioに表示される実際のモデルIDに置き換えます。
- モデルは読み込んだままにしてください。コールドロードは起動時のレイテンシを増やします。
- LM Studioのビルドに合わせて `contextWindow` / `maxTokens` を調整します。
- WhatsAppでは、最終テキストのみが送信されるよう、Responses APIを使ってください。
ローカル運用時でもホスト型モデルは設定しておいてください。`models.mode: "merge"`を使えば、フォールバックを利用可能なままにできます
ローカル実行時でもホスト型モデルは設定したままにしておき、フォールバックを利用できるよう `models.mode: "merge"` を使ってください
### ハイブリッド構成: ホスト型をプライマリ、ローカルをフォールバック
### ハイブリッド構成: ホスト型を、ローカルをフォールバック
```json5
{
@ -111,18 +111,18 @@ x-i18n:
}
```
### ローカル優先、ホスト型をセーフティネットにする構成
### ローカル優先、ホスト型を安全網として利用
プライマリとフォールバックの順序を入れ替えてください。`providers`ブロックと`models.mode: "merge"`はそのまま維持し、ローカルマシンが停止しているときにSonnetやOpusへフォールバックできるようにします。
主とフォールバックの順序を入れ替えてください。providersブロックと `models.mode: "merge"` はそのままにしておけば、ローカルマシンが停止したときにSonnetやOpusへフォールバックできます。
### リージョナルホスティング / データルーティング
- ホスト型のMiniMax/Kimi/GLMバリアントは、リージョン固定エンドポイント(例: USホスト付きでOpenRouter上にも存在します。そこでリージョナルバリアントを選べば、`models.mode: "merge"`を使ったAnthropic/OpenAIフォールバックを維持しながら、トラフィックを選択した法域内にとどめられます。
- ローカル専用は依然として最も強いプライバシー手段です。ホスト型のリージョナルルーティングは、プロバイダー機能が必要だがデータフローも制御したい場合の中間的な選択肢です。
- ホスト型のMiniMax/Kimi/GLMバリアントは、地域固定エンドポイント(たとえば米国ホスト付きでOpenRouter上にも存在します。そこでリージョナルバリアントを選べば、`models.mode: "merge"` によるAnthropic/OpenAIフォールバックを維持しつつ、トラフィックを希望する法域内にとどめられます。
- ローカル専用が最も強いプライバシー経路です。ホスト型のリージョナルルーティングは、プロバイダー機能は必要だがデータフローも制御したい場合の中間案です。
## その他のOpenAI互換ローカルプロキシ
vLLM、LiteLLM、OAI-proxy、またはカスタムGatewayでも、OpenAI形式の`/v1`エンドポイントを公開していれば動作します。上記のプロバイダーブロックを、利用するエンドポイントとモデルIDに置き換えてください。
vLLM、LiteLLM、OAI-proxy、またはカスタムGatewayは、OpenAI形式の `/v1` エンドポイントを公開していれば利用できます。上のproviderブロックを、あなたのエンドポイントとモデルIDに置き換えてください。
```json5
{
@ -150,26 +150,37 @@ vLLM、LiteLLM、OAI-proxy、またはカスタムGatewayでも、OpenAI形式
}
```
ホスト型モデルをフォールバックとして引き続き使えるように、`models.mode: "merge"`を維持してください。
ホスト型モデルをフォールバックとして使い続けられるよう、`models.mode: "merge"` は維持してください。
ローカル / プロキシされた`/v1`バックエンドの動作に関する注意:
ローカル / プロキシ経由の `/v1` バックエンドに関する動作メモ:
- OpenClawはこれらを、ネイティブなOpenAIエンドポイントではなく、プロキシ型のOpenAI互換ルートとして扱います
- ここではOpenAIネイティブ専用のリクエスト整形は適用されません: `service_tier`、Responsesの`store`、OpenAI reasoning互換ペイロード整形、プロンプトキャッシュヒントは使われません
- 隠しOpenClaw属性ヘッダー`originator`、`version`、`User-Agent`は、これらのカスタムプロキシURLには挿入されません
- OpenClawはこれらを、ネイティブな
OpenAIエンドポイントではなく、プロキシ形式のOpenAI互換ルートとして扱います
- そのため、OpenAIネイティブ専用のリクエスト整形はここでは適用されません: `service_tier` なし、Responsesの `store` なし、OpenAI推論互換ペイロード整形なし、プロンプトキャッシュヒントなし
- 非表示のOpenClaw属性ヘッダー`originator`、`version`、`User-Agent`
は、これらのカスタムプロキシURLには注入されません
より厳格なOpenAI互換バックエンド向けの互換性に関する注意:
より厳格なOpenAI互換バックエンド向けの互換性メモ:
- 一部のサーバーは、Chat Completionsで構造化コンテンツパート配列ではなく、文字列の`messages[].content`しか受け付けません。そのようなエンドポイントでは、`models.providers.<provider>.models[].compat.requiresStringContent: true`を設定してください。
- 一部の小規模または厳格なローカルバックエンドは、特にツールスキーマが含まれる場合、OpenClawの完全なエージェントランタイム用プロンプト形状では不安定です。バックエンドが小さな直接`/v1/chat/completions`呼び出しでは動作しても、通常のOpenClawエージェントターンで失敗する場合は、まず`models.providers.<provider>.models[].compat.supportsTools: false`を試してください。
- それでも大きめのOpenClaw実行時にのみバックエンドが失敗する場合、残る問題は通常、OpenClawのトランスポート層ではなく、上流のモデル / サーバー容量またはバックエンドのバグです。
- 一部のサーバーは、Chat Completionsで構造化されたcontent-part配列ではなく、文字列の `messages[].content` のみを受け付けます。そのようなエンドポイントでは、
`models.providers.<provider>.models[].compat.requiresStringContent: true` を設定してください。
- より小規模または厳格なローカルバックエンドの中には、OpenClawの完全な
エージェントランタイムのプロンプト形式、とくにツールスキーマが含まれる場合に不安定になるものがあります。バックエンドが小さな直接の `/v1/chat/completions` 呼び出しでは動作するのに、通常の
OpenClawエージェントターンでは失敗する場合、まず
`agents.defaults.localModelMode: "lean"` を試して、`browser`、`cron`、`message` のような重量級のデフォルトツールを外してください。それでも失敗するなら、
`models.providers.<provider>.models[].compat.supportsTools: false` を試してください。
- それでも大きめのOpenClaw実行時だけバックエンドが失敗する場合、残る問題は通常、
OpenClawのトランスポート層ではなく、上流のモデル / サーバー容量、またはバックエンドのバグです。
## トラブルシューティング
- Gatewayはプロキシに到達できますか `curl http://127.0.0.1:1234/v1/models`
- LM Studioのモデルがアンロードされていますか 再読み込みしてください。コールドスタートは「ハングしている」ように見える一般的な原因です。
- 検出されたコンテキストウィンドウが**32k**未満の場合、OpenClawは警告を出し、**16k**未満ではブロックします。その事前チェックに引っかかった場合は、サーバー / モデルのコンテキスト上限を引き上げるか、より大きなモデルを選んでください。
- コンテキストエラーですか? `contextWindow`を下げるか、サーバー上限を引き上げてください。
- OpenAI互換サーバーが`messages[].content ... expected a string`を返しますか? そのモデルエントリーに`compat.requiresStringContent: true`を追加してください。
- 小さな直接`/v1/chat/completions`呼び出しは動作するのに、`openclaw infer model run`がGemmaや他のローカルモデルで失敗しますか まず`compat.supportsTools: false`でツールスキーマを無効にしてから再テストしてください。それでも大きめのOpenClawプロンプトでのみサーバーがクラッシュする場合は、上流のサーバー / モデルの制限として扱ってください。
- 安全性: ローカルモデルはプロバイダー側フィルターを通りません。プロンプトインジェクションの影響範囲を制限するため、エージェントは用途を絞り、Compactionを有効にしてください。
- Gatewayはそのプロキシに到達できますか `curl http://127.0.0.1:1234/v1/models`
- LM Studioのモデルがアンロードされていませんか 再読み込みしてください。コールドスタートは「停止しているように見える」一般的な原因です。
- OpenClawは、検出されたコンテキストウィンドウが **32k** 未満だと警告し、**16k** 未満だとブロックします。その事前チェックに引っかかった場合は、サーバー / モデルのコンテキスト制限を引き上げるか、より大きなモデルを選んでください。
- コンテキストエラーが出ますか? `contextWindow` を下げるか、サーバー側の制限を引き上げてください。
- OpenAI互換サーバーが `messages[].content ... expected a string` を返しますか?
そのモデルエントリに `compat.requiresStringContent: true` を追加してください。
- 小さな直接の `/v1/chat/completions` 呼び出しは動くのに、`openclaw infer model run`
がGemmaなどのローカルモデルで失敗しますか まず
`compat.supportsTools: false` でツールスキーマを無効化してから再テストしてください。それでもより大きなOpenClawプロンプトでのみサーバーがクラッシュするなら、上流のサーバー / モデルの制限として扱ってください。
- 安全性: ローカルモデルはプロバイダー側フィルターを通らないため、エージェントは狭い用途に絞り、Compactionを有効にして、プロンプトインジェクションの影響範囲を限定してください。

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,66 +1,66 @@
---
read_when:
- OpenClaw Plugin を構築している場合
- Plugin の設定スキーマを提供する必要がある場合、または Plugin の検証エラーをデバッグする必要がある場合
summary: Plugin マニフェスト + JSON スキーマ要件(厳格な設定検証)
title: Plugin マニフェスト
- あなたはOpenClawのPluginを構築しています
- Pluginの設定スキーマを提供するか、Pluginの検証エラーをデバッグする必要があります
summary: Pluginマニフェスト + JSONスキーマ要件厳格な設定検証
title: Pluginマニフェスト
x-i18n:
generated_at: "2026-04-12T23:28:55Z"
generated_at: "2026-04-15T04:43:35Z"
model: gpt-5.4
provider: openai
source_hash: 93b57c7373e4ccd521b10945346db67991543bd2bed4cc8b6641e1f215b48579
source_hash: ba2183bfa8802871e4ef33a0ebea290606e8351e9e83e25ee72456addb768730
source_path: plugins/manifest.md
workflow: 15
---
# Plugin マニフェスト(`openclaw.plugin.json`
# Pluginマニフェスト`openclaw.plugin.json`
このページは、**ネイティブ OpenClaw Plugin マニフェスト**のみを対象としています。
このページは、**ネイティブなOpenClaw Pluginマニフェスト**のみを対象としています。
互換バンドルレイアウトについては、[Plugin bundles](/ja-JP/plugins/bundles) を参照してください。
互換性のあるバンドルレイアウトについては、[Plugin bundles](/ja-JP/plugins/bundles)を参照してください。
互換バンドル形式では、異なるマニフェストファイルを使用します。
- Codex バンドル: `.codex-plugin/plugin.json`
- Claude バンドル: `.claude-plugin/plugin.json` またはマニフェストなしのデフォルト Claude コンポーネントレイアウト
- Cursor バンドル: `.cursor-plugin/plugin.json`
- Codexバンドル: `.codex-plugin/plugin.json`
- Claudeバンドル: `.claude-plugin/plugin.json` またはマニフェストなしのデフォルトClaudeコンポーネントレイアウト
- Cursorバンドル: `.cursor-plugin/plugin.json`
OpenClaw はそれらのバンドルレイアウトも自動検出しますが、ここで説明する `openclaw.plugin.json` スキーマに対しては検証されません。
OpenClawはこれらのバンドルレイアウトも自動検出しますが、ここで説明する`openclaw.plugin.json`スキーマに対しては検証されません。
互換バンドルについて、OpenClaw は現在、バンドルメタデータに加えて、宣言された skill ルート、Claude コマンドルート、Claude バンドルの `settings.json` デフォルト、Claude バンドルの LSP デフォルト、および、そのレイアウトが OpenClaw ランタイムの期待に一致する場合の対応 hook pack を読み取ります。
互換バンドルについて、OpenClawは現在、レイアウトがOpenClawランタイムの期待に一致する場合、バンドルメタデータに加えて、宣言されたskillルート、Claudeコマンドルート、Claudeバンドルの`settings.json`デフォルト値、ClaudeバンドルのLSPデフォルト値、対応するフックパックを読み取ります。
すべてのネイティブ OpenClaw Plugin は、**plugin ルート**に `openclaw.plugin.json` ファイルを必ず含める必要があります。OpenClaw はこのマニフェストを使用して、**plugin コードを実行せずに**設定を検証します。マニフェストが存在しない、または無効な場合は plugin エラーとして扱われ、設定検証をブロックします。
すべてのネイティブOpenClaw Pluginは、**pluginルート**に`openclaw.plugin.json`ファイルを**必ず**含める必要があります。OpenClawはこのマニフェストを使って、**Pluginコードを実行せずに**設定を検証します。マニフェストが存在しない、または無効な場合はPluginエラーとして扱われ、設定の検証はブロックされます。
完全な plugin システムガイドについては、[Plugins](/ja-JP/tools/plugin) を参照してください。
ネイティブ capability モデルと現在の外部互換性ガイダンスについては、
[Capability model](/ja-JP/plugins/architecture#public-capability-model) を参照してください。
完全なPluginシステムガイドについては、[Plugins](/ja-JP/tools/plugin)を参照してください。
ネイティブのケーパビリティモデルと現在の外部互換性ガイダンスについては、[Capability model](/ja-JP/plugins/architecture#public-capability-model)を参照してください。
## このファイルの役割
`openclaw.plugin.json` は、OpenClaw が plugin コードを読み込む前に読むメタデータです。
`openclaw.plugin.json`は、OpenClawがあなたのPluginコードを読み込む前に読み取るメタデータです。
用途:
- plugin の識別情報
- 設定検証
- plugin ランタイムを起動しなくても利用できる認証およびオンボーディングのメタデータ
- ランタイム読み込み前にコントロールプレーンの各サーフェスが確認できる軽量なアクティベーションヒント
- ランタイム読み込み前にセットアップ/オンボーディングの各サーフェスが確認できる軽量なセットアップ記述子
- plugin ランタイム読み込み前に解決されるべきエイリアスおよび自動有効化メタデータ
- plugin ランタイム読み込み前に plugin を自動アクティベートすべきモデルファミリー所有権の簡略メタデータ
- バンドル互換配線およびコントラクト網羅に使用される静的 capability 所有スナップショット
- ランタイムを読み込まずにカタログおよび検証サーフェスへマージされるべきチャネル固有の設定メタデータ
- 設定 UI ヒント
- Pluginの識別情報
- 設定の検証
- Pluginランタイムを起動せずに利用可能であるべき認証およびオンボーディングのメタデータ
- コントロールプレーンのサーフェスがランタイム読み込み前に確認できる、低コストなアクティベーションヒント
- セットアップ/オンボーディングのサーフェスがランタイム読み込み前に確認できる、低コストなセットアップ記述子
- Pluginランタイム読み込み前に解決されるべきエイリアスおよび自動有効化メタデータ
- Pluginランタイム読み込み前にPluginを自動アクティベートすべきモデルファミリー所有権の短縮メタデータ
- バンドル互換配線とコントラクトカバレッジに使われる静的なケーパビリティ所有権スナップショット
- 共有`openclaw qa`ホストがPluginランタイム読み込み前に確認できる、低コストなQAランナーメタデータ
- ランタイムを読み込まずにカタログおよび検証サーフェスにマージされるべき、チャネル固有の設定メタデータ
- 設定UIのヒント
用途ではないもの:
- ランタイム動作の登録
- コードのエントリーポイント宣言
- npm install メタデータ
- コードのエントリーポイント宣言
- npmインストールメタデータ
これらは plugin コードと `package.json` に属します。
これらはPluginコードおよび`package.json`に属します。
## 最小例
## 最小
```json
{
@ -73,7 +73,7 @@ OpenClaw はそれらのバンドルレイアウトも自動検出しますが
}
```
## リッチな例
## 詳細な例
```json
{
@ -129,62 +129,63 @@ OpenClaw はそれらのバンドルレイアウトも自動検出しますが
}
```
## 最上位フィールドのリファレンス
## トップレベルフィールドのリファレンス
| フィールド | 必須 | 型 | 意味 |
| ----------------------------------- | -------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `id` | はい | `string` | 正式な plugin ID。これは `plugins.entries.<id>` で使用される ID です。 |
| `configSchema` | はい | `object` | この plugin の設定に対するインライン JSON Schema。 |
| `enabledByDefault` | いいえ | `true` | バンドルされた plugin をデフォルトで有効としてマークします。省略するか、`true` 以外の値を設定すると、その plugin はデフォルトで無効のままになります。 |
| `legacyPluginIds` | いいえ | `string[]` | この正式な plugin ID に正規化されるレガシー ID。 |
| `autoEnableWhenConfiguredProviders` | いいえ | `string[]` | 認証、設定、またはモデル参照でそれらが言及されたときに、この plugin を自動有効化すべき provider ID。 |
| `kind` | いいえ | `"memory"` \| `"context-engine"` | `plugins.slots.*` で使用される排他的な plugin 種別を宣言します。 |
| `channels` | いいえ | `string[]` | この plugin が所有するチャネル ID。検出と設定検証に使用されます。 |
| `providers` | いいえ | `string[]` | この plugin が所有する provider ID。 |
| `modelSupport` | いいえ | `object` | ランタイム前に plugin を自動ロードするために使用される、マニフェスト所有のモデルファミリー簡略メタデータ。 |
| `cliBackends` | いいえ | `string[]` | この plugin が所有する CLI 推論バックエンド ID。明示的な設定参照からの起動時自動アクティベーションに使用されます。 |
| `commandAliases` | いいえ | `object[]` | ランタイム読み込み前に plugin を認識した設定および CLI 診断を生成すべき、この plugin が所有するコマンド名。 |
| `providerAuthEnvVars` | いいえ | `Record<string, string[]>` | OpenClaw が plugin コードを読み込まずに確認できる、軽量な provider 認証用環境変数メタデータ。 |
| `providerAuthAliases` | いいえ | `Record<string, string>` | 認証検索のために別の provider ID を再利用すべき provider ID。たとえば、ベース provider の API キーと認証プロファイルを共有する coding provider などです。 |
| `channelEnvVars` | いいえ | `Record<string, string[]>` | OpenClaw が plugin コードを読み込まずに確認できる、軽量なチャネル環境変数メタデータ。env 駆動のチャネルセットアップや、汎用の起動/設定ヘルパーが参照すべき認証サーフェスに使用します。 |
| `providerAuthChoices` | いいえ | `object[]` | オンボーディングピッカー、優先 provider 解決、単純な CLI フラグ配線のための軽量な認証選択メタデータ。 |
| `activation` | いいえ | `object` | provider、command、channel、route、および capability トリガー読み込みのための軽量なアクティベーションヒント。メタデータのみであり、実際の動作は引き続き plugin ランタイムが所有します。 |
| `setup` | いいえ | `object` | 検出およびセットアップの各サーフェスが plugin ランタイムを読み込まずに確認できる、軽量なセットアップ/オンボーディング記述子。 |
| `contracts` | いいえ | `object` | speech、realtime transcription、realtime voice、media-understanding、image-generation、music-generation、video-generation、web-fetch、web search、およびツール所有権のための静的なバンドル capability スナップショット。 |
| `channelConfigs` | いいえ | `Record<string, object>` | ランタイム読み込み前に検出および検証サーフェスへマージされる、マニフェスト所有のチャネル設定メタデータ。 |
| `skills` | いいえ | `string[]` | plugin ルートからの相対パスで指定する、読み込む Skills ディレクトリ。 |
| `name` | いいえ | `string` | 人が読むための plugin 名。 |
| `description` | いいえ | `string` | plugin サーフェスに表示される短い要約。 |
| `version` | いいえ | `string` | 情報表示用の plugin バージョン。 |
| `uiHints` | いいえ | `Record<string, object>` | 設定フィールド用の UI ラベル、プレースホルダー、および機密性ヒント。 |
| フィールド | 必須 | 型 | 意味 |
| ------------------------------------- | -------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `id` | はい | `string` | 正規のPlugin idです。このidは`plugins.entries.<id>`で使用されます。 |
| `configSchema` | はい | `object` | このPlugin設定用のインラインJSON Schemaです。 |
| `enabledByDefault` | いいえ | `true` | バンドルされたPluginをデフォルトで有効としてマークします。デフォルトで無効のままにするには、省略するか、`true`以外の値を設定します。 |
| `legacyPluginIds` | いいえ | `string[]` | この正規Plugin idに正規化されるレガシーidです。 |
| `autoEnableWhenConfiguredProviders` | いいえ | `string[]` | 認証、設定、またはモデル参照で言及されたときに、このPluginを自動有効化すべきprovider idです。 |
| `kind` | いいえ | `"memory"` \| `"context-engine"` | `plugins.slots.*`で使用される排他的なPlugin種別を宣言します。 |
| `channels` | いいえ | `string[]` | このPluginが所有するchannel idです。検出と設定検証に使用されます。 |
| `providers` | いいえ | `string[]` | このPluginが所有するprovider idです。 |
| `modelSupport` | いいえ | `object` | ランタイム前にPluginを自動ロードするために使われる、マニフェスト所有の短縮モデルファミリーメタデータです。 |
| `cliBackends` | いいえ | `string[]` | このPluginが所有するCLI推論バックエンドidです。明示的な設定参照からの起動時自動アクティベーションに使用されます。 |
| `commandAliases` | いいえ | `object[]` | ランタイム読み込み前に、Pluginを認識した設定およびCLI診断を生成すべき、このPluginが所有するコマンド名です。 |
| `providerAuthEnvVars` | いいえ | `Record<string, string[]>` | OpenClawがPluginコードを読み込まずに確認できる、低コストなprovider認証環境変数メタデータです。 |
| `providerAuthAliases` | いいえ | `Record<string, string>` | 認証ルックアップに別のprovider idを再利用すべきprovider idです。たとえば、ベースproviderのAPIキーと認証プロファイルを共有するcoding providerなどです。 |
| `channelEnvVars` | いいえ | `Record<string, string[]>` | OpenClawがPluginコードを読み込まずに確認できる、低コストなchannel環境変数メタデータです。環境変数駆動のchannelセットアップや、汎用の起動/設定ヘルパーが認識すべき認証サーフェスにはこれを使用してください。 |
| `providerAuthChoices` | いいえ | `object[]` | オンボーディングピッカー、優先provider解決、単純なCLIフラグ配線のための、低コストな認証選択メタデータです。 |
| `activation` | いいえ | `object` | provider、command、channel、route、およびケーパビリティトリガーによる読み込みのための、低コストなアクティベーションヒントです。メタデータのみであり、実際の動作は引き続きPluginランタイムが所有します。 |
| `setup` | いいえ | `object` | 検出およびセットアップのサーフェスがPluginランタイムを読み込まずに確認できる、低コストなセットアップ/オンボーディング記述子です。 |
| `qaRunners` | いいえ | `object[]` | 共有`openclaw qa`ホストがPluginランタイム読み込み前に使用する、低コストなQAランナー記述子です。 |
| `contracts` | いいえ | `object` | speech、realtime transcription、realtime voice、media-understanding、image-generation、music-generation、video-generation、web-fetch、web search、およびツール所有権のための静的なバンドル済みケーパビリティスナップショットです。 |
| `channelConfigs` | いいえ | `Record<string, object>` | ランタイム読み込み前に検出および検証サーフェスへマージされる、マニフェスト所有のchannel設定メタデータです。 |
| `skills` | いいえ | `string[]` | pluginルートからの相対パスで指定する、読み込むSkillsディレクトリです。 |
| `name` | いいえ | `string` | 人が読めるPlugin名です。 |
| `description` | いいえ | `string` | Pluginサーフェスに表示される短い要約です。 |
| `version` | いいえ | `string` | 情報用のPluginバージョンです。 |
| `uiHints` | いいえ | `Record<string, object>` | 設定フィールド用のUIラベル、プレースホルダー、および機密性ヒントです。 |
## `providerAuthChoices` リファレンス
## `providerAuthChoices`リファレンス
`providerAuthChoices` エントリは、1 つのオンボーディングまたは認証の選択肢を記述します。
OpenClaw は provider ランタイムを読み込む前にこれを読み取ります。
各`providerAuthChoices`エントリは、1つのオンボーディングまたは認証の選択肢を記述します。
OpenClawはこれをproviderランタイムが読み込まれる前に読み取ります。
| フィールド | 必須 | 型 | 意味 |
| --------------------- | -------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `provider` | はい | `string` | この選択肢が属する provider ID。 |
| `method` | はい | `string` | ディスパッチ先の認証方式 ID。 |
| `choiceId` | はい | `string` | オンボーディングおよび CLI フローで使用される安定した認証選択肢 ID。 |
| `choiceLabel` | いいえ | `string` | ユーザー向けラベル。省略した場合、OpenClaw `choiceId` にフォールバックします。 |
| `choiceHint` | いいえ | `string` | ピッカー用の短い補助テキスト。 |
| `assistantPriority` | いいえ | `number` | アシスタント主導のインタラクティブピッカーでは、値が小さいほど先に並びます。 |
| `assistantVisibility` | いいえ | `"visible"` \| `"manual-only"` | アシスタントのピッカーではこの選択肢を非表示にしつつ、手動 CLI 選択は引き続き許可します。 |
| `deprecatedChoiceIds` | いいえ | `string[]` | ユーザーをこの置き換え先の選択肢にリダイレクトすべきレガシー選択肢 ID。 |
| `groupId` | いいえ | `string` | 関連する選択肢をグループ化するための任意のグループ ID。 |
| `groupLabel` | いいえ | `string` | そのグループのユーザー向けラベル。 |
| `groupHint` | いいえ | `string` | グループ用の短い補助テキスト。 |
| `optionKey` | いいえ | `string` | 単一フラグの単純な認証フロー用の内部オプションキー。 |
| `cliFlag` | いいえ | `string` | `--openrouter-api-key` のような CLI フラグ名。 |
| `cliOption` | いいえ | `string` | `--openrouter-api-key <key>` のような完全な CLI オプション形式。 |
| `cliDescription` | いいえ | `string` | CLI ヘルプで使用される説明。 |
| `onboardingScopes` | いいえ | `Array<"text-inference" \| "image-generation">` | この選択肢をどのオンボーディングサーフェスに表示するか。省略した場合、デフォルトは `["text-inference"]` です。 |
| フィールド | 必須 | 型 | 意味 |
| --------------------- | -------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| `provider` | はい | `string` | この選択肢が属するprovider idです。 |
| `method` | はい | `string` | ディスパッチ先の認証メソッドidです。 |
| `choiceId` | はい | `string` | オンボーディングおよびCLIフローで使われる、安定した認証選択肢idです。 |
| `choiceLabel` | いいえ | `string` | ユーザー向けラベルです。省略した場合、OpenClawは`choiceId`にフォールバックします。 |
| `choiceHint` | いいえ | `string` | ピッカー用の短い補助テキストです |
| `assistantPriority` | いいえ | `number` | 値が小さいほど、assistant主導のインタラクティブピッカーで先に並びます。 |
| `assistantVisibility` | いいえ | `"visible"` \| `"manual-only"` | assistantピッカーではこの選択肢を非表示にしつつ、手動CLI選択は引き続き許可します。 |
| `deprecatedChoiceIds` | いいえ | `string[]` | この置き換え選択肢へユーザーをリダイレクトすべき、レガシーな選択肢idです。 |
| `groupId` | いいえ | `string` | 関連する選択肢をグループ化するための任意のグループidです。 |
| `groupLabel` | いいえ | `string` | そのグループのユーザー向けラベルです |
| `groupHint` | いいえ | `string` | そのグループ用の短い補助テキストです |
| `optionKey` | いいえ | `string` | 単一フラグの単純な認証フロー用の内部オプションキーです |
| `cliFlag` | いいえ | `string` | `--openrouter-api-key`のようなCLIフラグ名です |
| `cliOption` | いいえ | `string` | `--openrouter-api-key <key>`のような完全なCLIオプション形式です |
| `cliDescription` | いいえ | `string` | CLIヘルプで使われる説明です。 |
| `onboardingScopes` | いいえ | `Array<"text-inference" \| "image-generation">` | この選択肢を表示すべきオンボーディングサーフェスです。省略した場合、デフォルトは`["text-inference"]`です。 |
## `commandAliases` リファレンス
## `commandAliases`リファレンス
`commandAliases` は、ユーザーが誤って `plugins.allow` に入れたり、ルート CLI コマンドとして実行しようとしたりする可能性がある、plugin 所有のランタイムコマンド名がある場合に使用します。OpenClaw は、このメタデータを使用して、plugin ランタイムコードを import せずに診断を行います。
Pluginが、ユーザーが誤って`plugins.allow`に入れたり、ルートCLIコマンドとして実行しようとしたりする可能性があるランタイムコマンド名を所有している場合は、`commandAliases`を使用します。OpenClawはこのメタデータを、Pluginランタイムコードをインポートせずに診断のために使用します。
```json
{
@ -198,18 +199,37 @@ OpenClaw は provider ランタイムを読み込む前にこれを読み取り
}
```
| フィールド | 必須 | 型 | 意味 |
| ------------ | -------- | ----------------- | ----------------------------------------------------------------------- |
| `name` | はい | `string` | この plugin に属するコマンド名。 |
| `kind` | いいえ | `"runtime-slash"` | このエイリアスを、ルート CLI コマンドではなくチャットのスラッシュコマンドとしてマークします。 |
| `cliCommand` | いいえ | `string` | 存在する場合、CLI 操作向けに提案する関連ルート CLI コマンド。 |
| フィールド | 必須 | 型 | 意味 |
| ------------ | -------- | ----------------- | ----------------------------------------------------------------------------- |
| `name` | はい | `string` | このPluginに属するコマンド名です。 |
| `kind` | いいえ | `"runtime-slash"` | このエイリアスを、ルートCLIコマンドではなくチャットのスラッシュコマンドとしてします。 |
| `cliCommand` | いいえ | `string` | 存在する場合、CLI操作向けに提案する関連ルートCLIコマンドです |
## `activation` リファレンス
## `activation`リファレンス
`activation` は、その plugin を後でアクティベートすべきコントロールプレーンイベントを低コストで宣言できる場合に使用します。
Pluginが、どのコントロールプレーンイベントによって後でアクティベートされるべきかを低コストで宣言できる場合は、`activation`を使用します。
このブロックはメタデータのみです。ランタイム動作を登録するものではなく、`register(...)`、`setupEntry`、その他のランタイム/plugin エントリーポイントを置き換えるものでもありません。
現在のコンシューマーはこれを、より広い plugin 読み込みの前の絞り込みヒントとして使用しているため、アクティベーションメタデータが欠けていても、通常は性能面のコストが発生するだけです。レガシーなマニフェスト所有権フォールバックがまだ存在する間は、正しさは変わらないはずです。
## `qaRunners`リファレンス
Pluginが共有`openclaw qa`ルート配下に1つ以上のトランスポートランナーを追加する場合は、`qaRunners`を使用します。このメタデータは低コストかつ静的に保ってください。実際のCLI登録は、`qaRunnerCliRegistrations`をエクスポートする軽量な`runtime-api.ts`サーフェスを通じて、引き続きPluginランタイムが所有します。
```json
{
"qaRunners": [
{
"commandName": "matrix",
"description": "Run the Docker-backed Matrix live QA lane against a disposable homeserver"
}
]
}
```
| フィールド | 必須 | 型 | 意味 |
| ------------- | -------- | -------- | ----------------------------------------------------------------------------- |
| `commandName` | はい | `string` | `openclaw qa`配下にマウントされるサブコマンドです。たとえば`matrix`です。 |
| `description` | いいえ | `string` | 共有ホストがスタブコマンドを必要とする場合に使われるフォールバックのヘルプテキストです。 |
このブロックはメタデータのみです。ランタイム動作を登録するものではなく、`register(...)`、`setupEntry`、その他のランタイム/Pluginエントリーポイントを置き換えるものでもありません。現在のコンシューマーはこれを、より広いPlugin読み込み前の絞り込みヒントとして使っているため、`activation`メタデータが欠けていても通常は性能コストが増えるだけです。レガシーなマニフェスト所有権フォールバックがまだ存在する限り、正しさは変わらないはずです。
```json
{
@ -223,27 +243,23 @@ OpenClaw は provider ランタイムを読み込む前にこれを読み取り
}
```
| フィールド | 必須 | 型 | 意味 |
| ---------------- | -------- | ---------------------------------------------------- | ----------------------------------------------------------------- |
| `onProviders` | いいえ | `string[]` | 要求されたときにこの plugin をアクティベートすべき provider ID。 |
| `onCommands` | いいえ | `string[]` | この plugin をアクティベートすべきコマンド ID。 |
| `onChannels` | いいえ | `string[]` | この plugin をアクティベートすべきチャネル ID。 |
| `onRoutes` | いいえ | `string[]` | この plugin をアクティベートすべき route 種別。 |
| `onCapabilities` | いいえ | `Array<"provider" \| "channel" \| "tool" \| "hook">` | コントロールプレーンのアクティベーション計画で使用される大まかな capability ヒント。 |
| フィールド | 必須 | 型 | 意味 |
| ---------------- | -------- | ---------------------------------------------------- | ------------------------------------------------------------------------ |
| `onProviders` | いいえ | `string[]` | リクエスト時にこのPluginをアクティベートすべきprovider idです。 |
| `onCommands` | いいえ | `string[]` | このPluginをアクティベートすべきcommand idです。 |
| `onChannels` | いいえ | `string[]` | このPluginをアクティベートすべきchannel idです。 |
| `onRoutes` | いいえ | `string[]` | このPluginをアクティベートすべきroute種別です。 |
| `onCapabilities` | いいえ | `Array<"provider" \| "channel" \| "tool" \| "hook">` | コントロールプレーンのアクティベーション計画で使われる広範なケーパビリティヒントです。 |
現在のライブコンシューマー:
- コマンドトリガーの CLI 計画は、レガシーな
`commandAliases[].cliCommand` または `commandAliases[].name` にフォールバックします
- チャネルトリガーの setup/channel 計画は、明示的なチャネルアクティベーションメタデータがない場合、レガシーな `channels[]`
所有権にフォールバックします
- provider トリガーの setup/runtime 計画は、明示的な provider
アクティベーションメタデータがない場合、レガシーな
`providers[]` および最上位の `cliBackends[]` 所有権にフォールバックします
- コマンドトリガーのCLI計画は、レガシーな`commandAliases[].cliCommand`または`commandAliases[].name`にフォールバックします
- チャネルトリガーのセットアップ/チャネル計画は、明示的なチャネルアクティベーションメタデータがない場合、レガシーな`channels[]`所有権にフォールバックします
- providerトリガーのセットアップ/ランタイム計画は、明示的なproviderアクティベーションメタデータがない場合、レガシーな`providers[]`およびトップレベル`cliBackends[]`所有権にフォールバックします
## `setup` リファレンス
## `setup`リファレンス
`setup` は、セットアップおよびオンボーディングの各サーフェスが、ランタイム読み込み前に低コストな plugin 所有メタデータを必要とする場合に使用します。
ランタイム読み込み前に、セットアップおよびオンボーディングのサーフェスがPlugin所有の低コストなメタデータを必要とする場合は、`setup`を使用します。
```json
{
@ -262,32 +278,32 @@ OpenClaw は provider ランタイムを読み込む前にこれを読み取り
}
```
最上位の `cliBackends` は引き続き有効で、CLI 推論バックエンドを記述し続けます。`setup.cliBackends` は、メタデータのみを維持すべきコントロールプレーン/セットアップフロー向けの、セットアップ固有の記述子サーフェスです。
トップレベルの`cliBackends`は引き続き有効で、CLI推論バックエンドを記述し続けます。`setup.cliBackends`は、メタデータのみを維持すべきコントロールプレーン/セットアップフロー向けの、セットアップ固有の記述子サーフェスです。
存在する場合、`setup.providers` と `setup.cliBackends` は、セットアップ検出のための優先される記述子優先のルックアップサーフェスです。記述子が候補 plugin の絞り込みだけを行い、セットアップにさらに豊富なセットアップ時ランタイムフックが必要な場合は、`requiresRuntime: true` を設定し、フォールバック実行パスとして `setup-api` を維持してください。
`setup.providers`および`setup.cliBackends`が存在する場合、これらはセットアップ検出における優先的な記述子ファーストのルックアップサーフェスになります。記述子が候補Pluginを絞り込むだけで、セットアップ時にさらに豊富なランタイムフックが必要な場合は、`requiresRuntime: true`を設定し、フォールバック実行パスとして`setup-api`を維持してください。
セットアップのルックアップでは plugin 所有の `setup-api` コードを実行できるため、正規化された `setup.providers[].id``setup.cliBackends[]` の値は、検出された plugin 全体で一意である必要があります。所有権が曖昧な場合は、検出順で勝者を選ぶのではなく、クローズドに失敗します。
セットアップのルックアップはPlugin所有の`setup-api`コードを実行できるため、正規化された`setup.providers[].id`および`setup.cliBackends[]`の値は、検出されたPlugin全体で一意でなければなりません。所有権が曖昧な場合は、検出順で勝者を選ぶのではなく、クローズドに失敗します。
### `setup.providers` リファレンス
### `setup.providers`リファレンス
| フィールド | 必須 | 型 | 意味 |
| ------------- | -------- | ---------- | ------------------------------------------------------------------------------------ |
| `id` | はい | `string` | セットアップまたはオンボーディング中に公開される provider ID。正規化された ID はグローバルに一意に保ってください。 |
| `authMethods` | いいえ | `string[]` | 完全なランタイムを読み込まずにこの provider がサポートするセットアップ/認証方式 ID。 |
| `envVars` | いいえ | `string[]` | plugin ランタイム読み込み前に汎用の setup/status サーフェスが確認できる環境変数。 |
| フィールド | 必須 | 型 | 意味 |
| ------------- | -------- | ---------- | -------------------------------------------------------------------------------------- |
| `id` | はい | `string` | セットアップまたはオンボーディング中に公開されるprovider idです。正規化されたidはグローバルに一意に保ってください。 |
| `authMethods` | いいえ | `string[]` | フルランタイムを読み込まずにこのproviderがサポートするセットアップ/認証メソッドidです。 |
| `envVars` | いいえ | `string[]` | 汎用のセットアップ/ステータスサーフェスがPluginランタイム読み込み前に確認できる環境変数です。 |
### `setup` フィールド
### `setup`フィールド
| フィールド | 必須 | 型 | 意味 |
| ------------------ | -------- | ---------- | --------------------------------------------------------------------------------------------------- |
| `providers` | いいえ | `object[]` | セットアップおよびオンボーディング中に公開される provider セットアップ記述子。 |
| `cliBackends` | いいえ | `string[]` | 記述子優先のセットアップルックアップで使用されるセットアップ時バックエンド ID。正規化された ID はグローバルに一意に保ってください。 |
| `configMigrations` | いいえ | `string[]` | この plugin の setup サーフェスが所有する設定マイグレーション ID。 |
| `requiresRuntime` | いいえ | `boolean` | 記述子ルックアップ後も setup に `setup-api` の実行が必要かどうか。 |
| フィールド | 必須 | 型 | 意味 |
| ------------------ | -------- | ---------- | ----------------------------------------------------------------------------------------------------- |
| `providers` | いいえ | `object[]` | セットアップおよびオンボーディング中に公開されるproviderセットアップ記述子です |
| `cliBackends` | いいえ | `string[]` | 記述子ファーストのセットアップルックアップで使われるセットアップ時バックエンドidです。正規化されたidはグローバルに一意に保ってください。 |
| `configMigrations` | いいえ | `string[]` | このPluginのセットアップサーフェスが所有する設定移行idです。 |
| `requiresRuntime` | いいえ | `boolean` | 記述子ルックアップ後もセットアップに`setup-api`の実行が必要かどうかです。 |
## `uiHints` リファレンス
## `uiHints`リファレンス
`uiHints` は、設定フィールド名から小さなレンダリングヒントへのマップです。
`uiHints`は、設定フィールド名から小さなレンダリングヒントへのマップです。
```json
{
@ -304,18 +320,18 @@ OpenClaw は provider ランタイムを読み込む前にこれを読み取り
各フィールドヒントには次を含めることができます。
| フィールド | 型 | 意味 |
| ------------- | ---------- | --------------------------------------- |
| `label` | `string` | ユーザー向けのフィールドラベル。 |
| `help` | `string` | 短い補助テキスト。 |
| `tags` | `string[]` | 任意の UI タグ。 |
| `advanced` | `boolean` | このフィールドを高度な項目としてマークします。 |
| `sensitive` | `boolean` | このフィールドをシークレットまたは機密情報としてマークします。 |
| `placeholder` | `string` | フォーム入力用のプレースホルダーテキスト。 |
| フィールド | 型 | 意味 |
| ------------- | ---------- | -------------------------------------- |
| `label` | `string` | ユーザー向けのフィールドラベルです |
| `help` | `string` | 短い補助テキストです |
| `tags` | `string[]` | 任意のUIタグです |
| `advanced` | `boolean` | このフィールドを高度な項目としてします。 |
| `sensitive` | `boolean` | このフィールドを秘密情報または機密情報として示します。 |
| `placeholder` | `string` | フォーム入力用のプレースホルダーテキストです。 |
## `contracts` リファレンス
## `contracts`リファレンス
`contracts` は、OpenClaw が plugin ランタイムを import せずに読み取れる、静的な capability 所有メタデータにのみ使用してください。
OpenClawがPluginランタイムをインポートせずに読み取れる、静的なケーパビリティ所有権メタデータにのみ`contracts`を使用してください。
```json
{
@ -335,21 +351,21 @@ OpenClaw は provider ランタイムを読み込む前にこれを読み取り
各リストは任意です。
| フィールド | 型 | 意味 |
| -------------------------------- | ---------- | -------------------------------------------------------------- |
| `speechProviders` | `string[]` | この plugin が所有する speech provider ID。 |
| `realtimeTranscriptionProviders` | `string[]` | この plugin が所有する realtime-transcription provider ID。 |
| `realtimeVoiceProviders` | `string[]` | この plugin が所有する realtime-voice provider ID。 |
| `mediaUnderstandingProviders` | `string[]` | この plugin が所有する media-understanding provider ID。 |
| `imageGenerationProviders` | `string[]` | この plugin が所有する image-generation provider ID。 |
| `videoGenerationProviders` | `string[]` | この plugin が所有する video-generation provider ID。 |
| `webFetchProviders` | `string[]` | この plugin が所有する web-fetch provider ID。 |
| `webSearchProviders` | `string[]` | この plugin が所有する web-search provider ID。 |
| `tools` | `string[]` | バンドルされたコントラクトチェック用にこの plugin が所有するエージェントツール名。 |
| フィールド | 型 | 意味 |
| -------------------------------- | ---------- | ---------------------------------------------------------- |
| `speechProviders` | `string[]` | このPluginが所有するspeech provider idです。 |
| `realtimeTranscriptionProviders` | `string[]` | このPluginが所有するrealtime-transcription provider idです。 |
| `realtimeVoiceProviders` | `string[]` | このPluginが所有するrealtime-voice provider idです。 |
| `mediaUnderstandingProviders` | `string[]` | このPluginが所有するmedia-understanding provider idです。 |
| `imageGenerationProviders` | `string[]` | このPluginが所有するimage-generation provider idです。 |
| `videoGenerationProviders` | `string[]` | このPluginが所有するvideo-generation provider idです。 |
| `webFetchProviders` | `string[]` | このPluginが所有するweb-fetch provider idです。 |
| `webSearchProviders` | `string[]` | このPluginが所有するweb-search provider idです。 |
| `tools` | `string[]` | バンドルされたコントラクトチェックのためにこのPluginが所有するagentツール名です。 |
## `channelConfigs` リファレンス
## `channelConfigs`リファレンス
`channelConfigs` は、チャネル Plugin がランタイム読み込み前に低コストな設定メタデータを必要とする場合使用します。
channel Pluginがランタイム読み込み前に低コストな設定メタデータを必要とする場合は、`channelConfigs`を使用します。
```json
{
@ -376,19 +392,19 @@ OpenClaw は provider ランタイムを読み込む前にこれを読み取り
}
```
チャネルエントリには次を含めることができます。
channelエントリには次を含めることができます。
| フィールド | 型 | 意味 |
| ------------- | ------------------------ | ----------------------------------------------------------------------------------------- |
| `schema` | `object` | `channels.<id>` 用の JSON Schema。宣言された各チャネル設定エントリで必須です。 |
| `uiHints` | `Record<string, object>` | そのチャネル設定セクション用の任意の UI ラベル/プレースホルダー/機密性ヒント。 |
| `label` | `string` | ランタイムメタデータの準備ができていない場合に、ピッカーおよび inspect サーフェスへマージされるチャネルラベル。 |
| `description` | `string` | inspect および catalog サーフェス向けの短いチャネル説明。 |
| `preferOver` | `string[]` | 選択サーフェスでこのチャネルが優先されるべき、レガシーまたは低優先度の plugin ID。 |
| フィールド | 型 | 意味 |
| ------------- | ------------------------ | -------------------------------------------------------------------------------------------- |
| `schema` | `object` | `channels.<id>`用のJSON Schemaです。宣言された各channel設定エントリで必須です。 |
| `uiHints` | `Record<string, object>` | そのchannel設定セクション用の任意のUIラベル/プレースホルダー/機密性ヒントです |
| `label` | `string` | ランタイムメタデータの準備ができていないときに、ピッカーおよびinspectサーフェスにマージされるchannelラベルです。 |
| `description` | `string` | inspectおよびカタログサーフェス向けの短いchannel説明です。 |
| `preferOver` | `string[]` | 選択サーフェスでこのchannelが優先されるべき、レガシーまたは低優先度のplugin idです。 |
## `modelSupport` リファレンス
## `modelSupport`リファレンス
`modelSupport` は、OpenClaw が `gpt-5.4``claude-sonnet-4.6` のような短縮モデル ID から、plugin ランタイム読み込み前に provider Plugin を推測すべき場合に使用します。
Pluginランタイム読み込み前に、OpenClawが`gpt-5.4`や`claude-sonnet-4.6`のような短縮モデルidからあなたのprovider Pluginを推論すべき場合は、`modelSupport`を使用します。
```json
{
@ -399,74 +415,60 @@ OpenClaw は provider ランタイムを読み込む前にこれを読み取り
}
```
OpenClaw は次の優先順位を適用します。
OpenClawは次の優先順位を適用します。
- 明示的な `provider/model` 参照は、所有する `providers` マニフェストメタデータを使用します
- `modelPatterns` `modelPrefixes` より優先されます
- 1 つの非バンドル plugin と 1 つのバンドル plugin の両方が一致する場合、非バンドル plugin が優先されます
- 残る曖昧さは、ユーザーまたは設定が provider を指定するまで無視されます
- 明示的な`provider/model`参照では、所有する`providers`マニフェストメタデータが使われます
- `modelPatterns`は`modelPrefixes`より優先されます
- バンドルされていないPluginとバンドルされたPluginの両方が一致する場合は、バンドルされていないPluginが優先されます
- 残る曖昧さは、ユーザーまたは設定がproviderを指定するまで無視されます
フィールド:
| フィールド | 型 | 意味 |
| --------------- | ---------- | ------------------------------------------------------------------------------- |
| `modelPrefixes` | `string[]` | 短縮モデル ID に対して `startsWith` で一致させるプレフィックス。 |
| `modelPatterns` | `string[]` | プロファイル接尾辞を除去した後の短縮モデル ID に対して一致させる正規表現ソース。 |
| フィールド | 型 | 意味 |
| --------------- | ---------- | ------------------------------------------------------------------------------------ |
| `modelPrefixes` | `string[]` | 短縮モデルidに対して`startsWith`で一致させるプレフィックスです。 |
| `modelPatterns` | `string[]` | プロファイル接尾辞を除去した後の短縮モデルidに対して一致させる正規表現ソースです。 |
レガシーな最上位 capability キーは非推奨です。`openclaw doctor --fix` を使用して
`speechProviders`、`realtimeTranscriptionProviders`、
`realtimeVoiceProviders`、`mediaUnderstandingProviders`、
`imageGenerationProviders`、`videoGenerationProviders`、
`webFetchProviders`、および `webSearchProviders``contracts` 配下へ移動してください。通常の
マニフェスト読み込みでは、これらの最上位フィールドを capability
所有権として扱わなくなっています。
レガシーなトップレベルのケーパビリティキーは非推奨です。`openclaw doctor --fix`を使用して、`speechProviders`、`realtimeTranscriptionProviders`、`realtimeVoiceProviders`、`mediaUnderstandingProviders`、`imageGenerationProviders`、`videoGenerationProviders`、`webFetchProviders`、`webSearchProviders`を`contracts`配下へ移動してください。通常のマニフェスト読み込みでは、これらのトップレベルフィールドはもはやケーパビリティ所有権として扱われません。
## マニフェストと `package.json` の違い
## マニフェストと`package.json`の違い
この 2 つのファイルは異なる役割を持ちます。
この2つのファイルは異なる役割を持ちます。
| ファイル | 用途 |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `openclaw.plugin.json` | plugin コード実行前に存在している必要がある、検出、設定検証、認証選択メタデータ、および UI ヒント |
| `package.json` | npm メタデータ、依存関係のインストール、およびエントリーポイント、インストール制御、セットアップ、または catalog メタデータに使用される `openclaw` ブロック |
| ファイル | 用途 |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| `openclaw.plugin.json` | 検出、設定検証、認証選択メタデータ、およびPluginコード実行前に存在している必要があるUIヒント |
| `package.json` | npmメタデータ、依存関係のインストール、およびエントリーポイント、インストールゲーティング、セットアップ、またはカタログメタデータに使われる`openclaw`ブロック |
どこにどのメタデータを置くべきか迷った場合は、次のルールを使ってください。
どこに置くべきメタデータか迷った場合は、次のルールを使ってください。
- OpenClaw が plugin コードの読み込み前に知っている必要があるなら、`openclaw.plugin.json` に置きます
- パッケージング、エントリーファイル、または npm install の動作に関するものなら、`package.json` に置きます
- OpenClawがPluginコードを読み込む前に知っておく必要がある場合は、`openclaw.plugin.json`に置きます
- パッケージング、エントリーファイル、またはnpmインストール動作に関するものであれば、`package.json`に置きます
### 検出に影響する `package.json` フィールド
### 検出に影響する`package.json`フィールド
一部のランタイム前 plugin メタデータは、意図的に `openclaw.plugin.json` ではなく `package.json`
`openclaw` ブロックに置かれます。
一部のランタイム前Pluginメタデータは、`openclaw.plugin.json`ではなく、意図的に`package.json`の`openclaw`ブロック配下に置かれています。
重要な例:
| フィールド | 意味 |
| ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `openclaw.extensions` | ネイティブ Plugin エントリーポイントを宣言します。 |
| `openclaw.setupEntry` | オンボーディングおよび遅延チャネル起動時に使用される、軽量なセットアップ専用エントリーポイント。 |
| `openclaw.channel` | ラベル、ドキュメントパス、エイリアス、選択時の文言などの軽量なチャネル catalog メタデータ。 |
| `openclaw.channel.configuredState` | 完全なチャネルランタイムを読み込まずに「env のみのセットアップがすでに存在するか?」に答えられる、軽量な configured-state チェッカーメタデータ。 |
| `openclaw.channel.persistedAuthState` | 完全なチャネルランタイムを読み込まずに「すでに何かにサインインしているか?」に答えられる、軽量な persisted-auth チェッカーメタデータ。 |
| `openclaw.install.npmSpec` / `openclaw.install.localPath` | バンドルされた Plugin および外部公開された Plugin のインストール/更新ヒント。 |
| `openclaw.install.defaultChoice` | 複数のインストール元が利用可能な場合の優先インストールパス。 |
| `openclaw.install.minHostVersion` | `>=2026.3.22` のような semver 下限を使う、サポートされる最小 OpenClaw ホストバージョン。 |
| `openclaw.install.allowInvalidConfigRecovery` | 設定が無効な場合に、限定的なバンドル Plugin の再インストール回復パスを許可します。 |
| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | 起動中に完全なチャネル Plugin の前に、セットアップ専用チャネルサーフェスを読み込めるようにします。 |
| フィールド | 意味 |
| ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `openclaw.extensions` | ネイティブPluginエントリーポイントを宣言します。 |
| `openclaw.setupEntry` | オンボーディングおよび遅延チャネル起動時に使れる、軽量なセットアップ専用エントリーポイントです |
| `openclaw.channel` | ラベル、ドキュメントパス、エイリアス、選択コピーのような低コストなchannelカタログメタデータです。 |
| `openclaw.channel.configuredState` | フルchannelランタイムを読み込まずに「環境変数のみのセットアップがすでに存在するか」を判定できる、軽量なconfigured-stateチェッカーメタデータです。 |
| `openclaw.channel.persistedAuthState` | フルchannelランタイムを読み込まずに「すでに何かサインイン済みか」を判定できる、軽量な永続化認証チェッカーメタデータです。 |
| `openclaw.install.npmSpec` / `openclaw.install.localPath` | バンドル済みPluginおよび外部公開Plugin向けのインストール/更新ヒントです。 |
| `openclaw.install.defaultChoice` | 複数のインストール元が利用可能な場合の優先インストールパスです |
| `openclaw.install.minHostVersion` | `>=2026.3.22`のようなsemver下限で表される、サポートされる最小OpenClawホストバージョンです。 |
| `openclaw.install.allowInvalidConfigRecovery` | 設定が無効な場合に、限定されたバンドル済みPlugin再インストール回復パスを許可します。 |
| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | 起動時に、フルchannel Pluginより先にセットアップ専用channelサーフェスを読み込めるようにします。 |
`openclaw.install.minHostVersion` は、インストール時およびマニフェスト
レジストリ読み込み時に適用されます。無効な値は拒否され、有効だがより新しい値は
古いホストではその plugin をスキップします。
`openclaw.install.minHostVersion`は、インストール時およびマニフェストレジストリ読み込み時に適用されます。無効な値は拒否されます。有効ではあるがより新しい値の場合、古いホストではそのPluginはスキップされます。
`openclaw.install.allowInvalidConfigRecovery` は意図的に限定的です。
任意の壊れた設定をインストール可能にするものではありません。現在は、特定の古いバンドル Plugin
アップグレード失敗、たとえばバンドル Plugin パスの欠落や、その同じバンドル Plugin に対する古い
`channels.<id>` エントリなどから、インストールフローが回復できるようにするだけです。
無関係な設定エラーは引き続きインストールをブロックし、オペレーターを
`openclaw doctor --fix` に誘導します。
`openclaw.install.allowInvalidConfigRecovery`は意図的に限定的です。任意の壊れた設定をインストール可能にするものではありません。現在は、特定の古いバンドル済みPluginアップグレード失敗、たとえば欠落したバンドル済みPluginパスや、同じバンドル済みPluginに対する古い`channels.<id>`エントリなどから、インストールフローが回復することだけを許可します。無関係な設定エラーは引き続きインストールをブロックし、オペレーターを`openclaw doctor --fix`へ案内します。
`openclaw.channel.persistedAuthState` は、小さなチェッカーモジュール用のパッケージメタデータです。
`openclaw.channel.persistedAuthState`は、小さなチェッカーモジュールのためのパッケージメタデータです。
```json
{
@ -482,9 +484,9 @@ OpenClaw は次の優先順位を適用します。
}
```
これは、セットアップ、doctor、または configured-state フローが、完全なチャネル Plugin を読み込む前に、低コストな yes/no の認証プローブを必要とする場合に使用します。対象の export は、永続化された状態のみを読む小さな関数にしてください。完全なチャネルランタイム barrel を経由させないでください。
セットアップ、doctor、またはconfigured-stateフローが、フルchannel Plugin読み込み前に低コストなyes/no認証プローブを必要とする場合に使用します。対象のエクスポートは、永続化された状態のみを読み取る小さな関数であるべきです。フルchannelランタイムbarrelを経由させないでください。
`openclaw.channel.configuredState` も、低コストな env のみの configured チェック用に同じ形式に従います。
`openclaw.channel.configuredState`も、低コストな環境変数のみのconfiguredチェック向けに同じ形を取ります。
```json
{
@ -500,62 +502,41 @@ OpenClaw は次の優先順位を適用します。
}
```
チャネルが env やその他の小さな非ランタイム入力から configured-state に答えられる場合に使用します。チェックに完全な設定解決または実際のチャネルランタイムが必要な場合は、そのロジックを代わりに plugin `config.hasConfiguredState` hook に置いてください。
channelが、環境変数またはその他の小さな非ランタイム入力からconfigured-stateを判定できる場合に使用します。チェックに完全な設定解決または実際のchannelランタイムが必要な場合は、代わりにそのロジックをPluginの`config.hasConfiguredState`フックに置いてください。
## JSON Schema要件
## JSON Schema要件
- **すべての Plugin JSON Schema を必ず含める必要があります**。設定を受け付けない場合でも同様です。
- 空のスキーマでも問題ありません(例: `{ "type": "object", "additionalProperties": false }`)。
- **すべてのPluginはJSON Schemaを必ず含める必要があります**。設定を受け付けない場合でも同様です。
- 空のスキーマでも許可されます(例: `{ "type": "object", "additionalProperties": false }`)。
- スキーマはランタイム時ではなく、設定の読み取り/書き込み時に検証されます。
## 検証動作
## 検証動作
- 不明な `channels.*` キーは、チャネル ID が
plugin マニフェストで宣言されていない限り、**エラー**です。
- `plugins.entries.<id>`、`plugins.allow`、`plugins.deny`、および `plugins.slots.*`
は、**検出可能な** plugin ID を参照する必要があります。不明な ID は **エラー**です。
- plugin がインストールされていても、マニフェストまたはスキーマが壊れている、あるいは存在しない場合、
検証は失敗し、Doctor は plugin エラーを報告します。
- plugin 設定が存在していても、その plugin が**無効**の場合、設定は保持され、
Doctor + ログに **警告** が表示されます。
- 不明な`channels.*`キーは、channel idがPluginマニフェストで宣言されていない限り、**エラー**です。
- `plugins.entries.<id>`、`plugins.allow`、`plugins.deny`、および`plugins.slots.*`は、**検出可能な**Plugin idを参照していなければなりません。不明なidは**エラー**です。
- Pluginがインストールされていても、マニフェストまたはスキーマが壊れているか存在しない場合、検証は失敗し、DoctorがそのPluginエラーを報告します。
- Plugin設定が存在しても、Pluginが**無効**な場合、設定は保持され、Doctor + ログに**警告**が表示されます。
完全な `plugins.*` スキーマについては、[設定リファレンス](/ja-JP/gateway/configuration) を参照してください。
完全な`plugins.*`スキーマについては、[Configuration reference](/ja-JP/gateway/configuration)を参照してください。
## 注
## 注記
- マニフェストは、ローカルファイルシステムからの読み込みを含め、**ネイティブ OpenClaw Plugin では必須**です。
- ランタイムは引き続き plugin モジュールを別途読み込みます。マニフェストは
検出 + 検証専用です。
- ネイティブマニフェストは JSON5 で解析されるため、最終的な値がオブジェクトである限り、
コメント、末尾のカンマ、クォートなしキーを使用できます。
- マニフェストローダーが読み取るのは、文書化されたマニフェストフィールドだけです。ここに
カスタムの最上位キーを追加するのは避けてください。
- `providerAuthEnvVars` は、認証プローブ、env マーカー検証、および同様の provider 認証サーフェス向けの
低コストなメタデータパスです。これらは env 名を確認するだけのために plugin
ランタイムを起動すべきではありません。
- `providerAuthAliases` は、コアにその関係をハードコードすることなく、provider バリアントが別の provider の認証
env vars、認証プロファイル、設定ベースの認証、および API キーのオンボーディング選択肢を
再利用できるようにします。
- `channelEnvVars` は、shell-env フォールバック、セットアップ
プロンプト、および同様のチャネルサーフェス向けの低コストなメタデータパスです。これらは env 名を確認するだけのために plugin
ランタイムを起動すべきではありません。
- `providerAuthChoices` は、認証選択肢ピッカー、
`--auth-choice` 解決、優先 provider マッピング、および単純なオンボーディング
CLI フラグ登録を、provider ランタイム読み込み前に行うための低コストなメタデータパスです。provider コードを必要とするランタイム
ウィザードのメタデータについては、
[Provider runtime hooks](/ja-JP/plugins/architecture#provider-runtime-hooks) を参照してください。
- 排他的な plugin 種別は `plugins.slots.*` を通じて選択されます。
- `kind: "memory"``plugins.slots.memory` で選択されます。
- `kind: "context-engine"``plugins.slots.contextEngine`
で選択されます(デフォルト: 組み込みの `legacy`)。
- `channels`、`providers`、`cliBackends`、および `skills` は、
plugin がそれらを必要としない場合は省略できます。
- plugin がネイティブモジュールに依存する場合は、ビルド手順と、
必要なパッケージマネージャーの許可リスト要件(たとえば pnpm の `allow-build-scripts`
`pnpm rebuild <package>`)を文書化してください。
- マニフェストは、ローカルファイルシステムからの読み込みを含め、**ネイティブなOpenClaw Pluginでは必須**です。
- ランタイムは引き続きPluginモジュールを別途読み込みます。マニフェストは検出と検証専用です。
- ネイティブマニフェストはJSON5で解析されるため、最終的な値が引き続きオブジェクトである限り、コメント、末尾カンマ、クォートなしキーが受け入れられます。
- マニフェストローダーが読み取るのは文書化されたマニフェストフィールドのみです。ここにカスタムのトップレベルキーを追加するのは避けてください。
- `providerAuthEnvVars`は、認証プローブ、環境変数マーカー検証、および環境変数名を確認するためだけにPluginランタイムを起動すべきでない類似のprovider認証サーフェス向けの、低コストなメタデータパスです。
- `providerAuthAliases`により、providerバリアントは、その関係をcoreにハードコードすることなく、別のproviderの認証環境変数、認証プロファイル、設定ベースの認証、APIキーのオンボーディング選択肢を再利用できます。
- `channelEnvVars`は、シェル環境変数フォールバック、セットアッププロンプト、および環境変数名を確認するためだけにPluginランタイムを起動すべきでない類似のchannelサーフェス向けの、低コストなメタデータパスです。
- `providerAuthChoices`は、認証選択肢ピッカー、`--auth-choice`解決、優先providerマッピング、およびproviderランタイム読み込み前の単純なオンボーディングCLIフラグ登録向けの、低コストなメタデータパスです。providerコードを必要とするランタイムのウィザードメタデータについては、[Provider runtime hooks](/ja-JP/plugins/architecture#provider-runtime-hooks)を参照してください。
- 排他的なPlugin種別は`plugins.slots.*`を通じて選択されます。
- `kind: "memory"`は`plugins.slots.memory`で選択されます。
- `kind: "context-engine"`は`plugins.slots.contextEngine`で選択されます(デフォルト: 組み込みの`legacy`)。
- `channels`、`providers`、`cliBackends`、`skills`は、Pluginがそれらを必要としない場合は省略できます。
- Pluginがネイティブモジュールに依存している場合は、ビルド手順と、必要なパッケージマネージャーの許可リスト要件たとえばpnpmの`allow-build-scripts`、`pnpm rebuild <package>`)を文書化してください。
## 関連
- [Building Plugins](/ja-JP/plugins/building-plugins) — Plugin のはじめに
- [Building Plugins](/ja-JP/plugins/building-plugins) — Pluginのはじめに
- [Plugin Architecture](/ja-JP/plugins/architecture) — 内部アーキテクチャ
- [SDK Overview](/ja-JP/plugins/sdk-overview) — Plugin SDK リファレンス
- [SDK Overview](/ja-JP/plugins/sdk-overview) — Plugin SDKリファレンス

View File

@ -1,82 +1,92 @@
---
read_when:
- 新しいメッセージングチャンネルプラグインを構築している場合
- OpenClawをメッセージングプラットフォームに接続したい場合
- ChannelPluginアダプターサーフェスを理解する必要がある場合
- 新しいメッセージングチャネルPluginを構築しています
- OpenClawをメッセージングプラットフォームに接続したいと考えています
- ChannelPluginアダプターの公開インターフェースを理解する必要があります
sidebarTitle: Channel Plugins
summary: OpenClaw向けメッセージングチャンネルプラグインを構築するためのステップバイステップガイド
title: チャンネルプラグインの構築
summary: OpenClaw向けメッセージングチャネルPluginを構築するためのステップバイステップガイド
title: チャネルPluginの構築
x-i18n:
generated_at: "2026-04-11T02:46:50Z"
generated_at: "2026-04-15T04:43:33Z"
model: gpt-5.4
provider: openai
source_hash: 8a026e924f9ae8a3ddd46287674443bcfccb0247be504261522b078e1f440aef
source_hash: a7f4c746fe3163a8880e14c433f4db4a1475535d91716a53fb879551d8d62f65
source_path: plugins/sdk-channel-plugins.md
workflow: 15
---
# チャンネルプラグインの構築
# チャネルPluginの構築
このガイドでは、OpenClawをメッセージングプラットフォームに接続するチャンネルプラグインの構築方法を説明します。最後には、DMセキュリティ、pairing、返信スレッド化、アウトバウンドメッセージングを備えた動作するチャネルが完成します。
このガイドでは、OpenClawをメッセージングプラットフォームに接続するチャネルPluginの構築方法を説明します。最後には、DMセキュリティ、ペアリング、返信スレッド化、送信メッセージングを備えた動作するチャネルが完成します。
<Info>
まだOpenClawプラグインを一度も構築したことがない場合は、まず基本的なパッケージ構造とmanifest設定について[はじめに](/ja-JP/plugins/building-plugins)を読んでください。
OpenClaw Pluginをまだ一度も構築したことがない場合は、基本的なパッケージ
構造とマニフェスト設定について最初に
[はじめに](/ja-JP/plugins/building-plugins)を読んでください。
</Info>
## チャンネルプラグインの仕組み
## チャネルPluginの仕組み
チャンネルプラグインには、独自のsend/edit/reactツールは不要です。OpenClawはコア内で1つの共有`message`ツールを維持します。プラグインが担当するのは次の領域です。
チャネルPluginには独自の送信・編集・リアクション用ツールは不要です。OpenClawはコアで1つの共有`message`ツールを維持します。Pluginが担当するのは次の項目です。
- **設定** — アカウント解決とセットアップウィザード
- **セキュリティ** — DMポリシーとallowlist
- **Pairing** — DM承認フロー
- **セッショングラマー** — プロバイダー固有の会話IDを、ベースチャット、スレッドID、親フォールバックへどう対応付けるか
- **アウトバウンド** — テキスト、メディア、pollをプラットフォームへ送信
- **セキュリティ** — DMポリシーと許可リスト
- **ペアリング** — DM承認フロー
- **セッショングラマー** — プロバイダー固有の会話idをベースチャット、スレッドid、親フォールバックにどう対応付けるか
- **送信** — テキスト、メディア、投票をプラットフォームに送信すること
- **スレッド化** — 返信をどうスレッド化するか
コアは共有messageツール、プロンプト配線、外側のsession-key形状、汎用的な`:thread:`管理、およびディスパッチを担当します。
コアは共有messageツール、プロンプト配線、外側のセッションキー形状、汎用的な`:thread:`管理、およびディスパッチを担当します。
プラットフォームが会話IDの中に追加のscopeを保持する場合、その解析はプラグイン内で`messaging.resolveSessionConversation(...)`を使って維持してください。これは、`rawId`をベース会話ID、任意のスレッドID、明示的な`baseConversationId`、および任意の`parentConversationCandidates`に対応付けるための正式なフックです。`parentConversationCandidates`を返す場合は、最も狭い親から最も広い/ベース会話の順に並べてください。
チャネルでメディアソースを運ぶmessage-toolパラメータを追加する場合は、それらの
パラメータ名を`describeMessageTool(...).mediaSourceParams`を通じて公開してください。コアはその明示的な一覧をサンドボックスパス正規化と送信メディアアクセスポリシーに使用するため、Plugin側でプロバイダー固有のアバター、添付ファイル、カバー画像パラメータに対して共有コアの特別扱いは不要です。
可能であれば、`{ "set-profile": ["avatarUrl", "avatarPath"] }`のようなアクションキー付きマップを返してください。そうすることで、無関係なアクションが別アクションのメディア引数を継承しません。意図的に公開されるすべてのアクションで共有するパラメータであれば、フラットな配列でも引き続き使用できます。
同じ解析をチャンネルレジストリ起動前に必要とする同梱プラグインは、一致する`resolveSessionConversation(...)`エクスポートを持つトップレベルの`session-key-api.ts`ファイルも公開できます。コアは、ランタイムプラグインレジストリがまだ利用できないときにのみ、このbootstrap安全なサーフェスを使用します。
プラットフォームが会話id内に追加のスコープを格納する場合は、その解析を
`messaging.resolveSessionConversation(...)`でPlugin内に保持してください。これは、`rawId`をベース会話id、任意のスレッドid、明示的な`baseConversationId`、および任意の`parentConversationCandidates`に対応付けるための正規のフックです。
`parentConversationCandidates`を返す場合は、最も狭い親から最も広い親/ベース会話の順に並べてください。
`messaging.resolveParentConversationCandidates(...)`は、プラグインが汎用/raw IDの上に親フォールバックだけを必要とする場合の、レガシー互換フォールバックとして引き続き利用できます。両方のフックが存在する場合、コアはまず`resolveSessionConversation(...).parentConversationCandidates`を使い、その正式なフックで省略された場合にのみ`resolveParentConversationCandidates(...)`へフォールバックします。
チャネルレジストリの起動前に同じ解析が必要な同梱Pluginでは、対応する
`resolveSessionConversation(...)`エクスポートを持つトップレベルの`session-key-api.ts`ファイルも公開できます。コアは、実行時Pluginレジストリがまだ利用できない場合にのみ、このブートストラップ安全な公開インターフェースを使用します。
## 承認とチャンネルcapability
`messaging.resolveParentConversationCandidates(...)`は、Pluginが汎用/raw idに加えて親フォールバックのみを必要とする場合の、従来の互換性フォールバックとして引き続き利用できます。両方のフックが存在する場合、コアはまず
`resolveSessionConversation(...).parentConversationCandidates`を使用し、その正規フックがそれらを省略した場合にのみ`resolveParentConversationCandidates(...)`へフォールバックします。
ほとんどのチャンネルプラグインでは、承認専用コードは不要です。
## 承認とチャネル機能
- コアは、同一チャット内の`/approve`、共有承認ボタンpayload、および汎用フォールバック配信を担当します。
- チャンネルに承認固有の動作が必要な場合は、チャンネルプラグイン上の1つの`approvalCapability`オブジェクトを優先してください。
- `ChannelPlugin.approvals`は削除されました。承認配信/native/render/authの情報は`approvalCapability`に置いてください。
- `plugin.auth`はlogin/logout専用です。コアはそのオブジェクトから承認authフックをもう読みません。
- `approvalCapability.authorizeActorAction`と`approvalCapability.getActionAvailabilityState`が正式な承認authの接合面です。
- 同一チャット内の承認auth可用性には`approvalCapability.getActionAvailabilityState`を使用してください。
- チャンネルがnative exec承認を公開する場合、開始元サーフェス/native client状態が同一チャット承認authと異なるときは`approvalCapability.getExecInitiatingSurfaceState`を使用してください。コアはこのexec専用フックを使って`enabled`と`disabled`を区別し、開始元チャンネルがnative exec承認をサポートしているかを判断し、native clientフォールバック案内にそのチャンネルを含めます。`createApproverRestrictedNativeApprovalCapability(...)`は一般的なケースでこれを補完します。
- 重複するローカル承認プロンプトの非表示や、配信前のtyping indicator送信のようなチャンネル固有のpayloadライフサイクル動作には、`outbound.shouldSuppressLocalPayloadPrompt`または`outbound.beforeDeliverPayload`を使用してください。
- `approvalCapability.delivery`は、native承認ルーティングまたはフォールバック抑制にのみ使用してください。
- `approvalCapability.nativeRuntime`は、チャンネル所有のnative承認情報に使用してください。ホットなチャンネルエントリポイントでは、`createLazyChannelApprovalNativeRuntimeAdapter(...)`で遅延化してください。これにより、コアが承認ライフサイクルを組み立てられる一方で、必要に応じてランタイムモジュールをオンデマンドでimportできます。
- `approvalCapability.render`は、チャンネルが共有レンダラーではなく本当にカスタム承認payloadを必要とする場合にのみ使用してください。
- チャンネルが無効時の返信で、native exec承認を有効化するために必要な正確な設定ブを説明したい場合は`approvalCapability.describeExecApprovalSetup`を使用してください。このフックは`{ channel, channelLabel, accountId }`を受け取ります。名前付きアカウントのあるチャンネルは、トップレベルのデフォルトではなく、`channels.<channel>.accounts.<id>.execApprovals.*`のようなアカウントスコープのパスを描画するべきです。
- チャンネルが既存設定から安定したowner風のDM IDを推測できるなら、承認固有のコアロジックを追加せずに同一チャット内の`/approve`を制限するために、`openclaw/plugin-sdk/approval-runtime`の`createResolvedApproverActionAuthAdapter`を使用してください。
- チャンネルにnative承認配信が必要な場合、チャンネルコードはターゲット正規化とトランスポート/プレゼンテーション情報に集中させてください。`openclaw/plugin-sdk/approval-runtime`の`createChannelExecApprovalProfile`、`createChannelNativeOriginTargetResolver`、`createChannelApproverDmTargetResolver`、`createApproverRestrictedNativeApprovalCapability`を使用してください。チャンネル固有の情報は、理想的には`createChannelApprovalNativeRuntimeAdapter(...)`または`createLazyChannelApprovalNativeRuntimeAdapter(...)`を通じて`approvalCapability.nativeRuntime`の背後に置いてください。これにより、コアはハンドラーを組み立て、リクエストフィルタリング、ルーティング、重複排除、有効期限、Gatewayサブスクリプション、別経路通知を担当できます。`nativeRuntime`はいくつかのより小さい接合面に分割されています:
- `availability` — アカウントが設定されているか、およびリクエストを処理すべきかどうか
- `presentation` — 共有承認view modelを保留中/解決済み/期限切れのnative payloadまたは最終アクションに対応付ける
- `transport` — ターゲットを準備し、native承認メッセージを送信/更新/削除する
- `interactions` — nativeボタンまたはreaction向けの任意のbind/unbind/clear-actionフック
ほとんどのチャネルPluginでは、承認固有のコードは不要です。
- コアは同一チャット内の`/approve`、共有承認ボタンのペイロード、および汎用フォールバック配信を担当します。
- チャネルで承認固有の動作が必要な場合は、チャネルPlugin上に1つの`approvalCapability`オブジェクトを置くことを推奨します。
- `ChannelPlugin.approvals`は削除されました。承認の配信/ネイティブ/レンダリング/認証に関する情報は`approvalCapability`に置いてください。
- `plugin.auth`はlogin/logout専用です。コアはそのオブジェクトから承認認証フックを読み取らなくなりました。
- `approvalCapability.authorizeActorAction`と`approvalCapability.getActionAvailabilityState`が正規の承認認証インターフェースです。
- 同一チャット内の承認認証の可用性には`approvalCapability.getActionAvailabilityState`を使用してください。
- チャネルがネイティブexec承認を公開する場合、開始サーフェス/ネイティブクライアント状態が同一チャット内承認認証と異なるときは、`approvalCapability.getExecInitiatingSurfaceState`を使用してください。コアはこのexec固有のフックを使用して`enabled`と`disabled`を区別し、開始チャネルがネイティブexec承認をサポートしているかを判断し、ネイティブクライアントのフォールバック案内にそのチャネルを含めます。`createApproverRestrictedNativeApprovalCapability(...)`は一般的なケースに対してこれを補います。
- 重複するローカル承認プロンプトの非表示や、配信前の入力中インジケーター送信のような、チャネル固有のペイロードライフサイクル動作には、`outbound.shouldSuppressLocalPayloadPrompt`または`outbound.beforeDeliverPayload`を使用してください。
- `approvalCapability.delivery`は、ネイティブ承認ルーティングまたはフォールバック抑制にのみ使用してください。
- チャネル所有のネイティブ承認情報には`approvalCapability.nativeRuntime`を使用してください。`createLazyChannelApprovalNativeRuntimeAdapter(...)`を使って、ホットなチャネルエントリーポイントではこれを遅延ロードにしてください。これにより、コアは承認ライフサイクルを組み立てつつ、必要時に実行時モジュールをimportできます。
- 共有レンダラーではなく、チャネルが本当に独自の承認ペイロードを必要とする場合にのみ`approvalCapability.render`を使用してください。
- チャネルが、無効時パスの返信でネイティブexec承認を有効化するために必要な正確な設定項目を説明したい場合は、`approvalCapability.describeExecApprovalSetup`を使用してください。このフックは`{ channel, channelLabel, accountId }`を受け取ります。名前付きアカウントのチャネルでは、トップレベルのデフォルトではなく、`channels.<channel>.accounts.<id>.execApprovals.*`のようなアカウントスコープのパスを表示してください。
- 既存設定から安定した所有者相当のDMアイデンティティを推測できるチャネルでは、承認固有のコアロジックを追加せずに同一チャット内の`/approve`を制限するため、`openclaw/plugin-sdk/approval-runtime`の`createResolvedApproverActionAuthAdapter`を使用してください。
- チャネルにネイティブ承認配信が必要な場合、チャネルコードはターゲット正規化とトランスポート/プレゼンテーション情報に集中させてください。`openclaw/plugin-sdk/approval-runtime`の`createChannelExecApprovalProfile`、`createChannelNativeOriginTargetResolver`、`createChannelApproverDmTargetResolver`、`createApproverRestrictedNativeApprovalCapability`を使用してください。チャネル固有の情報は`approvalCapability.nativeRuntime`の背後に置き、理想的には`createChannelApprovalNativeRuntimeAdapter(...)`または`createLazyChannelApprovalNativeRuntimeAdapter(...)`を通してください。これにより、コアはハンドラーを組み立て、リクエストフィルタリング、ルーティング、重複排除、有効期限、Gatewayサブスクリプション、別経路通知を担当できます。`nativeRuntime`はいくつかの小さなインターフェースに分割されています。
- `availability` — アカウントが設定済みか、およびリクエストを処理すべきかどうか
- `presentation` — 共有承認ビューモデルを、保留/解決済み/期限切れのネイティブペイロードまたは最終アクションにマッピングする
- `transport` — ターゲットを準備し、ネイティブ承認メッセージを送信/更新/削除する
- `interactions` — ネイティブボタンやリアクション向けの任意のbind/unbind/clear-actionフック
- `observe` — 任意の配信診断フック
- チャンネルがclient、token、Bolt app、webhook receiverのようなランタイム所有オブジェクトを必要とする場合は、`openclaw/plugin-sdk/channel-runtime-context`を通じて登録してください。汎用runtime-contextレジストリにより、コアは承認固有のラッパー接着コードを追加せずに、チャンネル起動状態からcapability駆動ハンドラーをbootstrapできます。
- capability駆動の接合面だけではまだ表現力が足りない場合にのみ、より低レベルな`createChannelApprovalHandler`または`createChannelNativeApprovalRuntime`を使用してください。
- native承認チャンネルは、`accountId`と`approvalKind`の両方をそれらのヘルパー経由でルーティングする必要があります。`accountId`はマルチアカウント承認ポリシーを正しいボットアカウントにスコープし、`approvalKind`はコアにハードコードされた分岐なしで、execとプラグイン承認の動作をチャンネルから利用可能に保ちます。
- コアは現在、承認の再ルーティング通知も担当します。チャンネルプラグインは、`createChannelNativeApprovalRuntime`から独自の「承認はDM/別チャンネルへ送られました」フォローアップメッセージを送るべきではありません。代わりに、共有承認capabilityヘルパーを通じて正確なorigin + approver-DMルーティングを公開し、開始元チャットへ通知を返す前にコアが実際の配信を集約できるようにしてください。
- 配信された承認IDの種類をエンドツーエンドで維持してください。native clientは、チャンネルローカル状態からexecかプラグインかの承認ルーティングを推測したり書き換えたりしてはいけません。
- 異なる承認種別は、意図的に異なるnativeサーフェスを公開できます
- チャネルにclient、token、Boltアプリ、Webhookレシーバーのような実行時所有オブジェクトが必要な場合は、`openclaw/plugin-sdk/channel-runtime-context`を通じて登録してください。汎用runtime-contextレジストリにより、コアは承認固有のラッパーを追加せずに、チャネル起動状態から機能駆動ハンドラーをブートストラップできます。
- capability駆動インターフェースでまだ十分に表現できない場合にのみ、より低レベルの`createChannelApprovalHandler`または`createChannelNativeApprovalRuntime`を使用してください。
- ネイティブ承認チャネルでは、これらのヘルパーを通じて`accountId`と`approvalKind`の両方をルーティングする必要があります。`accountId`はマルチアカウント承認ポリシーを正しいボットアカウントにスコープし、`approvalKind`はコアでハードコードされた分岐なしにexecとplugin承認の動作をチャネルで利用可能にします。
- コアは承認の再ルーティング通知も担当するようになりました。チャネルPluginは、`createChannelNativeApprovalRuntime`から独自の「承認はDM/別チャネルに送られました」という追跡メッセージを送信すべきではありません。代わりに、共有承認capabilityヘルパーを通じて正確なoriginとapprover-DMルーティングを公開し、開始チャットに通知を投稿する前にコアが実際の配信を集約するようにしてください。
- 配信された承認idの種類をエンドツーエンドで保持してください。ネイティブクライアントは、チャネルローカルの状態からexecとplugin承認のルーティングを推測または書き換えるべきではありません。
- 異なる承認種類で、意図的に異なるネイティブサーフェスを公開してもかまいません
現在の同梱例:
- Slackは、exec IDとプラグインIDの両方に対してnative承認ルーティングを利用可能なままにします。
- Matrixは、exec承認とプラグイン承認で同じnative DM/チャンネルルーティングとreaction UXを維持しつつ、承認種別ごとにauthを異ならせることができます。
- `createApproverRestrictedNativeApprovalAdapter`は互換ラッパーとして依然存在しますが、新しいコードではcapability builderを優先し、プラグイン上に`approvalCapability`を公開してください。
- Slackは、exec idとplugin idの両方でネイティブ承認ルーティングを利用可能にしています。
- Matrixは、exec承認とplugin承認で同じネイティブDM/チャネルルーティングとリアクションUXを維持しつつ、承認種類による認証の違いも許可しています。
- `createApproverRestrictedNativeApprovalAdapter`は互換性ラッパーとしてまだ存在しますが、新しいコードではcapability builderを推奨し、Plugin上で`approvalCapability`を公開してください。
ホットなチャンネルエントリポイントでは、そのファミリーの一部だけが必要な場合、より狭いランタイムsubpathを優先してください。
ホットなチャネルエントリーポイントでは、そのファミリーのうち1つの部分だけが必要な場合、より狭いruntimeサブパスを優先してください。
- `openclaw/plugin-sdk/approval-auth-runtime`
- `openclaw/plugin-sdk/approval-client-runtime`
@ -88,77 +98,91 @@ x-i18n:
- `openclaw/plugin-sdk/approval-reply-runtime`
- `openclaw/plugin-sdk/channel-runtime-context`
同様に、より広い包括サーフェスが不要な場合は、`openclaw/plugin-sdk/setup-runtime`、`openclaw/plugin-sdk/setup-adapter-runtime`、`openclaw/plugin-sdk/reply-runtime`、`openclaw/plugin-sdk/reply-dispatch-runtime`、`openclaw/plugin-sdk/reply-reference`、`openclaw/plugin-sdk/reply-chunking`を優先してください。
同様に、より広い包括的な公開インターフェースが不要な場合は、
`openclaw/plugin-sdk/setup-runtime`
`openclaw/plugin-sdk/setup-adapter-runtime`
`openclaw/plugin-sdk/reply-runtime`
`openclaw/plugin-sdk/reply-dispatch-runtime`
`openclaw/plugin-sdk/reply-reference`、および
`openclaw/plugin-sdk/reply-chunking`
を優先してください。
セットアップについては特に:
セットアップに関しては特に次のとおりです。
- `openclaw/plugin-sdk/setup-runtime`は、ランタイム安全なセットアップヘルパーを扱います:
import安全なセットアップpatchアダプター`createPatchedAccountSetupAdapter`、`createEnvPatchedAccountSetupAdapter`、`createSetupInputPresenceValidator`、lookup-note出力、`promptResolvedAllowFrom`、`splitSetupEntries`、および委譲セットアップproxy builder
- `openclaw/plugin-sdk/setup-adapter-runtime`は、`createEnvPatchedAccountSetupAdapter`向けの狭いenv対応アダプター接合面です
- `openclaw/plugin-sdk/channel-setup`は、optional-installセットアップbuilderといくつかのセットアップ安全プリミティブを扱います:
`createOptionalChannelSetupSurface`、`createOptionalChannelSetupAdapter`、
- `openclaw/plugin-sdk/setup-runtime`はruntime-safeなセットアップヘルパーを提供します:
import-safeなセットアップパッチアダプター`createPatchedAccountSetupAdapter`,
`createEnvPatchedAccountSetupAdapter`,
`createSetupInputPresenceValidator`、lookup-note出力、
`promptResolvedAllowFrom`、`splitSetupEntries`、および委譲された
setup-proxy builder
- `openclaw/plugin-sdk/setup-adapter-runtime`は、`createEnvPatchedAccountSetupAdapter`向けの狭いenv-aware adapterインターフェースです
- `openclaw/plugin-sdk/channel-setup`は、オプションインストール用セットアップbuilderと、いくつかのセットアップ安全なプリミティブを提供します:
`createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`,
チャンネルがenv駆動のセットアップやauthをサポートし、ランタイムがロードされる前に汎用の起動/設定フローがそれらのenv名を知る必要がある場合は、プラグインmanifestで`channelEnvVars`として宣言してください。チャンネルランタイムの`envVars`またはローカル定数は、operator向けコピー専用にしてください。
`createOptionalChannelSetupWizard`、`DEFAULT_ACCOUNT_ID`、`createTopLevelChannelDmPolicy`、`setSetupChannelEnabled`、および`splitSetupEntries`
チャネルがenv駆動のセットアップまたは認証をサポートし、汎用の起動/設定フローでruntimeロード前にそれらのenv名を把握する必要がある場合は、Pluginマニフェストで`channelEnvVars`として宣言してください。チャネルruntimeの`envVars`やローカル定数は、オペレーター向け文言専用にとどめてください。
`createOptionalChannelSetupWizard`, `DEFAULT_ACCOUNT_ID`,
`createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, および
`splitSetupEntries`
- `moveSingleAccountChannelSectionToDefaultAccount(...)`のような、より重い共有セットアップ/設定ヘルパーも必要な場合にのみ、より広い`openclaw/plugin-sdk/setup`接合面を使用してください
- より重い共有セットアップ/設定ヘルパー、たとえば
`moveSingleAccountChannelSectionToDefaultAccount(...)`
も必要な場合にのみ、より広い`openclaw/plugin-sdk/setup`インターフェースを使用してください
チャンネルがセットアップサーフェス内で「まずこのプラグインをインストールしてください」と案内するだけでよい場合は、`createOptionalChannelSetupSurface(...)`を優先してください。生成されるadapter/wizardは、設定書き込みと最終化でfail closedし、検証・最終化・docsリンクのコピー全体で同じインストール必須メッセージを再利用します。
チャネルがセットアップ画面で「まずこのPluginをインストールしてください」と案内したいだけなら、`createOptionalChannelSetupSurface(...)`を優先してください。生成されるadapter/wizardは設定書き込みと最終化でfail closedし、検証、最終化、ドキュメントリンク文言で同じインストール必須メッセージを再利用します。
その他のホットなチャンネルパスでも、より広いレガシーサーフェスより狭いヘルパーを優先してください。
そのほかのホットなチャネルパスでも、より広い従来の公開インターフェースより狭いヘルパーを優先してください。
- `openclaw/plugin-sdk/account-core`
`openclaw/plugin-sdk/account-id`
`openclaw/plugin-sdk/account-resolution`、および
`openclaw/plugin-sdk/account-helpers`は、マルチアカウント設定と
デフォルトアカウントフォールバック向け
- `openclaw/plugin-sdk/inbound-envelope`
`openclaw/plugin-sdk/inbound-reply-dispatch`は、インバウンドのルート/envelopeと
record-and-dispatch配線向け
- `openclaw/plugin-sdk/messaging-targets`は、ターゲット解析/照合向け
- `openclaw/plugin-sdk/outbound-media`
`openclaw/plugin-sdk/outbound-runtime`は、メディア読み込みと
アウトバウンドID/送信delegate向け
- `openclaw/plugin-sdk/thread-bindings-runtime`は、スレッドbindingライフサイクル
とadapter登録向け
- `openclaw/plugin-sdk/agent-media-payload`は、レガシーのagent/media
payloadフィールドレイアウトがまだ必要な場合のみ
- `openclaw/plugin-sdk/telegram-command-config`は、Telegramカスタムコマンド
正規化、重複/競合検証、およびフォールバック安定なコマンド
設定契約向け
- `openclaw/plugin-sdk/account-core`,
`openclaw/plugin-sdk/account-id`,
`openclaw/plugin-sdk/account-resolution`, および
`openclaw/plugin-sdk/account-helpers` は、マルチアカウント設定と
デフォルトアカウントへのフォールバック用です
- `openclaw/plugin-sdk/inbound-envelope` および
`openclaw/plugin-sdk/inbound-reply-dispatch` は、受信route/envelopeと
record-and-dispatch配線用です
- `openclaw/plugin-sdk/messaging-targets` はターゲット解析/照合用です
- `openclaw/plugin-sdk/outbound-media` および
`openclaw/plugin-sdk/outbound-runtime` は、メディア読み込みと送信
identity/send delegate用です
- `openclaw/plugin-sdk/thread-bindings-runtime` は、スレッドbindingライフサイクル
とadapter登録用です
- `openclaw/plugin-sdk/agent-media-payload` は、従来のagent/media
ペイロードフィールド配置がまだ必要な場合にのみ使用してください
- `openclaw/plugin-sdk/telegram-command-config` は、Telegramカスタムコマンドの
正規化、重複/競合検証、およびフォールバック安定なコマンド設定コントラクト用です
認証専用チャンネルは通常、デフォルトパスで十分です。コアが承認を処理し、プラグインはアウトバウンド/auth capabilityを公開するだけです。Matrix、Slack、Telegram、およびカスタムチャットトランスポートのようなnative承認チャンネルは、独自に承認ライフサイクルを実装するのではなく、共有nativeヘルパーを使用してください。
認証専用チャネルは通常、デフォルトの経路で十分です。コアが承認を処理し、Pluginは送信/認証capabilityを公開するだけで済みます。Matrix、Slack、Telegram、カスタムチャットトランスポートのようなネイティブ承認チャネルは、独自の承認ライフサイクルを実装するのではなく、共有のネイティブヘルパーを使用してください。
## インバウンドメンションポリシー
## 受信メンションポリシー
インバウンドメンション処理は、次の2層に分けて維持してください。
受信メンション処理は、次の2層に分けたままにしてください。
- プラグイン所有の証拠収集
- Plugin所有の証拠収集
- 共有ポリシー評価
共有レイヤーには`openclaw/plugin-sdk/channel-inbound`を使用してください。
プラグインローカルロジックに適しているもの:
Pluginローカルロジックに適しているもの:
- botへの返信検出
- bot引用の検出
- botへの返信検出
- bot引用したメッセージの検出
- スレッド参加チェック
- service/systemメッセージの除外
- bot参加を証明するために必要なプラットフォームネイティブキャッシュ
- サービス/システムメッセージの除外
- bot参加を証明するために必要なプラットフォームネイティブキャッシュ
共有ヘルパーに適しているもの:
- `requireMention`
- 明示的メンション結果
- 暗黙的メンションallowlist
- 暗黙的メンション許可リスト
- コマンドバイパス
- 最終的なスキップ判定
推奨フロー:
1. ローカルなメンション事実を計算します。
2. その事実を`resolveInboundMentionDecision({ facts, policy })`に渡します。
3. インバウンドゲートで`decision.effectiveWasMentioned`、`decision.shouldBypassMention`、`decision.shouldSkip`を使用します。
1. ローカルのメンション情報を計算します。
2. その情報を`resolveInboundMentionDecision({ facts, policy })`に渡します。
3. 受信ゲートで`decision.effectiveWasMentioned`、`decision.shouldBypassMention`、`decision.shouldSkip`を使用します。
```typescript
import {
@ -197,7 +221,7 @@ const decision = resolveInboundMentionDecision({
if (decision.shouldSkip) return;
```
`api.runtime.channel.mentions`は、すでにランタイム注入に依存している同梱チャンネルプラグイン向けに、同じ共有メンションヘルパーを公開します。
`api.runtime.channel.mentions`は、すでにruntime injectionに依存している同梱チャネルPlugin向けに、同じ共有メンションヘルパーを公開します。
- `buildMentionRegexes`
- `matchesMentionPatterns`
@ -205,14 +229,18 @@ if (decision.shouldSkip) return;
- `implicitMentionKindWhen`
- `resolveInboundMentionDecision`
古い`resolveMentionGating*`ヘルパーは、`openclaw/plugin-sdk/channel-inbound`上に互換エクスポートとしてのみ残っています。新しいコードでは`resolveInboundMentionDecision({ facts, policy })`を使用してください。
古い`resolveMentionGating*`ヘルパーは、
`openclaw/plugin-sdk/channel-inbound`上に互換性エクスポートとしてのみ残されています。新しいコードでは
`resolveInboundMentionDecision({ facts, policy })`を使用してください。
## ウォークスルー
<Steps>
<a id="step-1-package-and-manifest"></a>
<Step title="パッケージとmanifest">
標準的なプラグインファイルを作成します。`package.json`内の`channel`フィールドが、これをチャンネルプラグインにします。完全なパッケージメタデータサーフェスについては、[Plugin Setup and Config](/ja-JP/plugins/sdk-setup#openclaw-channel)を参照してください。
<Step title="パッケージとマニフェスト">
標準的なPluginファイルを作成します。`package.json`の`channel`フィールドが、
これをチャネルPluginにします。完全なパッケージメタデータの公開インターフェースについては、
[Plugin Setup and Config](/ja-JP/plugins/sdk-setup#openclaw-channel)を参照してください。
<CodeGroup>
```json package.json
@ -261,8 +289,9 @@ if (decision.shouldSkip) return;
</Step>
<Step title="チャンネルプラグインオブジェクトを構築する">
`ChannelPlugin`インターフェースには、多くの省略可能なアダプターサーフェスがあります。最小構成の`id`と`setup`から始め、必要に応じてアダプターを追加してください。
<Step title="チャネルPluginオブジェクトを構築する">
`ChannelPlugin`インターフェースには、多くの任意のアダプター公開インターフェースがあります。まずは
最小構成である`id`と`setup`から始め、必要に応じてアダプターを追加してください。
`src/channel.ts`を作成します:
@ -272,7 +301,7 @@ if (decision.shouldSkip) return;
createChannelPluginBase,
} from "openclaw/plugin-sdk/channel-core";
import type { OpenClawConfig } from "openclaw/plugin-sdk/channel-core";
import { acmeChatApi } from "./client.js"; // あなたのプラットフォームAPIクライアント
import { acmeChatApi } from "./client.js"; // your platform API client
type ResolvedAccount = {
accountId: string | null;
@ -313,7 +342,7 @@ if (decision.shouldSkip) return;
},
}),
// DMセキュリティ: botにメッセージを送れる相手
// DM security: who can message the bot
security: {
dm: {
channelKey: "acme-chat",
@ -323,21 +352,21 @@ if (decision.shouldSkip) return;
},
},
// Pairing: 新しいDM連絡先向け承認フロー
// Pairing: approval flow for new DM contacts
pairing: {
text: {
idLabel: "Acme Chat username",
message: "本人確認のため、このコードを送信してください:",
message: "Send this code to verify your identity:",
notify: async ({ target, code }) => {
await acmeChatApi.sendDm(target, `Pairing code: ${code}`);
},
},
},
// スレッド化: 返信の配信方法
// Threading: how replies are delivered
threading: { topLevelReplyToMode: "reply" },
// アウトバウンド: プラットフォームへメッセージを送信
// Outbound: send messages to the platform
outbound: {
attachedResults: {
sendText: async (params) => {
@ -357,22 +386,24 @@ if (decision.shouldSkip) return;
});
```
<Accordion title="createChatChannelPluginが担ってくれること">
低レベルのアダプターインターフェースを手動で実装する代わりに、宣言的なオプションを渡すと、builderがそれらを組み合わせます。
<Accordion title="createChatChannelPluginが行うこと">
低レベルのアダプターインターフェースを手動で実装する代わりに、
宣言的なオプションを渡すと、builderがそれらを組み合わせます。
| オプション | 配線されるもの |
| Option | 配線されるもの |
| --- | --- |
| `security.dm` | 設定フィールドからのスコープ付きDMセキュリティリゾルバー |
| `pairing.text` | コード交換付きのテキストベースDM pairingフロー |
| `pairing.text` | コード交換を伴うテキストベースのDMペアリングフロー |
| `threading` | reply-to-modeリゾルバー固定、アカウントスコープ、またはカスタム |
| `outbound.attachedResults` | 結果メタデータ(メッセージIDを返す送信関数 |
| `outbound.attachedResults` | 結果メタデータ(message IDを返す送信関数 |
完全に制御したい場合は、宣言的オプションの代わりに生のアダプターオブジェクトを渡すこともできます。
完全な制御が必要な場合は、宣言的オプションの代わりに
生のアダプターオブジェクトを渡すこともできます。
</Accordion>
</Step>
<Step title="エントリポイントを配線する">
<Step title="エントリポイントを配線する">
`index.ts`を作成します:
```typescript index.ts
@ -408,13 +439,19 @@ if (decision.shouldSkip) return;
});
```
チャンネル所有のCLI descriptorは`registerCliMetadata(...)`に置いてください。これにより、OpenClawは完全なチャンネルランタイムを有効化せずにルートヘルプへそれらを表示でき、通常の完全ロードでも実際のコマンド登録向けに同じdescriptorを取得できます。`registerFull(...)`はランタイム専用の処理に維持してください。
`registerFull(...)`がGateway RPCメソッドを登録する場合は、プラグイン固有の接頭辞を使用してください。コア管理者名前空間`config.*`、`exec.approvals.*`、`wizard.*`、`update.*`)は予約済みで、常に`operator.admin`に解決されます。
`defineChannelPluginEntry`は、登録モードの分割を自動で処理します。すべてのオプションについては[Entry Points](/ja-JP/plugins/sdk-entrypoints#definechannelpluginentry)を参照してください。
チャネル所有のCLI descriptorは`registerCliMetadata(...)`に置いてください。これにより、OpenClawは完全なチャネルruntimeを有効化せずに
ルートヘルプでそれらを表示でき、通常の完全ロードでも実際のコマンド登録のために
同じdescriptorを取得できます。`registerFull(...)`はruntime専用の処理に残してください。
`registerFull(...)`がGateway RPCメソッドを登録する場合は、
Plugin固有のprefixを使用してください。コア管理namespace`config.*`、
`exec.approvals.*`, `wizard.*`, `update.*`)は予約されたままで、
常に`operator.admin`に解決されます。
`defineChannelPluginEntry`は登録モードの分岐を自動的に処理します。すべての
オプションについては[Entry Points](/ja-JP/plugins/sdk-entrypoints#definechannelpluginentry)を参照してください。
</Step>
<Step title="セットアップエントリを追加する">
<Step title="setup entryを追加する">
オンボーディング中の軽量ロード用に`setup-entry.ts`を作成します:
```typescript setup-entry.ts
@ -424,24 +461,28 @@ if (decision.shouldSkip) return;
export default defineSetupPluginEntry(acmeChatPlugin);
```
OpenClawは、チャンネルが無効または未設定のとき、完全なエントリの代わりにこれをロードします。これにより、セットアップフロー中に重いランタイムコードを引き込まずに済みます。詳細は[Setup and Config](/ja-JP/plugins/sdk-setup#setup-entry)を参照してください。
OpenClawは、チャネルが無効または未設定のとき、完全なentryの代わりにこれをロードします。
これにより、セットアップフロー中に重いruntimeコードを読み込まずに済みます。
詳細は[Setup and Config](/ja-JP/plugins/sdk-setup#setup-entry)を参照してください。
</Step>
<Step title="インバウンドメッセージを処理する">
プラグインは、プラットフォームからメッセージを受信し、それをOpenClawへ転送する必要があります。一般的なパターンは、リクエストを検証し、チャンネルのインバウンドハンドラーを通じてディスパッチするWebhookです。
<Step title="受信メッセージを処理する">
Pluginはプラットフォームからメッセージを受信し、それを
OpenClawに転送する必要があります。典型的なパターンは、リクエストを検証し、
チャネルの受信ハンドラーを通してディスパッチするWebhookです。
```typescript
registerFull(api) {
api.registerHttpRoute({
path: "/acme-chat/webhook",
auth: "plugin", // プラグイン管理認証(署名検証は自分で行う)
auth: "plugin", // plugin-managed auth (verify signatures yourself)
handler: async (req, res) => {
const event = parseWebhookPayload(req);
// あなたのインバウンドハンドラーがメッセージをOpenClawへディスパッチします。
// 正確な配線はプラットフォームSDKに依存します
// 実例は、同梱のMicrosoft TeamsまたはGoogle Chatプラグインパッケージを参照してください。
// Your inbound handler dispatches the message to OpenClaw.
// The exact wiring depends on your platform SDK
// see a real example in the bundled Microsoft Teams or Google Chat plugin package.
await handleAcmeChatInbound(api, event);
res.statusCode = 200;
@ -453,21 +494,24 @@ if (decision.shouldSkip) return;
```
<Note>
インバウンドメッセージ処理はチャンネル固有です。各チャンネルプラグインが独自のインバウンドパイプラインを所有します。実際のパターンについては、同梱チャンネルプラグインたとえばMicrosoft TeamsまたはGoogle Chatプラグインパッケージを確認してください。
受信メッセージ処理はチャネル固有です。各チャネルPluginは
独自の受信パイプラインを所有します。実際のパターンについては、
同梱チャネルPlugin
たとえばMicrosoft TeamsまたはGoogle ChatのPluginパッケージを参照してください。
</Note>
</Step>
<a id="step-6-test"></a>
<Step title="テスト">
`src/channel.test.ts`に同テストを書きます:
`src/channel.test.ts`に同じ場所のテストを書きます:
```typescript src/channel.test.ts
import { describe, it, expect } from "vitest";
import { acmeChatPlugin } from "./channel.js";
describe("acme-chat plugin", () => {
it("設定からアカウントを解決する", () => {
it("resolves account from config", () => {
const cfg = {
channels: {
"acme-chat": { token: "test-token", allowFrom: ["user1"] },
@ -477,7 +521,7 @@ if (decision.shouldSkip) return;
expect(account.token).toBe("test-token");
});
it("secretを実体化せずにアカウントを検査する", () => {
it("inspects account without materializing secrets", () => {
const cfg = {
channels: { "acme-chat": { token: "test-token" } },
} as any;
@ -486,7 +530,7 @@ if (decision.shouldSkip) return;
expect(result.tokenStatus).toBe("available");
});
it("設定不足を報告する", () => {
it("reports missing config", () => {
const cfg = { channels: {} } as any;
const result = acmeChatPlugin.setup!.inspectAccount!(cfg, undefined);
expect(result.configured).toBe(false);
@ -505,19 +549,19 @@ if (decision.shouldSkip) return;
## ファイル構成
```text
```
<bundled-plugin-root>/acme-chat/
├── package.json # openclaw.channelメタデータ
├── openclaw.plugin.json # 設定スキーマを含むmanifest
├── openclaw.plugin.json # 設定スキーマを含むマニフェスト
├── index.ts # defineChannelPluginEntry
├── setup-entry.ts # defineSetupPluginEntry
├── api.ts # 公開エクスポート(任意)
├── runtime-api.ts # 内部ランタイムエクスポート(任意)
├── runtime-api.ts # 内部runtimeエクスポート(任意)
└── src/
├── channel.ts # createChatChannelPlugin経由のChannelPlugin
├── channel.test.ts # テスト
├── client.ts # プラットフォームAPIクライアント
└── runtime.ts # ランタイムストア(必要な場合)
└── runtime.ts # runtimeストア(必要な場合)
```
## 高度なトピック
@ -527,23 +571,27 @@ if (decision.shouldSkip) return;
固定、アカウントスコープ、またはカスタムの返信モード
</Card>
<Card title="messageツール統合" icon="puzzle" href="/ja-JP/plugins/architecture#channel-plugins-and-the-shared-message-tool">
describeMessageToolとアクションディスカバリー
describeMessageToolとアクション検出
</Card>
<Card title="ターゲット解決" icon="crosshair" href="/ja-JP/plugins/architecture#channel-target-resolution">
inferTargetChatType、looksLikeId、resolveTarget
inferTargetChatType, looksLikeId, resolveTarget
</Card>
<Card title="ランタイムヘルパー" icon="settings" href="/ja-JP/plugins/sdk-runtime">
<Card title="runtimeヘルパー" icon="settings" href="/ja-JP/plugins/sdk-runtime">
api.runtime経由のTTS、STT、メディア、subagent
</Card>
</CardGroup>
<Note>
一部の同梱ヘルパー接合面は、同梱プラグインの保守と互換性のために引き続き存在します。これらは新しいチャンネルプラグイン向けの推奨パターンではありません。その同梱プラグインファミリーを直接保守しているのでない限り、共通SDKサーフェスの汎用channel/setup/reply/runtime subpathを優先してください。
一部の同梱ヘルパーインターフェースは、同梱Pluginのメンテナンスと
互換性のためにまだ存在します。これらは新しいチャネルPluginに推奨される
パターンではありません。その同梱Pluginファミリーを直接メンテナンスしている場合を除き、
共通SDK公開インターフェースの汎用channel/setup/reply/runtimeサブパスを
優先してください。
</Note>
## 次のステップ
- [プロバイダープラグイン](/ja-JP/plugins/sdk-provider-plugins) — プラグインがモデルも提供する場合
- [SDK概要](/ja-JP/plugins/sdk-overview) — 完全なsubpath importリファレンス
- [SDKテスト](/ja-JP/plugins/sdk-testing) — テストユーティリティと契約テスト
- [プラグインmanifest](/ja-JP/plugins/manifest) — 完全なmanifestスキーマ
- [Provider Plugins](/ja-JP/plugins/sdk-provider-plugins) — Pluginがモデルも提供する場合
- [SDK Overview](/ja-JP/plugins/sdk-overview) — 完全なサブパスimportリファレンス
- [SDK Testing](/ja-JP/plugins/sdk-testing) — テストユーティリティとコントラクトテスト
- [Plugin Manifest](/ja-JP/plugins/manifest) — 完全なマニフェストスキーマ

View File

@ -1,184 +1,188 @@
---
read_when:
- 公開リリースチャネルの定義を探す
- バージョン命名とリリース頻度を探す
- 公開リリースチャネルの定義を探していま
- バージョン命名とリリース頻度を探していま
summary: 公開リリースチャネル、バージョン命名、およびリリース頻度
title: リリースポリシー
x-i18n:
generated_at: "2026-04-14T04:43:21Z"
generated_at: "2026-04-15T04:43:33Z"
model: gpt-5.4
provider: openai
source_hash: 3eaf9f1786b8c9fd4f5a9c657b623cb69d1a485958e1a9b8f108511839b63587
source_hash: 88724307269ab783a9fbf8a0540fea198d8a3add68457f4e64d5707114fa518c
source_path: reference/RELEASING.md
workflow: 15
---
# リリースポリシー
OpenClaw には 3 つの公開リリースレーンがあります。
OpenClaw には3つの公開リリースレーンがあります。
- stable: タグ付きリリースで、デフォルトでは npm `beta` に公開され、明示的に要求された場合は npm `latest` に公開されます
- beta: npm `beta` に公開されるプレリリースタグ
- stable: デフォルトでは npm `beta` に公開されるタグ付きリリース、明示的に要求された場合は npm `latest` に公開
- beta: npm `beta` に公開されるプレリリースタグ
- dev: `main` の移動する先頭
## バージョン命名
- stable リリースバージョン: `YYYY.M.D`
- stable リリースバージョン: `YYYY.M.D`
- Git タグ: `vYYYY.M.D`
- stable 修正リリースバージョン: `YYYY.M.D-N`
- stable 修正リリースバージョン: `YYYY.M.D-N`
- Git タグ: `vYYYY.M.D-N`
- beta プレリリースバージョン: `YYYY.M.D-beta.N`
- beta プレリリースバージョン: `YYYY.M.D-beta.N`
- Git タグ: `vYYYY.M.D-beta.N`
- 月や日はゼロ埋めしないでください
- `latest` は現在昇格済みの stable npm リリースを意味しま
- `beta` は現在の beta インストール対象を意味しま
- stable および stable 修正リリースはデフォルトで npm の `beta` に公開されます。リリース運用者は明示的に `latest` を対象にすることも、検証済みの beta ビルドを後で昇格させることもできます
- すべての OpenClaw リリースでは、npm パッケージと macOS アプリが一緒に出荷されます
- 月や日はゼロ埋めしない
- `latest` は現在昇格済みの stable npm リリースを意味す
- `beta` は現在の beta インストール対象を意味す
- stable および stable 修正版リリースはデフォルトで npm `beta` に公開される。リリースオペレーターは明示的に `latest` を指定することも、検証済みの beta ビルドを後で昇格させることもできる
- すべての OpenClaw リリースは npm パッケージと macOS アプリを同時に出荷する
## リリース頻度
- リリースは beta-first で進みます
- stable は最新の beta が検証された後にのみ続きます
- 詳細なリリース手順、承認、認証情報、復旧メモは
maintainer 限定です
- リリースはまず beta として進む
- stable は最新の beta が検証された後にのみ続
- 詳細なリリース手順、承認、認証情報、および復旧メモは
maintainer 専用
## リリース事前確認
- pack
検証ステップで期待される `dist/*` のリリース成果物と Control UI バンドルが存在するように、`pnpm release:check` の前に `pnpm build && pnpm ui:build` を実行してください
- すべてのタグ付きリリースの前に `pnpm release:check` を実行してください
- リリースチェックは現在、別個の手動ワークフローで実行されます:
- pack 検証ステップに必要な
`dist/*` リリース成果物と Control UI バンドルが存在するよう、
`pnpm release:check` の前に `pnpm build && pnpm ui:build` を実行する
- すべてのタグ付きリリースの前に `pnpm release:check` を実行する
- リリースチェックは現在、別の手動ワークフローで実行される:
`OpenClaw Release Checks`
- この分離は意図的なものです。実際の npm リリース経路を短く、
決定的で、成果物重視のものに保ちながら、低速なライブチェックは
独自のレーンに分離し、公開を停滞またはブロックしないようにします
- リリースチェックは `main` のワークフロー ref からディスパッチする必要があります。これにより、
ワークフローロジックとシークレットが正規のものに保たれます
- クロス OS のインストールおよびアップグレード実行時検証は、プライベートな呼び出し元ワークフロー
`openclaw/releases-private/.github/workflows/openclaw-cross-os-release-checks.yml`
からディスパッチされ、再利用可能な公開ワークフロー
`.github/workflows/openclaw-cross-os-release-checks-reusable.yml`
を呼び出す
- この分離は意図的なもの: 実際の npm リリース経路は短く、
決定的で、成果物重視のままにし、より遅いライブチェックは独自の
レーンに残して、公開を遅延またはブロックしないようにする
- リリースチェックは `main` ワークフロー ref からディスパッチしなければならず、これにより
ワークフローロジックとシークレットを正準のまま保つ
- そのワークフローは、既存のリリースタグまたは現在の完全な
40 文字の `main` コミット SHA のいずれかを受け付けます
- コミット SHA モードでは、現在の `origin/main` HEAD のみを受け付けます。古いリリースコミットには
リリースタグを使用してください
- `OpenClaw NPM Release` の検証専用事前確認でも、プッシュ済みタグを必要とせずに現在の完全な 40 文字の `main` コミット SHA を受け付けます
- その SHA パスは検証専用であり、実際の公開に昇格することはできません
- SHA モードでは、ワークフローはパッケージメタデータチェックのためにのみ `v<package.json version>` を合成します。実際の公開には依然として実際のリリースタグが必要です
- 両方のワークフローは、実際の公開および昇格経路を GitHub-hosted
ランナー上に維持しつつ、変更を伴わない検証経路ではより大きな
Blacksmith Linux ランナーを使用できます
40文字の `main` コミット SHA のいずれかを受け付ける
- コミット SHA モードでは、現在の `origin/main` HEAD のみを受け付ける。
それより古いリリースコミットにはリリースタグを使う
- `OpenClaw NPM Release` の検証専用事前確認でも、プッシュ済みタグを必要とせずに
現在の完全な 40 文字の `main` コミット SHA を受け付ける
- その SHA 経路は検証専用であり、実際の公開に昇格させることはできない
- SHA モードでは、ワークフローはパッケージメタデータ確認のためにのみ
`v<package.json version>` を合成する。実際の公開には依然として実際のリリースタグが必要
- 両ワークフローとも、実際の公開および昇格経路は GitHub-hosted
ランナー上に維持し、非破壊の検証経路ではより大きい
Blacksmith Linux ランナーを使用できる
- そのワークフローは
`OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cache`
、`OPENAI_API_KEY` と `ANTHROPIC_API_KEY` の両方のワークフローシークレットを使用して実行します
- npm リリース事前確認は、別個のリリースチェックレーンを待たなくなりました
`OPENAI_API_KEY``ANTHROPIC_API_KEY` の両方のワークフローシークレットを使って実行する
- npm リリース事前確認は、もはや別レーンのリリースチェックを待たない
- 承認前に
`RELEASE_TAG=vYYYY.M.D node --import tsx scripts/openclaw-npm-release-check.ts`
(または対応する beta/修正タグ)を実行してください
(または対応する beta/修正版タグ)を実行する
- npm 公開後、公開されたレジストリの
インストール経路を新しい一時プレフィックスで検証するために
インストール経路を新しい一時プレフィックスで検証するために
`node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.D`
(または対応する beta/修正バージョン)を実行してください
- maintainer 向けリリース自動化は現在、事前確認してから昇格する方式を使用します:
- 実際の npm 公開は、成功した npm `preflight_run_id` に合格している必要があります
- stable npm リリースのデフォルトは `beta` です
- stable npm 公開は、ワークフロー入力で明示的に `latest` を対象にできます
- `beta` から `latest` への stable npm 昇格は、信頼済みの `OpenClaw NPM Release` ワークフロー上で明示的な手動モードとして引き続き利用できます
- 直接の stable 公開では、すでに公開済みの stable バージョンに `latest``beta` の両方を向ける明示的な dist-tag 同期モードも実行できます
- これらの dist-tag モードでも、npm の `dist-tag` 管理は信頼済み公開とは別であるため、`npm-release` 環境内の有効な `NPM_TOKEN` が引き続き必要です
- 公開の `macOS Release` は検証専用です
- 実際の private mac 公開は、成功した private mac の
`preflight_run_id``validate_run_id` に合格している必要があります
- 実際の公開経路では、準備済み成果物を再ビルドせずに昇格させます
- `YYYY.M.D-N` のような stable 修正リリースでは、公開後検証ツールは
`YYYY.M.D` から `YYYY.M.D-N` への同じ一時プレフィックスのアップグレード経路も確認するため、
リリース修正によって古いグローバルインストールが元の stable ペイロードのまま
気づかれず残ることはありません
- npm リリース事前確認は、tarball に `dist/control-ui/index.html` と空でない `dist/control-ui/assets/` ペイロードの両方が含まれていない限り fail closed になるため、
空のブラウザダッシュボードを再び出荷することはありません
- `pnpm test:install:smoke` は候補アップデート tarball の npm pack `unpackedSize` 予算も適用するため、
インストーラー E2E で公開経路の前に pack の意図しない肥大化を検出できます
(または対応する beta/修正版バージョン)を実行する
- maintainer のリリース自動化は現在、事前確認してから昇格する方式を使用する:
- 実際の npm 公開は、成功した npm `preflight_run_id` を通過しなければならない
- stable npm リリースはデフォルトで `beta`
- stable npm 公開はワークフロー入力により明示的に `latest` を対象にできる
- トークンベースの npm dist-tag 変更は現在
`openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml`
にあり、セキュリティのためそうなっている。これは `npm dist-tag add` が依然として `NPM_TOKEN` を必要とし、一方で
公開リポジトリは OIDC のみの公開を維持するため
- 公開 `macOS Release` は検証専用
- 実際のプライベート mac 公開は、成功したプライベート mac の
`preflight_run_id``validate_run_id` を通過しなければならない
- 実際の公開経路は、成果物を再度ビルドする代わりに、準備済み成果物を昇格させる
- `YYYY.M.D-N` のような stable 修正版リリースでは、公開後検証ツールは
同じ一時プレフィックスでの `YYYY.M.D` から `YYYY.M.D-N` へのアップグレード経路も確認する。
これにより、リリース修正が古いグローバルインストールを
ベース stable ペイロードのまま静かに残すことを防ぐ
- npm リリース事前確認は、tarball に `dist/control-ui/index.html`
空でない `dist/control-ui/assets/` ペイロードの両方が含まれていない限り、
フェイルクローズする。これにより、空のブラウザダッシュボードを再び出荷しないようにする
- `pnpm test:install:smoke` も候補アップデート tarball の npm pack `unpackedSize` 予算を強制するため、
インストーラー E2E はリリース公開経路の前に偶発的な pack 膨張を捕捉する
- リリース作業で CI 計画、拡張タイミングマニフェスト、または
拡張テストマトリクスに触れた場合は、承認前に `.github/workflows/ci.yml` から planner が所有する
`checks-node-extensions` ワークフローマトリクス出力を再生成して確認してください。これによりリリースノートが古い CI レイアウトを説明することを防げます
- stable macOS リリースの準備完了には、アップデーター関連の面も含まれます:
- GitHub リリースには、パッケージ化された `.zip`、`.dmg`、および `.dSYM.zip` が含まれている必要があります
- `main` 上の `appcast.xml` は、公開後に新しい stable zip を指している必要があります
- パッケージ化されたアプリは、デバッグ以外の bundle id、空でない Sparkle feed
URL、およびそのリリースバージョンに対する正規の Sparkle build floor 以上の `CFBundleVersion` を維持する必要があります
拡張テストマトリクスに触れた場合は、承認前に `.github/workflows/ci.yml`
planner 管理下にある `checks-node-extensions` ワークフローマトリクス出力を再生成して確認する。
これにより、リリースノートが古い CI レイアウトを記述しないようにする
- stable macOS リリース準備完了には、アップデーター関連のサーフェスも含まれる:
- GitHub リリースには、パッケージ化された `.zip`、`.dmg`、および `.dSYM.zip`
が最終的に含まれていなければならない
- `main` 上の `appcast.xml` は、公開後に新しい stable zip を指していなければならない
- パッケージ化されたアプリは、非デバッグの bundle id、空でない Sparkle feed
URL、およびそのリリースバージョンの正準 Sparkle build floor 以上の
`CFBundleVersion` を維持しなければならない
## NPM ワークフロー入力
`OpenClaw NPM Release` は、以下の運用者制御入力を受け付けます。
`OpenClaw NPM Release` は、以下のオペレーター制御入力を受け付ける:
- `tag`: 必須のリリースタグ。例: `v2026.4.2`、`v2026.4.2-1`、または
`v2026.4.2-beta.1`。`preflight_only=true` の場合は、検証専用事前確認のために現在の完全な
40 文字の `main` コミット SHA も使用できます
- `preflight_only`: 検証/ビルド/パッケージのみの場合は `true`、実際の公開経路の場合は `false`
- `preflight_run_id`: 実際の公開経路では必須です。これにより、ワークフローは成功した事前確認実行から準備済み tarball を再利用します
- `npm_dist_tag`: 公開経路の npm 対象タグ。デフォルトは `beta`
- `promote_beta_to_latest`: 公開をスキップし、すでに公開済みの
stable `beta` ビルドを `latest` に移動する場合は `true`
- `sync_stable_dist_tags`: 公開をスキップし、すでに公開済みの stable バージョンに `latest`
`beta` の両方を向ける場合は `true`
- `tag`: `v2026.4.2`、`v2026.4.2-1`、または
`v2026.4.2-beta.1` のような必須リリースタグ。`preflight_only=true` の場合、
検証専用事前確認のために現在の完全な
40文字の `main` コミット SHA も指定できる
- `preflight_only`: 検証/ビルド/パッケージのみなら `true`、実際の
公開経路なら `false`
- `preflight_run_id`: 実際の公開経路で必須。これによりワークフローは成功した事前確認実行から
準備済み tarball を再利用する
- `npm_dist_tag`: 公開経路用の npm 対象タグ。デフォルトは `beta`
`OpenClaw Release Checks` は、以下の運用者制御入力を受け付けます。
`OpenClaw Release Checks` は、以下のオペレーター制御入力を受け付ける:
- `ref`: 検証する既存のリリースタグ、または現在の完全な 40 文字の `main` コミット
- `ref`: 既存のリリースタグ、または検証対象の現在の完全な 40 文字の `main` コミット
SHA
ルール:
- stable および修正タグは `beta` または `latest` のどちらにも公開できます
- beta プレリリースタグは `beta` にのみ公開できます
- 完全なコミット SHA 入力は `preflight_only=true` の場合にのみ許可されます
- リリースチェックのコミット SHA モードでも、現在の `origin/main` HEAD が必要です
- 実際の公開経路では、事前確認時に使用したものと同じ `npm_dist_tag` を使用する必要があります。
ワークフローは公開を続行する前にそのメタデータを検証します
- 昇格モードでは、stable または修正タグ、`preflight_only=false`、
空の `preflight_run_id`、および `npm_dist_tag=beta` を使用する必要があります
- dist-tag 同期モードでは、stable または修正タグ、
`preflight_only=false`、空の `preflight_run_id`、`npm_dist_tag=latest`、
および `promote_beta_to_latest=false` を使用する必要があります
- 昇格モードおよび dist-tag 同期モードでも、有効な `NPM_TOKEN` が必要です。これは
`npm dist-tag add` に通常の npm 認証が依然として必要であり、信頼済み公開は
パッケージ公開経路のみをカバーするためです
- stable および修正版タグは `beta` または `latest` のいずれにも公開できる
- beta プレリリースタグは `beta` にのみ公開できる
- 完全なコミット SHA 入力は `preflight_only=true` の場合にのみ許可される
- リリースチェックのコミット SHA モードでも、現在の `origin/main` HEAD が必要
- 実際の公開経路では、事前確認時に使用したものと同じ `npm_dist_tag` を使用しなければならない。
ワークフローは公開継続前にそのメタデータを検証する
## stable npm リリース手順
## stable npm リリースシーケンス
stable npm リリースを行うときは、次の手順に従います。
stable npm リリースを作成するとき:
1. `preflight_only=true``OpenClaw NPM Release` を実行します
- タグがまだ存在しない場合は、
事前確認ワークフローの検証専用ドライランとして現在の完全な `main` コミット SHA を使用できます
2. 通常の beta-first フローでは `npm_dist_tag=beta` を選択し、
意図的に stable を直接公開したい場合にのみ `latest` を選択します
1. `preflight_only=true``OpenClaw NPM Release` を実行する
- タグがまだ存在しない場合は、事前確認ワークフローの検証専用ドライランのために
現在の完全な `main` コミット SHA を使用できる
2. 通常の beta-first フローでは `npm_dist_tag=beta` を選択し、意図的に直接 stable 公開したい場合にのみ `latest` を選択する
3. ライブ prompt cache カバレッジが必要な場合は、同じタグまたは
現在の完全な `main` コミット SHA を指定し`OpenClaw Release Checks` を別途実行しま
- これは意図的な分離です。これにより、長時間実行または不安定なチェックを公開ワークフローに再結合することなく、
ライブカバレッジを利用可能なまま維持できます
4. 成功した `preflight_run_id` を保存しま
現在の完全な `main` コミット SHA を使っ`OpenClaw Release Checks` を別途実行す
- これは意図的な分離であり、公開ワークフローに長時間実行または不安定なチェックを
再結合せずに、ライブカバレッジを利用可能なままにするため
4. 成功した `preflight_run_id` を保存す
5. `preflight_only=false`、同じ
`tag`、同じ `npm_dist_tag`、および保存した `preflight_run_id` を指定して、再度 `OpenClaw NPM Release` を実行します
6. リリースが `beta` に公開された場合は、その
公開済みビルドを `latest` に移動したいタイミングで、同じ stable `tag`
`promote_beta_to_latest=true`、`preflight_only=false`、
空の `preflight_run_id`、および `npm_dist_tag=beta` を指定して後で `OpenClaw NPM Release` を実行します
7. リリースが意図的に `latest` に直接公開され、`beta`
も同じ stable ビルドを指すべき場合は、同じ
stable `tag`、`sync_stable_dist_tags=true`、`promote_beta_to_latest=false`、
`preflight_only=false`、空の `preflight_run_id`、および `npm_dist_tag=latest` を指定して `OpenClaw NPM Release` を実行します
`tag`、同じ `npm_dist_tag`、保存した `preflight_run_id``OpenClaw NPM Release` を再度実行する
6. リリースが `beta` に着地した場合は、プライベートな
`openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml`
ワークフローを使って、その stable バージョンを `beta` から `latest` に昇格させる
7. リリースを意図的に直接 `latest` に公開し、`beta` も
ただちに同じ stable ビルドに追従させたい場合は、同じプライベート
ワークフローを使って両方の dist-tag を stable バージョンに向けるか、スケジュールされた
自己修復同期によって後で `beta` を移動させる
昇格モードおよび dist-tag 同期モードでも、`npm-release`
環境の承認と、そのワークフロー実行からアクセス可能な有効な `NPM_TOKEN` が引き続き必要です。
dist-tag の変更がプライベートリポジトリにあるのは、依然として
`NPM_TOKEN` が必要である一方、公開リポジトリは OIDC のみの公開を維持するため、
セキュリティ上の理由による。
これにより、直接公開経路と beta-first 昇格経路の両方が
文書化され、運用者に見える形で維持されます
文書化され、オペレーターから見える状態に保たれる
## 公開リファレンス
- [`.github/workflows/openclaw-npm-release.yml`](https://github.com/openclaw/openclaw/blob/main/.github/workflows/openclaw-npm-release.yml)
- [`.github/workflows/openclaw-release-checks.yml`](https://github.com/openclaw/openclaw/blob/main/.github/workflows/openclaw-release-checks.yml)
- [`.github/workflows/openclaw-cross-os-release-checks-reusable.yml`](https://github.com/openclaw/openclaw/blob/main/.github/workflows/openclaw-cross-os-release-checks-reusable.yml)
- [`scripts/openclaw-npm-release-check.ts`](https://github.com/openclaw/openclaw/blob/main/scripts/openclaw-npm-release-check.ts)
- [`scripts/package-mac-dist.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/package-mac-dist.sh)
- [`scripts/make_appcast.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/make_appcast.sh)
maintainer は実際のランブックについて
maintainer は実際のランブックについて
[`openclaw/maintainers/release/README.md`](https://github.com/openclaw/maintainers/blob/main/release/README.md)
にある private のリリースドキュメントを使用します
にあるプライベートなリリースドキュメントを使用する

View File

@ -1,31 +1,31 @@
---
read_when:
- SecretRef認証情報カバレッジを検証する場合
- 認証情報が `secrets configure` または `secrets apply` の対象かどうかを監査する場合
- 認証情報がサポート対象外サーフェスである理由を検証する場合
summary: 正規のサポート対象および非サポート対象のSecretRef認証情報サーフェス
- SecretRef認証情報のカバレッジを確認する
- 認証情報が `secrets configure` または `secrets apply` の対象かどうかを監査する
- 認証情報がサポート対象外のサーフェスにある理由を確認する
summary: SecretRef認証情報サーフェスの正式なサポート対象と非サポート対象
title: SecretRef認証情報サーフェス
x-i18n:
generated_at: "2026-04-07T04:46:04Z"
generated_at: "2026-04-15T04:44:08Z"
model: gpt-5.4
provider: openai
source_hash: 211f4b504c5808f7790683066fc2c8b700c705c598f220a264daf971b81cc593
source_hash: dd0b9c379236b17a72f552d6360b8b5a2269009e019c138c6bb50f4f7328ddaf
source_path: reference/secretref-credential-surface.md
workflow: 15
---
# SecretRef認証情報サーフェス
このページでは、正規のSecretRef認証情報サーフェスを定義します。
このページでは、正式なSecretRef認証情報サーフェスを定義します。
スコープの意図:
- 対象: OpenClawが発行またはローテーションしない、厳密にユーザー提供の認証情報。
- 対象外: ランタイムで発行またはローテーションされる認証情報、OAuthリフレッシュ情報、セッション類似アーティファクト。
- 対象: OpenClawが発行またはローテーションしない、厳密にユーザー提供の認証情報。
- 対象外: ランタイム時に発行される、またはローテーションされる認証情報、OAuthリフレッシュ用データ、およびセッションに類するアーティファクト。
## サポートされる認証情報
## サポート対象の認証情報
### `openclaw.json` 対象(`secrets configure` + `secrets apply` + `secrets audit`
### `openclaw.json` 対象(`secrets configure` + `secrets apply` + `secrets audit`
[//]: # "secretref-supported-list-start"
@ -49,6 +49,7 @@ x-i18n:
- `messages.tts.providers.*.apiKey`
- `tools.web.fetch.firecrawl.apiKey`
- `plugins.entries.brave.config.webSearch.apiKey`
- `plugins.entries.exa.config.webSearch.apiKey`
- `plugins.entries.google.config.webSearch.apiKey`
- `plugins.entries.xai.config.webSearch.apiKey`
- `plugins.entries.moonshot.config.webSearch.apiKey`
@ -107,10 +108,10 @@ x-i18n:
- `channels.zalo.webhookSecret`
- `channels.zalo.accounts.*.botToken`
- `channels.zalo.accounts.*.webhookSecret`
- `channels.googlechat.serviceAccount` は兄弟 `serviceAccountRef` 経由(互換性例外)
- `channels.googlechat.accounts.*.serviceAccount` は兄弟 `serviceAccountRef` 経由(互換性例外)
- `channels.googlechat.serviceAccount` は兄弟 `serviceAccountRef` 経由(互換性のための例外)
- `channels.googlechat.accounts.*.serviceAccount` は兄弟 `serviceAccountRef` 経由(互換性のための例外)
### `auth-profiles.json` 対象(`secrets configure` + `secrets apply` + `secrets audit`
### `auth-profiles.json` 対象(`secrets configure` + `secrets apply` + `secrets audit`
- `profiles.*.keyRef``type: "api_key"`; `auth.profiles.<id>.mode = "oauth"` の場合は非サポート)
- `profiles.*.tokenRef``type: "token"`; `auth.profiles.<id>.mode = "oauth"` の場合は非サポート)
@ -119,21 +120,21 @@ x-i18n:
注記:
- Auth-profile plan対象には `agentId` が必要です。
- Planエントリは `profiles.*.key` / `profiles.*.token` を対象し、兄弟ref`keyRef` / `tokenRef`)を書き込みます。
- Auth-profile ref はランタイム解決および監査カバレッジに含まれます。
- OAuthポリシーガード: `auth.profiles.<id>.mode = "oauth"` は、そのプロファイルに対するSecretRef入力と組み合わせることはできません。このポリシーに違反した場合、起動/リロードおよびauth-profile解決は即座に失敗します。
- SecretRef管理のモデルプロバイダーでは、生成される `agents/*/agent/models.json` エントリは、`apiKey`/headerサーフェスに対して秘密値の代わりに非シークレットのマーカーを永続化します解決済みのシークレット値は保存しません
- マーカー永続化はソースを正として行われます: OpenClawは、解決済みランタイムシークレット値からではなく、アクティブなソース設定スナップショット解決前からマーカーを書き込みます。
- Web検索について:
- 明示的プロバイダーモード(`tools.web.search.provider` が設定されている)では、選択されたプロバイダーキーのみがアクティブです。
- 自動モード(`tools.web.search.provider` が未設定)では、優先順位で解決される最初のプロバイダーキーのみがアクティブです。
- 自動モードでは、非選択のプロバイダーrefは選択されるまで非アクティブとして扱われます。
- レガシーな `tools.web.search.*` プロバイダーパスは互換期間中は引き続き解決されますが、正規のSecretRefサーフェスは `plugins.entries.<plugin>.config.webSearch.*` です。
- Auth-profileplan対象には `agentId` が必要です。
- Planエントリは `profiles.*.key` / `profiles.*.token` を対象し、兄弟ref`keyRef` / `tokenRef`)を書き込みます。
- Auth-profileのrefは、ランタイム解決および監査カバレッジに含まれます。
- OAuthポリシーガード: `auth.profiles.<id>.mode = "oauth"` は、そのprofileに対するSecretRef入力と組み合わせることはできません。このポリシーに違反すると、起動/リロードおよびauth-profile解決は即座に失敗します。
- SecretRef管理対象のモデルproviderでは、生成される `agents/*/agent/models.json` エントリに、`apiKey`/headerサーフェス用の非シークレットマーカー解決済みのシークレット値ではないが永続化されます
- マーカー永続化はソースを正とします: OpenClawは、解決済みランタイムシークレット値からではなく、アクティブなソース設定スナップショット解決前からマーカーを書き込みます。
- web searchについて:
- 明示的providerモード`tools.web.search.provider` が設定されているでは、選択されたproviderキーのみが有効です。
- 自動モード(`tools.web.search.provider` が未設定)では、優先順位に従って解決される最初のproviderキーのみが有効です。
- 自動モードでは、未選択のprovider refは選択されるまで非アクティブとして扱われます。
- レガシーな `tools.web.search.*` providerパスも互換性ウィンドウ中は引き続き解決されますが、正式なSecretRefサーフェスは `plugins.entries.<plugin>.config.webSearch.*` です。
## サポートされない認証情報
## サポート対象外の認証情報
対象外の認証情報にはが含まれます:
対象外の認証情報には、以下が含まれます:
[//]: # "secretref-unsupported-list-start"
@ -149,6 +150,6 @@ x-i18n:
[//]: # "secretref-unsupported-list-end"
理由:
根拠:
- これらの認証情報は、発行される、ローテーションされる、セッションを保持する、またはOAuthの永続クラスに属しており、読み取り専用の外部SecretRef解決には適しません。
- これらの認証情報は、発行される、ローテーションされる、セッション性を持つ、またはOAuthの永続クラスに属しており、読み取り専用の外部SecretRef解決には適しません。

View File

@ -1,427 +1,479 @@
---
description: Real-world OpenClaw projects from the community
read_when:
- 実際のOpenClaw活用例を探しているとき
- コミュニティプロジェクトのハイライトを更新しているとき
summary: OpenClawを活用したコミュニティ製プロジェクトと連携
- 実際のOpenClawの使用例を探している場合
- コミュニティプロジェクトのハイライトを更新したい場合
summary: OpenClawを活用したコミュニティ製プロジェクトと統合機能
title: ショーケース
x-i18n:
generated_at: "2026-04-05T12:58:14Z"
generated_at: "2026-04-15T04:44:10Z"
model: gpt-5.4
provider: openai
source_hash: 2917e9a476ef527ddb3e51c610bbafbd145e705c9cc29f191639fb63d238ef70
source_hash: 797d0b85c9eca920240c79d870eb9636216714f3eba871c5ebd0f7f40cf7bbf1
source_path: start/showcase.md
workflow: 15
---
<!-- markdownlint-disable MD033 -->
# ショーケース
コミュニティによる実際のプロジェクトです。OpenClawで人々が何を作っているのかをご覧ください。
<div className="showcase-hero">
<p className="showcase-kicker">チャット、ターミナル、ブラウザー、そしてリビングルームで構築</p>
<p className="showcase-lead">
OpenClawプロジェクトはおもちゃのデモではありません。すでに使っているチャネルから、PRレビューのループ、モバイルアプリ、ホームオートメーション、音声システム、devtools、メモリ負荷の高いワークフローが実際に出荷されています。
</p>
<div className="showcase-actions">
<a href="#videos">デモを見る</a>
<a href="#fresh-from-discord">プロジェクトを見る</a>
<a href="https://discord.gg/clawd">あなたの作品を共有</a>
</div>
<div className="showcase-highlights">
<div className="showcase-highlight">
<strong>チャットネイティブな構築</strong>
<span>Telegram、WhatsApp、Discord、Beeper、Webチャット、そしてターミナル中心のワークフロー。</span>
</div>
<div className="showcase-highlight">
<strong>実用的な自動化</strong>
<span>APIを待たずに、予約、買い物、サポート、レポート作成、ブラウザー操作を実現。</span>
</div>
<div className="showcase-highlight">
<strong>ローカル + 現実世界</strong>
<span>プリンター、掃除機、カメラ、健康データ、ホームシステム、個人ナレッジベース。</span>
</div>
</div>
</div>
<Info>
**掲載されたいですか?** [Discordの #self-promotion](https://discord.gg/clawd) であなたのプロジェクトを共有するか、[Xで @openclaw をタグ付け](https://x.com/openclaw)してください。
**掲載されたいですか?** あなたのプロジェクトを [Discordの#self-promotion](https://discord.gg/clawd) で共有するか、[Xで@openclawをタグ付け](https://x.com/openclaw)してください。
</Info>
## 🎥 動くOpenClaw
VelvetSharkによる完全セットアップ解説28分
<div
style={{
position: "relative",
paddingBottom: "56.25%",
height: 0,
overflow: "hidden",
borderRadius: 16,
}}
>
<iframe
src="https://www.youtube-nocookie.com/embed/SaWSPZoPX34"
title="OpenClaw: The self-hosted AI that Siri should have been (Full setup)"
style={{ position: "absolute", top: 0, left: 0, width: "100%", height: "100%" }}
frameBorder="0"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
/>
<div className="showcase-jump-links">
<a href="#videos">動画</a>
<a href="#fresh-from-discord">Discordからの最新情報</a>
<a href="#automation-workflows">自動化</a>
<a href="#knowledge-memory">メモリ</a>
<a href="#voice-phone">音声と電話</a>
<a href="#infrastructure-deployment">インフラとデプロイ</a>
<a href="#home-hardware">ホームとハードウェア</a>
<a href="#community-projects">コミュニティ</a>
<a href="#submit-your-project">プロジェクトを投稿</a>
</div>
[YouTubeで視聴](https://www.youtube.com/watch?v=SaWSPZoPX34)
<h2 id="videos">動画</h2>
<div
style={{
position: "relative",
paddingBottom: "56.25%",
height: 0,
overflow: "hidden",
borderRadius: 16,
}}
>
<iframe
src="https://www.youtube-nocookie.com/embed/mMSKQvlmFuQ"
title="OpenClaw showcase video"
style={{ position: "absolute", top: 0, left: 0, width: "100%", height: "100%" }}
frameBorder="0"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
/>
<p className="showcase-section-intro">
「これは何?」から「なるほど、わかった」まで最短でたどり着きたいなら、ここから始めてください。
</p>
<div className="showcase-video-grid">
<div className="showcase-video-card">
<div className="showcase-video-shell">
<iframe
src="https://www.youtube-nocookie.com/embed/SaWSPZoPX34"
title="OpenClaw: The self-hosted AI that Siri should have been (Full setup)"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
/>
</div>
<h3>完全セットアップのウォークスルー</h3>
<p>VelvetShark、28分。インストールし、オンボーディングを行い、最初に動くアシスタントをエンドツーエンドで使えるところまで進めます。</p>
<a href="https://www.youtube.com/watch?v=SaWSPZoPX34">YouTubeで見る</a>
</div>
<div className="showcase-video-card">
<div className="showcase-video-shell">
<iframe
src="https://www.youtube-nocookie.com/embed/mMSKQvlmFuQ"
title="OpenClaw showcase video"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
/>
</div>
<h3>コミュニティショーケース映像</h3>
<p>OpenClawを中心に構築された実際のプロジェクト、表面、ワークフローをより手早く見渡せます。</p>
<a href="https://www.youtube.com/watch?v=mMSKQvlmFuQ">YouTubeで見る</a>
</div>
<div className="showcase-video-card">
<div className="showcase-video-shell">
<iframe
src="https://www.youtube-nocookie.com/embed/5kkIJNUGFho"
title="OpenClaw community showcase"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
/>
</div>
<h3>実運用されているプロジェクト</h3>
<p>チャットネイティブなコーディングループからハードウェアや個人向け自動化まで、コミュニティによる事例を紹介します。</p>
<a href="https://www.youtube.com/watch?v=5kkIJNUGFho">YouTubeで見る</a>
</div>
</div>
[YouTubeで視聴](https://www.youtube.com/watch?v=mMSKQvlmFuQ)
<h2 id="fresh-from-discord">Discordからの最新情報</h2>
<div
style={{
position: "relative",
paddingBottom: "56.25%",
height: 0,
overflow: "hidden",
borderRadius: 16,
}}
>
<iframe
src="https://www.youtube-nocookie.com/embed/5kkIJNUGFho"
title="OpenClaw community showcase"
style={{ position: "absolute", top: 0, left: 0, width: "100%", height: "100%" }}
frameBorder="0"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
/>
</div>
[YouTubeで視聴](https://www.youtube.com/watch?v=5kkIJNUGFho)
## 🆕 Discord発の最新事例
<p className="showcase-section-intro">
コーディング、devtools、モバイル、チャットネイティブなプロダクト構築における最近の注目例です。
</p>
<CardGroup cols={2}>
<Card title="PRレビュー → Telegramフィードバック" icon="code-pull-request" href="https://x.com/i/status/2010878524543131691">
<Card title="PR Review → Telegram Feedback" icon="code-pull-request" href="https://x.com/i/status/2010878524543131691">
**@bangnokia** • `review` `github` `telegram`
OpenCodeが変更を完了 → PRを作成 → OpenClawが差分をレビューし、「軽微な提案」と明確なマージ判断をTelegramで返信(先に適用すべき重要な修正も含む)。
OpenCodeが変更を完了 → PRを作成 → OpenClawが差分をレビューし、「軽微な提案」と明確なマージ判定をTelegramで返信します先に適用すべき重要な修正も含む
<img src="/assets/showcase/pr-review-telegram.jpg" alt="OpenClaw PR review feedback delivered in Telegram" />
<img src="/assets/showcase/pr-review-telegram.jpg" alt="Telegramで配信されたOpenClawのPRレビューフィードバック" />
</Card>
<Card title="数分で作るワインセラーSkill" icon="wine-glass" href="https://x.com/i/status/2010916352454791216">
<Card title="Wine Cellar Skill in Minutes" icon="wine-glass" href="https://x.com/i/status/2010916352454791216">
**@prades_maxime** • `skills` `local` `csv`
ローカルのワインセラーSkillを「Robby」(@openclaw) に依頼。サンプルCSVエクスポートと保存先を確認した後、Skillをすばやく作成してテストします例では962本
ローカルのワインセラー用Skillsを「Robby」(@openclaw) に依頼。サンプルのCSVエクスポートと保存先を確認し、その後すばやくSkillsを構築・テストします例では962本
<img src="/assets/showcase/wine-cellar-skill.jpg" alt="OpenClaw building a local wine cellar skill from CSV" />
<img src="/assets/showcase/wine-cellar-skill.jpg" alt="CSVからローカルのワインセラー用Skillsを構築するOpenClaw" />
</Card>
<Card title="Tesco買い物オートパイロット" icon="cart-shopping" href="https://x.com/i/status/2009724862470689131">
<Card title="Tesco Shop Autopilot" icon="cart-shopping" href="https://x.com/i/status/2009724862470689131">
**@marchattonhere** • `automation` `browser` `shopping`
毎週の献立 → 定番商品 → 配達枠の予約 → 注文確定。APIは使わず、ブラウザー操作のみです
毎週の食事計画 → 定番品 → 配送枠を予約 → 注文を確定。APIは使わず、ブラウザー操作だけで実現
<img src="/assets/showcase/tesco-shop.jpg" alt="Tesco shop automation via chat" />
<img src="/assets/showcase/tesco-shop.jpg" alt="チャット経由のTesco買い物自動化" />
</Card>
<Card title="SNAG スクリーンショットからMarkdownへ" icon="scissors" href="https://github.com/am-will/snag">
<Card title="SNAG Screenshot-to-Markdown" icon="scissors" href="https://github.com/am-will/snag">
**@am-will** • `devtools` `screenshots` `markdown`
画面領域をホットキーで選択 → Gemini vision → クリップボードに即座にMarkdown。
画面領域をホットキーで選択 → Gemini vision → Markdownが即座にクリップボードへ
<img src="/assets/showcase/snag.png" alt="SNAG screenshot-to-markdown tool" />
<img src="/assets/showcase/snag.png" alt="SNAGスクリーンショットからMarkdownへのツール" />
</Card>
<Card title="Agents UI" icon="window-maximize" href="https://releaseflow.net/kitze/agents-ui">
**@kitze** • `ui` `skills` `sync`
Agents、Claude、Codex、OpenClaw 間で Skills / コマンドを管理するためのデスクトップアプリです
Agents、Claude、Codex、OpenClaw間でSkillsやコマンドを管理するデスクトップアプリ
<img src="/assets/showcase/agents-ui.jpg" alt="Agents UI app" />
<img src="/assets/showcase/agents-ui.jpg" alt="Agents UIアプリ" />
</Card>
<Card title="Telegram音声ートpapla.media" icon="microphone" href="https://papla.media/docs">
**コミュニティ** • `voice` `tts` `telegram`
<Card title="Telegram Voice Notes (papla.media)" icon="microphone" href="https://papla.media/docs">
**Community** • `voice` `tts` `telegram`
papla.media の TTS をラップし、結果をTelegram音声ノートとして送信します(煩わしい自動再生なし)。
papla.media TTSをラップし、結果をTelegramのボイスノートとして送信します(煩わしい自動再生なし)。
<img src="/assets/showcase/papla-tts.jpg" alt="Telegram voice note output from TTS" />
<img src="/assets/showcase/papla-tts.jpg" alt="TTSからのTelegramボイスート出力" />
</Card>
<Card title="CodexMonitor" icon="eye" href="https://clawhub.ai/odrobnik/codexmonitor">
**@odrobnik** • `devtools` `codex` `brew`
Homebrewでインストールできるヘルパーで、ローカルのOpenAI Codexセッションを一覧表示・調査・監視できますCLI + VS Code
ローカルのOpenAI Codexセッションを一覧表示・検査・監視できるHomebrewインストール型ヘルパーCLI + VS Code
<img src="/assets/showcase/codexmonitor.png" alt="CodexMonitor on ClawHub" />
<img src="/assets/showcase/codexmonitor.png" alt="ClawHub上のCodexMonitor" />
</Card>
<Card title="Bambu 3Dプリンター制御" icon="print" href="https://clawhub.ai/tobiasbischoff/bambu-cli">
<Card title="Bambu 3D Printer Control" icon="print" href="https://clawhub.ai/tobiasbischoff/bambu-cli">
**@tobiasbischoff** • `hardware` `3d-printing` `skill`
BambuLabプリンターを制御し、トラブルシュートします: ステータス、ジョブ、カメラ、AMS、キャリブレーションなど。
BambuLabプリンターの制御とトラブルシューティングに対応: 状態、ジョブ、カメラ、AMS、キャリブレーションなど。
<img src="/assets/showcase/bambu-cli.png" alt="Bambu CLI skill on ClawHub" />
<img src="/assets/showcase/bambu-cli.png" alt="ClawHub上のBambu CLI skill" />
</Card>
<Card title="ウィーン交通Wiener Linien" icon="train" href="https://clawhub.ai/hjanuschka/wienerlinien">
<Card title="Vienna Transport (Wiener Linien)" icon="train" href="https://clawhub.ai/hjanuschka/wienerlinien">
**@hjanuschka** • `travel` `transport` `skill`
ウィーンの公共交通機関向けに、リアルタイム発車情報、運行障害、エレベーター状況、経路案内を提供します
ウィーンの公共交通向けに、リアルタイム出発情報、障害情報、エレベーター状態、ルーティングを提供
<img src="/assets/showcase/wienerlinien.png" alt="Wiener Linien skill on ClawHub" />
<img src="/assets/showcase/wienerlinien.png" alt="Wiener Linien skill" />
</Card>
<Card title="ParentPay学校給食" icon="utensils" href="#">
<Card title="ParentPay School Meals" icon="utensils">
**@George5562** • `automation` `browser` `parenting`
ParentPay経由の英国学校給食予約を自動化。表のセルを確実にクリックするため、マウス座標を使用します。
ParentPay経由で英国の学校給食予約を自動化。表のセルを確実にクリックするため、マウス座標を使用します。
</Card>
<Card title="R2アップロードSend Me My Files" icon="cloud-arrow-up" href="https://clawhub.ai/skills/r2-upload">
<Card title="R2 Upload (Send Me My Files)" icon="cloud-arrow-up" href="https://clawhub.ai/skills/r2-upload">
**@julianengel** • `files` `r2` `presigned-urls`
Cloudflare R2/S3 にアップロードし、安全な事前署名付きダウンロードリンクを生成します。リモートOpenClawインスタンスに最適です。
Cloudflare R2/S3へアップロードし、安全な署名付きダウンロードリンクを生成します。リモートOpenClawインスタンスに最適です。
</Card>
<Card title="Telegram経由のiOSアプリ" icon="mobile" href="#">
<Card title="iOS App via Telegram" icon="mobile">
**@coard** • `ios` `xcode` `testflight`
地図と音声録音を備えた完全なiOSアプリを作成し、TelegramチャットだけでTestFlightにデプロイしました。
地図と音声録音を備えた完全なiOSアプリを構築し、TelegramチャットだけでTestFlightへデプロイしました。
<img src="/assets/showcase/ios-testflight.jpg" alt="iOS app on TestFlight" />
<img src="/assets/showcase/ios-testflight.jpg" alt="TestFlight上のiOSアプリ" />
</Card>
<Card title="Oura Ringヘルスアシスタント" icon="heart-pulse" href="#">
<Card title="Oura Ring Health Assistant" icon="heart-pulse">
**@AS** • `health` `oura` `calendar`
Oura ring データをカレンダー、予定、ジムのスケジュールと統合した、個人向けAIヘルスアシスタントです
Oura ringデータをカレンダー、予定、ジムのスケジュールと統合した、個人向けAI健康アシスタント
<img src="/assets/showcase/oura-health.png" alt="Oura ring health assistant" />
<img src="/assets/showcase/oura-health.png" alt="Oura ring健康アシスタント" />
</Card>
<Card title="Kevのドリームチーム14以上のエージェント" icon="robot" href="https://github.com/adam91holt/orchestrated-ai-articles">
<Card title="Kev's Dream Team (14+ Agents)" icon="robot" href="https://github.com/adam91holt/orchestrated-ai-articles">
**@adam91holt** • `multi-agent` `orchestration` `architecture` `manifesto`
1つのGateway配下に14以上のエージェントを配置し、Opus 4.5 オーケストレーターがCodexワーカーに委任します。ドリームチームの構成、モデル選択、サンドボックス化、Webhook、ハートビート、委任フローを網羅した包括的な[技術解説](https://github.com/adam91holt/orchestrated-ai-articles)があります。エージェントのサンドボックス化には [Clawdspace](https://github.com/adam91holt/clawdspace) を使用。[ブログ記事](https://adams-ai-journey.ghost.io/2026-the-year-of-the-orchestrator/) もあります
1つのGateway配下に14以上のagentsを配置し、Opus 4.5のオーケストレーターがCodexワーカーへ委譲します。Dream Teamの構成、モデル選択、サンドボックス化、Webhook、Heartbeat、委譲フローを網羅した包括的な[技術解説](https://github.com/adam91holt/orchestrated-ai-articles)があります。agentサンドボックス化用の[Clawdspace](https://github.com/adam91holt/clawdspace)も用意されています。[ブログ記事](https://adams-ai-journey.ghost.io/2026-the-year-of-the-orchestrator/)。
</Card>
<Card title="Linear CLI" icon="terminal" href="https://github.com/Finesssee/linear-cli">
**@NessZerra** • `devtools` `linear` `cli` `issues`
エージェント型ワークフローClaude Code、OpenClawと統合する Linear 用CLIです。ターミナルから課題、プロジェクト、ワークフローを管理できます。最初の外部PRもマージされました
agenticワークフローClaude Code、OpenClawと統合するLinear向けCLI。ターミナルからissue、プロジェクト、ワークフローを管理できます。最初の外部PRがマージされました。
</Card>
<Card title="Beeper CLI" icon="message" href="https://github.com/blqke/beepcli">
**@jules** • `messaging` `beeper` `cli` `automation`
Beeper Desktop経由でメッセージの閲覧、送信、アーカイブを行います。Beeper のローカルMCP APIを使うため、エージェントが iMessage、WhatsApp などすべてのチャットを一元管理できます。
Beeper Desktop経由でメッセージを読み取り、送信し、アーカイブします。BeeperのローカルMCP APIを使うことで、agentsがiMessage、WhatsAppなどすべてのチャットを1か所で管理できます。
</Card>
</CardGroup>
## 🤖 自動化とワークフロー
<h2 id="automation-workflows">自動化 &amp; ワークフロー</h2>
<p className="showcase-section-intro">
スケジューリング、ブラウザー操作、サポートループ、そして「その作業をそのまま代わりにやってほしい」という側面のプロダクトです。
</p>
<CardGroup cols={2}>
<Card title="Winix空気清浄機制御" icon="wind" href="https://x.com/antonplex/status/2010518442471006253">
<Card title="Winix Air Purifier Control" icon="wind" href="https://x.com/antonplex/status/2010518442471006253">
**@antonplex** • `automation` `hardware` `air-quality`
Claude Codeが清浄機の制御方法を発見して確認し、その後OpenClawが引き継いで室内空気品質を管理します。
Claude Codeが空気清浄機の制御を発見して確認し、その後OpenClawが引き継いで部屋の空気品質を管理します。
<img src="/assets/showcase/winix-air-purifier.jpg" alt="Winix air purifier control via OpenClaw" />
<img src="/assets/showcase/winix-air-purifier.jpg" alt="OpenClaw経由のWinix空気清浄機制御" />
</Card>
<Card title="きれいな空のカメラショット" icon="camera" href="https://x.com/signalgaining/status/2010523120604746151">
<Card title="Pretty Sky Camera Shots" icon="camera" href="https://x.com/signalgaining/status/2010523120604746151">
**@signalgaining** • `automation` `camera` `skill` `images`
屋上カメラをトリガーに、「空がきれいに見えるときは空の写真を撮って」とOpenClawに依頼――Skillを設計して実際に撮影しました
屋上カメラをトリガーに、「空がきれいに見えたら写真を撮って」とOpenClawに依頼すると、Skillsを設計して撮影まで行います
<img src="/assets/showcase/roof-camera-sky.jpg" alt="Roof camera sky snapshot captured by OpenClaw" />
<img src="/assets/showcase/roof-camera-sky.jpg" alt="OpenClawが撮影した屋上カメラの空の写真" />
</Card>
<Card title="ビジュアル朝ブリーフィングシーン" icon="robot" href="https://x.com/buddyhadry/status/2010005331925954739">
<Card title="Visual Morning Briefing Scene" icon="robot" href="https://x.com/buddyhadry/status/2010005331925954739">
**@buddyhadry** • `automation` `briefing` `images` `telegram`
スケジュールされたプロンプトにより、毎朝1枚の「シーン」画像天気、タスク、日付、お気に入りの投稿/引用をOpenClawペルソナ経由で生成します。
スケジュールされたプロンプトにより、OpenClawペルソナを通じて毎朝1枚の「シーン」画像天気、タスク、日付、お気に入りの投稿や引用)を生成します。
</Card>
<Card title="パデルコート予約" icon="calendar-check" href="https://github.com/joshp123/padel-cli">
<Card title="Padel Court Booking" icon="calendar-check" href="https://github.com/joshp123/padel-cli">
**@joshp123** • `automation` `booking` `cli`
Playtomic の空き状況チェッカー兼予約CLIです
Playtomicの空き状況チェッカーと予約CLI。空いたコートを二度と逃しません
空いたコートを見逃しません。
<img src="/assets/showcase/padel-screenshot.jpg" alt="padel-cli screenshot" />
<img src="/assets/showcase/padel-screenshot.jpg" alt="padel-cliのスクリーンショット" />
</Card>
<Card title="会計書類取り込み" icon="file-invoice-dollar">
**コミュニティ** • `automation` `email` `pdf`
<Card title="Accounting Intake" icon="file-invoice-dollar">
**Community** • `automation` `email` `pdf`
メールからPDFを収集し、税理士向けに書類を準備します。毎月の会計処理を自動化します。
メールからPDFを収集し、税理士向けに書類を準備します。毎月の会計を自動操縦で処理します。
</Card>
<Card title="ソファで開発モード" icon="couch" href="https://davekiss.com">
<Card title="Couch Potato Dev Mode" icon="couch" href="https://davekiss.com">
**@davekiss** • `telegram` `website` `migration` `astro`
Netflixを見ながらTelegram経由で個人サイト全体を再構築――Notion → Astro、18本の記事を移行し、DNSをCloudflareへ。ラップトップは一度も開きませんでした。
Netflixを見ながらTelegram経由で個人サイト全体を再構築 — Notion → Astro、18本の記事を移行し、DNSをCloudflareへ。ートPCは一度も開きませんでした。
</Card>
<Card title="求人検索エージェント" icon="briefcase">
<Card title="Job Search Agent" icon="briefcase">
**@attol8** • `automation` `api` `skill`
求人一覧を検索し、CVキーワードとの一致を評価して、関連する機会をリンク付きで返します。JSearch API を使って30分で構築されました
求人一覧を検索し、CVのキーワードと照合して、関連する求人をリンク付きで返します。JSearch APIを使って30分で構築
</Card>
<Card title="Jira Skillビルダー" icon="diagram-project" href="https://x.com/jdrhyne/status/2008336434827002232">
<Card title="Jira Skill Builder" icon="diagram-project" href="https://x.com/jdrhyne/status/2008336434827002232">
**@jdrhyne** • `automation` `jira` `skill` `devtools`
OpenClawを Jira に接続し、その場で新しいSkillを生成しましたClawHubに存在する前の段階で
OpenClawをJiraに接続し、その場で新しいSkillsを生成しました(まだClawHubに存在する前の段階で
</Card>
<Card title="Telegram経由のTodoist Skill" icon="list-check" href="https://x.com/iamsubhrajyoti/status/2009949389884920153">
<Card title="Todoist Skill via Telegram" icon="list-check" href="https://x.com/iamsubhrajyoti/status/2009949389884920153">
**@iamsubhrajyoti** • `automation` `todoist` `skill` `telegram`
Todoistタスクを自動化し、OpenClawにTelegramチャット内で直接Skillを生成させました。
Todoistタスクを自動化し、そのSkillsをOpenClawにTelegramチャット内で直接生成させました。
</Card>
<Card title="TradingView分析" icon="chart-line">
<Card title="TradingView Analysis" icon="chart-line">
**@bheem1798** • `finance` `browser` `automation`
ブラウザー自動化で TradingView にログインし、チャートをスクリーンショットし、必要に応じてテクニカル分析を行います。APIは不要で、必要なのはブラウザー操作だけです。
ブラウザー自動化でTradingViewにログインし、チャートのスクリーンショットを撮り、必要に応じてテクニカル分析を実行します。APIは不要で、必要なのはブラウザー操作だけです。
</Card>
<Card title="Slack自動サポート" icon="slack">
<Card title="Slack Auto-Support" icon="slack">
**@henrymascot** • `slack` `automation` `support`
社内Slackチャネルを監視し、役立つ応答を返し、通知をTelegramに転送します。依頼されていないのに、本番環境のアプリのバグを自律的に修正しました。
社内のSlackチャンネルを監視し、有用な応答を返し、通知をTelegramへ転送します。依頼されることなく、デプロイ済みアプリの本番バグを自律的に修正しました。
</Card>
</CardGroup>
## 🧠 知識と記憶
<h2 id="knowledge-memory">ナレッジ &amp; メモリ</h2>
<p className="showcase-section-intro">
個人またはチームの知識をインデックス化、検索、記憶し、その上で推論するシステム。
</p>
<CardGroup cols={2}>
<Card title="xuezh 中国語学習" icon="language" href="https://github.com/joshp123/xuezh">
<Card title="xuezh Chinese Learning" icon="language" href="https://github.com/joshp123/xuezh">
**@joshp123** • `learning` `voice` `skill`
OpenClawを通じた発音フィードバックと学習フローを備えた中国語学習エンジンです
OpenClawを通じて発音フィードバックと学習フローを提供する中国語学習エンジン
<img src="/assets/showcase/xuezh-pronunciation.jpeg" alt="xuezh pronunciation feedback" />
<img src="/assets/showcase/xuezh-pronunciation.jpeg" alt="xuezhの発音フィードバック" />
</Card>
<Card title="WhatsApp メモリ保管庫" icon="vault">
**コミュニティ** • `memory` `transcription` `indexing`
<Card title="WhatsApp Memory Vault" icon="vault">
**Community** • `memory` `transcription` `indexing`
WhatsAppの完全エクスポートを取り込み、1,000件以上の音声ートを文字起こしし、gitログと照合して、リンク付きMarkdownレポートを出力します。
完全なWhatsAppエクスポートを取り込み、1,000件以上のボイスートを文字起こしし、gitログと照合して、リンク付きMarkdownレポートを出力します。
</Card>
<Card title="Karakeep セマンティック検索" icon="magnifying-glass" href="https://github.com/jamesbrooksco/karakeep-semantic-search">
<Card title="Karakeep Semantic Search" icon="magnifying-glass" href="https://github.com/jamesbrooksco/karakeep-semantic-search">
**@jamesbrooksco** • `search` `vector` `bookmarks`
Qdrant + OpenAI/Ollama embeddings を使って、Karakeepブックマークにベクトル検索を追加します。
Qdrant + OpenAI/Ollama embeddingsを使用して、Karakeepブックマークにベクトル検索を追加します。
</Card>
<Card title="インサイド・ヘッド2風メモリ" icon="brain">
**コミュニティ** • `memory` `beliefs` `self-model`
<Card title="Inside-Out-2 Memory" icon="brain">
**Community** • `memory` `beliefs` `self-model`
セッションファイルを記憶 → 信念 → 進化する自己モデルへと変換する独立したメモリマネージャーです
セッションファイルをメモリ → 信念 → 進化する自己モデルへと変換する独立したメモリマネージャー。
</Card>
</CardGroup>
## 🎙️ 音声と電話
<h2 id="voice-phone">音声 &amp; 電話</h2>
<p className="showcase-section-intro">
音声優先の入口、電話ブリッジ、文字起こし中心のワークフロー。
</p>
<CardGroup cols={2}>
<Card title="Clawdia Phone Bridge" icon="phone" href="https://github.com/alejandroOPI/clawdia-bridge">
**@alejandroOPI** • `voice` `vapi` `bridge`
Vapi音声アシスタント ↔ OpenClaw HTTPブリッジです。あなたのエージェントと、ほぼリアルタイムの通話が可能です。
Vapi音声アシスタント ↔ OpenClaw HTTPブリッジ。あなたのagentとのほぼリアルタイムな電話通話を実現します。
</Card>
<Card title="OpenRouter文字起こし" icon="microphone" href="https://clawhub.ai/obviyus/openrouter-transcribe">
<Card title="OpenRouter Transcription" icon="microphone" href="https://clawhub.ai/obviyus/openrouter-transcribe">
**@obviyus** • `transcription` `multilingual` `skill`
OpenRouterGemini など経由の多言語音声文字起こしです。ClawHubで利用できます。
OpenRouterGeminiなどによる多言語音声文字起こし。ClawHubで利用可能です。
</Card>
</CardGroup>
## 🏗️ インフラとデプロイ
<h2 id="infrastructure-deployment">インフラ &amp; デプロイ</h2>
<p className="showcase-section-intro">
OpenClawをより簡単に実行・拡張できるようにする、パッケージング、デプロイ、統合機能。
</p>
<CardGroup cols={2}>
<Card title="Home Assistantアドオン" icon="home" href="https://github.com/ngutman/openclaw-ha-addon">
<Card title="Home Assistant Add-on" icon="home" href="https://github.com/ngutman/openclaw-ha-addon">
**@ngutman** • `homeassistant` `docker` `raspberry-pi`
SSHトンネル対応と永続状態を備えた、Home Assistant OS 上で動作するOpenClaw Gatewayです
SSHトンネル対応と永続状態を備えた、Home Assistant OS上で動作するOpenClaw Gateway。
</Card>
<Card title="Home Assistant Skill" icon="toggle-on" href="https://clawhub.ai/skills/homeassistant">
**ClawHub**`homeassistant` `skill` `automation`
自然言語で Home Assistant デバイスを制御・自動化します。
自然言語でHome Assistantデバイスを制御・自動化します。
</Card>
<Card title="Nixパッケージング" icon="snowflake" href="https://github.com/openclaw/nix-openclaw">
<Card title="Nix Packaging" icon="snowflake" href="https://github.com/openclaw/nix-openclaw">
**@openclaw** • `nix` `packaging` `deployment`
再現可能なデプロイ向けの、全部入りの nix 化 OpenClaw 設定です
再現可能なデプロイのための、必要なものが一式そろったnix化OpenClaw設定
</Card>
<Card title="CalDAVカレンダー" icon="calendar" href="https://clawhub.ai/skills/caldav-calendar">
<Card title="CalDAV Calendar" icon="calendar" href="https://clawhub.ai/skills/caldav-calendar">
**ClawHub**`calendar` `caldav` `skill`
khal/vdirsyncer を使ったカレンダーSkillです。セルフホスト型カレンダー連携です。
khal/vdirsyncerを使ったカレンダーSkills。セルフホスト型のカレンダー統合です。
</Card>
</CardGroup>
## 🏠 ホームとハードウェア
<h2 id="home-hardware">ホーム &amp; ハードウェア</h2>
<p className="showcase-section-intro">
OpenClawの現実世界側: 家、センサー、カメラ、掃除機、その他のデバイス。
</p>
<CardGroup cols={2}>
<Card title="GoHome 自動化" icon="house-signal" href="https://github.com/joshp123/gohome">
<Card title="GoHome Automation" icon="house-signal" href="https://github.com/joshp123/gohome">
**@joshp123** • `home` `nix` `grafana`
OpenClawをインターフェースとして使うNixネイティブなホームオートメーションです。美しいGrafanaダッシュボードも備えています。
インターフェースとしてOpenClawを使うNixネイティブなホームオートメーション。美しいGrafanaダッシュボードも備えています。
<img src="/assets/showcase/gohome-grafana.png" alt="GoHome Grafana dashboard" />
<img src="/assets/showcase/gohome-grafana.png" alt="GoHome Grafanaダッシュボード" />
</Card>
<Card title="Roborock 掃除機" icon="robot" href="https://github.com/joshp123/gohome/tree/main/plugins/roborock">
<Card title="Roborock Vacuum" icon="robot" href="https://github.com/joshp123/gohome/tree/main/plugins/roborock">
**@joshp123** • `vacuum` `iot` `plugin`
Roborock ロボット掃除機を自然な会話で操作できます。
自然な会話を通じてRoborockロボット掃除機を制御します。
<img src="/assets/showcase/roborock-screenshot.jpg" alt="Roborock status" />
<img src="/assets/showcase/roborock-screenshot.jpg" alt="Roborockの状態" />
</Card>
</CardGroup>
## 🌟 コミュニティプロジェクト
<h2 id="community-projects">コミュニティプロジェクト</h2>
<p className="showcase-section-intro">
単一のワークフローを超えて、より広いプロダクトやエコシステムへ成長したもの。
</p>
<CardGroup cols={2}>
<Card title="StarSwap Marketplace" icon="star" href="https://star-swap.com/">
**コミュニティ** • `marketplace` `astronomy` `webapp`
**Community** • `marketplace` `astronomy` `webapp`
本格的な天体観測機材マーケットプレイスです。OpenClawエコシステムを使って、またはそれを中心に構築されています。
本格的な天体観測機材マーケットプレイス。OpenClawエコシステムを使って、またはその周辺で構築されています。
</Card>
</CardGroup>
---
## プロジェクトを投稿する
<h2 id="submit-your-project">あなたのプロジェクトを投稿</h2>
<p className="showcase-section-intro">
OpenClawで何か面白いものを作っているなら、ぜひ送ってください。魅力的なスクリーンショットと具体的な成果があると役立ちます。
</p>
共有したいものがありますか? ぜひ掲載したいです!
<Steps>
<Step title="共有する">
[Discordの #self-promotion](https://discord.gg/clawd) に投稿するか、[Xで @openclaw に投稿](https://x.com/openclaw)してください
[Discordの#self-promotion](https://discord.gg/clawd) に投稿するか、[Xで@openclawに投稿](https://x.com/openclaw)してください
</Step>
<Step title="詳細を含める">
何をするものか、リポジトリやデモへのリンク、可能ならスクリーンショット共有してください
何をするものか、リポジトリやデモへのリンク、可能ならスクリーンショット共有してください
</Step>
<Step title="掲載される">
特に目立つプロジェクトをこのページに追加します
注目のプロジェクトをこのページに追加します
</Step>
</Steps>

View File

@ -1,38 +1,39 @@
---
read_when:
- エージェントを介した動画生成
- 動画生成プロバイダーとモデルの設定
- '`video_generate`ツールのパラメーターを理解する'
summary: 14のプロバイダーバックエンドを使用して、テキスト、画像、または既存の動画から動画を生成します
- エージェント経由で動画を生成する
- 動画生成プロバイダーとモデルを設定する
- '`video_generate` ツールのパラメーターを理解する'
summary: 14のプロバイダーバックエンドを使用して、テキスト、画像、または既存の動画から動画を生成します
title: 動画生成
x-i18n:
generated_at: "2026-04-11T15:16:01Z"
generated_at: "2026-04-15T04:44:20Z"
model: gpt-5.4
provider: openai
source_hash: 0ec159a0bbb6b8a030e68828c0a8bcaf40c8538ecf98bc8ff609dab9d0068263
source_hash: c182f24b25e44f157a820e82a1f7422247f26125956944b5eb98613774268cfe
source_path: tools/video-generation.md
workflow: 15
---
# 動画生成
OpenClawエージェントは、テキストプロンプト、参照画像、または既存の動画から動画を生成できます。14のプロバイダーバックエンドがサポートされており、それぞれ異なるモデルオプション、入力モード、機能セットを備えています。エージェントは、設定と利用可能なAPIキーに基づいて適切なプロバイダーを自動的に選択します。
OpenClaw エージェントは、テキストプロンプト、参照画像、または既存の動画から動画を生成できます。14のプロバイダーバックエンドがサポートされており、それぞれでモデルオプション、入力モード、機能セットが異なります。エージェントは、設定内容と利用可能な API キーに基づいて適切なプロバイダーを自動的に選択します。
<Note>
`video_generate`ツールは、少なくとも1つの動画生成プロバイダーが利用可能な場合にのみ表示されます。エージェントツールに表示されない場合は、プロバイダーのAPIキーを設定するか、`agents.defaults.videoGenerationModel`を設定してください。
`video_generate` ツールは、少なくとも 1 つの動画生成プロバイダーが利用可能な場合にのみ表示されます。エージェントツールに表示されない場合は、プロバイダーの API キーを設定するか、`agents.defaults.videoGenerationModel` を構成してください。
</Note>
OpenClawは、動画生成を次の3つのランタイムモードとして扱います。
OpenClaw は動画生成を 3 つのランタイムモードとして扱います。
- 参照メディアのないテキストから動画へのリクエスト用の`generate`
- リクエストに1つ以上の参照画像が含まれる場合の`imageToVideo`
- リクエストに1つ以上の参照動画が含まれる場合の`videoToVideo`
- 参照メディアなしのテキストから動画へのリクエストには `generate`
- リクエストに 1 つ以上の参照画像が含まれる場合は `imageToVideo`
- リクエストに 1 つ以上の参照動画が含まれる場合は `videoToVideo`
プロバイダーは、これらのモードの任意のサブセットをサポートできます。このツールは送信前にアクティブなモードを検証し、`action=list`でサポートされているモードを報告します。
プロバイダーは、これらのモードの任意の部分集合をサポートできます。ツールは送信前にアクティブな
モードを検証し、`action=list` でサポートされているモードを報告します。
## クイックスタート
1. サポートされている任意のプロバイダーにAPIキーを設定します。
1. サポートされている任意のプロバイダーの API キーを設定します。
```bash
export GEMINI_API_KEY="your-key"
@ -46,33 +47,33 @@ openclaw config set agents.defaults.videoGenerationModel.primary "google/veo-3.1
3. エージェントに依頼します。
> 夕焼けの中でフレンドリーなロブスターがサーフィンをしている、5秒間のシネマティックな動画を生成してください。
> 夕焼けの中、親しみやすいロブスターがサーフィンしている 5 秒間のシネマティックな動画を生成してください。
エージェントは自動的に`video_generate`を呼び出します。ツールの許可リスト設定は不要です。
エージェントは `video_generate` を自動的に呼び出します。ツールの allowlist 設定は不要です。
## 動画を生成すると何が起こるか
動画生成は非同期です。エージェントがセッション内で`video_generate`を呼び出すと、次のようになります。
動画生成は非同期です。セッション内でエージェントが `video_generate` を呼び出すと、次のように動作します。
1. OpenClawリクエストをプロバイダーに送信し、すぐにタスクIDを返します。
2. プロバイダーバックグラウンドでジョブを処理します通常はプロバイダーと解像度に応じて30秒から5分
3. 動画の準備ができると、OpenClawは内部完了イベントで同じセッションを再開します。
4. エージェント完成した動画を元の会話に投稿します。
1. OpenClawリクエストをプロバイダーに送信し、すぐにタスク ID を返します。
2. プロバイダーバックグラウンドでジョブを処理します(通常はプロバイダーと解像度に応じて 30 秒から 5 分)。
3. 動画の準備ができると、OpenClaw は内部完了イベントで同じセッションを再開します。
4. エージェント完成した動画を元の会話に投稿します。
ジョブが進行中の間、同じセッション内で重複する`video_generate`呼び出しは、別の生成を開始する代わりに現在のタスクステータスを返します。CLIから進行状況を確認するには、`openclaw tasks list`または`openclaw tasks show <taskId>`を使用します
ジョブの進行中、同じセッション内での重複した `video_generate` 呼び出しは、新しい生成を開始する代わりに現在のタスク状態を返します。CLI から進行状況を確認するには、`openclaw tasks list` または `openclaw tasks show <taskId>` を使用してください
セッションに裏付けられていないエージェント実行の外部(たとえば、ツールの直接呼び出し)では、このツールはインライン生成にフォールバックし、同じターン内で最終メディアパスを返します。
セッションに裏付けられたエージェント実行の外側(たとえば、ツールを直接呼び出す場合)では、ツールはインライン生成にフォールバックし、同じターン内で最終的なメディアパスを返します。
### タスクライフサイクル
### タスクライフサイクル
`video_generate`リクエストは、4つの状態を移動します。
`video_generate` リクエストは、4 つの状態を経由します。
1. **queued** -- タスクが作成され、プロバイダーが受け付けるのを待っています
2. **running** -- プロバイダーが処理中です通常はプロバイダーと解像度に応じて30秒から5分
3. **succeeded** -- 動画の準備が完了し、エージェントが再開して会話に投稿します
4. **failed** -- プロバイダーエラーまたはタイムアウトが発生し、エージェントがエラー詳細とともに再開します
1. **queued** -- タスクが作成され、プロバイダーが受け付けるのを待機中
2. **running** -- プロバイダーが処理中(通常はプロバイダーと解像度に応じて 30 秒から 5 分)。
3. **succeeded** -- 動画の準備完了。エージェントが再開し、会話に投稿
4. **failed** -- プロバイダーエラーまたはタイムアウト。エージェントがエラー詳細付きで再開
CLIからステータスを確認します。
CLI から状態を確認します。
```bash
openclaw tasks list
@ -80,138 +81,167 @@ openclaw tasks show <taskId>
openclaw tasks cancel <taskId>
```
重複防止: 現在のセッションですでに動画タスクが`queued`または`running`である場合、`video_generate`は新しいタスクを開始する代わりに既存のタスクステータスを返します。新しい生成をトリガーせずに明示的に確認するには、`action: "status"`を使用してください。
重複防止: 現在のセッションですでに動画タスクが `queued` または `running` の場合、`video_generate` は新しいタスクを開始する代わりに既存タスクの状態を返します。新しい生成をトリガーせずに明示的に確認したい場合は、`action: "status"` を使用してください。
## サポートされているプロバイダー
| プロバイダー | デフォルトモデル | テキスト | 画像参照 | 動画参照 | APIキー |
| --------------------- | ------------------------------- | ---- | ---------------------------------------------------- | ---------------- | ---------------------------------------- |
| Alibaba | `wan2.6-t2v` | Yes | Yes (remote URL) | Yes (remote URL) | `MODELSTUDIO_API_KEY` |
| BytePlus (1.0) | `seedance-1-0-pro-250528` | Yes | Up to 2 images (I2V models only; first + last frame) | No | `BYTEPLUS_API_KEY` |
| BytePlus Seedance 1.5 | `seedance-1-5-pro-251215` | Yes | Up to 2 images (first + last frame via role) | No | `BYTEPLUS_API_KEY` |
| BytePlus Seedance 2.0 | `dreamina-seedance-2-0-260128` | Yes | Up to 9 reference images | Up to 3 videos | `BYTEPLUS_API_KEY` |
| ComfyUI | `workflow` | Yes | 1 image | No | `COMFY_API_KEY` or `COMFY_CLOUD_API_KEY` |
| fal | `fal-ai/minimax/video-01-live` | Yes | 1 image | No | `FAL_KEY` |
| Google | `veo-3.1-fast-generate-preview` | Yes | 1 image | 1 video | `GEMINI_API_KEY` |
| MiniMax | `MiniMax-Hailuo-2.3` | Yes | 1 image | No | `MINIMAX_API_KEY` |
| OpenAI | `sora-2` | Yes | 1 image | 1 video | `OPENAI_API_KEY` |
| Qwen | `wan2.6-t2v` | Yes | Yes (remote URL) | Yes (remote URL) | `QWEN_API_KEY` |
| Runway | `gen4.5` | Yes | 1 image | 1 video | `RUNWAYML_API_SECRET` |
| Together | `Wan-AI/Wan2.2-T2V-A14B` | Yes | 1 image | No | `TOGETHER_API_KEY` |
| Vydra | `veo3` | Yes | 1 image (`kling`) | No | `VYDRA_API_KEY` |
| xAI | `grok-imagine-video` | Yes | 1 image | 1 video | `XAI_API_KEY` |
| プロバイダー | デフォルトモデル | テキスト | 画像参照 | 動画参照 | API キー |
| ----------------------- | ------------------------------- | -------- | ---------------------------------------------------- | ---------------- | ---------------------------------------- |
| Alibaba | `wan2.6-t2v` | Yes | Yesリモート URL | Yesリモート URL | `MODELSTUDIO_API_KEY` |
| BytePlus (1.0) | `seedance-1-0-pro-250528` | Yes | 最大 2 枚の画像I2V モデルのみ。先頭 + 最終フレーム) | No | `BYTEPLUS_API_KEY` |
| BytePlus Seedance 1.5 | `seedance-1-5-pro-251215` | Yes | 最大 2 枚の画像role 経由の先頭 + 最終フレーム) | No | `BYTEPLUS_API_KEY` |
| BytePlus Seedance 2.0 | `dreamina-seedance-2-0-260128` | Yes | 最大 9 枚の参照画像 | 最大 3 本の動画 | `BYTEPLUS_API_KEY` |
| ComfyUI | `workflow` | Yes | 画像 1 枚 | No | `COMFY_API_KEY` または `COMFY_CLOUD_API_KEY` |
| fal | `fal-ai/minimax/video-01-live` | Yes | 画像 1 枚 | No | `FAL_KEY` |
| Google | `veo-3.1-fast-generate-preview` | Yes | 画像 1 | 動画 1 本 | `GEMINI_API_KEY` |
| MiniMax | `MiniMax-Hailuo-2.3` | Yes | 画像 1 枚 | No | `MINIMAX_API_KEY` |
| OpenAI | `sora-2` | Yes | 画像 1 | 動画 1 本 | `OPENAI_API_KEY` |
| Qwen | `wan2.6-t2v` | Yes | Yesリモート URL | Yesリモート URL | `QWEN_API_KEY` |
| Runway | `gen4.5` | Yes | 画像 1 | 動画 1 本 | `RUNWAYML_API_SECRET` |
| Together | `Wan-AI/Wan2.2-T2V-A14B` | Yes | 画像 1 枚 | No | `TOGETHER_API_KEY` |
| Vydra | `veo3` | Yes | 画像 1 枚(`kling` | No | `VYDRA_API_KEY` |
| xAI | `grok-imagine-video` | Yes | 画像 1 | 動画 1 本 | `XAI_API_KEY` |
一部のプロバイダーは、追加または代替のAPIキー環境変数を受け付けます。詳細は個別の[プロバイダーページ](#related)を参照してください。
一部のプロバイダーは、追加または代替の API キー env var を受け付けます。詳細は個別の[プロバイダーページ](#related)を参照してください。
実行時に利用可能なプロバイダー、モデル、ランタイムモードを確認するには、`video_generate action=list`を実行します。
ランタイム時に利用可能なプロバイダー、モデル、ランタイムモードを確認するには、
`video_generate action=list` を実行してください。
### 宣言された機能マトリクス
これは、`video_generate`、コントラクトテスト、および共有ライブスイープで使用される明示的なモードコントラクトです。
これは、`video_generate`、契約テスト、
および共有ライブスイープで使用される明示的なモード契約です。
| プロバイダー | `generate` | `imageToVideo` | `videoToVideo` | 現在の共有ライブレーン |
| -------- | ---------- | -------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| Alibaba | Yes | Yes | Yes | `generate`, `imageToVideo`; `videoToVideo`は、このプロバイダーがリモート`http(s)`動画URLを必要とするためスキップされます |
| BytePlus | Yes | Yes | No | `generate`, `imageToVideo` |
| ComfyUI | Yes | Yes | No | 共有スイープには含まれていません。ワークフロー固有のカバレッジはComfyテストにあります |
| fal | Yes | Yes | No | `generate`, `imageToVideo` |
| Google | Yes | Yes | Yes | `generate`, `imageToVideo`; 現在のバッファ対応Gemini/Veoスイープがその入力を受け付けないため、共有`videoToVideo`はスキップされます |
| MiniMax | Yes | Yes | No | `generate`, `imageToVideo` |
| OpenAI | Yes | Yes | Yes | `generate`, `imageToVideo`; この組織/入力パスでは現在プロバイダー側のインペイント/リミックスアクセスが必要なため、共有`videoToVideo`はスキップされます |
| Qwen | Yes | Yes | Yes | `generate`, `imageToVideo`; `videoToVideo`は、このプロバイダーがリモート`http(s)`動画URLを必要とするためスキップされます |
| Runway | Yes | Yes | Yes | `generate`, `imageToVideo`; `videoToVideo`は、選択されたモデルが`runway/gen4_aleph`の場合にのみ実行されます |
| Together | Yes | Yes | No | `generate`, `imageToVideo` |
| Vydra | Yes | Yes | No | `generate`; バンドルされた`veo3`はテキスト専用で、バンドルされた`kling`はリモート画像URLを必要とするため、共有`imageToVideo`はスキップされます |
| xAI | Yes | Yes | Yes | `generate`, `imageToVideo`; このプロバイダーは現在リモートMP4 URLを必要とするため、`videoToVideo`はスキップされます |
| プロバイダー | `generate` | `imageToVideo` | `videoToVideo` | 現在の共有ライブレーン |
| ------------ | ---------- | -------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| Alibaba | Yes | Yes | Yes | `generate`, `imageToVideo`; このプロバイダーはリモート `http(s)` 動画 URL を必要とするため、`videoToVideo` はスキップ |
| BytePlus | Yes | Yes | No | `generate`, `imageToVideo` |
| ComfyUI | Yes | Yes | No | 共有スイープには含まれない。workflow 固有のカバレッジは Comfy テスト側にある |
| fal | Yes | Yes | No | `generate`, `imageToVideo` |
| Google | Yes | Yes | Yes | `generate`, `imageToVideo`; 現在のバッファベースの Gemini/Veo スイープはその入力を受け付けないため、共有 `videoToVideo` はスキップ |
| MiniMax | Yes | Yes | No | `generate`, `imageToVideo` |
| OpenAI | Yes | Yes | Yes | `generate`, `imageToVideo`; この org/input 経路では現在プロバイダー側の inpaint/remix アクセスが必要なため、共有 `videoToVideo` はスキップ |
| Qwen | Yes | Yes | Yes | `generate`, `imageToVideo`; このプロバイダーはリモート `http(s)` 動画 URL を必要とするため、`videoToVideo` はスキップ |
| Runway | Yes | Yes | Yes | `generate`, `imageToVideo`; `videoToVideo` は選択されたモデルが `runway/gen4_aleph` の場合にのみ実行 |
| Together | Yes | Yes | No | `generate`, `imageToVideo` |
| Vydra | Yes | Yes | No | `generate`; バンドルされた `veo3` はテキスト専用で、バンドルされた `kling` はリモート画像 URL を必要とするため、共有 `imageToVideo` はスキップ |
| xAI | Yes | Yes | Yes | `generate`, `imageToVideo`; このプロバイダーは現在リモート MP4 URL を必要とするため、`videoToVideo` はスキップ |
## ツールパラメーター
### 必須
| パラメーター | 型 | 説明 |
| --------- | ------ | ----------------------------------------------------------------------------- |
| `prompt` | string | 生成する動画のテキスト説明(`action: "generate"`に必須) |
| パラメーター | 型 | 説明 |
| ------------ | ------ | -------------------------------------------------------------------------- |
| `prompt` | string | 生成する動画のテキスト説明(`action: "generate"` では必須) |
### コンテンツ入力
| パラメーター | 型 | 説明 |
| ------------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `image` | string | 単一の参照画像パスまたはURL |
| `images` | string[] | 複数の参照画像最大9枚 |
| `imageRoles` | string[] | 結合された画像リストと並行する、位置ごとの任意のロールヒント。標準値: `first_frame`、`last_frame`、`reference_image` |
| `video` | string | 単一の参照動画パスまたはURL |
| `videos` | string[] | 複数の参照動画最大4本 |
| `videoRoles` | string[] | 結合された動画リストと並行する、位置ごとの任意のロールヒント。標準値: `reference_video` |
| `audioRef` | string | 単一の参照音声パスまたはURL。プロバイダーが音声入力をサポートしている場合、たとえばBGMや音声参照に使用されます |
| `audioRefs` | string[] | 複数の参照音声(最大3件 |
| `audioRoles` | string[] | 結合された音声リストと並行する、位置ごとの任意のロールヒント。標準値: `reference_audio` |
| パラメーター | 型 | 説明 |
| ------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `image` | string | 単一の参照画像(パスまたは URL |
| `images` | string[] | 複数の参照画像(最大 9 枚) |
| `imageRoles` | string[] | 結合された画像リストと位置対応する任意の role ヒント。正準値: `first_frame`、`last_frame`、`reference_image` |
| `video` | string | 単一の参照動画(パスまたは URL |
| `videos` | string[] | 複数の参照動画(最大 4 本) |
| `videoRoles` | string[] | 結合された動画リストと位置対応する任意の role ヒント。正準値: `reference_video` |
| `audioRef` | string | 単一の参照音声(パスまたは URL。プロバイダーが音声入力をサポートする場合、たとえば BGM や音声参照に使用 |
| `audioRefs` | string[] | 複数の参照音声(最大 3 個) |
| `audioRoles` | string[] | 結合された音声リストと位置対応する任意の role ヒント。正準値: `reference_audio` |
ロールヒントはそのままプロバイダーに転送されます。標準値は`VideoGenerationAssetRole`ユニオンに由来しますが、プロバイダーは追加のロール文字列を受け付ける場合があります。`*Roles`配列のエントリー数は、対応する参照リストを超えてはいけません。1つずれた指定は明確なエラーで失敗します。スロットを未設定のままにするには空文字列を使用してください。
role ヒントはそのままプロバイダーに転送されます。正準値は
`VideoGenerationAssetRole` union に由来しますが、プロバイダーによっては
追加の role 文字列を受け付ける場合があります。`*Roles` 配列のエントリー数は、
対応する参照リストを超えてはいけません。1 つずれた指定は明確なエラーで失敗します。
スロットを未設定のままにするには空文字列を使用してください。
### スタイル制御
| パラメーター | 型 | 説明 |
| ----------------- | ------- | --------------------------------------------------------------------------------------- |
| `aspectRatio` | string | `1:1`、`2:3`、`3:2`、`3:4`、`4:3`、`4:5`、`5:4`、`9:16`、`16:9`、`21:9`、または`adaptive` |
| `resolution` | string | `480P`、`720P`、`768P`、または`1080P` |
| `durationSeconds` | number | 目標の長さ(秒)。最も近いプロバイダー対応値に丸められます |
| `size` | string | プロバイダーがサポートしている場合のサイズヒント |
| `audio` | boolean | サポートされている場合、出力で生成音声を有効にします。`audioRef*`(入力)とは別です |
| `watermark` | boolean | サポートされている場合、プロバイダーのウォーターマーク付与を切り替えます |
| パラメーター | 型 | 説明 |
| ----------------- | ------- | ------------------------------------------------------------------------------------- |
| `aspectRatio` | string | `1:1`、`2:3`、`3:2`、`3:4`、`4:3`、`4:5`、`5:4`、`9:16`、`16:9`、`21:9`、または `adaptive` |
| `resolution` | string | `480P`、`720P`、`768P`、または `1080P` |
| `durationSeconds` | number | 目標の秒数(最も近いプロバイダー対応値に丸められる) |
| `size` | string | プロバイダーがサポートしている場合のサイズヒント |
| `audio` | boolean | サポートされている場合、出力に生成音声を含める。`audioRef*`(入力)とは別物 |
| `watermark` | boolean | サポートされている場合、プロバイダーのウォーターマーク付与を切り替え |
`adaptive`はプロバイダー固有のセンチネル値です。機能として`adaptive`を宣言しているプロバイダーにはそのまま転送されますたとえば、BytePlus Seedanceはこれを使用して入力画像の寸法から比率を自動検出します。これを宣言していないプロバイダーでは、その値はツール結果の`details.ignoredOverrides`を通じて示されるため、無視されたことが分かります。
`adaptive` はプロバイダー固有のセンチネルです。これは、その機能に `adaptive` を宣言している
プロバイダーにそのまま転送されます(例: BytePlus
Seedance はこれを使って入力画像の
寸法から比率を自動検出します)。これを宣言していないプロバイダーでは、
値はツール結果の `details.ignoredOverrides` を通じて表示されるため、
無視されたことが分かります。
### 高度な設定
| パラメーター | 型 | 説明 |
| パラメーター | 型 | 説明 |
| ----------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `action` | string | `"generate"`(デフォルト)、`"status"`、または`"list"` |
| `model` | string | プロバイダー/モデルのオーバーライド(例: `runway/gen4.5` |
| `filename` | string | 出力ファイル名のヒント |
| `providerOptions` | object | JSONオブジェクトとして指定するプロバイダー固有オプション(例: `{"seed": 42, "draft": true}`)。型付きスキーマを宣言しているプロバイダーでは、キーと型が検証されます。不明なキーや不一致がある場合、その候補はフォールバック時にスキップされます。宣言済みスキーマのないプロバイダーには、オプションがそのまま渡されます。各プロバイダーが受け付ける内容を確認するには、`video_generate action=list`を実行してください |
| `action` | string | `"generate"`(デフォルト)、`"status"`、または `"list"` |
| `model` | string | プロバイダー/モデルのオーバーライド(例: `runway/gen4.5` |
| `filename` | string | 出力ファイル名のヒント |
| `providerOptions` | object | JSON オブジェクトとして渡すプロバイダー固有オプション(例: `{"seed": 42, "draft": true}`)。型付きスキーマを宣言しているプロバイダーでは、キーと型が検証されます。不明なキーや型の不一致があると、フォールバック中にその候補はスキップされます。宣言済みスキーマのないプロバイダーには、そのままオプションが渡されます。各プロバイダーが受け付ける内容`video_generate action=list` を実行して確認してください |
すべてのプロバイダーがすべてのパラメーターをサポートしているわけではありません。OpenClawは、すでに長さを最も近いプロバイダー対応値に正規化しており、フォールバック先のプロバイダーが異なる制御面を公開している場合には、sizeからaspect ratioへの変換のような、翻訳済みのジオメトリヒントも再マッピングします。本当にサポートされていないオーバーライドは、ベストエフォートで無視され、ツール結果に警告として報告されます。厳密な機能制限参照入力が多すぎる場合などは、送信前に失敗します。
すべてのプロバイダーがすべてのパラメーターをサポートしているわけではありません。OpenClaw はすでに duration を最も近いプロバイダー対応値に正規化しており、フォールバック先プロバイダーが異なる制御サーフェスを公開している場合は、size-to-aspect-ratio のような変換済みジオメトリヒントも再マッピングします。本当に未対応のオーバーライドはベストエフォートで無視され、ツール結果では警告として報告されます。厳格な機能制限(参照入力が多すぎる、など)は送信前に失敗します。
ツール結果には適用された設定が報告されます。OpenClawがプロバイダーフォールバック中に長さやジオメトリを再マッピングした場合、返される`durationSeconds`、`size`、`aspectRatio`、`resolution`の値は実際に送信された内容を反映し、`details.normalization`には要求値から適用値への変換が記録されます。
ツール結果には適用された設定が報告されます。OpenClaw がプロバイダーフォールバック中に duration または geometry を再マッピングした場合、返される `durationSeconds`、`size`、`aspectRatio`、および `resolution` の値は送信された内容を反映し、`details.normalization` には要求値から適用値への変換が記録されます。
参照入力によってランタイムモードも選択されます。
参照入力はランタイムモードの選択にも使われます。
- 参照メディアなし: `generate`
- 画像参照がある場合: `imageToVideo`
- 動画参照がある場合: `videoToVideo`
- 参照音声入力は解決されたモードを変更しません。画像/動画参照によって選択されたモードに追加で適用され、`maxInputAudios`を宣言しているプロバイダーでのみ動作します
- 画像参照がある: `imageToVideo`
- 動画参照がある: `videoToVideo`
- 参照音声入力は解決されるモードを変更しません。画像/動画参照で選択されたモードに上乗せで適用され、`maxInputAudios` を宣言しているプロバイダーでのみ機能します
画像参照と動画参照の混在は、安定した共有機能ではありません。
1つのリクエストにつき、1種類の参照タイプを使うことを推奨します。
画像参照と動画参照の混在は、安定した共有機能サーフェスではありません。
1 リクエストにつき 1 種類の参照タイプを推奨します。
#### フォールバックと型付きオプション
一部の機能チェックは、ツール境界ではなくフォールバック層で適用されます。これにより、プライマリプロバイダーの制限を超えるリクエストでも、対応可能なフォールバック先で実行できます。
一部の機能チェックは、ツール境界ではなくフォールバック層で適用されます。これにより、
プライマリプロバイダーの制限を超えるリクエストでも、
対応可能なフォールバック先で実行できる場合があります。
- アクティブな候補が`maxInputAudios`を宣言していない(または`0`として宣言している)場合、リクエストに音声参照が含まれているとその候補はスキップされ、次の候補が試されます。
- アクティブな候補の`maxDurationSeconds`が要求された`durationSeconds`より小さく、かつその候補が`supportedDurationSeconds`リストを宣言していない場合、その候補はスキップされます。
- リクエストに`providerOptions`が含まれており、アクティブな候補が型付きの`providerOptions`スキーマを明示的に宣言している場合、指定されたキーがスキーマに存在しない、または値の型が一致しないと、その候補はスキップされます。まだスキーマを宣言していないプロバイダーは、オプションをそのまま受け取ります(後方互換性のあるパススルー)。プロバイダーは空のスキーマ(`capabilities.providerOptions: {}`)を宣言することで、すべてのプロバイダーオプションを明示的に拒否できます。この場合も、型不一致と同様にスキップされます。
- アクティブな候補が `maxInputAudios` を宣言していない(または
`0` として宣言している)場合、リクエストに音声参照が含まれているとその候補はスキップされ、
次の候補が試されます。
- アクティブな候補の `maxDurationSeconds` が要求された
`durationSeconds` を下回っており、かつその候補が
`supportedDurationSeconds` リストを宣言していない場合、その候補はスキップされます。
- リクエストに `providerOptions` が含まれており、アクティブな候補が
型付き `providerOptions` スキーマを明示的に宣言している場合、
指定されたキーがスキーマに存在しない、または値の型が一致しないと、
その候補はスキップされます。まだスキーマを宣言していないプロバイダーには、
オプションがそのまま渡されます(後方互換のパススルー)。
プロバイダーは空スキーマ
`capabilities.providerOptions: {}`)を宣言することで、すべての provider option を
明示的に拒否できます。この場合も型不一致と同様にスキップされます。
リクエスト内の最初のスキップ理由は`warn`で記録されるため、オペレーターはプライマリプロバイダーが見送られたことを把握できます。以降のスキップは、長いフォールバックチェーンを静かに保つために`debug`で記録されます。すべての候補がスキップされた場合、集約されたエラーには各候補のスキップ理由が含まれます。
リクエスト内で最初のスキップ理由は `warn` でログ出力されるため、オペレーターは
プライマリプロバイダーが見送られたことを確認できます。後続のスキップは
長いフォールバックチェーンを静かに保つため `debug` でログ出力されます。すべての候補がスキップされた場合、
集約エラーには各候補のスキップ理由が含まれます。
## アクション
- **generate**(デフォルト) -- 指定されたプロンプトと任意の参照入力から動画を作成します。
- **status** -- 現在のセッションで進行中の動画タスクの状態を確認します。別の生成は開始しません。
- **list** -- 利用可能なプロバイダー、モデル、およびそれらの機能を表示します。
- **status** -- 現在のセッションで進行中の動画タスクの状態を確認します。新しい生成は開始しません。
- **list** -- 利用可能なプロバイダー、モデル、およびその機能を表示します。
## モデル選択
動画を生成するとき、OpenClawは次の順序でモデルを解決します。
動画生成時、OpenClaw は次の順序でモデルを解決します。
1. **`model`ツールパラメーター** -- エージェントが呼び出しで指定した場合。
2. **`videoGenerationModel.primary`** -- configから。
3. **`videoGenerationModel.fallbacks`** -- 順に試行されます
4. **自動検出** -- 有効な認証情報を持つプロバイダーを使用します。現在のデフォルトプロバイダーから開始し、その後は残りのプロバイダーをアルファベット順に試します。
1. **`model` ツールパラメーター** -- 呼び出し時にエージェントが指定した場合。
2. **`videoGenerationModel.primary`** -- config から。
3. **`videoGenerationModel.fallbacks`** -- 順に試行。
4. **自動検出** -- 有効な認証を持つプロバイダーを使用し、現在のデフォルトプロバイダーから始めて、その後は残りのプロバイダーをアルファベット順で試します。
プロバイダーが失敗した場合、次の候補が自動的に試されます。すべての候補が失敗した場合、エラーには各試行の詳細が含まれます。
あるプロバイダーが失敗した場合、自動的に次の候補が試されます。すべての候補が失敗した場合、エラーには各試行の詳細が含まれます。
動画生成で明示的な`model`、`primary`、`fallbacks`エントリーのみを使用したい場合は、`agents.defaults.mediaGenerationAutoProviderFallback: false`を設定してください。
動画生成で明示的な `model`、`primary`、`fallbacks`
エントリーのみを使用したい場合は、
`agents.defaults.mediaGenerationAutoProviderFallback: false` を設定してください。
```json5
{
@ -226,28 +256,30 @@ openclaw tasks cancel <taskId>
}
```
## プロバイダーに関する注意事項
## プロバイダーメモ
| プロバイダー | 注意事項 |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Alibaba | DashScope/Model Studioの非同期エンドポイントを使用します。参照画像と参照動画は、リモートの`http(s)` URLである必要があります。 |
| BytePlus (1.0) | プロバイダーIDは`byteplus`です。モデル: `seedance-1-0-pro-250528`(デフォルト)、`seedance-1-0-pro-t2v-250528`、`seedance-1-0-pro-fast-251015`、`seedance-1-0-lite-t2v-250428`、`seedance-1-0-lite-i2v-250428`。T2Vモデル`*-t2v-*`は画像入力を受け付けません。I2Vモデルと一般的な`*-pro-*`モデルは、単一の参照画像(先頭フレーム)をサポートします。画像は位置指定で渡すか、`role: "first_frame"`を設定してください。画像が提供されると、T2VモデルIDは自動的に対応するI2Vバリアントに切り替えられます。サポートされる`providerOptions`キー: `seed`number、`draft`boolean、480pを強制、`camera_fixed`boolean。 |
| BytePlus Seedance 1.5 | [`@openclaw/byteplus-modelark`](https://www.npmjs.com/package/@openclaw/byteplus-modelark)プラグインが必要です。プロバイダーIDは`byteplus-seedance15`です。モデル: `seedance-1-5-pro-251215`。統一された`content[]` APIを使用します。入力画像は最大2枚first_frame + last_frameまでサポートします。すべての入力はリモートの`https://` URLである必要があります。各画像に`role: "first_frame"` / `"last_frame"`を設定するか、画像を位置指定で渡してください。`aspectRatio: "adaptive"`は入力画像から比率を自動検出します。`audio: true`は`generate_audio`にマッピングされます。`providerOptions.seed`numberはそのまま転送されます。 |
| BytePlus Seedance 2.0 | [`@openclaw/byteplus-modelark`](https://www.npmjs.com/package/@openclaw/byteplus-modelark)プラグインが必要です。プロバイダーIDは`byteplus-seedance2`です。モデル: `dreamina-seedance-2-0-260128`、`dreamina-seedance-2-0-fast-260128`。統一された`content[]` APIを使用します。最大9枚の参照画像、3本の参照動画、3件の参照音声をサポートします。すべての入力はリモートの`https://` URLである必要があります。各アセットに`role`を設定してください。サポートされる値: `"first_frame"`、`"last_frame"`、`"reference_image"`、`"reference_video"`、`"reference_audio"`。`aspectRatio: "adaptive"`は入力画像から比率を自動検出します。`audio: true`は`generate_audio`にマッピングされます。`providerOptions.seed`numberはそのまま転送されます。 |
| ComfyUI | ワークフロー駆動のローカルまたはクラウド実行です。設定されたグラフを通じてテキストから動画、および画像から動画をサポートします。 |
| fal | 長時間実行ジョブにはキューバック型フローを使用します。参照画像は1枚のみです。 |
| Google | Gemini/Veoを使用します。1枚の画像参照または1本の動画参照をサポートします。 |
| MiniMax | 参照画像は1枚のみです。 |
| OpenAI | `size`オーバーライドのみが転送されます。他のスタイルオーバーライド(`aspectRatio`、`resolution`、`audio`、`watermark`)は警告付きで無視されます。 |
| Qwen | Alibabaと同じDashScopeバックエンドです。参照入力はリモートの`http(s)` URLである必要があり、ローカルファイルは事前に拒否されます。 |
| Runway | data URIを介してローカルファイルをサポートします。video-to-videoには`runway/gen4_aleph`が必要です。テキストのみの実行では、`16:9`と`9:16`のアスペクト比が利用できます。 |
| Together | 参照画像は1枚のみです。 |
| Vydra | 認証情報が失われるリダイレクトを避けるため、`https://www.vydra.ai/api/v1`を直接使用します。`veo3`はtext-to-video専用としてバンドルされており、`kling`にはリモート画像URLが必要です。 |
| xAI | text-to-video、image-to-video、およびリモート動画の編集/延長フローをサポートします。 |
| プロバイダー | メモ |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Alibaba | DashScope/Model Studio の非同期エンドポイントを使用します。参照画像と参照動画は、リモートの `http(s)` URL でなければなりません。 |
| BytePlus (1.0) | プロバイダー ID `byteplus` です。モデル: `seedance-1-0-pro-250528`(デフォルト)、`seedance-1-0-pro-t2v-250528`、`seedance-1-0-pro-fast-251015`、`seedance-1-0-lite-t2v-250428`、`seedance-1-0-lite-i2v-250428`。T2V モデル(`*-t2v-*`は画像入力を受け付けません。I2V モデルと一般的な `*-pro-*` モデルは、単一の参照画像(先頭フレーム)をサポートします。画像は位置指定で渡すか、`role: "first_frame"` を設定してください。T2V モデル ID は、画像が提供された場合に対応する I2V バリアントへ自動的に切り替えられます。サポートされる `providerOptions` キー: `seed`number、`draft`boolean、480p を強制)、`camera_fixed`boolean。 |
| BytePlus Seedance 1.5 | [`@openclaw/byteplus-modelark`](https://www.npmjs.com/package/@openclaw/byteplus-modelark) Plugin が必要です。プロバイダー ID は `byteplus-seedance15` です。モデル: `seedance-1-5-pro-251215`。統一された `content[]` API を使用します。入力画像は最大 2 枚までサポートしますfirst_frame + last_frame。すべての入力はリモートの `https://` URL でなければなりません。各画像に `role: "first_frame"` / `"last_frame"` を設定するか、画像を位置指定で渡してください。`aspectRatio: "adaptive"` は入力画像から比率を自動検出します。`audio: true` `generate_audio` にマッピングされます。`providerOptions.seed`numberはそのまま転送されます。 |
| BytePlus Seedance 2.0 | [`@openclaw/byteplus-modelark`](https://www.npmjs.com/package/@openclaw/byteplus-modelark) Plugin が必要です。プロバイダー ID は `byteplus-seedance2` です。モデル: `dreamina-seedance-2-0-260128`、`dreamina-seedance-2-0-fast-260128`。統一された `content[]` API を使用します。最大 9 枚の参照画像、3 本の参照動画、および 3 個の参照音声をサポートします。すべての入力はリモートの `https://` URL でなければなりません。各アセットに `role` を設定してください — サポートされる値: `"first_frame"`、`"last_frame"`、`"reference_image"`、`"reference_video"`、`"reference_audio"`。`aspectRatio: "adaptive"` は入力画像から比率を自動検出します。`audio: true` `generate_audio` にマッピングされます。`providerOptions.seed`numberはそのまま転送されます。 |
| ComfyUI | workflow 駆動のローカルまたはクラウド実行です。構成済みグラフを通じて text-to-video と image-to-video をサポートします。 |
| fal | 長時間実行ジョブ向けにキュー支援フローを使用します。参照画像は 1 枚のみです。 |
| Google | Gemini/Veo を使用します。画像 1 枚または動画 1 本の参照をサポートします。 |
| MiniMax | 参照画像は 1 枚のみです。 |
| OpenAI | `size` オーバーライドのみが転送されます。その他のスタイルオーバーライド(`aspectRatio`、`resolution`、`audio`、`watermark`)は警告付きで無視されます。 |
| Qwen | Alibaba と同じ DashScope バックエンドです。参照入力はリモートの `http(s)` URL でなければならず、ローカルファイルは事前に拒否されます。 |
| Runway | data URI を介してローカルファイルをサポートします。video-to-video には `runway/gen4_aleph` が必要です。テキストのみの実行では、`16:9``9:16` の aspect ratio が公開されます。 |
| Together | 参照画像は 1 枚のみです。 |
| Vydra | 認証が落ちるリダイレクトを避けるため、`https://www.vydra.ai/api/v1` を直接使用します。`veo3` text-to-video 専用としてバンドルされており、`kling` にはリモート画像 URL が必要です。 |
| xAI | text-to-video、image-to-video、およびリモート動画の編集/拡張フローをサポートします。 |
## プロバイダー機能モード
共有の動画生成コントラクトでは、プロバイダーが単なるフラットな集約制限ではなく、モード固有の機能を宣言できるようになりました。新しいプロバイダー実装では、明示的なモードブロックを推奨します。
共有の動画生成契約では現在、プロバイダーは
単なるフラットな集約制限だけでなく、モード固有の機能を宣言できます。新しいプロバイダー
実装では、明示的なモードブロックを推奨します。
```typescript
capabilities: {
@ -271,11 +303,15 @@ capabilities: {
}
```
`maxInputImages`や`maxInputVideos`のようなフラットな集約フィールドだけでは、変換モードのサポートを告知するには不十分です。ライブテスト、コントラクトテスト、および共有の`video_generate`ツールがモードサポートを決定論的に検証できるように、プロバイダーは`generate`、`imageToVideo`、`videoToVideo`を明示的に宣言する必要があります。
`maxInputImages``maxInputVideos` のようなフラットな集約フィールドだけでは、
変換モード対応を示すには不十分です。プロバイダーは
`generate`、`imageToVideo`、`videoToVideo` を明示的に宣言し、ライブテスト、
契約テスト、および共有 `video_generate` ツールがモード対応を
決定的に検証できるようにする必要があります。
## ライブテスト
共有のバンドル済みプロバイダー向けのオプトインライブカバレッジ:
共有バンドルプロバイダー向けのオプトインライブカバレッジ:
```bash
OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts
@ -287,19 +323,35 @@ OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.liv
pnpm test:live:media video
```
このライブファイルは、不足しているプロバイダー環境変数を`~/.profile`から読み込み、デフォルトでは保存済み認証プロファイルよりもライブ/env APIキーを優先し、ローカルメディアで安全に実行できる宣言済みモードを実行します。
このライブファイルは、不足しているプロバイダー env var を `~/.profile` から読み込み、
デフォルトで保存済み認証プロファイルよりも live/env API キーを優先し、
デフォルトでリリース安全なスモークを実行します。
- スイープ内のすべてのプロバイダーに対する`generate`
- `capabilities.imageToVideo.enabled`である場合の`imageToVideo`
- `capabilities.videoToVideo.enabled`であり、かつそのプロバイダー/モデルが共有スイープでバッファ対応のローカル動画入力を受け付ける場合の`videoToVideo`
- スイープ内のすべての非 FAL プロバイダーに対する `generate`
- 1 秒のロブスタープロンプト
- `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS`
(デフォルト `180000`)によるプロバイダーごとの操作上限
現在、共有の`videoToVideo`ライブレーンがカバーしているのは次のとおりです。
FAL は、プロバイダー側のキュー遅延がリリース時間を支配する可能性があるため、オプトインです。
- `runway``runway/gen4_aleph`を選択した場合のみ)
```bash
pnpm test:live:media video --video-providers fal
```
共有スイープがローカルメディアで安全に実行できる宣言済み変換
モードも実行するには、`OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1` を設定します。
- `capabilities.imageToVideo.enabled` の場合は `imageToVideo`
- `capabilities.videoToVideo.enabled` であり、かつプロバイダー/モデルが
共有スイープでバッファ支援のローカル動画入力を受け付ける場合は `videoToVideo`
現在、共有 `videoToVideo` ライブレーンは次をカバーします。
- `runway``runway/gen4_aleph` を選択した場合のみ)
## 設定
OpenClaw設定でデフォルトの動画生成モデルを設定します。
OpenClaw config でデフォルトの動画生成モデルを設定します。
```json5
{
@ -314,7 +366,7 @@ OpenClaw設定でデフォルトの動画生成モデルを設定します。
}
```
またはCLI経由:
または CLI 経由:
```bash
openclaw config set agents.defaults.videoGenerationModel.primary "qwen/wan2.6-t2v"