set_theme,
set_sidebar, show_workspace_artifact, manage_workspace,
set_immersive_mode and open_app. The server returns a success marker and the
client applies the effect. Mira must never report an effect that no client
applies.
Capability declaration
Each client declares the effects it applies withclientCapabilities:
The server removes undeclared UI tools from the registry, tool discovery and
forced tool steps. When a forced tool is unavailable, the step falls back to
discovery instead of requiring an impossible call. Every request gets a short
prompt note naming the effects its client cannot apply. For
example, without
artifact_panels Mira uses open_app or answers in chat.
Unknown capability names are ignored so newer clients stay compatible. Data
tools are never gated by capabilities; permissions still apply.
An absent declaration means no UI effects, on every transport. Only clients
that explicitly declare an effect receive its tool:
- Web Mira chat declares
theme,sidebar,artifact_panels,immersiveandnavigate. - The shared AI chat route, including the retained legacy mobile transport,
the native
/chat/conversations/:id/messagesroute and canonical Live (/api/v1/assistant/live/tools/execute) forward only what the client sends. Without a declaration they expose no UI tools, so older mobile builds loseset_themein chat until they update. That is preferable to Mira claiming effects nobody applies. - AI agents and Mind have no client that applies markers and get no UI tools.
- Canonical Live also resolves the user timezone (client value, then saved personal, then workspace preference).
- Web dashboard Live declares
open_appas a client function, alongside the existing theme, sidebar and panel functions.
open_app
open_app switches to another app in the current workspace. Destinations:
home, assistant, tasks, habits, calendar, finance, time_tracker,
mail, drive, meet, notes, chat. It only navigates; it does not read or
change data. Each client maps destinations to its own routes. Web uses
/:wsId/<segment>, and Web’s proxy redirects satellite segments to their owning
app. Web ignores markers with an unknown destination or an unsafe workspace
segment. Web Live navigation leaves the Live page.
Regression coverage
packages/ai/src/tools/mira-client-capabilities.test.ts: resolution, gating, discovery, prompt note.packages/ai/src/tools/mira-sdk-tool-search.test.ts: forced-tool fallback.packages/ai/src/tools/executors/theme.test.ts:open_appmarker.packages/ai/src/chat/google/route-mira-runtime.test.ts: declared capabilities reach the tool context and prompt.apps/web/.../components/use-mira-ui-actions.test.tsx: Web navigation and unsafe markers.apps/web/.../assistant/use-live-tools.test.tsx: Web Liveopen_app.apps/web/src/app/api/v1/assistant/live/tools/execute/route.test.ts: canonical defaults and timezone.- The native messages
route.test.ts: forwarded and default capabilities.