@fgladisch/pi-user-select
Multiple-choice user selection tool extension for Pi
Package details
Install @fgladisch/pi-user-select from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@fgladisch/pi-user-select- Package
@fgladisch/pi-user-select- Version
0.1.1- Published
- Apr 30, 2026
- Downloads
- not available
- Author
- fgladisch
- License
- MIT
- Types
- package
- Size
- 10.2 KB
- Dependencies
- 0 dependencies · 1 peer
Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@fgladisch/pi-user-select
Registers user_select tool so LLM (or skills) can ask human a multiple-choice
question.
Use when workflow needs explicit user input to disambiguate, confirm, or pick between mutually exclusive paths instead of guessing.
Install
pi install npm:@fgladisch/pi-user-select
No config, no slash commands.
Tool schema
| Field | Type | Required | Description |
|---|---|---|---|
question |
string |
yes | Question/prompt shown to user. |
options |
Option[] |
yes | Mutually exclusive choices ({ label, description? }, ≥ 1). |
allowCustom |
boolean |
no | When true, append a "(Type custom answer)" free-text entry. |
Example:
{
"question": "Which package manager should I use?",
"options": [
{ "label": "npm" },
{ "label": "pnpm", "description": "Faster, content-addressable" },
{ "label": "yarn" }
],
"allowCustom": true
}
Behavior
- Interactive UI: shows question, numbered options (descriptions inline),
and optional
(Type custom answer)entry. - Non-interactive (
pi -p, JSON mode): throws so LLM sees error result and stops looping on tool that has no human to answer it. - Cancellation (Esc / null / whitespace-only custom answer): returns
non-error result with
answer: nullandcancelled: true.
Tool result text:
| Outcome | content[0].text |
|---|---|
| Pre-baked option | User selected: <n>. <label> |
| Free-text answer | User wrote: <trimmed text> |
| Cancelled | User cancelled the selection |
| Empty custom text | User submitted an empty custom answer |
details includes structured fields (question, options, answer,
wasCustom, cancelled) for renderers and downstream skills.