---
read_when:
    - 長時間実行されるチャットターンの進捗更新表示を設定する
    - 部分、ブロック、進捗ストリーミングモードの選択
    - 処理の進行中にOpenClawが1件のチャンネルメッセージを更新する仕組みの説明
    - トラブルシューティング進捗の下書き、単独の進捗メッセージ、または完了処理のフォールバック
summary: 進捗下書き：エージェントの実行中に更新される、表示可能な1件の作業進行中メッセージ
title: 進行中の下書き
x-i18n:
    generated_at: "2026-07-12T21:24:57Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 15
    provider: openai
    source_hash: 4f937a61dfa360ac1d6c67e1a05e5ac698af563f2b58624d6de4e69a7f904cdd
    source_path: concepts/progress-drafts.md
    workflow: 16
---

Progress ドラフトは、エージェントの作業中に、一時的な「まだ作業中」という返信を積み重ねる代わりに、1 件のチャンネルメッセージをライブのステータス行に変えます。
`channels.<channel>.streaming.mode: "progress"` を設定すると、OpenClaw は実際の作業が始まった時点でメッセージを作成し、エージェントが読み取り、計画、ツール呼び出し、または承認待ちを行うたびに編集し、最後に最終回答へ変換します。

```text
シェルを実行中...
📖 docs/concepts/progress-drafts.md から読み取り中
🔎 Web 検索: 「discord edit message」を検索中
🛠️ Bash: テストを実行中
```

<Note>
  `channels.discord.streaming` が未設定の場合、Discord ではすでに
  `streaming.mode: "progress"` がデフォルトであるため、設定なしで
  Progress ドラフトが表示されます。他のすべてのチャンネルのデフォルトは `partial`
  または `off` です。チャンネルごとのデフォルトの完全な一覧については、
  [ストリーミングとチャンク分割](/ja-JP/concepts/streaming#channel-mapping)を参照してください。
</Note>

## クイックスタート

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
      },
    },
  },
}
```

ここでのデフォルトは、開始まで 5 秒待機すること（または 2 回目の作業イベントで即座に開始すること）、有用な作業が進行している間は簡潔な進捗行を表示すること、そしてそのターンでは従来の独立した進捗メッセージを抑制することです。生のツール行ドラフトには、1 語のラベルが自動的に使用されます。説明付きステータスでは、明示的に設定しない限り、重複するタイトルは省略されます。

このページでは、Progress ドラフトの使用感とその設定項目について説明します。
ストリーミングモードの完全な対応表、チャンネルごとのランタイムに関する注記、および旧キーの移行については、[ストリーミングとチャンク分割](/ja-JP/concepts/streaming)を参照してください。

## ユーザーに表示される内容

| 部分           | 目的                                                                           |
| -------------- | --------------------------------------------------------------------------------- |
| ラベル          | `Working` や `Shelling` などの任意の開始時／ステータス行。                     |
| 進捗行 | `/verbose` と同じツールアイコンと詳細フォーマッターを使用する、簡潔な実行状況の更新。 |

生のツール進捗では、エージェントが実質的な作業を開始し、
初期遅延の間も処理中の状態が続いた時点、または2回目の作業イベントが直ちに発生した時点でラベルが表示されます。
ラベルは順次更新される進捗行リストの先頭に配置されるため、
具体的な作業行が十分に表示されるとスクロールして見えなくなります。説明付きの進捗では、ラベルが明示的に設定されていない限り、エージェントの
平易な言葉によるステータスのみが表示されます。プレーンテキストのみの
応答には進捗ドラフトは表示されません。行が表示されるのは実際の作業更新に限られます。
たとえば `🛠️ Bash: run tests`、`🔎 Web Search: for "discord edit message"`、
または `✍️ Write: to /tmp/file` です。

チャンネルで安全に実行できる場合、最終回答はドラフトをその場で置き換えます。
それ以外の場合、OpenClaw は通常の配信方法で最終回答を送信し、
ドラフトをクリーンアップするか、その更新を停止します（[完了処理](#finalization)を参照）。

## モードを選択する

`channels.<channel>.streaming.mode` は、表示される処理中の動作を制御します。

| モード       | 最適な用途                         | チャットに表示される内容                              |
| ---------- | -------------------------------- | ------------------------------------------------- |
| `off`      | 静かなチャンネル                   | 最終回答のみ。                            |
| `partial`  | 回答テキストが表示されていく様子の確認      | 最新の回答テキストで編集される1つのドラフト。     |
| `block`    | 大きめの回答プレビュー単位     | 大きな単位で更新または追記される1つのプレビュー。 |
| `progress` | ツール使用が多い、または長時間実行されるターン | 1つのステータスドラフトと、その後の最終回答。          |

ユーザーが回答テキストをトークン単位でストリーミング表示することよりも「何が起きているか」を重視する場合は、
`progress` を選択します。回答テキスト自体を
進捗の通知として使用する場合は `partial`、大きめのプレビュー単位には `block` を選択します。Discord と
Telegram では、`streaming.mode: "block"` は引き続きプレビューストリーミングであり、通常の
ブロック応答配信ではありません。通常のブロック応答配信には `streaming.block.enabled` を使用してください。

## ラベルを設定する

進行状況ラベルは `channels.<channel>.streaming.progress` で設定します。デフォルトの
未加工ツール行ラベルは `"auto"` で、OpenClaw の組み込み
単語ラベルプールから選択されます。進行状況の説明がある場合、この暗黙のラベルは非表示になります。説明の上にも表示する場合は、
`label: "auto"` を明示的に設定してください。

```text
作業中、シェル実行中、移動中、爪を立てています、挟んでいます、脱皮中、泡立ち中、潮流中、
岩礁探索中、殻割り中、選別中、塩水処理中、航行中、オキアミ漁中、フジツボ付着中、
ロブスター漁中、潮だまり探索中、真珠採取中、爪を鳴らしています、浮上中
```

固定ラベルを使用します。

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          label: "調査中",
        },
      },
    },
  },
}
```

独自のラベルプールを使用します（`label: "auto"` の場合、引き続きランダムまたはシードに基づいて選択されます）。

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          label: "auto",
          labels: ["確認中", "読み取り中", "テスト中", "仕上げ中"],
        },
      },
    },
  },
}
```

ラベルを非表示にして、進行状況行だけを表示します。

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          label: false,
        },
      },
    },
  },
}
```

## 進行状況行を制御する

進行状況行は、ツールの開始、項目の更新、タスク計画、承認、コマンド出力、パッチの概要など、
実際の実行イベントや同様のエージェントアクティビティから生成されます。
デフォルトで有効です（`progress.toolProgress`、デフォルトは `true`）。

ツールは、1 回の呼び出しがまだ実行中でも、型付きの進行状況を出力できます。これにより、
時間のかかる取得や検索では、ツールが最終結果を返す前に、表示中の下書きを更新できます。
進行状況の更新は、モデル向けコンテンツが空で、公開チャンネルのメタデータが明示された部分的なツール結果です。

```json
{
  "content": [],
  "progress": {
    "text": "ページの内容を取得しています...",
    "visibility": "channel",
    "privacy": "public",
    "id": "web_fetch:fetching"
  }
}
```

OpenClaw はチャンネルの進行状況 UI に `progress.text` だけを表示します。通常の
ツール結果は後で `content`/`details` として届き、モデルに返されるのは
その部分だけです。

ツールに進行状況を追加する場合は、短く汎用的なメッセージを出力し、処理の待機時間が
表示する価値のある長さになるまで遅延させてください。`web_fetch` はまさにこれを 5 秒の遅延で行います。

```typescript
const clearProgressTimer = scheduleToolProgress(
  onUpdate,
  { text: "ページの内容を取得しています...", id: "web_fetch:fetching" },
  5_000,
  { signal },
);

try {
  return await runToolWork();
} finally {
  clearProgressTimer();
}
```

高速な呼び出しでは進捗行は表示されません。時間のかかる呼び出しでは、保留中に進捗行が表示されます。
キャンセルされた呼び出しでは、古い進捗が表示される前にタイマーがクリアされます。進捗テキストは
公開 UI のサイドチャネルであるため、シークレット、生の引数、
取得したコンテンツ、コマンド出力、ページテキストを含めてはなりません。

### 詳細モード

OpenClaw は、進捗ドラフトと `/verbose` に同じフォーマッターを使用します。

```json5
{
  agents: {
    defaults: {
      toolProgressDetail: "explain", // explain | raw
    },
  },
}
```

`"explain"`がデフォルトで、簡潔なラベルにより下書きを安定させます。
`"raw"`は、利用可能な場合に基となるコマンドを付加します。デバッグ時には便利ですが、
チャットではより冗長になります。たとえば、`node --check /tmp/app.js`の呼び出しは
モードによって次のように異なって表示されます。

| モード    | 進行状況行                                                      |
| --------- | --------------------------------------------------------------- |
| `explain` | `🛠️ check js syntax for /tmp/app.js`                            |
| `raw`     | `🛠️ check js syntax for /tmp/app.js · node --check /tmp/app.js` |

### コマンド/execテキスト

`streaming.progress.commandText`（デフォルトは`"raw"`）は、上記の詳細モードとは
独立して、exec/bashの進行状況行の横に表示するコマンドの詳細度を制御します。
コマンドテキストを完全に非表示にしながらツールの進行状況行を表示したままにするには、
`"status"`に設定します。

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          commandText: "status",
        },
      },
    },
  },
}
```

### コメンタリーレーン

`streaming.progress.commentary`（デフォルトは `false`）を使用すると、モデルによるツール実行前のコメンタリーや前置きの説明（💬、たとえば「確認してから...」）が、下書き内のツール行と交互に表示されます。チャンネル間で共通の設定形式については、[ストリーミングとチャンク分割](/ja-JP/concepts/streaming#commentary-progress-lane)を参照してください。

### 説明付きステータス

エージェントでユーティリティモデルが解決される場合（明示的な
[`utilityModel`](/ja-JP/gateway/config-agents#utilitymodel)、またはプライマリ
プロバイダーが宣言した小規模モデルのデフォルト（OpenAI → `gpt-5.6-luna`、
Anthropic → `claude-haiku-4-5`））、進行状況の下書きでは、順次追加される
ツール行が、その低コストモデルによって記述された、エージェントの実行内容を示す
短い平易な説明に置き換えられ、作業の進行に応じて更新されます。

```text
設定内のデフォルトモデルを更新し、その変更を反映するために Gateway を再起動しています。エージェント一覧の取得に 1 回失敗したため、再試行しています。
```

説明はデフォルトで有効です（`streaming.progress.narration`、デフォルトは `true`）。
プライマリモデルへフォールバックすることはなく、明示的な `utilityModel`、または
エージェントのプライマリプロバイダーについてプロバイダーが宣言したデフォルトが
ある場合にのみ実行されます。ユーティリティルーティングを完全に無効化するには、
`utilityModel: ""` を設定します。ツール行はその下で蓄積され続け、説明が停止すると
再び表示されます。また、下書きが編集されるのは通常のアクティビティゲートの通過後、
かつ説明テキストが実際に変更された場合のみです。これにより、短時間のターンでの
ちらつきを防ぎ、混雑したチャンネルでの編集頻度を抑えます。生のツール行を維持するには、
無効化してください。

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          narration: false,
        },
      },
    },
  },
}
```

ナレーション入力は制限され、機密情報が除去されます。ユーティリティモデルが受け取るのは、
受信リクエストのテキストと、ドラフトで表示されるものと同じ、コンパクトで機密情報が除去された
ツール概要です。生のコマンド出力やツール結果を受け取ることはありません。
`commandText: "status"` の場合、ナレーション入力では exec/bash コマンドのテキストも省略され、
ドラフトに表示される内容と一致します。

### 行数制限

表示されたままにする行数を制限します（デフォルトは 8）。

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          maxLines: 4,
        },
      },
    },
  },
}
```

ドラフトの編集中にチャットバブルの再レイアウトを減らすため、進捗行は自動的にコンパクト化されます。
また、ドラフトを繰り返し編集しても更新のたびに異なる位置で折り返されないよう、OpenClaw は長い行を
切り詰めます。デフォルトの 1 行あたりの上限は 120 文字です。文章は単語の境界で切り詰められ、
パスや生のコマンドなどの長い詳細は、末尾が見えるよう中央の省略記号で短縮されます。

1 行あたりの上限を調整します。

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          maxLineChars: 160,
        },
      },
    },
  },
}
```

### リッチレンダリング（Slack）

Slack では、進捗行をプレーンテキストではなく、構造化された Block Kit フィールドとして
レンダリングできます。

```json5
{
  channels: {
    slack: {
      streaming: {
        mode: "progress",
        progress: {
          render: "rich",
        },
      },
    },
  },
}
```

リッチレンダリングでは、Block Kit フィールドとともに、常に同じプレーンテキスト本文も送信されます。
そのため、よりリッチな形式をレンダリングできないクライアントでも、コンパクトな進捗テキストが
表示されます。

### ツール／タスク行を非表示にする

単一の進捗ドラフトは維持したまま、ツール行とタスク行を非表示にします。

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          toolProgress: false,
        },
      },
    },
  },
}
```

`toolProgress: false` の場合も、OpenClaw はそのターンで従来の独立したツール進捗メッセージを
抑制します。ラベルが設定されている場合はラベルを除き、最終回答までチャンネルは視覚的に
静かなままです。

## チャンネルの動作

| チャンネル      | 進行状況の転送方式                             | 注記                                                                                                                                                                            |
| --------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Discord         | 1件のメッセージを送信し、その後編集します。    | デフォルトは`progress`モードです。最終回答には`-#`のアクティビティレシートが付き、回答の送信後にステータス下書きが削除されます。                                                 |
| Matrix          | 1件のイベントを送信し、その後編集します。      | アカウントレベルのストリーミング設定によって、アカウントレベルの下書きが制御されます。                                                                                          |
| Microsoft Teams | 個人チャットでTeamsネイティブストリームを使用。 | 代わりに`streaming.mode: "block"`はTeamsのブロック配信に対応します。                                                                                                            |
| Slack           | ネイティブストリームまたは編集可能な下書き投稿。 | 返信スレッドの送信先が必要です。送信先のないトップレベルDMでも、下書きプレビューの投稿と編集は引き続き行われます。                                                              |
| Telegram        | 1件のメッセージを送信し、その後編集します。    | 進行状況の下書きと回答の間にメッセージが届いた場合、クライアントのスクロール位置を急に移動させず、下書きをその下に再投稿します（新規投稿後に旧投稿を削除）。                      |
| Mattermost      | 編集可能な下書き投稿。                         | `block`モードでは、完成済みテキストとツールアクティビティの投稿を切り替えます。他のモードでは、ツールアクティビティを同じ下書き形式の投稿にまとめます。                          |

安全な編集をサポートしないチャンネルでは、入力中インジケーターまたは
最終回答のみの配信にフォールバックします。チャンネルごとの完全な
ランタイム動作の内訳については、[ストリーミングとチャンク化](/ja-JP/concepts/streaming)を参照してください。

## 最終処理

最終回答の準備ができると、OpenClawはチャットを整理された状態に保とうとします。

- Discordの`progress`モードでは、最終回答が新しいメッセージとして送信され、
  末尾に小さな`-#`アクティビティレシート（例:
  `-# 🧠 2 thoughts · 🛠️ 5 tool calls · ⏱️ 12s`）が追加されます。その回答が
  配信されると、ステータス下書きは削除されます。通信量の多いチャンネルでも、
  返信の上に孤立したツールログは残りません。エラーとなった最終回答では、
  失敗したターンの目に見える記録として下書きが保持されます。
- 下書きを安全に最終回答へ変換できる場合（`partial`/`block`モード）、
  OpenClawはその場で下書きを編集します。
- チャンネルがネイティブの進行状況ストリーミングを使用する場合、ネイティブ
  転送方式が最終テキストを受け付けると、OpenClawはそのストリームを完了させます。
- それ以外の場合（メディア、承認プロンプト、明示的な返信先、チャンク数の超過、
  または編集/送信の失敗）、OpenClawは下書きを上書きせず、通常のチャンネル
  配信経路で最終回答を送信します。

このフォールバックは意図的なものです。新しい最終回答を送信する方が、
テキストの消失、返信先スレッドの誤り、またはチャンネルが安全に表現できない
ペイロードによる下書きの上書きよりも適切です。

## トラブルシューティング

**最終回答しか表示されません。**

メッセージを処理したアカウントまたはチャンネルで、
`channels.<channel>.streaming.mode`が`progress`になっていることを確認してください。
チャンネルが適切なメッセージを安全に編集できない場合、一部のグループまたは
引用返信の経路では、そのターンの下書きプレビューが無効になります。

**ラベルは表示されますが、ツールの行は表示されません。**

`streaming.progress.toolProgress`を確認してください。`false`の場合、OpenClawは
単一の下書きを使用する動作を維持しますが、ツールとタスクの進行状況行を非表示にします。

**編集された下書きではなく、新しい最終メッセージが表示されます。**

これは[最終処理](#finalization)で説明した安全のためのフォールバックです。
メディアへの返信、長い回答、明示的な返信先、古いTelegramの下書き、
Slackのスレッド送信先の欠落、削除されたプレビューメッセージ、
またはネイティブストリームの最終処理失敗で発生することがあります。

**独立した進行状況メッセージがまだ表示されます。**

下書きが有効な間、進行状況モードではデフォルトの独立したツール進行状況
メッセージが抑制されます。独立したメッセージが引き続き表示される場合は、
そのターンが実際に`progress`モードを使用しており、
`streaming.mode: "off"`や、そのメッセージの下書きを作成できないチャンネル経路を
使用していないことを確認してください。

**Teamsの動作がDiscordやTelegramと異なります。**

Microsoft Teamsは、汎用の送信後編集によるプレビュー転送方式ではなく、
個人チャットでネイティブストリームを使用します。また、DiscordやTelegramのような
下書きプレビュー用のブロックモードがないため、`streaming.mode: "block"`を
Teamsのブロック配信に対応させます。

## 関連項目

- [ストリーミングとチャンク化](/ja-JP/concepts/streaming)
- [メッセージ](/ja-JP/concepts/messages)
- [チャンネル設定](/ja-JP/gateway/config-channels)
- [Discord](/ja-JP/channels/discord)
- [Matrix](/ja-JP/channels/matrix)
- [Microsoft Teams](/ja-JP/channels/msteams)
- [Slack](/ja-JP/channels/slack)
- [Telegram](/ja-JP/channels/telegram)
- [Mattermost](/ja-JP/channels/mattermost)
