Skip to content

Approvals & questionnaires

When the agent needs a human decision, Blue answers with full-width pull-up panels. Panels mount by editor-slot replacement: the panel genuinely takes over the editor's dock slot — the editor leaves the tree (state intact), and only the two-row footer remains below the panel. The editor frame never peeks out from behind. Closing the panel restores the editor with focus and draft intact.

Approval panel

When a tool call needs authorization, a four-choice panel opens: an amber rule + ▶ Approve {tool}? title + numbered choices:

1. Allow once
2. Allow {tool} for this session
3. Reject
4. Reject with feedback

(Number keys select directly; ↑↓ + Enter navigate with wrap; the selected row carries a pointer.)

  • Session-level remember — choice 2 records the tool in a session allowance table; later requests for the same agent + tool skip the panel entirely and pass through.
  • Reject with feedback — choice 4 swaps the menu for an inline reason editor; submitting steers the agent with a user message (User rejected …: <reason>), so the agent sees why. An empty reason is a plain Reject (no steering).
  • Escape rejects; an aborted request signal settles as cancelled.
  • FIFO serialization — concurrent approval requests queue; one panel shows at a time.

Requests from other agents (not the one mounted in the UI) don't open a panel — they pass down the waterfall to the next answerer.

Questionnaire panel

ctx.userQuestions requests (clarifying questions and the like) open a tabbed questionnaire, one tab per question:

  • the tab row shows each question's header (or Q{i+1}); the active tab is highlighted, answered tabs (✓), unanswered (○);
  • Tab / Shift-Tab move between questions; single-choice via ↑↓ + Enter, multi-choice via Space + Enter;
  • every question ends with a fixed Other pseudo-entry opening an inline editor; the free text becomes the answer;
  • questions without options go straight to the editor;
  • answering everything resolves automatically; Escape rejects the request, an aborted signal closes and rejects it too.

Questionnaire answers enter the session as user-visible content the model can see.

Preview · v0.1.0-rc.1