mcpField
A
ask-ui

ask-ui

github.com/angus221Agent 工作流776 次安装11 周前更新
代码仓库

关于 ask-ui

Ask UI 是用于收集问题答案的呈现与持久化适配器,供调用它的工作流使用。它支持多轮会话,并在本地浏览器或服务器不可用时回退到文本格式。

主要功能

  1. 01通过本地表单收集答案
  2. 02支持会话与多轮提问
  3. 03保存问题集及提交结果
  4. 04无法启动时回退为文本

适用场景

  1. 01同时收集多个独立问题的答案
  2. 02为头脑风暴或确认流程收集输入
  3. 03继续处理分轮提交的问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/angus221/ak.skills_sample --skill ask-ui

安装后在 Claude Code 中输入/ask-ui确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

design-qa.md
agents/
openai.yaml
assets/app/
app.js
fallback.css
index.html
references/
example-question-set.json
schema.md
scripts/
ask-ui.mjs
self-test.mjs
scripts/adapters/
claude-code.mjs
codex-app-server.mjs
process-utils.mjs

详细介绍

提问 UI

将提问 UI 用作呈现和持久化适配器。问题生成和推理应由调用方工作流处理。

判断是否使用 UI

如果当前轮次中至少有两个用户现在就能回答的独立问题,请使用 UI。将存在依赖关系的问题留到后续轮次。只有一个问题时,直接在对话中提问。

如果某一轮包含两个以上问题,在执行 grill-me、grill-with-docs、头脑风暴或其他确认与问题收集工作流时,始终使用 UI。

如果本地服务器或浏览器无法启动,请回退到调用方工作流的常规文本格式。

提问并等待回答

  1. 将包含此 SKILL.md 的目录解析为 ASK_UI_SKILL_DIR。

  2. 创建 JSON 前,先阅读 references/schema.md。

  3. 创建一个 QuestionSet JSON 文件。新任务请省略 sessionId;后续轮次请复用当前的 sessionId 并设置 basedOnRound。

  4. 运行前台命令,并保持工具调用处于活动状态,直到命令退出:

    node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs ask --input <questions.json>
    
  5. 命令会将就绪详情和本地 URL 写入 stderr、打开表单并等待。不要结束 Agent 轮次,也不要要求用户回复“已提交”。

  6. 用户提交后,解析写入 stdout 的单个 JSON 结果,并立即继续发起此流程的工作流。

  7. 如果还需要提出更多独立问题,请再次调用 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 服务器,并立即返回。

用户说“已提交”“提交好了”或“答完了”时:

  1. 从本对话中最新的 ask-ui-session 标记中恢复 sessionId。

  2. 运行:

    node <ASK_UI_SKILL_DIR>/scripts/ask-ui.mjs resume --session <sessionId>
    
  3. 如果结果为 submitted,请使用其中的问题和答案继续原工作流。

  4. 如果还需要提出更多独立问题,优先返回前台 ask 命令,使用相同的 sessionId,并将 basedOnRound 设置为已处理的轮次。只有在仍无法直接等待时,才再次使用 create。

  5. 如果没有后续问题,请运行:

    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

评论

支持 Markdown