关于 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详细介绍
提问 UI
将提问 UI 用作呈现和持久化适配器。问题生成和推理应由调用方工作流处理。
判断是否使用 UI
如果当前轮次中至少有两个用户现在就能回答的独立问题,请使用 UI。将存在依赖关系的问题留到后续轮次。只有一个问题时,直接在对话中提问。
如果某一轮包含两个以上问题,在执行 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 结果,并立即继续发起此流程的工作流。
-
如果还需要提出更多独立问题,请再次调用
ask,使用相同的sessionId,并将basedOnRound设置为返回的轮次。没有后续问题时,完成此会话。
首个直接轮次会打开浏览器。同一会话中的后续轮次会复用持久运行的服务器、稳定 URL 和现有浏览器页面;页面会自动检测并选择新轮次。如果用户关闭了该页面,请传入一次 --open 以重新打开。
只有在浏览器打开由其他方式管理时,才使用 --no-open。只有在必须使用固定的 localhost 端口时,才使用 --port <number>。
手动回退与恢复
如果前台工具调用无法保持活动状态、本地浏览器无法访问临时服务器,或需要恢复中断的直接轮次,请使用分离式工作流:
node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs create --input <questions.json>
解析返回的 JSON。在对话中包含其中的 URL 和一个可见标记:
ask-ui-session: <sessionId>
告知用户提交表单后,只需回复“已提交”。create 命令会启动或复用一个分离运行的 localhost 服务器,并立即返回。
用户说“已提交”“提交好了”或“答完了”时:
-
从本对话中最新的
ask-ui-session标记中恢复sessionId。 -
运行:
node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs resume --session <sessionId> -
如果结果为
submitted,请使用其中的问题和答案继续原工作流。 -
如果还需要提出更多独立问题,优先返回前台
ask命令,使用相同的sessionId,并将basedOnRound设置为已处理的轮次。只有在仍无法直接等待时,才再次使用create。 -
如果没有后续问题,请运行:
node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs complete --session <sessionId>
如果对话中没有可用的标记,请运行不带 --session 的 resume。如果返回多个候选项,请根据当前主题、工作区、标题和提交时间推断最匹配的项。只有在确实无法判断时才询问用户。
用户重复发送“已提交”时,不得创建重复轮次。只有成功读取一个 submitted 轮次后,才能创建新轮次。
保持会话连续性
- 一个任务对应一个 Session。
- 一批问题对应一个 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