対話インタラクション
概要
Work の対話インタラクションは Agent Loop によって駆動されます。ユーザーがメッセージを送信すると、Agent は自律的な推論・実行ループに入ります。ニーズを分析 → ツールを呼び出す → 結果を取得 → 推論を継続し、タスクが完了するか終了条件に達するまで繰り返します。このプロセス全体は、ストリーミングイベントを通じてリアルタイムに画面上へ表示されます。
メッセージの種類
対話のメッセージフローには、以下の種類が含まれます。
| メッセージの種類 | レンダリング方法 | 説明 |
|---|---|---|
| ユーザーメッセージ | 右寄せの吹き出し | ユーザーが送信したテキスト、添付ファイル |
| アシスタントテキスト | 左寄せの Markdown レンダリング | Agent のテキスト返信。コードハイライト、数式、表に対応 |
| ツール呼び出し | ToolCallGroup 折りたたみパネル | ツール名 + 入力パラメータ + 実行状態 + 出力結果 |
| 思考プロセス | Thinking 折りたたみブロック | Agent の推論プロセス(Claude などのネイティブ thinking モデル) |
| タスク管理 | TaskPanel タスクパネル | 構造化されたタスクリスト(未対応 / 進行中 / 完了) |
| サブエージェントの活動 | SubagentToolRow | サブエージェントの実行プロセス。特別なマーク付き |
| 質問インタラクション | QuestionWizard | Agent がユーザーに対して行う構造化された質問 |
ツール呼び出しの表示
Agent がツールを呼び出すと、画面には ToolCallGroup コンポーネントが表示されます。

| 表示要素 | 説明 |
|---|---|
| ツール名 | 呼び出したツールの識別子(Bash、Read File など) |
| 入力パラメータ | ツールが受け取ったパラメータ(折りたたんで確認可能) |
| 実行状態 | loading(回転アイコン)/ success(緑のチェック)/ error(赤のバツ) |
| 出力結果 | ツールが返した内容(長い内容は折りたたみ可能) |
複数のツール呼び出しは実行順にグループ化して表示されます。並行して実行されるツールは同じグループ内に表示されます。
ストリーミング出力
Agent の返信はストリーミングイベントを通じてリアルタイムに画面へプッシュされます。
| イベントの種類 | 説明 |
|---|---|
text_delta |
テキスト断片。1 文字ずつメッセージ領域に追記 |
thinking |
思考プロセスの断片(Anthropic ネイティブ thinking に対応) |
tool_use_start |
ツール呼び出しの開始。ツール名とパラメータを表示 |
tool_result |
ツールの実行結果。状態アイコンを更新 |
error |
エラー情報 |
done |
当該ラウンドの完了 |
ユーザーはストリーミング出力の過程で Agent のリアルタイムな推論と操作を確認でき、透明性の高い実行体験が得られます。
セッション管理
新規セッションの作成
左上の「新規対話」ボタンをクリックするか、ショートカットキーを使用して新しいセッションを作成します。新しいセッションはウェルカムページから始まるか、直接メッセージを入力して対話を開始します。
セッションリストの操作
| 操作 | 説明 |
|---|---|
| 検索 | キーワードでセッションタイトルをフィルタリング |
| ピン留め | 重要なセッションをリストの先頭に固定 |
| フォルダ分類 | セッションをカスタムフォルダに整理 |
| 削除 | セッションを削除(復元不可) |
| 名前変更 | セッションタイトルを変更 |
セッションスナップショットと復元
APP 側ではセッションスナップショットの永続化に対応しており、予期しない中断による対話の消失を防ぎます。
| スナップショット戦略 | 説明 |
|---|---|
every_tool_round(デフォルト) |
ツール呼び出しのたびに保存 |
every_round |
LLM とのやり取り 1 ラウンドごとに保存 |
manual |
手動トリガー時のみ保存 |
スナップショットは JSON ファイルとして保存され(アトミック書き込み、.tmp + rename で破損を防止)、resumeSessionId を通じて中断したセッションを復元できます。
ローカル対話とリモート対話
マルチノードのシナリオでは、セッションリスト内の対話に異なる送信元アイコンが表示されます。
| アイコン | 意味 |
|---|---|
| ローカル APP ノードで発起または実行された対話 | |
| リモートノードで実行された対話 | |
| IM チャネル(Telegram、WeChat など)からの対話 |
これにより、ユーザーは対話の実行元をすばやく区別できます。
Agent Loop による複雑タスク処理能力
Agent Loop により、Work は複数ステップの操作を必要とする複雑なタスクを処理できます。
サンプルシナリオ:ユーザーが「プロジェクトのディレクトリ構造を分析してアーキテクチャドキュメントを生成する」ことを要求
ラウンド 1: Agent が List Directory を呼び出してプロジェクト構造を参照
ラウンド 2: Agent が Glob Files を呼び出して主要な設定ファイルを検索
ラウンド 3: Agent が Read File を呼び出してコアファイルの内容を読み取り
ラウンド 4: Agent が Search Files を呼び出してモジュールの依存関係を検索
ラウンド 5: Agent が総合的に分析して Markdown アーキテクチャドキュメントを生成
ラウンド 6: Agent が Write File を呼び出して指定パスにドキュメントを保存
このプロセス全体を通じて、Agent は自律的にどのツールをどの順序で実行するかを判断するため、ユーザーが逐一指示する必要はありません。デフォルトでは最大 25 ラウンドのループとなり、サーキットブレーカー機構により異常時には自動的に停止します。
技術的な詳細については Agent ループエンジン を参照してください。
ヒント:Agent とより効果的に対話するには
| テクニック | 例 | 効果 |
|---|---|---|
| 目標を明確にする | 「utils.ts の formatDate 関数をリファクタリングして、date-fns を使うように変更して」 | Agent が目標と方法を正確に特定 |
| 段階的に依頼する | 「まずすべての .tsx ファイルを列挙し、次にどれが class コンポーネントを使っているか教えて」 | Agent が段階的に実行し、結果をより制御しやすい |
| ツールを指定する | 「Bash を使って npm test を実行して」 |
Agent が指定されたツールを直接使用 |
| 確認を求める | 「まず計画を教えて、確認してから実行して」 | Agent が直接ファイルを変更するのを防止 |
| コンテキストを提供する | 「これは React + TypeScript のプロジェクトで、Vite でビルドしています」 | Agent がより適切な提案を提示 |
実行中のタスクを中止する方法
Agent が期待しない操作を実行している場合:
- メッセージフロー下部の 停止 ボタンをクリック(または
Escを押す) - Agent は現在のツール実行が完了した後に停止します
- すでに実行された操作(作成済みのファイルなど)は自動的には取り消されません
- 対話を続けて Agent に以前の操作を取り消すよう指示できます
注意:実行中の Bash コマンドは終了されます(SIGTERM を送信)が、完了済みのコマンドの効果は自動的に取り消せません。
ツール呼び出しが失敗したときの対処法
| 失敗の原因 | 解決方法 |
|---|---|
| 権限不足 | Agent が必要な権限を説明します。ポップアップで許可するか、ツールのセキュリティレベルを調整できます |
| ファイルが存在しない | パスが正しいか確認してください。Agent にまず Glob / List Directory でファイルの場所を確認させることができます |
| コマンド実行エラー | 通常、Agent が自動的にエラーを分析して再試行します。ループが失敗する場合は、手動でより多くのコンテキストを提供してください |
| ネットワークタイムアウト | Web Fetch などのネットワークツールはネットワークの問題で失敗することがあります。しばらくしてから再試行してください |
関連ドキュメント
- マルチモーダル入出力 — ファイル入力とプレビュー機能
- サブエージェント — タスクの分解と委譲
- Agent ループエンジン — 基盤となるループ機構
- コンテキスト 5 層圧縮 — 長い対話のコンテキスト管理
