ask-ui について
Ask UI は、呼び出し元のワークフローで回答を集めるための表示・永続化アダプターです。複数ラウンドのセッションに対応し、ローカルサーバーやブラウザーを起動できない場合はテキスト形式に切り替えます。
主な機能
- 01ローカルフォームで回答を収集
- 02セッションと複数ラウンドに対応
- 03質問セットと回答を保存
- 04利用できない場合はテキストに切り替え
活用シーン
- 01複数の独立した質問への回答収集
- 02ブレインストーミングや確認のための入力収集
- 03ラウンドごとの回答を使ったワークフロー継続
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ angus221/ ak.skills_sample --skill ask-uiインストール後、Claude Code で/ask-uiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
design-qa.mdagents/openai.yamlassets/app/app.jsfallback.cssindex.htmlreferences/example-question-set.jsonschema.mdscripts/ask-ui.mjsself-test.mjsscripts/adapters/claude-code.mjscodex-app-server.mjsprocess-utils.mjs詳細
Ask UI
Ask UI をプレゼンテーションおよび永続化アダプターとして使用します。質問の生成と推論は、呼び出し元のワークフローで行います。
UI を使用するかどうかを判断する
現在のラウンドに、ユーザーが今すぐ回答できる独立した質問が 2 つ以上ある場合は、UI を使用します。依存関係のある質問は、後のラウンドに回します。質問が 1 つだけの場合は、会話内で直接尋ねます。
1 ラウンドに質問が 2 つを超える grill-me、grill-with-docs、ブレインストーミング、その他の確認・質問収集ワークフローでは、必ず UI を使用します。
ローカルサーバーまたはブラウザーを起動できない場合は、呼び出し元のワークフローで通常使用するテキスト形式に切り替えます。
質問をして、回答を待つ
-
この
SKILL.mdが格納されているディレクトリをASK_UI_SKILL_DIRとして解決します。 -
JSON を作成する前に、references/schema.md を読みます。
-
QuestionSet JSON ファイルを作成します。新しいタスクでは
sessionIdを省略し、フォローアップのラウンドではアクティブなsessionIdを再利用し、basedOnRoundを設定します。 -
フォアグラウンドコマンドを実行し、終了するまでツール呼び出しをアクティブなままにします。
node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs ask --input <questions.json> -
このコマンドは準備状況の詳細とローカル URL を stderr に出力し、フォームを開いて待機します。Agent のターンを終了したり、ユーザーに「已提交」と返信するよう求めたりしないでください。
-
ユーザーが送信したら、stdout に出力された単一の JSON 結果を解析し、元のワークフローをすぐに続行します。
-
さらに独立した質問が必要な場合は、同じ
sessionIdを指定し、返されたラウンドをbasedOnRoundに設定して、再度askを呼び出します。追加の質問がなくなったら、セッションを完了します。
最初の直接ラウンドではブラウザーが開きます。同じ Session のフォローアップラウンドでは、永続サーバー、固定 URL、既存のブラウザーページが再利用されます。ページが新しい Round を検出し、自動的に選択します。ユーザーがそのページを閉じた場合は、--open を一度指定して再度開きます。
ブラウザーを別途開く場合に限り、--no-open を使用します。固定のローカルホストポートが必要な場合に限り、--port <number> を使用します。
手動でのフォールバックと復旧
フォアグラウンドのツール呼び出しをアクティブなままにできない場合、一時サーバーにローカルブラウザーからアクセスできない場合、または中断した直接ラウンドを復旧する場合は、デタッチされたワークフローを使用します。
node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs create --input <questions.json>
返された JSON を解析します。会話内に URL と視認できるマーカーを含めます。
ask-ui-session: <sessionId>
フォームを送信したら「已提交」とだけ返信するよう、ユーザーに伝えます。create コマンドはデタッチされたローカルホストサーバーを起動または再利用し、すぐに戻ります。
ユーザーが「已提交」、「提交好了」、または「答完了」と言ったら:
-
この会話内の最新の
ask-ui-sessionマーカーからsessionIdを取得します。 -
次を実行します。
node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs resume --session <sessionId> -
結果が
submittedの場合は、その質問と回答を使用して元のワークフローを続行します。 -
さらに独立した質問が必要な場合は、
sessionIdを再利用し、処理済みのラウンドをbasedOnRoundに設定して、フォアグラウンドのaskコマンドに戻る方法を優先します。直接待機を引き続き利用できない場合に限り、再度createを使用します。 -
追加の質問がない場合は、次を実行します。
node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs complete --session <sessionId>
会話内のマーカーを利用できない場合は、--session を指定せずに resume を実行します。候補が複数返された場合は、現在のトピック、ワークスペース、タイトル、送信時刻から最適な候補を推定します。本当に判別が難しい場合に限り、ユーザーに尋ねます。
「已提交」というメッセージが繰り返されても、重複するラウンドを作成してはいけません。新しいラウンドを作成できるのは、submitted のラウンドを正常に読み取った後だけです。
セッションの継続性を維持する
- 1 つのタスクを 1 つの Session とします。
- 質問の各セットを 1 つの Round とします。
- 同じタスクのすべてのラウンドで
sessionIdを再利用します。 - 送信済みの質問や回答を上書きしてはいけません。
- 修正と追加の確認は、新しい Round に含めます。
- 新しいタスク、完了済みのタスク、または明示的な再開の場合に限り、新しい Session を開始します。
オプションのアクティブな起動
Ask UI は、Claude Code と Codex App Server 向けのオプションの起動メタデータをサポートしています。これは必須ではなく、機能強化として扱ってください。
- 自動起動は、ユーザーの同意がある場合にのみ有効にしてください。
- Claude Code には、記録済みのセッション ID が必要です。
- Codex には、ホストから提供されるスレッド ID が必要です。Codex のスレッド ID を推測してはいけません。
- アダプターが失敗した場合は、回答を保持し、手動の「已提交」ワークフローに戻してください。
- 直接の
askモードでは、待機中のプロセスがすでに応答経路となっているため、起動アダプターは呼び出されません。
便利なコマンド
node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs ask --input <questions.json>
node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs create --input <questions.json>
node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs status --session <sessionId>
node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs serve
node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs complete --session <sessionId>
node <ASK_UI_SKILL_DIR>/scripts/self-test.mjs