AgentOSAgentOSv0.120.0

Control plane

Manage your AgentOS workspace from code: agents, runs, approvals, evals, schedules and more.

Each method is one POST /api/v1/rpc/<method> call, with the same permissions as the dashboard and MCP.

import { AgentOS } from "@agentos-sdk/core";

const aos = new AgentOS({ apiKey: process.env.AGENTOS_WORKSPACE_KEY });

// Pause every agent that failed more than a third of its runs this week.
const fleet = await aos.fleet.health<{ agents: Array<{ agent_id: string; failure_rate: number }> }>(
  { days: 7 },
);
for (const agent of fleet.agents.filter((a) => a.failure_rate > 0.33)) {
  await aos.agents.setStatus({ agentId: agent.agent_id, status: "paused" });
}
import os

from agentos import AgentOS

aos = AgentOS(api_key=os.environ["AGENTOS_WORKSPACE_KEY"])

# Pause every agent that failed more than a third of its runs this week.
fleet = aos.fleet.health(days=7)
for agent in fleet["agents"]:
    if agent["failure_rate"] > 0.33:
        aos.agents.set_status(agent_id=agent["agent_id"], status="paused")
  • Keys. Use a workspace key (aos_ws_…), or a personal key (aos_user_…) with the workspace option (AGENTOS_WORKSPACE). Agent keys are refused: they're for reporting and invoking one agent.
  • Permissions. Writes follow your role, exactly as in the dashboard: a member can build agents but can't change workspace settings. Changes proposed by the Operator assistant can only be approved in the dashboard.
  • Names. TypeScript takes camelCase parameters (agentId), Python snake_case keywords (agent_id). Both send the wire's snake_case.
  • Results are the JSON the server returns. In TypeScript, pass a type to narrow it: aos.agents.list<Agent[]>().
  • Retries. Reads are retried after network errors; writes only after a 429, so nothing applies twice. Methods that wait for a run (runs.invoke, evals.runCase, reports.generate) use a 310 s timeout.
  • Always current. This page is generated from the server's schemas, so it lists exactly what the API accepts.

Agents

agents.create

Create a new hosted agent. A hosted agent runs on AgentOS: define its name, system prompt, model, and tools. Optionally file it under a folder (folder_id from folders.list).

Python: aos.agents.create() · Wire: POST /api/v1/rpc/agents_create

ParameterTypeRequiredDescription
namestringYesShort display name.
rolestringNoOne-line role label, e.g. 'Email assistant'.
descriptionstringNoWhat this agent does.
systemPrompt / system_promptstringYesFull system prompt for the agent.
providerType / provider_type"anthropic" | "openai"No
modelstringNoModel id for the provider (e.g. 'claude-sonnet-4-6', 'gpt-4.1-mini'). Any model the workspace's provider key can use is accepted.
toolsArray<string>NoTool names to enable. Mix and match: built-in names (tools.listBuiltin), workspace HTTP tools (tools.listWorkspace), and Composio actions (tools.listComposio, with names like 'composio_GITHUB_CREATE_ISSUE').
tagsArray<string>NoFree-form tags for grouping, e.g. ['email', 'sales'].
temperaturenumberNo
maxTokens / max_tokensnumberNo
maxIterations / max_iterationsnumberNo
folderId / folder_idstringNoFolder UUID to file this agent under (from folders.list). Omit for uncategorized.
promptVariables / prompt_variablesRecord<string, { description?: string; value?: string }>NoNamed {{KEY}} placeholders in the system prompt. Object mapping KEY → { description?, value? }. Pass {} to clear.
inputSchema / input_schemaRecord<string, unknown>NoJSON Schema object (draft-07). Defines the shape of the agent's input/output.
outputSchema / output_schemaRecord<string, unknown>NoJSON Schema object (draft-07). Defines the shape of the agent's input/output.

agents.delete

Permanently delete an agent and its API keys.

Python: aos.agents.delete() · Wire: POST /api/v1/rpc/agents_delete

ParameterTypeRequiredDescription
agentId / agent_idstringYesAgent UUID.

agents.get

Get full configuration for a single agent, including system_prompt, model, tools, folder_id, and sampling params.

Python: aos.agents.get() · Wire: POST /api/v1/rpc/agents_get

ParameterTypeRequiredDescription
agentId / agent_idstringYesAgent UUID.

agents.list

List all agents in the workspace with their status, model, enabled tools, and folder_id. Filter by status or by folder (folder_id='none' for uncategorized).

Python: aos.agents.list() · Wire: POST /api/v1/rpc/agents_list

ParameterTypeRequiredDescription
status"active" | "paused" | "archived"NoFilter by status. Omit to return all.
folderId / folder_idstringNoFilter by folder: a folder UUID (from folders.list), or 'none' for uncategorized agents. Omit to return all.

agents.setStatus

Pause, unpause (active), or archive an agent.

Python: aos.agents.set_status() · Wire: POST /api/v1/rpc/agents_set_status

ParameterTypeRequiredDescription
agentId / agent_idstringYesAgent UUID.
status"active" | "paused" | "archived"Yes

agents.update

Update a hosted agent's config: name, system_prompt, model, tools, sampling params, or folder_id (pass null to un-file).

Python: aos.agents.update() · Wire: POST /api/v1/rpc/agents_update

ParameterTypeRequiredDescription
agentId / agent_idstringYesAgent UUID.
namestringNo
rolestringNo
descriptionstringNo
systemPrompt / system_promptstringNo
providerType / provider_type"anthropic" | "openai"No
modelstringNoModel id for the provider (e.g. 'claude-sonnet-4-6', 'gpt-4.1-mini'). Any model the workspace's provider key can use is accepted.
toolsArray<string>No
tagsArray<string>NoFree-form tags for grouping, e.g. ['email', 'sales'].
temperaturenumberNo
maxTokens / max_tokensnumberNo
maxIterations / max_iterationsnumberNo
pinnedResourceIds / pinned_resource_idsArray<string>NoWorkspace resource IDs to pin into the system prompt. Pass [] to clear.
folderId / folder_idstring | nullNoFolder UUID to file this agent under (from folders.list). Pass null to un-file (move to uncategorized). Built-in agents can't be filed.
promptVariables / prompt_variablesRecord<string, { description?: string; value?: string }>NoNamed {{KEY}} placeholders in the system prompt. Object mapping KEY → { description?, value? }. Pass {} to clear.
inputSchema / input_schemaRecord<string, unknown>NoJSON Schema object (draft-07). Defines the shape of the agent's input/output.
outputSchema / output_schemaRecord<string, unknown>NoJSON Schema object (draft-07). Defines the shape of the agent's input/output.

Alerts

alerts.create

Create an alert rule. Alerts notify you when an agent fails, runs too slowly, or stops running.

Python: aos.alerts.create() · Wire: POST /api/v1/rpc/alerts_create

ParameterTypeRequiredDescription
namestringYes
agentId / agent_idstringNoScope to a specific agent. Omit for workspace-wide.
conditionType / condition_typeobjectYes
conditionConfig / condition_configRecord<string, unknown>No{ threshold_ms?, threshold_pct?, window_minutes? }
channelsArray<"email" | "webhook">Yes
notificationConfig / notification_configRecord<string, unknown>No{ email?, webhook_url? }

alerts.delete

Delete an alert rule.

Python: aos.alerts.delete() · Wire: POST /api/v1/rpc/alerts_delete

ParameterTypeRequiredDescription
alertId / alert_idstringYesAlert UUID.

alerts.list

List alert rules configured for this workspace.

Python: aos.alerts.list() · Wire: POST /api/v1/rpc/alerts_list

ParameterTypeRequiredDescription
activeOnly / active_onlybooleanNo

alerts.update

Update an alert rule: change its config, channels, or toggle active/inactive.

Python: aos.alerts.update() · Wire: POST /api/v1/rpc/alerts_update

ParameterTypeRequiredDescription
alertId / alert_idstringYesAlert UUID.
namestringNo
conditionConfig / condition_configRecord<string, unknown>No{ threshold_ms?, threshold_pct?, window_minutes? }
channelsArray<"email" | "webhook">No
notificationConfig / notification_configRecord<string, unknown>No{ email?, webhook_url? }
activebooleanNoEnable or disable the alert rule.

API keys

apiKeys.create

Generate a new API key for an agent. Returns the plaintext key ONCE: surface it to the user immediately and instruct them to store it securely.

Python: aos.api_keys.create() · Wire: POST /api/v1/rpc/api_keys_create

ParameterTypeRequiredDescription
agentId / agent_idstringYesAgent UUID.
namestringYesDisplay name for this key, e.g. 'production', 'local-dev'.

apiKeys.list

List API keys for this workspace, optionally filtered to one agent. Plaintext is never returned, only id, name, prefix, agent_id, revoked, last_used_at.

Python: aos.api_keys.list() · Wire: POST /api/v1/rpc/api_keys_list

ParameterTypeRequiredDescription
agentId / agent_idstringNoFilter to one agent. Omit for all keys in workspace.
includeRevoked / include_revokedbooleanNo

apiKeys.revoke

Revoke an API key by id. Subsequent requests using that key will be rejected.

Python: aos.api_keys.revoke() · Wire: POST /api/v1/rpc/api_keys_revoke

ParameterTypeRequiredDescription
keyId / key_idstringYesID of the key to revoke.

Approvals

approvals.decide

Approve or reject a pending tool call. Approving resumes the run; rejecting fails it with a note.

Python: aos.approvals.decide() · Wire: POST /api/v1/rpc/approvals_decide

ParameterTypeRequiredDescription
approvalId / approval_idstringYesApproval UUID.
decision"approved" | "rejected"YesApprove or reject the pending tool call.
decisionNote / decision_notestringNoOptional note shown to the run log.

approvals.list

List pending approval requests for this workspace. Approvals are tool calls paused for human approval.

Python: aos.approvals.list() · Wire: POST /api/v1/rpc/approvals_list

ParameterTypeRequiredDescription
agentId / agent_idstringNoFilter by agent. Omit for workspace-wide.
limitnumberNoMax results to return. Default 20.

Conversations

conversations.delete

Delete a conversation and its message history.

Python: aos.conversations.delete() · Wire: POST /api/v1/rpc/conversations_delete

ParameterTypeRequiredDescription
conversationId / conversation_idstringYesConversation UUID.

conversations.get

Get a conversation and its full message history.

Python: aos.conversations.get() · Wire: POST /api/v1/rpc/conversations_get

ParameterTypeRequiredDescription
conversationId / conversation_idstringYesConversation UUID.
messageLimit / message_limitnumberNoMax messages to return.

conversations.list

List conversation sessions for this workspace. Conversations persist multi-turn memory across runs.

Python: aos.conversations.list() · Wire: POST /api/v1/rpc/conversations_list

ParameterTypeRequiredDescription
agentId / agent_idstringNoFilter by agent. Omit for workspace-wide.
externalUserId / external_user_idstringNoFilter by external user ID passed at invoke time.
limitnumberNoMax results to return. Default 20.

Evals

evals.createCase

Create an eval case for an agent. Define the input payload and a list of assertions (output_contains, tool_called, no_error, max_duration_ms, etc.) that must all pass for the case to succeed.

Python: aos.evals.create_case() · Wire: POST /api/v1/rpc/evals_create_case

ParameterTypeRequiredDescription
agentId / agent_idstringYesAgent UUID.
namestringYesShort label for this eval case, e.g. 'Handles missing invoice'.
inputRecord<string, unknown>YesInput payload passed to the agent when this case is run.
assertionsobjectYesList of assertions to check after the run completes.

evals.deleteCase

Delete an eval case and all its run history.

Python: aos.evals.delete_case() · Wire: POST /api/v1/rpc/evals_delete_case

ParameterTypeRequiredDescription
evalCaseId / eval_case_idstringYesEval case UUID.

evals.getRun

Get the status and per-assertion results for an eval run. Each result includes assertion_type, passed, actual_value, and expected_value.

Python: aos.evals.get_run() · Wire: POST /api/v1/rpc/evals_get_run

ParameterTypeRequiredDescription
evalRunId / eval_run_idstringYesEval run UUID.

evals.listCases

List all eval cases for an agent, each with its most recent run status. Use to check what test coverage exists and whether cases are passing.

Python: aos.evals.list_cases() · Wire: POST /api/v1/rpc/evals_list_cases

ParameterTypeRequiredDescription
agentId / agent_idstringYesAgent UUID.

evals.runCase

Trigger an eval run for a case. Returns an eval_run_id in 'pending' status. Poll evals.getRun for the result.

Python: aos.evals.run_case() · Wire: POST /api/v1/rpc/evals_run_case

ParameterTypeRequiredDescription
evalCaseId / eval_case_idstringYesEval case UUID.

Fleet

fleet.health

Per-agent health for the whole fleet over the last N days, worst first: run counts, failure rate, open-finding severity, and a 0-100 health score with its value at the start of the window so you can see the trend. Reads the daily rollup, so it agrees with the dashboard and costs one query. Prefer this over listing runs when the question is 'what needs attention?'.

Python: aos.fleet.health() · Wire: POST /api/v1/rpc/fleet_health

ParameterTypeRequiredDescription
daysnumberNoHow many days back to summarise. Default 7.

Folders

folders.create

Create a new agent folder. Name must be unique in the workspace. File agents into it via agents.update(folder_id) or agents.create(folder_id).

Python: aos.folders.create() · Wire: POST /api/v1/rpc/folders_create

ParameterTypeRequiredDescription
namestringYesFolder display name. Must be unique within the workspace.

folders.delete

Delete an agent folder. Its agents are moved to uncategorized (folder_id cleared), not deleted.

Python: aos.folders.delete() · Wire: POST /api/v1/rpc/folders_delete

ParameterTypeRequiredDescription
folderId / folder_idstringYesFolder UUID to delete. Its agents are moved to uncategorized, not deleted.

folders.list

List the workspace's agent folders with each folder's agent count. Use a folder's id with agents.list(folder_id) or agents.update(folder_id).

Python: aos.folders.list() · Wire: POST /api/v1/rpc/folders_list

Integrations

integrations.list

List third-party integrations and their connection status (Gmail, Google Sheets, GitHub, Slack, etc., all via Composio). Read-only: connect them at /integrations in the dashboard (owner/admin only).

Python: aos.integrations.list() · Wire: POST /api/v1/rpc/integrations_list

Marketplace

marketplace.install

Install a marketplace template into the target workspace as a regular agent (status='paused' so you can review before activating). Generates a default API key shown once in the response. Returns agent_id, the plaintext api_key, and the template's setup_notes (steps the user still has to complete, such as connecting Gmail, filling placeholders or pinning resources).

Python: aos.marketplace.install() · Wire: POST /api/v1/rpc/marketplace_install_template

ParameterTypeRequiredDescription
templateId / template_idstringYesTemplate id (slug), e.g. 'welcome-onboarding'. Use marketplace.listTemplates first to discover available ids.

marketplace.listTemplates

List the marketplace's agent templates with their id, description, category, model and tools, to install with marketplace.install.

Python: aos.marketplace.list_templates() · Wire: POST /api/v1/rpc/marketplace_list_templates

Members

members.invite

Invite a user to the workspace by email. Sends an invite email and returns an invite link. Owner/admin only. 'member' role requires Team/Enterprise plan.

Python: aos.members.invite() · Wire: POST /api/v1/rpc/members_invite

ParameterTypeRequiredDescription
emailstringYesEmail address to invite.
role"admin" | "member"YesRole to grant. 'member' requires Team/Enterprise plan.

members.list

List workspace members (with email and role) and pending invites. Useful for auditing who has access.

Python: aos.members.list() · Wire: POST /api/v1/rpc/members_list

members.remove

Remove a member from the workspace. Cannot remove the last owner. Owner/admin only.

Python: aos.members.remove() · Wire: POST /api/v1/rpc/members_remove

ParameterTypeRequiredDescription
memberId / member_idstringYesWorkspace member row UUID (from members.list).

Notifications

notifications.list

List recent workspace notifications (agent failures, approvals, system events). Filter to unread_only to process the inbox.

Python: aos.notifications.list() · Wire: POST /api/v1/rpc/notifications_list

ParameterTypeRequiredDescription
unreadOnly / unread_onlybooleanNoReturn only unread notifications.
limitnumberNoMax results to return. Default 20.

notifications.markRead

Mark notifications as read. Pass notification_id to mark a single one, or omit to mark all unread notifications in the workspace as read.

Python: aos.notifications.mark_read() · Wire: POST /api/v1/rpc/notifications_mark_read

ParameterTypeRequiredDescription
notificationId / notification_idstringNoID of a specific notification to mark read. Omit to mark ALL unread notifications in the workspace as read.

Reports

reports.delete

Delete a report. Owner/admin only.

Python: aos.reports.delete() · Wire: POST /api/v1/rpc/reports_delete

ParameterTypeRequiredDescription
reportId / report_idstringYesReport UUID.

reports.generate

Generate an AI report synchronously. Supports run_summary (requires run_id), agent_daily, agent_weekly, and on_demand (period reports require agent_id + period_start + period_end). Returns report_id when complete.

Python: aos.reports.generate() · Wire: POST /api/v1/rpc/reports_generate

ParameterTypeRequiredDescription
typeobjectYesReport type. 'run_summary' requires run_id. Period types (agent_daily, agent_weekly, workspace_weekly, on_demand) require agent_id + period_start + period_end.
agentId / agent_idstringNoAgent UUID. Required for period reports.
runId / run_idstringNoRun UUID. Required for run_summary.
periodStart / period_startstringNoISO 8601 start of the period. Required for period reports.
periodEnd / period_endstringNoISO 8601 end of the period. Required for period reports.

reports.get

Get a single report including full markdown content (content_md). Use after reports.list or reports.generate.

Python: aos.reports.get() · Wire: POST /api/v1/rpc/reports_get

ParameterTypeRequiredDescription
reportId / report_idstringYesReport UUID.

reports.list

List AI-generated reports for the workspace. Filter by agent, status, or limit. Returns id, type, status, summary, and period; use reports.get for full markdown content.

Python: aos.reports.list() · Wire: POST /api/v1/rpc/reports_list

ParameterTypeRequiredDescription
agentId / agent_idstringNoFilter by agent. Omit for workspace-wide.
status"generating" | "ready" | "failed"NoFilter by status. Omit for all.
limitnumberNoMax results to return. Default 20.

Resources

resources.create

Upload a text resource into the workspace. Returns the saved filename. Pin it on an agent via agents.update.pinned_resource_ids to inject the content into that agent's system prompt.

Python: aos.resources.create() · Wire: POST /api/v1/rpc/resources_create

ParameterTypeRequiredDescription
filenamestringYesSimple filename (no path separators), e.g. 'prospects.csv'.
contentstringYesText content of the file. Max 10 MB after UTF-8 encoding.
mimeType / mime_typeobjectNoContent mime type. Inferred from filename extension when omitted.

resources.delete

Delete a workspace resource by filename. Removes the file from storage and any pinned references resolve as missing on next agent run.

Python: aos.resources.delete() · Wire: POST /api/v1/rpc/resources_delete

ParameterTypeRequiredDescription
filenamestringYesFilename to delete (must already exist in this workspace).

resources.list

List workspace resource files (uploaded text/markdown/csv/json/html documents that agents can read at runtime).

Python: aos.resources.list() · Wire: POST /api/v1/rpc/resources_list

Runs

runs.cancel

Cancel a currently running run.

Python: aos.runs.cancel() · Wire: POST /api/v1/rpc/runs_cancel

ParameterTypeRequiredDescription
runId / run_idstringYesRun UUID.

runs.events

Get the event log for a run: tool calls, LLM steps, errors. Use for debugging.

Python: aos.runs.events() · Wire: POST /api/v1/rpc/runs_get_events

ParameterTypeRequiredDescription
runId / run_idstringYesRun UUID.
limitnumberNo

runs.get

Get full detail for a single run, including output and timing.

Python: aos.runs.get() · Wire: POST /api/v1/rpc/runs_get

ParameterTypeRequiredDescription
runId / run_idstringYesRun UUID.

runs.invoke

Invoke a hosted agent synchronously and return the result. Use to test agents or trigger them manually. Waits up to 5 minutes. Optionally use conversation memory: pass start_session=true on the first turn (the response returns session_id), then pass that session_id on later turns. Or pass history[] for stateless multi-turn. Pass at most one of session_id, start_session, history.

Python: aos.runs.invoke() · Wire: POST /api/v1/rpc/runs_invoke

ParameterTypeRequiredDescription
agentId / agent_idstringYesAgent UUID.
inputRecord<string, unknown>NoInput passed to the agent. Shape depends on the agent.
promptVariables / prompt_variablesRecord<string, string>NoValues for the agent's prompt_variables. Each key matches a {{KEY}} placeholder in the system prompt.
sessionId / session_idstringNoResume a stateful conversation. The id must already exist: an unknown id is an error, not a new session.
startSession / start_sessionbooleanNoBegin a new stateful conversation. The response returns the server-assigned session_id to pass on later turns.
historyArray<{ role: "user" | "assistant"; content: string }>NoStateless multi-turn: prior user/assistant turns prepended before this input. AgentOS persists nothing.
externalUserId / external_user_idstringNoOpaque end-user identifier (e.g. a Firebase uid), recorded on the conversation. Only meaningful with session_id or start_session.

runs.list

List recent runs for a specific agent or workspace-wide.

Python: aos.runs.list() · Wire: POST /api/v1/rpc/runs_list

ParameterTypeRequiredDescription
agentId / agent_idstringNoFilter by agent. Omit for workspace-wide.
status"running" | "completed" | "failed" | "cancelled"No
limitnumberNoMax results to return. Default 20.

Schedules

schedules.delete

Remove an agent's schedule. The agent is no longer invoked on a recurring basis (manual / SDK invokes still work).

Python: aos.schedules.delete() · Wire: POST /api/v1/rpc/schedules_delete

ParameterTypeRequiredDescription
agentId / agent_idstringYesAgent UUID.

schedules.get

Get the schedule configured for an agent (one schedule per agent max). Returns null when no schedule exists.

Python: aos.schedules.get() · Wire: POST /api/v1/rpc/schedules_get

ParameterTypeRequiredDescription
agentId / agent_idstringYesAgent UUID.

schedules.upsert

Create or update an agent's schedule. Supports daily and weekly frequency with optional hour_of_day (0-23), minute_of_hour (0-59), and IANA timezone (e.g. 'America/New_York'); defaults to 00:00 UTC. The dispatcher invokes the agent with the configured input JSON.

Python: aos.schedules.upsert() · Wire: POST /api/v1/rpc/schedules_upsert

ParameterTypeRequiredDescription
agentId / agent_idstringYesAgent UUID.
frequency"daily" | "weekly"Yes
dayOfWeek / day_of_weeknumber | nullNo0=Sunday … 6=Saturday. Required when frequency='weekly'.
hourOfDay / hour_of_daynumberNoLocal hour (0-23) at which the schedule fires. Defaults to 0 (midnight).
minuteOfHour / minute_of_hournumberNoLocal minute (0-59) offset within the hour. Defaults to 0.
timezonestringNoIANA timezone name, e.g. 'America/New_York', 'Europe/Lisbon'. Defaults to 'UTC'.
inputRecord<string, unknown>NoInput passed to the agent on each run. JSON object.
enabledbooleanNo

Tools

tools.create

Create a custom HTTP tool that hosted agents can call.

Python: aos.tools.create() · Wire: POST /api/v1/rpc/tools_create_workspace

ParameterTypeRequiredDescription
namestringYesUnique tool name, e.g. 'fetch_invoice'.
descriptionstringNoWhat this tool does. The AI uses it to decide when to call it.
method"GET" | "POST"Yes
urlstringYesAbsolute URL the tool will call.
authSecret / auth_secretstringNoOptional Bearer token. Stored encrypted.

tools.delete

Delete a custom workspace tool.

Python: aos.tools.delete() · Wire: POST /api/v1/rpc/tools_delete_workspace

ParameterTypeRequiredDescription
toolId / tool_idstringYesTool UUID.

tools.listBuiltin

List all built-in tools available to hosted agents (e.g. web_search, read_url, read_resource). Provider-specific actions (Gmail, Sheets, GitHub, etc.) come from Composio toolkits.

Python: aos.tools.list_builtin() · Wire: POST /api/v1/rpc/tools_list_builtin

tools.listComposio

List Composio-backed actions available to this workspace, grouped by toolkit (e.g. github, slack). Each action's tool_name is the exact value to put into agents.tools[] (e.g. 'composio_GITHUB_CREATE_ISSUE'). Returns empty toolkits if no Composio apps are connected; direct the user to /integrations to connect one (owner/admin only).

Python: aos.tools.list_composio() · Wire: POST /api/v1/rpc/tools_list_composio

tools.listWorkspace

List custom HTTP tools configured for this workspace.

Python: aos.tools.list_workspace() · Wire: POST /api/v1/rpc/tools_list_workspace

ParameterTypeRequiredDescription
enabledOnly / enabled_onlybooleanNoOnly return enabled tools.

Workspaces

workspaces.list

List the workspaces this key can access. A personal key sees every workspace you belong to, with your role; a workspace key sees its own.

Python: aos.workspaces.list() · Wire: POST /api/v1/rpc/workspaces_list