zed/assets/settings
Ethan Williams 632d805d64
agent: Add ask_user tool using elicitation forms (#61497)
## Summary

Adds a first-party `ask_user` tool to Zed's native agent
(`crates/agent`) that lets the agent ask the user a question and get an
answer back through a proper **elicitation form** rather than free-form
chat text.

This is a step towards the interactive-question experience requested in
[discussion
#48784](https://github.com/zed-industries/zed/discussions/48784)
(implement the ACP elicitation spec for agent questions). Zed already
renders elicitation forms client-side; this wires the native agent up to
that existing rail so the agent can drive single-select and/or free-text
prompts.

## What it does

The tool takes:

- `question` — the prompt shown to the user
- `options` — optional list of selectable choices (single-select)
- `allow_free_text` — whether the user may type a custom answer instead
of picking an option

The agent decides the shape of each question:

| `options` | `allow_free_text` | Result |
| --- | --- | --- |
| 2+ | `false` | Single-select only |
| 2+ | `true` | Single-select with a free-text "other" field |
| empty | `true` | Free-text only |

A typed answer takes precedence over a selected option, and the tool
always resolves (a cancelled or failed elicitation is reported back to
the agent rather than hanging).

## Demo



https://github.com/user-attachments/assets/9d438d87-af65-4fa2-b500-b1232007d0a0


## Implementation

- `thread.rs` — new `ThreadEvent::Elicitation(ElicitationRequest)`
variant plus `ToolCallEventStream::request_elicitation`, mirroring the
existing `prompt_for_decision` permission rail.
- `agent.rs` — handles the elicitation event by building a
session-scoped `acp::CreateElicitationRequest` and routing it through
`AcpThread::request_elicitation`, piping the response back to the tool.
- `tools/ask_user_tool.rs` — the tool itself, including schema
construction and response extraction.
- Registered in the `write` and `ask` profiles and excluded from the
tool-permissions setup UI.

No client-side UI changes were needed — the existing elicitation form
rendering handles it.

## Tests

`cargo test -p agent ask_user` — 5 unit tests covering schema
construction, validation, and accept/decline/cancel handling.

Release Notes:

- Added an `ask_user` tool that lets the agent ask the user a question
with selectable options and/or free-text input, rendered as an
elicitation form
2026-08-17 00:36:02 +00:00
..
default.json agent: Add ask_user tool using elicitation forms (#61497) 2026-08-17 00:36:02 +00:00
default_semantic_token_rules.json Distinguish parameters from normal variables in semantic token highlighting (#60949) 2026-07-14 12:32:54 +00:00
initial_debug_tasks.json Add trailing commas to all asset jsonc files following #43854 (#44891) 2025-12-15 15:09:52 +00:00
initial_local_debug_tasks.json Simplify debug launcher UI (#31928) 2025-06-02 21:24:08 +00:00
initial_local_settings.json Fix broken link in initial settings (#15119) 2024-07-25 08:25:27 -04:00
initial_server_settings.json Add trailing commas to all asset jsonc files following #43854 (#44891) 2025-12-15 15:09:52 +00:00
initial_tasks.json worktree_picker: Improve discoverability of tasks as a creation setup mechanism (#61148) 2026-07-20 11:17:21 +00:00
initial_user_settings.json Add trailing commas to all asset jsonc files following #43854 (#44891) 2025-12-15 15:09:52 +00:00
initial_worktree_setup_tasks.json worktree_picker: Improve discoverability of tasks as a creation setup mechanism (#61148) 2026-07-20 11:17:21 +00:00