Skip to content

Pi chat: ask_user from @eko24ive/pi-ask shows no prompt card, answerable only in the terminal #1202

Closed

Description

@chobijaeyu

What happened

  1. In a pi pane with the @eko24ive/pi-ask extension installed, the agent calls the ask_user tool.
  2. In the terminal, pi shows the interactive question form (options, multi-select, preview pane).
  3. In the web UI chat view, only the tool call line > ask_user appears. No prompt card is shown, and the question can't be seen or answered from the browser. I have to switch to the terminal to answer.

Expected: a prompt card with the question and its options, like for pi's built-in select/confirm/input dialogs or OmO's ask_user_question.

Likely cause: server/prompt.ts parsePiDialog only recognizes pi's built-in dialogs by their hint line (↑↓ navigate enter select escape/ctrl+c cancel / enter submit …). pi-ask renders its own component through ctx.ui.custom() with a different layout and hint line, so the parser never matches. Support could come from parsing pi-ask's form, or from reading the open ask_user tool call from the pi session file (the way omo-ask.ts does for OmO).

How often

Every time

herdr web ui version

0.4.5 (5d18c53)

How it runs

herdr plugin

Server PC

macOS (Apple Silicon), herdr 0.9.3

Agent and PC

pi 1.3.0 (@earendil-works/pi-coding-agent) + @eko24ive/pi-ask 1.2.0, local PC

Screenshots or logs

The chat view shows only the tool call line above the composer:

> ask_user

[ Message Pi... ]

Activity

  1. bstu-j-yang commented on Oct 16, 2026

    @bstu-j-yang
    Image
  2. devswha commented on Oct 23, 2026

    @devswha
    Owner

    Triage notes (2026-10-23). Deferred from this fix wave; no code change yet.

    Cause confirmed. @eko24ive/pi-ask draws its own form through ctx.ui.custom(). No dialog reader recognizes it: parsePiDialog only knows pi's built-in dialogs. So the chat shows only the ask_user tool line.

    What a fix can rely on (checked in the 1.2.0 source):

    • Pending call. src/pending-ask.ts treats an ask_user call as open when all of these hold:

      • It is in an assistant message with stopReason: "toolUse".
      • No toolResult with that toolCallId follows it.
      • No custom entry of type ask:pending-dismissed names it.

      The arguments are { title?, questions: [{ id, label?, prompt, type?: "single"|"multi"|"preview", options: [{ value, label, description?, preview?, recommended? }] }] }. Every question also gets an internal Type your own option.

    • Answer channel. docs/remote-events.md says: "Do not use terminal keystroke automation." The supported way to answer is pi.events from an extension in the same pi process:

      • @eko24ive/pi-ask:started carries flowId, toolCallId and the questions.
      • @eko24ive/pi-ask:submit takes answers by question id and option value.

      Its keymaps are user-configurable (src/constants/keymaps.ts).

    Why it is not a small change:

    • A card answered by keys needs a new responder in server/dialogs/shared.ts and a reader in server/dialogs/index.ts.
    • It overlaps open PR fix(prompt): support Pi rpiv question cards and safe navigation #1714 (rpiv ask_user_question). That PR changes the same readKnownPrompt path in server/prompt.ts, server/dialogs/shared.ts and server/dialogs/index.ts. It also already uses server/dialogs/pi-ask.ts for rpiv and adds the pi transcript lookup (piTranscriptPath + OmoAskReader).

    Two possible directions:

    1. After fix(prompt): support Pi rpiv question cards and safe navigation #1714 merges, add a keystroke-driven card (like OmO/rpiv) under a distinct name such as server/dialogs/pi-ask-user.ts, reusing fix(prompt): support Pi rpiv question cards and safe navigation #1714's transcript plumbing. Users install nothing extra, but this goes against pi-ask's stated contract, and remapped keys break it.
    2. A small Ovis pi extension that bridges pi.events, installed the way scripts/install-gjc-integration.ts installs the GJC extension. This is the path pi-ask supports and the sturdier one, but it is a larger feature.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions