# Approvals and questions

> Tool approvals, file-edit reviews, plans and questions in the desktop app, and the keys that answer them.

The agent waits until you answer. Which calls ask, the safelist and interaction modes: [tool approvals](https://zidane.si/docs/approvals.md). With the [daemon](https://zidane.si/docs/daemon.md) on, you can answer from any window or from the TUI. The first answer wins.

## Approve a tool call

A bar above the composer shows the tool and its input, and names the sub-agent when one issued the call.

| Button | Key | Does |
| - | - | - |
| Allow once | `cmd+enter` | Runs this call |
| Always allow | `cmd+shift+enter` | Runs it and adds it to this project's safelist |
| Deny | `esc` | Refuses it. The agent gets the refusal. |

## Review a file edit

`edit`, `multi_edit` and `write_file` open a review with the diff instead of the bar:

| Button | Key | Does |
| - | - | - |
| Allow | `a` | Applies the edit |
| Allow for session | `s` | Applies it and stops asking for this tool until the session ends |
| Always allow | `p` | Applies it and adds it to the project's safelist |
| Deny | `d` or `esc` | Refuses it |

An edit with several hunks lists each hunk with a checkbox. If you untick some, Allow becomes Apply selected (2 of 3). If you untick all, the button reads Allow (none selected) and is off, so use Deny. The agent gets the list of hunks that you applied and denied.

## Answer a plan

`present_plan` shows a plan card. This demo's buttons work.

| Button | Does |
| - | - |
| Approve | The agent carries out the plan |
| Revise… | You say what to change. The agent comes back with a new plan. |
| Reject… | Stops the run. A note tells the agent why. |

## Answer questions

`ask_user` sends one or more questions in a form. Answer the required ones, then click Send answers.

| Question | You answer with | Required by default |
| - | - | - |
| Select | One choice | Yes |
| Select, multiple | One or more choices. The agent can tick some in advance. | Yes |
| Confirm | Yes or no | Yes |
| Text, text area | A line or a few paragraphs | No |

Additional instructions, under the questions, adds to your answers or overrides them. Dismiss continues without answering. Settings › Agent › Defaults › Interaction mode decides whether the agent asks at all ([interaction modes](https://zidane.si/docs/approvals.md#interaction-modes)).

## Where requests wait

| Request | Shows in |
| - | - |
| Tool call | The bar above the composer |
| File edit | The review dialog |
| Plan or question | The Inbox tab of the side panel, with a highlighted badge in the composer that opens it ([badges](https://zidane.si/docs/desktop-composer.md#badges)) |

A new plan or question opens the Inbox tab, so you answer while reading the conversation. Older requests stack under the current one, folded to a line. A session with pending requests shows a count on its Inbox tab and a status dot in the sidebar.

![The Inbox side panel with three pending questions from the agent.](https://zidane.si/captures/panel-inbox-light.webp)

## Requests from a server

A session on a [saved server](https://zidane.si/docs/desktop-hosts.md) sends requests to your window the same way, and your answer goes back to the server. Removing the server drops its pending requests and closes its chats.

## After a crash

The app saves pending approvals on disk and shows them again at the next launch. The run that asked has ended, so your answer only clears the request. Always allow still adds the safelist entry. To revoke it, go to Settings › Agent › Approvals & safety › Safelisted commands.

## Reference

- [`QuestionForm`, `PlanCard`, `InteractionCard`, `HostInteractions`](https://zidane.si/docs/reference/ui-chat-interactions.md).
- [Decisions](https://zidane.si/docs/decisions.md): answers from a model instead of you, for hooks and extensions.
