Tool popup
Overview
A floating popover opened from the chat view top bar lets the user inspect and change which tools are available to the model, their authorization modes (Off/Ask/Allow), and toggle MCP servers and agent files — all without leaving the chat view. The mobile-first popover opens below the complete chat header, remains within the visual viewport, and scrolls its tool list independently.
Usage
Tap the globe icon (🌐) in the chat view top bar.
The popup appears below the header showing the same hierarchical tool tree that is also rendered in the chat transcript's Tools card. Custom actions are no longer listed here — they moved to the file toolbar dropdown menu (see custom-actions.md).
Each tool group can be expanded/collapsed with the chevron; each tool has a checkbox to toggle it on/off for the current chat.
For built-in tool groups (shell, subagent, ask_user, task, progress updates, file tools), an Off/Ask/Allow segment control is shown inline. These segments are chat-scoped: a tap pins the mode for THIS chat only (stored on the chat record) and never rewrites the project's
.mouaif.json. Project-wide modes are edited in Settings → Project. The popup footer says so.MCP servers appear as their own group; the parent checkbox flips all that server's tools in the per-chat filter at once (the server itself is always on). MCP authorization renders exactly like the chat Tools card and project settings: each server row carries an Off/Ask/Allow segment for that server's override — again chat-scoped, layered over the project's
.mcp.jsonvalue. No separate override-reset button is shown in the compact popup; the chat surfaces drop this chat's own entry before writing the tapped mode, so the project value always remains the fallback.A stopped-but-enabled MCP server also shows a ▶ start control on its row. Tapping it starts that server on demand (the same action the transcript Tools card exposes), so the server's live tools appear without waiting for the next tool call. While the server is starting, the control pulses and is disabled; the row flips to its live state when the tools are discovered. If the start fails (bad command, missing binary, handshake timeout), the server's error message appears in red under the row instead of the row silently falling back to stopped. A server whose authorization is Off never shows the control — it is not startable.
Agent files found at the project root appear under the tool list as an always-expanded group; every discovered file is shown with its own checkbox. Toggling any agent-file checkbox applies the chat-level Use agent files state to all discovered files.
Skills found in
.agents/skills/*/SKILL.mdappear below agent files as an always-expanded group with a checkbox next to each skill. Each skill row toggles that one skill for the current chat (stored on the chat'sdisabledSkillslist, siblings untouched); the group checkbox is the all-on / all-off shortcut for the chat.Tools that have been called in the current chat session show a dot badge (●).
Changes are persisted immediately — there is no "Save" button. Saving authorization from the popup updates the transcript's Tools card in place and vice versa, because both surfaces read the same
toolAuth/mcpAuthchat state and a save re-renders both.The Off/Ask/Allow choices here belong to this chat. They are saved on the chat record (
chat.toolAuth, app SQLite store) throughPUT /api/tools/authorizationwithscope: 'chat'— the project's.mouaif.json/.mcp.jsonare never written from a chat. A tool whose mode you change here keeps that mode when you reopen the chat, and the chat's other tools are unaffected. See tool-authorization.md.