Ask
AskがAIエージェントから人へ確認と判断を安全に受け渡し、回答後に同じタスクを再開する仕組みを説明します。
Askは、AIエージェントが作業をいったん止め、人に確認と判断を委ねるための仕組みです。回答は元のタスクへ構造化されたイベントとして返り、その同じタスクが続きから再開します。
Askが向いている場面
- 公開、削除、購入など、実行前に人の最終判断が必要
- 複数の方針に明確なトレードオフがある
- 画像、音声、動画を見聞きしないと決められない
- 関連する複数の判断を一度にまとめて確認したい
Askは単なる通知ではありません。質問は回答されるまで保持され、Desktopの専用Askウィンドウまたは右サイドパネルのAskタブ、PWAの「受信箱」、設定済みのDiscordまたはSlackから応答できます。
PWAの「受信箱」には、回答が必要なAsk、読むだけのDisplay通知、パスワードの一度限りの入力依頼が一緒に並びます。Askは回答を元のタスクへ送り、そのタスクを再開します。Display通知は閉じても何も送信せず、タスクも再開しません。パスワード入力依頼はAskではなく、値を指定されたブラウザーの入力欄へ一度だけ配送します。いずれも発信元のタスクが残っていれば、そのタスクを直接開けます。
ほかの確認との違い
| 仕組み | 用途 | 回答後 |
|---|---|---|
| Ask | エージェントが人へ明示的な判断を委ねる | 元のタスクへ回答が返り、自動再開する |
| 通常返信 | 利用者がタスクへ次の指示を送る | 新しいターンとして進む |
| エージェント固有の質問 | 実行中のエージェントが入力を求める | そのエージェントの質問へ回答する |
| ツール実行承認 | ファイル変更やコマンドなどの実行可否を決める | 許可、常に許可、拒否の権限判断を返す |
cockpit display |
前面に情報だけを表示する | 返答を待たず、タスクを再開しない |
Askへの回答は、OSや外部サービスへの実行権限そのものではありません。権限が必要な操作では、Askによる方針確認とは別にツール実行承認が発生する場合があります。
パスワード入力依頼との違い
cockpit secret requestによる入力依頼は、Desktopの専用ウィンドウ、右サイドパネルのAskタブ、PWAの「受信箱」に表示されます。専用ウィンドウはAskウィンドウの設定に従い、依頼はAskの通知音と通常優先度のラベルを使います。入力が完了、失敗、取消、または期限切れになると、入力画面はすべての表示面からすぐに消えます。結果はcockpit secret statusまたは依頼元タスクへの通知で確認します。
表示場所を共有してもAskではありません。cockpit ask listには含まれず、cockpit ask answerでは回答できません。Discord・SlackへのAsk転送、ask.* Hook、cockpit.ask.resolvedイベント、添付にも対応しません。パスワードやほかの秘密情報をAskの回答へ書かず、必ず専用の入力依頼を使ってください。配送先と保存の境界はセキュリティとデータを参照してください。
質問と回答の形式
Askは次の形式を組み合わせられます。
- 単一選択
- 複数選択
- 自由入力
- 複数の関連質問
- 選択肢ごとの結果やトレードオフの説明
- Ask全体の説明または個別の質問に含まれる、クリック可能なHTTPまたはHTTPSのURL
- 質問への画像、音声、動画の添付
- 回答への画像、テキスト、ソースコード、JSON、CSV、PDF、音声、動画、Office文書の添付
選択肢だけで判断できない場合も、自由入力は既定で利用できます。質問文は、それだけを読んで決められるよう、対象、現在の状況、各選択の結果を含めます。
一つの質問では、選択肢を選び、条件、理由、補足の自由文を加えてから一緒に送信できます。Cockpitは選択と自由文を、同じ回答内の別々の構造化フィールドとして保持します。二つ以上の質問があるAskでは、個別の質問へ回答し、さらにAsk全体に宛てた返信を同じ送信に含められます。Ask全体への返信だけを送ることもでき、その返信がある場合、空欄の質問は値を補わず未回答のまま届きます。Ask全体への返信がない場合は、引き続きすべての質問への回答が必要です。
DesktopでAskのURLを選ぶと、Askウィンドウ内を移動せず、システムブラウザーで開きます。PWAでは新しいブラウザータブで開きます。DesktopのAsk画面から開けるのはhttpとhttpsのリンクだけで、ほかのURLスキームは開きません。
DesktopとPWAのAskには、質問を作成したタスクへ移動するボタンがあります。移動してもAskへの回答やクローズは行われません。質問元のタスクが削除済みの場合、このボタンは利用できません。
PWAのタスク一覧では、未回答のAskがあるタスク行に「Askへの回答待ち」の質問吹き出しを表示します。この表示はタスクの通常の質問待ち状態ではなく、開いているAskそのものに基づき、回答またはclose後に消えます。タスク行はタスク詳細を開く入口のままで、回答はPWAの「受信箱」から行います。
PWAで前後のAskへ切り替えると、質問本文は先頭、添付メディアの横並びは左端から表示されます。同じAskを表示中に更新が届いただけでは、読んでいる位置はリセットされません。
HTML説明資料を確認する
比較表、デザイン案、変更前後のプレビューなど、選択肢だけでは判断しにくいAskにはHTML説明資料を添えられます。Desktopの専用Askウィンドウと右サイドパネルのAskタブ、PWAの「受信箱」では、質問の概要と選択肢の間にスクロール可能な表示専用領域として表示します。説明資料の読み込みに失敗しても、質問と回答操作は利用でき、再読み込みできます。
説明資料は回答欄ではありません。スクリプト、フォーム、data-cockpit-actionは動作せず、CSSは分離され、HTTP/HTTPSリンクだけがシステムブラウザーで開きます。回答は従来どおりAskの選択肢と入力欄から送ります。Discord、Slack、Hooks、cockpit ask listへHTML本文は渡らないため、判断に必須の内容は概要または選択肢の説明にも含めてください。
CLIでは--html、--html-file、--html-stdinのどれか一つで、UTF-8換算512 KiBまでのHTMLを渡せます。作成時に内容をコピーし、未回答のAskとともに再起動を越えて保持し、回答またはclose時に削除します。詳しい入力規則はcockpit askリファレンスを参照してください。
優先度で回答順を確認する
Askには、回答が必要になる緊急度を示す優先度があります。これはタスク自体の重要度ではありません。指定しない場合はmediumです。
| 値 | 表示 | 使う場面 |
|---|---|---|
low |
低 | 後回しにできる提案、任意の確認、または回答がなくても回避できる質問 |
medium |
通常 | 一般的な判断。既定値 |
high |
高 | 回答が遅れると期限に間に合わない、または複数のタスクや人が止まる場合 |
xhigh |
緊急 | 回答が遅れるほど障害、データ損失、金銭的損失が拡大する場合 |
DesktopのAskタブと専用ウィンドウ、PWAの「受信箱」、Discord、Slackには優先度のラベルが表示されます。回答待ちの一覧は緊急、高、通常、低の順で、同じ優先度では古いAskを先に並べます。低を指定してもAskを省略または自動回答せず、回答後の再開方法も変わりません。
エージェント自身のタスクが待っていることだけを理由に、高または緊急へ上げません。高または緊急にする場合は、期限や遅れたときの影響を質問文の冒頭で短く説明します。
DesktopでAskを確認する
右サイドパネルのAskタブには、この端末で回答待ちのAskがすべて表示されます。件数バッジから開き、専用Askウィンドウと同じ選択肢、自由入力、複数質問、Ask全体への返信、添付、メディアを使って回答またはクローズできます。CLIから表示する場合はcockpit side-panel askを使います。
既定では新しいAskごとに専用ウィンドウも開きます。「設定」→「通知」の「この端末で Ask ウィンドウを表示」をオフにすると、開いているAskウィンドウは閉じますが、Ask自体は閉じず、転送や回答処理も変わりません。サイドパネルのAskタブ、PWA、CLI、Discord、Slackから引き続き回答できます。設定は端末ごとに保存され、オンへ戻すと、まだ回答待ちのAskのウィンドウが再び開きます。CLIではcockpit settings set notifications.askWindow falseまたはtrueを使います。
専用ウィンドウの「一時的に隠す」は、そのウィンドウだけを現在のアプリセッション中は非表示にします。Askを閉じたり、元のタスクを再開したりはしません。Askウィンドウの設定がオンであれば、サイドパネルの「別ウィンドウで開く」から再表示できます。「閉じる」はAsk自体を取り除く別の操作です。
回答前の選択、自由入力、Ask全体への返信、添付は、専用ウィンドウとサイドパネルの間で共有されます。一方で編集すると、もう一方にも同じAskの最新の下書きが反映されます。この共有は未回答のAskと同じDesktopアプリ内だけに限られ、PWA、CLI、Discord、Slack、別の端末へ未送信の下書きを同期しません。Askへ回答するかAskを閉じると下書きは破棄され、アプリを終了した後まで保存されません。
複数の専用ウィンドウが同時に開く場合、初期状態では優先度が高いAskほど手前に重なります。ただし、利用者がクリックまたはキーボードで操作したAskやDisplay通知、またはサイドパネルから開いたAskは手前に保たれ、新しいAskが届いても覆われません。ウィンドウの重なり順を変えてもキーボードフォーカスは移しません。
Askウィンドウの表示を調整する
DesktopのAskウィンドウは右下のハンドルをドラッグして幅と高さを変更できます。変更したサイズは保存され、次に開くAskウィンドウにも使われます。画面の作業領域を越える大きさにはできません。
ヘッダーの「A−」と「A+」は、質問、選択肢、説明、入力欄の文字サイズを変更します。この値は「設定」→「表示」のチャット文字サイズと共通で、変更はほかのAskウィンドウとメインの会話表示にも反映されます。
PWAの「受信箱」でも、Askの概要、質問、選択肢、説明と、HTML説明資料の基準文字サイズは同じチャット文字サイズに従います。HTML側で個別に指定された文字サイズは維持します。テキスト入力欄はモバイルブラウザーの自動zoomを避けるため最小16pxを維持します。長い選択肢や空白のない文字列は回答カード内で折り返され、横方向へはみ出しません。
回答までの流れ
- エージェントがAskを作成します。
- Cockpitが質問を保存し、DesktopのAskタブ、設定に応じたAskウィンドウ、PWAへ表示します。Ask転送を有効にしている場合は、設定したDiscordまたはSlackのチャンネルにも投稿します。
- 利用者が選択、補足の自由文、複数質問では必要に応じてAsk全体への返信、対応ファイルをまとめて回答します。
- Cockpitが
cockpit.ask.resolvedイベントを元のタスクへ渡します。 - エージェントは回答を受け取り、同じ作業を続けます。
回答がタスクへ届くまでの間、キューではAskとして選択肢、自由入力、添付を優先した要約を表示します。送信後の会話履歴でも回答内容を先に表示し、「質問と詳細」を展開すると元の質問、回答者、元のデータを確認できます。
タスクが実行中の場合、回答は共有キューへ入り、「回答済み・送信待ち」と表示されます。回答済みなので、未回答のAsk一覧には残りません。DesktopとPWAの割り込み対応画面では、キューの稲妻ボタン「現在の処理に割り込んでこのキューを送信」で、選んだ回答を今すぐ送れます。構造化された回答、回答者、添付を保持し、残りのキューの順序は変えません。承認やツールの質問への回答待ち、またはセッションが利用できない場合は理由を表示し、回答は自動送信待ちのまま残ります。回答の編集・削除はできず、送信中・送信済み・送信結果が未確認の回答へ再度割り込むこともできません。配送失敗や未確認時の復旧はタスク詳細を参照してください。
Askを回答せずに閉じると、そのAskは削除されますが、元のタスクは自動再開しません。必要なら、後から通常のメッセージでタスクを再開します。
回答の添付はクリップボタンだけでなく、回答面へのドラッグ&ドロップでも追加できます。複数質問ではポインターの下にある質問へ、それ以外の場所では先頭の質問へ添付されます。ドロップだけで回答が送信されることはありません。
DiscordとSlackへ転送する
Desktopの「設定」→「Ask通知」では、DiscordとSlackを別々に設定し、同時に有効にできます。どちらも既定では無効で、CockpitからDiscord GatewayまたはSlack Socket Modeへ外向きに接続します。
- Discordでは、Developer PortalでBotを作成してtokenを貼り、サーバーへ招待します。Slackでは、画面からコピーしたmanifestでアプリを作成し、Bot token(
xoxb-)とconnections:writeを持つApp-level token(xapp-)を貼ります。 - 転送先のチャンネルと「回答できる人」を一人選びます。回答者が未設定の場合は転送を開始せず、サーバーやワークスペースのほかのメンバーが操作してもCockpitは回答を受け付けません。
- 必要に応じて、Askの画像・動画を転送するか、許可した回答者がチャンネルへ投稿したファイルを回答へ添付するかを切り替えます。
- 「テスト Ask」を送り、選択したサービスから回答して往復時間が表示されることを確認してから有効にします。
ボタン、選択メニュー、自由入力モーダルから回答でき、複数質問ではすべての回答を揃えてから送信します。Desktop、PWA、CLI、Discord、Slackのいずれかで回答またはクローズすると、ほかの転送先も「回答済み」または「閉じられました」へ更新されます。Discordで表示できる選択肢は先頭25件、Slackでは先頭100件までで、それを超える選択肢はCockpit画面から回答します。
Discordとの接続が一時的に切れた場合、Cockpitは可能なら同じGatewayセッションを再開し、切断中のイベントを受け取ります。Discordの3秒の応答期限を過ぎるなどしてボタン操作の受信確認に失敗しても、届いた回答はAskへ反映されます。この場合、Discord側に操作失敗が表示されることがありますが、Askメッセージの回答済み表示とCockpit側の状態を正として確認してください。
状態確認と往復テストはCLIからも実行できます。
cockpit ask relay status --verbose
cockpit ask relay test discord
cockpit ask relay test slack
制約
- 一つのタスクで同時に保持できるAskは一つです。
- 完了済みタスクには作成できません。
- 再開可能なAIエージェントのタスクで使い、Terminalタスクでは使えません。
- Ask作成後、エージェントは回答を待ち、回答へ依存する作業を続けません。
- 質問の添付は最大8ファイル、1ファイル512MB、合計1GBまでです。
- 回答の添付も最大8ファイル、1ファイル512MB、合計1GBまでです。JSONは1ファイル25MBまでです。
- アーカイブと実行形式は添付できません。Cockpitは拡張子、MIME、実サイズ、内容を検証し、元のファイル名とは別のランダムな保存名を使います。
- 添付の本文はプロンプトへ自動展開されません。エージェントにはローカルパスと名前、MIME、サイズのメタデータが渡ります。
CLIからAskを作る
cockpit ask \
--summary "本番公開の準備ができました。テストはすべて成功し、変更はドキュメントだけです。公開しますか?" \
--priority high \
--choice "公開する" \
--choice-description "commit、push、本番デプロイへ進みます" \
--choice "修正する" \
--choice-description "公開せず、追加指示を待ちます"
cat summary.md | cockpit ask --stdin --choice "公開する" --choice "修正する"
cockpit ask --summary-file summary.md --questions-file questions.json
複数行やシェルで解釈される文字を含む説明は、--stdinまたは--summary-fileで渡します。複数質問のJSON配列は--questions-stdinまたは--questions-fileからも読み込めます。標準入力は一つだけなので、説明と質問の両方を外部入力にする場合は、片方をファイルから渡します。同じ値に対してコマンド引数、標準入力、ファイル入力を同時には指定できません。
--summary、--summary-file、または--stdinへJSONを渡した場合、Cockpitは厳密な形式に一致する内容を構造化Askへ復元します。Cockpit Ask形式ではsummaryとchoicesを含むobject、Claude Code形式ではAskUserQuestionのobjectまたはquestions配列を利用でき、コードフェンスで囲まれていても解析します。選択肢、説明、単一・複数選択を復元できないJSONや型が正しくないJSONは変換せず、そのまま説明として表示します。通常は--choiceまたは--questions-stdinを明示してください。
コマンドが成功するとAsk IDが返ります。エージェントはその時点でターンを終え、回答をポーリングしません。
--priority low|medium|high|xhighで優先度を指定できます。cockpit ask listは各Askのpriorityを返します。対応外の値ではAskを作成しません。
CLIから未回答のAskを操作する
v4.39.0以降では、作成とは別に未回答のAskを一覧、回答、クローズできます。
cockpit ask list
cockpit ask list --task <task-id>
cockpit ask answer <ask-id> --choice "公開する"
cockpit ask answer <ask-id> --choice "公開する" --input "本番データを変更する前にもう一度確認してください"
cockpit ask answer <ask-id> --question approach --choice "A案" --question environment --input "まず検証環境" --whole-answer "金曜日までに完了してください"
cockpit ask answer <ask-id> --input "画像を確認してください" --attachment ./screenshot.png
cockpit ask close <ask-id>
list、answer、closeへ--host <host-or-alias>を追加すると、登録済みの別のCockpitコンピューターにあるAskを操作できます。接続先では会員向けRemote Accessを有効にしておく必要があります。リモート操作はリモートのタスクと同じ方法で認証します。同じtailnetで、Tailscaleの所有者が同じコンピューターにはtokenは不要で、それ以外の接続にはペアリング済みBearer tokenが必要です。Tailscale限定モードでは、Tailscale peerでもloopbackでもない接続を拒否します。Askの作成とrelay設定は引き続きローカル専用です。--attachmentのパスは接続先コンピューター上のファイルを指します。
listは質問、選択肢、添付メディアの情報を確認する操作です。answerは利用者の代理として回答し、作成元のタスクを再開します。一つの質問では、--choiceまたは--choice-indexと--inputを組み合わせ、選択と補足文を一緒に送ります。複数質問では、--question <id>ごとに回答をまとめ、Ask全体へ適用する返信がある場合は--whole-answerを加えます。--attachmentはローカルファイルを作成元タスクの管理領域へ取り込み、UIからの回答添付と同じ形式で渡します。複数質問では対象の--questionの後へ添付を指定し、最初のグループより前の添付はAsk全体への返信に属します。
音声エージェントが利用者の明示的な判断を伝える場合など、質問の文脈と回答する権限が明らかなときだけ代理回答します。メディア付きのAskは、利用者または代理回答者が実際に内容を確認するまで回答しません。
closeは未回答のAskを取り除くだけで、作成元のタスクを再開しません。古いAskを整理するための操作であり、必要な判断を省略するためには使いません。