Health
The System screen reads the server’s liveness probe. A greenHealthy badge
confirms the server is up and answering. The demo instance below shows a
populated Healthy badge.


The System screen: a populated 'Healthy' badge from the server's liveness probe.
The kinds table
The System screen also reads the server’s kinds summary — the plugin kinds the server knows about and, for each, whether it is active (a provider is configured and running), running on a default (the built-in fallback is in use), or off (the kind is not configured). It is the fastest way to confirm which providers a running server actually resolved — for example, which identity and accounts providers the configured auth-provider chain brought up, or whether file loading is installed (thefiles row). The same summary is
served at GET /api/system/kinds and printed in the server’s startup log — see
live operations.


The System screen's kinds table: each known plugin kind with its active, default, or off status.
Members
Administration › Members is the Studio-core surface for a server’s human accounts. It lists people and pending invitations aggregated across every configured accounts provider — read through the accounts-provider contract, so a provider needs no bespoke Studio page to appear here. Each row carries an opaque routing handle back to the provider that owns it. The page performs each provider’s own declared member actions — invite a person, change a role or access, remove a member, send a login link, cancel an invitation — through a single generic invoke door. The page renders header buttons and each row’s action buttons from the provider’s action declarations and reads no field of any action’s input or result; a provider adds or changes an action by changing its declaration alone. The role picker reflects the current editable role set: the seeded admin/editor/viewer plus any role an admin has created withtai roles.
The page governs only the usr-* human principals. Machine keys are managed on
the API keys surface, and a principal provisioned directly
through the raw access-control policy routes is
governed there — see the
principal-type split.
The page has two cards. People lists each member’s email, role, status and
creation date, and Pending invitations lists each invitation with when it was sent
and when it expires; in both, a Provider column shows the display name of the
provider that owns the row, and an Actions column appears where a row has actions. A member’s
role reads No role when that member’s access was set directly rather than from a
role, and Mixed roles when the person’s logins hold different roles; the badge lists
each login’s role with “Give every login of this person the same role.” The status
reads Active, Disabled or Partially disabled. With no people and no
invitations the page reads “No members yet”; otherwise an empty card says “No people have been added
yet.” or “Outstanding invitations appear here until they are accepted or expire.”
Each page-level action button carries a badge with the name of the provider that performs
it — the display name that provider declares — and its dialog names that provider too.
An action opens a dialog titled with its label: a form drawn from the action’s declared
input, or “Run this action now?” for an action that takes none. A destructive action
asks once more (“This is a destructive action. Confirm to proceed.”) and runs on
Confirm. A result that carries
a secret shown only once says “Shown once — copy it now; it cannot be retrieved again.”


The Members page: human accounts and pending invitations aggregated across every configured accounts provider, with the provider-declared member actions.
The operations dashboard
The Dashboard summarises the server’s monitoring backend — total runs, cost, latency, and token counts over a time range, with a per-model breakdown and a trend chart. It answers “what has this server been doing” at a glance. The demo instance below is populated from a monitoring backend seeded with example runs, so the summary tiles, trend chart, and per-model breakdown show representative data. With no monitoring backend registered, the Dashboard renders a clean empty state instead. The per-model breakdown distinguishes three cases: it shows the bars when per-model data is available, a plain empty state when the range holds no per-model activity, and a distinct “Per-model breakdown is unavailable for this range.” notice when the per-model figures could not be computed — so an unavailable breakdown is never mistaken for an idle one.

The observability Dashboard: run, cost, latency, and token summaries.


The Dashboard's per-model breakdown showing its unavailable notice when the figures could not be computed for the range.
Settings and environment
The Settings and Environment tabs are the deployment’s admin-owned config store: the server’s configuration mode, its settings schema, and the stored environment values — one store holding the stored environment plus each settings class’s values, including deployment secrets such as the connector encryption key. Each subsystem’s settings — connector crypto, engine config, store connections — surface as an editable form. Because that store is admin-owned, both tabs are admin-only; an editor or viewer configures each feature through the feature’s own screen, never here — see user types and permissions. A setting that the environment of any server or backend process of the deployment sets belongs to the deployment for every process on the same worker bus, and its value wins over a stored one. Studio shows it locked, marked Set by the deployment: on the Settings tab the field shows read-only the value of the worker that answered (a worker whose own environment lacks the setting runs, and shows, its fallback or default), and on the Environment tab a stored row for that key cannot be edited and keeps only its Remove, with the note Stored value not used; the deployment’s value applies. The lock follows the key a row was loaded with: a row added in the editor is never locked, whatever name it is given. Re-adding a deployment key whose stored row was removed and saved gives such an unlocked row, and saving it with a value is refused with a400 that names the
key. To change such a value, change the deployment’s environment and restart. A profile save, a profile apply, or a backup restore that sets such a key to a
new value is refused, naming the key; the profile diff lists it among the refused keys.
See deployment values and stored values.
Saving the Environment tab writes the stored environment and reloads the fleet. A
change to a recycle-class setting — one whose pooled resource is built only when a
worker process starts — also rolls a worker recycle, and the tab shows it under
Worker recycle: one row per worker the roll reached, a recycled worker joined onto
its fresh life, and the worker that took the save recycling itself after replying. A
roll that stops says where and why, and the workers the server names as still awaiting
a respawn are listed as waiting for a restart; the Apply profile report shows the
same rows and the same list. A worker the stored configuration did not build on is listed
apart and told to fix the stored configuration first, since a restart would not help it. See
reload classes.
Every other change whose reply can carry a roll shows the same report: the Settings tab
save, the MCP config save and secret paste, manifest sections, tool extensions, tool picks,
Reload config, a listing installed in a connector’s Connect step, and the marketplace’s
install, update, uninstall and Upgrade all. A worker the roll restarted, deferred or
confirmed clean is not listed as failed. A write that fails after running a roll shows that
roll beside its error, in a dialog too.
The Worker recycle heading and the heading of each worker panel end with the write they
report, on every screen: Worker recycle — environment on this tab, Worker recycle —
apply profile in the Apply profile report, and Worker recycle — env for a restored
env section. An MCP save that lands several writes names each one on its own report.


The Environment tab after a save that rolled a worker recycle: the recycled workers on their fresh lives and the writer recycling itself.


A profile apply whose recycle stopped: the recycled worker, the worker it stopped at and why, and the workers still waiting for a restart.


An export with a failed section: the file still downloads, and the warning names the section and its message.
env section on the Backup tab is the same env write. Its
import report lists the workers the server names as still awaiting a respawn, and
shows the section’s Worker recycle rows when the restore rolled a recycle, with
where and why a stopped roll stopped. A restore that sets a key the deployment’s
environment sets is refused on the section’s row, naming the key, and nothing is stored.


A backup restore whose recycle stopped: the workers still waiting for a restart, then the recycled worker and the worker the roll stopped at.


The Settings screen: the server's configuration mode and settings schema.


The Access control card: a scope zone with its mapped route, the Unassigned routes, and the Public zone with its note.
Live operations
Because the Studio drives the same/api/* surface as the
tai CLI, the management
operations are one run away. From the Tools screen
you invoke reload_tool, remove_tool, or reload_config — the
live operations — to reload a tool, drop one from
the live registry, or soft-restart the server in place. While a reload is in
flight, the API answers dispatch routes with a retriable 503 rather than
serving against a half-swapped registry.
See live operations for the management operations, and
the CLI reference and
HTTP API reference for the routes behind each screen.
