$ cat ~/map/pi-ask-user-question.md
pi-ask-user-question
为 pi 代理添加兼容 Claude Code 的 ask_user_question 工具,让模型在任务中弹出结构化多选题。
extensions✓ 10月16日
事实速查
- GitHub Stars
- ★ 0
- Forks
- 0
- 许可证
- MIT
- npm / 月
- —
- 最后推送
- 2026年8月27日
安装
pi install git:github.com/96tommykim/pi-ask-user-question## 速览
为 pi 添加兼容 Claude Code 的 ask_user_question 工具——任务中途弹出结构化多选题并自带 Other 自由输入——外加一道失败即关闭的运行时门禁:外部或破坏性 bash 命令先问后放。
## 要点
- $ask_user_question 的 schema 与 Claude Code 的 AskUserQuestion 工具兼容:1–4 个问题,每个 2–4 个带标签与描述的选项,可选 multiSelect,且每个问题自动附带 Other 自由输入。
- $TUI 下,一次调用的所有问题渲染在同一个带标签页的对话框里——方向键切换问题、各自保留光标与选择、已答问题打上实心标记;无 TUI 但支持对话框的 RPC 会话回退到 pi 内置的 ctx.ui.select / ctx.ui.input,逐题询问。
- $外部动作门禁:tool_call 处理器在 bash 执行任何外部或破坏性命令前先询问——git push、gh pr/issue 的创建编辑合并关闭、gh api 写操作、rm -r、sudo——用户不选 Approve once 即拦截。批准按调用生效,跨调用不留任何记忆。
- $失败即关闭:无可对话框 UI 的会话(-p、JSON 模式)与任何子代理(PI_SUBAGENT_CHILD=1)一律拦截并给出上报具体命令的指引;Escape、中止、对话框出错与自由输入答案都视为未批准。
- $任何 UI 打开前先做输入校验:问题文本与 header 非空、2–4 个选项且标签非空,所有渲染字段拒绝终端控制字符(包括 ANSI/APC 转义)。
## 常见问题
Q 答完一道题就能放行后续命令吗?
不能——提问归工具,放行归门禁。executionMode 的 sequential 只给该消息的工具调用批次排序,从不取消或抑制后续兄弟调用;批准由独立的运行时门禁强制执行,模型排不出绕过它的顺序。
Q 无头会话里会怎样?
工具要求具备对话框能力的 UI:子代理必定先失败并上报父代理、由父代理向用户提问;无头非子代理会话则带着改为纯文本提问的指引失败,而不是挂在一个永远弹不出来的对话框上。
## 参考链接
## 相关条目
最后更新: 2026年8月31日