Apps and Projects

Apps

ToolDescriptionPermission
scaffold_appCreate a new interactive app (dashboard, form, tracker, game, or any custom UI) seeded from the default starter template.app:create
refine_appClarify what an existing app should be and record it as a persisted product spec, between scaffold_app and edit_app.update on the app (granted per item)
list_appsList apps visible to the caller, optionally filtered by name or labels — use it to find an app's id.app:read
list_app_versionsList the immutable versions of an app, newest first, without returning their HTML.app:read
render_appRender an existing app by id, if the caller may view it.app:read
read_appReturn an app's stored HTML (pre-injection — exactly what was saved, without the platform SDK or base stylesheet) plus its version, byte size, name, and scope.app:read
restore_app_versionRestore a historical app version directly on the server as a new head version.update on the app (granted per item)
edit_appThe single path for any change to an app's HTML: pass edits for targeted str_replace changes, imageReplacements to replace embedded images from chat attachments without sending base64 through the m...update on the app (granted per item)
set_app_toolsReplace an existing app's assigned upstream tools with exactly the set you pass (the full desired list; [] clears all).update on the app (granted per item)
set_app_labelsReplace an app's labels with exactly the set you pass ([] clears them).update on the app (granted per item)
set_app_lockLock or unlock an app.update on the app (granted per item)
validate_appThe pre-publish gate for an app's head version: static structural checks (findings, each carrying its own specific message) plus the most recent live-render diagnostics (live), with ok true w...app:read
publish_appShare an app by granting read and use access to specific teams (scope: team, teams: names or IDs) or the whole organization (scope: org).manage-permissions on the app (granted per item)
preview_app_toolRun one of an app's assigned MCP tools server-side, exactly as the rendered app would (as you, the viewing user, with your MCP credentials), and return its real output.update on the app (granted per item)
get_app_diagnosticsCheck how the app's current version rendered for you.app:read
delete_appSoft-delete an app the caller owns or administers, and remove its MCP backing so it is no longer served.delete on the app (granted per item)
app_data_getRead a value from the calling app's data store (per-user or shared partition).app:read
app_data_setWrite a value to the calling app's data store (per-user or shared partition).update on the app (granted per item)
app_data_listList all entries in one partition of the calling app's data store.app:read
app_data_deleteDelete a key from the calling app's data store (per-user or shared partition).update on the app (granted per item)
llm_completeRun a single LLM completion for the calling app (backs archestra.llm.complete).app:read

scaffold_app

Required RBAC permission: app:create

Input

ParameterTypeRequiredDescription
initialGrantsobject[]No
initialGrants[].subjectobjectYes
initialGrants[].subject.type"user" | "team" | "serviceAccount" | "role" | "organization"Yes
initialGrants[].subject.idstring | "*"Yes
initialGrants[].actionsstring[]Yes
namestringYesApp name.
descriptionstringNoOptional description.
uiPermissionsobjectNoOptional iframe permissions (camera/microphone/geolocation/clipboardWrite).
uiPermissions.cameraobjectNo
uiPermissions.microphoneobjectNo
uiPermissions.geolocationobjectNo
uiPermissions.clipboardWriteobjectNo
iconstringNoOptional display icon for the app, as a single emoji character (e.g. "📊") chosen to suit what the app does. Omitted leaves the app with the generic app glyph.
labelsobject[]NoOptional key-value labels for organization and categorization.
labels[].keystringYes
labels[].valuestringYes
toolsstring[]NoUpstream MCP tool names to assign to the new app (e.g. from search_tools), callable from its HTML via archestra.tools.call with the viewing user's credentials. Omitted leaves the app with no assigned tools.
project_idstringNoLink the new app into this project (from list_projects) so it is listed with the project's files. You need access to the project. Omitted creates a standalone app.

Output

FieldTypeRequiredDescription
idstringYes
namestringYes
descriptionstring | nullYes
scope"personal" | "team" | "org"Yes
latestVersionnumberYes
labelsobject[]YesKey-value labels for organization/categorization.
labels[].keystringYesThe label key.
labels[].valuestringYesThe label value.
warningsstring[]NoSoft save-time validation warnings about the html (the save succeeded); fix them via edit_app.
toolsstring[]NoThe app's assigned tool names after this call (present when the tools param was given).
status"ok" | "partial"NoAbsent or "ok" on full success. "partial" means the app was created (see id) but assigning its tools failed — the app exists; assign them with set_app_tools rather than re-scaffolding.

refine_app

Required RBAC permission: update on the app (granted per item)

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id to refine.
questionsobject[]NoUp to 3 clarifying questions to ask the user before consolidating the spec.
questions[].idstringYesStable key the answer is returned under.
questions[].promptstringYesThe question shown to the user.
questions[].optionsstring[]NoWhen present, the question is single-select over these plain-string option labels, e.g. ["Light", "Dark"] — never {label, value} objects; otherwise it is free-text.
specobjectNoThe consolidated product requirements to persist on the app (features/data/ui/tools — no implementation stack).
spec.summarystringYesOne-line summary of what the app is for.
spec.featuresstring[]YesConcrete capabilities the app should provide.
spec.datastring | nullNoWhat the app reads/persists via the App Data Store — a free-form prose string, not a structured object.
spec.uistring | nullNoUI / style direction as a free-form prose string, not a structured object.
spec.toolsstring[]YesFull names of the MCP tools the app calls through window.archestra.

Output

FieldTypeRequiredDescription
idstringYes
specobjectYesThe persisted spec when one was given, else the base spec seeded for the model.
spec.summarystringYesOne-line summary of what the app is for.
spec.featuresstring[]YesConcrete capabilities the app should provide.
spec.datastring | nullNoWhat the app reads/persists via the App Data Store — a free-form prose string, not a structured object.
spec.uistring | nullNoUI / style direction as a free-form prose string, not a structured object.
spec.toolsstring[]YesFull names of the MCP tools the app calls through window.archestra.
capabilityobjectYes
capability.toolsobject[]Yes
capability.tools[].namestringYes
capability.tools[].descriptionstringYes
capability.sdkSummarystringYes
answersobjectNoThe user's answers to the clarifying questions, if any.
persistedbooleanYesWhether a spec was persisted on the app head by this call.

list_apps

Required RBAC permission: app:read

Input

ParameterTypeRequiredDescription
namestringNoFilter by name. Each whitespace-separated word must appear in the name or description, in any order — so a remembered name matches even when its word order or punctuation differs from how the app was saved.
labelsobject[]NoFilter by labels. AND across keys, OR within the values given for the same key.
labels[].keystringYes
labels[].valuestringYes
limitintegerNo
accessstring[]NoOnly return items the caller reaches in one of these ways: mine (created by the caller), shared (shared with the caller or one of their teams), org (shared with the whole organization), others (not shared with the caller; visible only through admin access). Omit for everything the caller can read. Use ["mine"] for "my apps".
shared_withstring[]NoOnly return items whose own permissions grant read to one of these subjects: org (the whole organization), role:, team:, user:, serviceAccount:. Omit for no filtering.
owner_idsstring[]NoOnly return items created by one of these user IDs. Omit for no filtering.

Output

FieldTypeRequiredDescription
appsobject[]Yes
apps[].idstringYes
apps[].namestringYes
apps[].descriptionstring | nullYes
apps[].scope"personal" | "team" | "org"Yes
apps[].latestVersionnumberYes
apps[].labelsobject[]YesKey-value labels for organization/categorization.
apps[].labels[].keystringYesThe label key.
apps[].labels[].valuestringYesThe label value.
apps[].warningsstring[]NoSoft save-time validation warnings about the html (the save succeeded); fix them via edit_app.

list_app_versions

Required RBAC permission: app:read

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id.

Output

FieldTypeRequiredDescription
appIdstringYes
latestVersionnumberYes
versionsobject[]Yes
versions[].versionnumberYes
versions[].createdAtstringYes
versions[].currentbooleanYes

render_app

Required RBAC permission: app:read

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id.

Output

FieldTypeRequiredDescription
idstringYes
namestringYes
descriptionstring | nullYes
scope"personal" | "team" | "org"Yes
latestVersionnumberYes
labelsobject[]YesKey-value labels for organization/categorization.
labels[].keystringYesThe label key.
labels[].valuestringYesThe label value.
warningsstring[]NoSoft save-time validation warnings about the html (the save succeeded); fix them via edit_app.

read_app

Required RBAC permission: app:read

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id.
versionintegerNoSpecific version to read; defaults to the current head.
offsetintegerNoStart of the read window as a 0-based character offset (a JavaScript string index / UTF-16 code unit) into the stored HTML — character-based, not line-based, since minified HTML can be one enormous line. Defaults to 0. An offset past the end returns an empty window, not an error. A window never splits a character in half: its edges shift by one unit when they would.
limitintegerNoMaximum number of characters to return, starting at offset. Omitted reads to the end of the document; 0 returns no content, just the size metadata.

Output

FieldTypeRequiredDescription
idstringYes
namestringYes
scope"personal" | "team" | "org"Yes
versionnumberYes
byteSizenumberYesUTF-8 byte size of the full stored HTML (never the window's).
totalCharsnumberYesTotal character length of the full stored HTML.
offsetnumberYesEffective 0-based character offset of the returned window (0 for a full read; clamped to the end when past it).
hasMorebooleanYesTrue when the document continues past the returned window.
htmlstringYesThe stored HTML, pre-injection (no SDK/base CSS) — the requested character window when offset/limit was passed.

restore_app_version

Required RBAC permission: update on the app (granted per item)

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id.
versionintegerYesThe historical version to restore.
baseVersionintegerYesThe current head version. This prevents overwriting a newer edit that landed after the rollback was requested.

Output

FieldTypeRequiredDescription
idstringYes
namestringYes
descriptionstring | nullYes
scope"personal" | "team" | "org"Yes
latestVersionnumberYes
labelsobject[]YesKey-value labels for organization/categorization.
labels[].keystringYesThe label key.
labels[].valuestringYesThe label value.
warningsstring[]NoSoft save-time validation warnings about the html (the save succeeded); fix them via edit_app.

edit_app

Required RBAC permission: update on the app (granted per item)

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id.
baseVersionintegerYesThe version this edit is based on — the one named by read_app or the latest scaffold_app/edit_app result. Always report the version you actually built the edit from. When the head has moved past it (another conversation edited the app), your edit is treated as a delta from that base and merged with the newer changes; if the regions overlap, the call fails with the head's conflicting content to incorporate.
editsobject[]Nostr_replace edits applied in order to the current HTML; the whole edit is atomic (any failure leaves the app unchanged). Pass exactly one edit mode.
edits[].old_strstringYesExact text to replace; must occur exactly once in the current HTML (add surrounding context to disambiguate).
edits[].new_strstringYesReplacement text (may be empty to delete).
replacementHtmlstringNoThe complete new document, replacing the current HTML outright with no old_str matching — use this for a full rewrite instead of reproducing the whole document as an edit. Pass exactly one edit mode.
replacementHtmlSourceobjectNoLike replacementHtml, but the document is read server-side from a file you already saved instead of being written out here — use this when the HTML already exists as a file (assembled in the sandbox, or attached to the chat) so its bytes never have to be reproduced as tool arguments. The file must be UTF-8 text and is subject to the same size limit as any other document. Reads whatever the file holds at call time. Pass exactly one edit mode.
replacementHtmlSource.fileIdstringYesId of a saved file whose bytes become the document, as returned by download_file, save_file, or search_files.
imageReplacementsobject[]NoReplace one or more image URLs with the most recently attached image. Pass short surrounding anchors only: the server reads the newest attachment bytes, builds the data URL, and replaces everything between the anchors. Never put attachment ids, filenames, paths, or old/new base64 in edits/tool arguments. The batch is atomic. Pass exactly one edit mode.
imageReplacements[].before_strstringYesExact short HTML ending with the opening quote immediately before the existing image URL or data URL (for example <img src="). It must occur exactly once; include nearby id/class context when needed to disambiguate.
imageReplacements[].after_strstringYesExact short HTML starting with the matching closing quote immediately after the existing image URL or data URL (for example " alt="Issue tracker"). The text between before_str and after_str is replaced server-side.
imageReplacements[].sourceobjectYesThe most recently attached image in this conversation. Its bytes are read and encoded server-side; never read or base64-encode the attachment yourself.
imageReplacements[].source.type"chat_attachment"Yes

Output

FieldTypeRequiredDescription
idstringYes
namestringYes
descriptionstring | nullYes
scope"personal" | "team" | "org"Yes
latestVersionnumberYes
labelsobject[]YesKey-value labels for organization/categorization.
labels[].keystringYesThe label key.
labels[].valuestringYesThe label value.
warningsstring[]NoSoft save-time validation warnings about the html (the save succeeded); fix them via edit_app.

set_app_tools

Required RBAC permission: update on the app (granted per item)

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id whose tools to set.
toolsstring[]YesUpstream MCP tool names (e.g. from search_tools) to assign to the app, replacing its current set exactly — pass the full desired list, or [] to clear all.

Output

FieldTypeRequiredDescription
idstringYes
toolsstring[]YesThe app's assigned tool names after this call.

set_app_labels

Required RBAC permission: update on the app (granted per item)

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id whose labels to set.
labelsobject[]YesKey-value labels to assign to the app, replacing its current set exactly — pass the full desired list, or [] to clear all. One value per key; a repeated key keeps the last one.
labels[].keystringYes
labels[].valuestringYes

Output

FieldTypeRequiredDescription
idstringYes
labelsobject[]YesThe app's labels after this call.
labels[].keystringYesThe label key.
labels[].valuestringYesThe label value.

set_app_lock

Required RBAC permission: update on the app (granted per item)

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id.
lockedbooleanYestrue locks the app against all modification; false unlocks it (only on the user's direct request).

Output

FieldTypeRequiredDescription
idstringYes
lockedbooleanYes

validate_app

Required RBAC permission: app:read

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id to validate.

Output

FieldTypeRequiredDescription
idstringYes
versionnumberYesThe head version that was validated.
okbooleanYesTrue when there are no error-severity findings.
findingsobject[]Yes
findings[].severity"error" | "warning"Yes
findings[].messagestringYes
liveobjectYesDiagnostics from the most recent live render of the head version (untrusted iframe output). status no_render_observed means no render of this version has happened yet — live diagnostics are captured only when the app renders for a viewer, so this is the normal state right after authoring and a clean static pass (ok: true) is enough to proceed.
live.status"no_render_observed" | "clean" | "errors"Yes
live.versionnumberYes
live.entriesobject[]Yes
live.entries[].typestringYes
live.entries[].messagestringYes
live.renderedAtstring | nullYes

publish_app

Required RBAC permission: manage-permissions on the app (granted per item)

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id to publish.
scope"team" | "org"YesPublish to specific teams or to the whole organization. Promotes the app out of personal scope.
teamsstring[]NoTarget teams, each a team name or team id — required when scope is team. Pass the team name the user gave (e.g. ["Platform"]); no need to look up ids first.

Output

FieldTypeRequiredDescription
idstringYes
scope"personal" | "team" | "org"Yes
runUrlstringYesStandalone page for the published app.

preview_app_tool

Required RBAC permission: update on the app (granted per item)

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id whose assigned tool to run.
toolNamestringYesName of an MCP tool assigned to the app (exactly as archestra.tools.call would receive it).
argsobjectNoArguments to pass to the tool (defaults to {}).

Output

FieldTypeRequiredDescription
toolNamestringYes
isErrorbooleanYes
truncatedbooleanYes
outputstringYesThe JSON-serialized value archestra.tools.call resolves with for this result, framed as untrusted data (media dataUrls are elided).

get_app_diagnostics

Required RBAC permission: app:read

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id.

Output

FieldTypeRequiredDescription
status"no_render_observed" | "clean" | "errors"Yes
versionnumber | nullYesThe rendered version, or the current head when none observed.
entriesobject[]Yes
entries[].typestringYes
entries[].messagestringYes
renderedAtstring | nullYes
screenshotbooleanYesWhether a screenshot of the render is attached as an image to this result.

delete_app

Required RBAC permission: delete on the app (granted per item)

Input

ParameterTypeRequiredDescription
appIdstringYesThe app id.

app_data_get

Required RBAC permission: app:read

Input

ParameterTypeRequiredDescription
keystringYesThe data store key.
scope"user" | "app"NoStorage partition: "user" (default) is private to the viewing user, "app" is shared by everyone using the app.

Output

FieldTypeRequiredDescription
valueanyYes
revisioninteger | nullYes
ownerstring | nullYesUser id owning a shared key, or null if collaborative.

app_data_set

Required RBAC permission: update on the app (granted per item)

Input

ParameterTypeRequiredDescription
keystringYesThe data store key.
valueanyYesAny JSON-serializable value except null (use app_data_delete to clear a key). Pass objects/arrays directly — get returns exactly what was stored, no JSON.stringify needed.
scope"user" | "app"NoStorage partition: "user" (default) is private to the viewing user, "app" is shared by everyone using the app.
expectedRevisionintegerNoOptimistic concurrency guard. Omit for last-writer-wins. 0 = create only if the key is absent. A positive value = overwrite only if the key is still at that revision (from a prior get/set); otherwise the write is rejected as a conflict.
claimOwnerbooleanNoShared-scope only: when creating a NEW key, claim it so only you (or an app admin/author) may later overwrite or delete it. Has no effect on the "user" scope or on an existing key.

Output

FieldTypeRequiredDescription
keystringYes
revisionintegerYes
ownerstring | nullYesUser id owning a shared key, or null if collaborative.

app_data_list

Required RBAC permission: app:read

Input

ParameterTypeRequiredDescription
scope"user" | "app"NoStorage partition: "user" (default) is private to the viewing user, "app" is shared by everyone using the app.

Output

FieldTypeRequiredDescription
entriesobject[]Yes
entries[].keystringYes
entries[].valueanyYes
entries[].revisionintegerYes
entries[].ownerstring | nullYesUser id owning a shared key, or null if collaborative.

app_data_delete

Required RBAC permission: update on the app (granted per item)

Input

ParameterTypeRequiredDescription
keystringYesThe data store key.
scope"user" | "app"NoStorage partition: "user" (default) is private to the viewing user, "app" is shared by everyone using the app.

llm_complete

Required RBAC permission: app:read

Input

ParameterTypeRequiredDescription
promptstringYesThe prompt to complete.
systemstringNoOptional system instruction that frames the completion.
jsonModebooleanNoWhen true, steer the model to return a single valid JSON value (the caller still parses the returned string).

Output

FieldTypeRequiredDescription
textstringYes

Projects

ToolDescriptionPermission
create_project_from_conversationTurn the current chat into a project.project:create
list_projectsList the projects the caller can reach — the ones they own plus those shared with them.project:read †
get_projectRead one project's context in a single call: its metadata, its instructions (the instructions.md that steers every chat in the project), the files it owns, and the apps linked into it that you ca...project:read †
link_app_to_projectLink an existing app into a project so it is listed with the project's files and chats.project:read
unlink_app_from_projectRemove an app's link from a project.project:read
create_schedule_triggerSchedule an agent from chat, Slack, or Teams.project:create †
update_schedule_triggerEdit a scheduled task.project:update †
delete_schedule_triggerDelete a scheduled task and its run history.project:delete †
list_schedule_triggersList the scheduled agent triggers the caller can see: which agent each one runs, its cron expression and timezone, whether it is enabled, and when it last fired.project:read
get_schedule_triggerRead one scheduled agent trigger, including the message template sent to the agent on every run.project:read †
list_schedule_trigger_runsList a scheduled task's run history, newest first: whether each run was due or manual, how it ended, when it started and completed, its failure text, and the chat conversation holding its transcript.project:read †
get_schedule_trigger_runRead one run of a scheduled task, including its full error text.project:read †
get_schedule_trigger_run_transcriptRead what one scheduled task run did: its messages and every tool call with arguments, result and error, including guardrails rulings, remedy offers and review outcomes returned to the agent.project:read †
enable_schedule_triggerEnable a scheduled task so it is picked up again when due.project:update †
disable_schedule_triggerDisable a scheduled task so it stops firing, leaving its configuration and run history intact.project:update †
run_schedule_trigger_nowStart a scheduled task immediately, outside its cron schedule.project:create †

† This tool enforces an additional access requirement beyond its RBAC permission — see its details below.

create_project_from_conversation

Required RBAC permission: project:create

Input

ParameterTypeRequiredDescription
namestringNoProject name. Defaults to the chat's title when omitted.
descriptionstringNoOptional project description.
labelsobject[]NoOptional key/value labels for the project.
labels[].keystringYes
labels[].valuestringYes
labels[].keyIdstringNo
labels[].valueIdstringNo

Output

FieldTypeRequiredDescription
successtrueYesWhether the project was created.
project_idstringYesThe new project's id.
project_namestringYesThe new project's name.
project_slugstringYesThe new project's slug.
files_transferredintegerYesHow many of the chat's files were moved into the project.

list_projects

Required RBAC permission: project:read

Additional access requirement: Returns only projects the caller owns or that are shared with them. Oversight of every project (a * grant) does not extend to this tool.

Input

ParameterTypeRequiredDescription
querystringNoCase-insensitive substring matched against the project name and description. Omit to list everything the caller can reach.
accessstring[]NoOnly return items the caller reaches in one of these ways: mine (created by the caller), shared (shared with the caller or one of their teams), org (shared with the whole organization), others (not shared with the caller; visible only through admin access). Omit for everything the caller can read. Use ["mine"] for "my projects".
shared_withstring[]NoOnly return items whose own permissions grant read to one of these subjects: org (the whole organization), role:, team:, user:, serviceAccount:. Omit for no filtering.
owner_idsstring[]NoOnly return items created by one of these user IDs. Omit for no filtering.

Output

FieldTypeRequiredDescription
projectsobject[]YesProjects the caller can reach.
projects[].idstringYesThe project's id — pass it to get_project.
projects[].namestringYesThe project's name.
projects[].descriptionstring | nullYesThe project's description.
projects[].visibility"organization" | "team" | "user" | nullYesWho the project is shared with; null = owner-only.
projects[].viewer_role"owner" | "shared" | "admin"YesThe caller's relationship to the project.
projects[].owner_namestring | nullYesDisplay name of the owner.
projects[].labelsobject[]YesKey/value labels assigned to the project.
projects[].labels[].keystringYes
projects[].labels[].valuestringYes
projects[].labels[].keyIdstringNo
projects[].labels[].valueIdstringNo
projects[].conversation_countintegerYesHow many chats live in the project.
projects[].created_atstringYesISO 8601 creation timestamp.

get_project

Required RBAC permission: project:read

Additional access requirement: Readable only for projects the caller owns or that are shared with them. Oversight of every project (a * grant) does not extend to this tool.

Input

ParameterTypeRequiredDescription
project_idstringYesId of the project to read (from list_projects).

Output

FieldTypeRequiredDescription
idstringYesThe project's id — pass it to get_project.
namestringYesThe project's name.
descriptionstring | nullYesThe project's description.
visibility"organization" | "team" | "user" | nullYesWho the project is shared with; null = owner-only.
viewer_role"owner" | "shared" | "admin"YesThe caller's relationship to the project.
owner_namestring | nullYesDisplay name of the owner.
labelsobject[]YesKey/value labels assigned to the project.
labels[].keystringYes
labels[].valuestringYes
labels[].keyIdstringNo
labels[].valueIdstringNo
conversation_countintegerYesHow many chats live in the project.
created_atstringYesISO 8601 creation timestamp.
instructionsstringYesThe project's instructions markdown; empty when never saved. Truncated when instructions_truncated is true.
instructions_truncatedbooleanYesWhether instructions was cut short at the inline limit.
filesobject[]YesFiles the project owns. Read one with read_file, passing the same project_id and this ref.
files[].idstringYesThe file's id.
files[].refstringYesStable reference to pass to read_file.
files[].filenamestringYesThe file's name.
files[].mime_typestringYesThe file's MIME type.
files[].size_bytesintegerYesSize in bytes.
appsobject[]YesApps linked into the project that you can open. Read or edit one with the app tools, passing this id.
apps[].idstringYesThe app's id.
apps[].namestringYesThe app's name.
apps[].descriptionstring | nullYesThe app's description.

Required RBAC permission: project:read

Input

ParameterTypeRequiredDescription
project_idstringYesId of the project (from list_projects).
app_idstringYesId of the app (from list_apps).

Output

FieldTypeRequiredDescription
project_idstringYesThe project's id.
app_idstringYesThe app's id.
linkedbooleanYesWhether the app is now linked.

Required RBAC permission: project:read

Input

ParameterTypeRequiredDescription
project_idstringYesId of the project (from list_projects).
app_idstringYesId of the app (from list_apps).

Output

FieldTypeRequiredDescription
project_idstringYesThe project's id.
app_idstringYesThe app's id.
linkedbooleanYesWhether the app is now linked.

create_schedule_trigger

Required RBAC permission: project:create

Additional access requirement: Requires an acting user. Omitting project_id creates a private project with the task prompt as its instructions. Repeating the same new-project task returns the existing schedule. An existing project must be accessible to the caller.

Input

ParameterTypeRequiredDescription
namestringYesName of the scheduled task.
project_idstringNoExisting project to schedule in. Omit to create a private project using name and message_template as its instructions.
agent_idstringNoAgent to run. For a new project, defaults to the current agent; for an existing project, its agent then the organization default.
cron_expressionstringYesCron expression, for example 0 9 * * 1-5.
timezonestringYesIANA timezone, for example America/Toronto.
message_templatestringYesPrompt sent to the agent on each run.
enabledbooleanNoWhether the schedule is enabled. Defaults to true on creation.

Output

FieldTypeRequiredDescription
idstringYesThe trigger's id — pass it to get_schedule_trigger.
namestringYesThe trigger's name.
agent_idstringYesId of the agent the schedule runs.
agent_namestring | nullYesName of that agent.
project_idstring | nullYesProject the schedule belongs to, when it is project-scoped.
cron_expressionstringYes5-part cron expression driving the schedule.
timezonestringYesIANA timezone the cron expression is read in.
enabledbooleanYesWhether the schedule is currently picked up when due.
last_executed_atstring | nullYesISO 8601 timestamp of the last time the schedule fired, or null if it never has. Compare with run history when checking schedule activity.
actor_user_idstringYesThe user the scheduled run executes as.
actor_namestring | nullYesDisplay name of that user.
created_atstringYesISO 8601 creation timestamp.
message_templatestringYesThe prompt sent to the agent on every run.
createdbooleanYesFalse when an identical new-project request reused an existing schedule.

update_schedule_trigger

Required RBAC permission: project:update

Additional access requirement: Requires a user token. Only the schedule actor or someone with organization-wide Projects Can update access can perform this action. Project membership alone permits reading. See Granular Access Control.

Input

ParameterTypeRequiredDescription
namestringNoName of the scheduled task.
project_idstringNoProject containing the scheduled task.
agent_idstringNoAgent to run. Defaults to the project's agent, then the organization default.
cron_expressionstringNoCron expression, for example 0 9 * * 1-5.
timezonestringNoIANA timezone, for example America/Toronto.
message_templatestringNoPrompt sent to the agent on each run.
enabledbooleanNoWhether the schedule is enabled. Defaults to true on creation.
schedule_trigger_idstringYes

Output

FieldTypeRequiredDescription
idstringYesThe trigger's id — pass it to get_schedule_trigger.
namestringYesThe trigger's name.
agent_idstringYesId of the agent the schedule runs.
agent_namestring | nullYesName of that agent.
project_idstring | nullYesProject the schedule belongs to, when it is project-scoped.
cron_expressionstringYes5-part cron expression driving the schedule.
timezonestringYesIANA timezone the cron expression is read in.
enabledbooleanYesWhether the schedule is currently picked up when due.
last_executed_atstring | nullYesISO 8601 timestamp of the last time the schedule fired, or null if it never has. Compare with run history when checking schedule activity.
actor_user_idstringYesThe user the scheduled run executes as.
actor_namestring | nullYesDisplay name of that user.
created_atstringYesISO 8601 creation timestamp.
message_templatestringYesThe prompt sent to the agent on every run.

delete_schedule_trigger

Required RBAC permission: project:delete

Additional access requirement: Requires a user token. Only the schedule actor or someone with organization-wide Projects Full access access can perform this action. Project membership alone permits reading. See Granular Access Control.

Input

ParameterTypeRequiredDescription
schedule_trigger_idstringYes

Output

FieldTypeRequiredDescription
successbooleanYes

list_schedule_triggers

Required RBAC permission: project:read

Input

ParameterTypeRequiredDescription
project_idstringNoOnly schedules of this project. Shows every member's schedules for it, so long as the caller can access the project.
enabledbooleanNoOnly enabled (true) or only disabled (false) schedules.
agent_idstringNoOnly schedules that run this agent.
include_all_usersbooleanNoInclude other members' schedules. Ignored unless the caller holds organization-wide project access.
limitintegerNoHow many rows to return, newest first (1-100, default 25).
cursorstringNoPass pagination.nextCursor from the previous response to read the next page. Keep the same filters; omit for the newest page.

Output

FieldTypeRequiredDescription
paginationobjectYes
pagination.limitintegerYes
pagination.nextCursorstring | nullYes
pagination.hasNextbooleanYes
schedule_triggersobject[]YesMatching schedules, newest first.
schedule_triggers[].idstringYesThe trigger's id — pass it to get_schedule_trigger.
schedule_triggers[].namestringYesThe trigger's name.
schedule_triggers[].agent_idstringYesId of the agent the schedule runs.
schedule_triggers[].agent_namestring | nullYesName of that agent.
schedule_triggers[].project_idstring | nullYesProject the schedule belongs to, when it is project-scoped.
schedule_triggers[].cron_expressionstringYes5-part cron expression driving the schedule.
schedule_triggers[].timezonestringYesIANA timezone the cron expression is read in.
schedule_triggers[].enabledbooleanYesWhether the schedule is currently picked up when due.
schedule_triggers[].last_executed_atstring | nullYesISO 8601 timestamp of the last time the schedule fired, or null if it never has. Compare with run history when checking schedule activity.
schedule_triggers[].actor_user_idstringYesThe user the scheduled run executes as.
schedule_triggers[].actor_namestring | nullYesDisplay name of that user.
schedule_triggers[].created_atstringYesISO 8601 creation timestamp.

get_schedule_trigger

Required RBAC permission: project:read

Additional access requirement: Requires a user token. The caller must be the schedule actor, a project member, or someone with organization-wide Projects Can read access.

Input

ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule to read.

Output

FieldTypeRequiredDescription
idstringYesThe trigger's id — pass it to get_schedule_trigger.
namestringYesThe trigger's name.
agent_idstringYesId of the agent the schedule runs.
agent_namestring | nullYesName of that agent.
project_idstring | nullYesProject the schedule belongs to, when it is project-scoped.
cron_expressionstringYes5-part cron expression driving the schedule.
timezonestringYesIANA timezone the cron expression is read in.
enabledbooleanYesWhether the schedule is currently picked up when due.
last_executed_atstring | nullYesISO 8601 timestamp of the last time the schedule fired, or null if it never has. Compare with run history when checking schedule activity.
actor_user_idstringYesThe user the scheduled run executes as.
actor_namestring | nullYesDisplay name of that user.
created_atstringYesISO 8601 creation timestamp.
message_templatestringYesThe prompt sent to the agent on every run.

list_schedule_trigger_runs

Required RBAC permission: project:read

Additional access requirement: Requires a user token. The caller must be the schedule actor, a project member, or someone with organization-wide Projects Can read access.

Input

ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule whose runs to list.
status"running" | "success" | "failed" | "cancelled"NoOnly runs in this state.
limitintegerNoHow many rows to return, newest first (1-100, default 25).
cursorstringNoPass pagination.nextCursor from the previous response to read the next page. Keep the same filters; omit for the newest page.

Output

FieldTypeRequiredDescription
paginationobjectYes
pagination.limitintegerYes
pagination.nextCursorstring | nullYes
pagination.hasNextbooleanYes
runsobject[]YesMatching runs, newest first.
runs[].blocked_byobject | nullYesWhy this tick was skipped, including the blocking run and its frozen deadline.
runs[].blocked_by.phase"starting" | "running" | "stopping"Yes
runs[].blocked_by.runIdstring | nullYes
runs[].blocked_by.runtimeTaskIdstring | nullYes
runs[].blocked_by.startedAtstringYes
runs[].blocked_by.elapsedSecondsintegerYes
runs[].blocked_by.deadlinestring | nullYes
runs[].blocked_by.maximumDurationSecondsinteger | nullYes
runs[].idstringYesThe run's id — pass it to get_schedule_trigger_run.
runs[].trigger_idstringYesId of the schedule this run belongs to.
runs[].run_kind"due" | "manual"Yesdue = fired by the schedule; manual = started by a person.
runs[].status"running" | "success" | "failed" | "cancelled"YesCurrent state of the run.
runs[].started_atstring | nullYesISO 8601 timestamp the run started.
runs[].completed_atstring | nullYesISO 8601 timestamp the run settled; null while still running.
runs[].errorstring | nullYesFailure text when the run failed or was skipped — for example a run skipped because the previous one was still in progress.
runs[].chat_conversation_idstring | nullYesChat conversation holding the run's transcript, when linked.
runs[].runtime_task_idstring | nullYesAgent Runtime task id, when the run executed on the runtime.
runs[].created_atstringYesISO 8601 creation timestamp.

get_schedule_trigger_run

Required RBAC permission: project:read

Additional access requirement: Requires a user token. The caller must be the schedule actor, a project member, or someone with organization-wide Projects Can read access.

Input

ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule the run belongs to.
run_idstringYesId of the run to read.

Output

FieldTypeRequiredDescription
blocked_byobject | nullYesWhy this tick was skipped, including the blocking run and its frozen deadline.
blocked_by.phase"starting" | "running" | "stopping"Yes
blocked_by.runIdstring | nullYes
blocked_by.runtimeTaskIdstring | nullYes
blocked_by.startedAtstringYes
blocked_by.elapsedSecondsintegerYes
blocked_by.deadlinestring | nullYes
blocked_by.maximumDurationSecondsinteger | nullYes
idstringYesThe run's id — pass it to get_schedule_trigger_run.
trigger_idstringYesId of the schedule this run belongs to.
run_kind"due" | "manual"Yesdue = fired by the schedule; manual = started by a person.
status"running" | "success" | "failed" | "cancelled"YesCurrent state of the run.
started_atstring | nullYesISO 8601 timestamp the run started.
completed_atstring | nullYesISO 8601 timestamp the run settled; null while still running.
errorstring | nullYesFailure text when the run failed or was skipped — for example a run skipped because the previous one was still in progress.
chat_conversation_idstring | nullYesChat conversation holding the run's transcript, when linked.
runtime_task_idstring | nullYesAgent Runtime task id, when the run executed on the runtime.
created_atstringYesISO 8601 creation timestamp.

get_schedule_trigger_run_transcript

Required RBAC permission: project:read

Additional access requirement: Requires a user token. The caller must be the schedule actor, or hold both organization-wide Projects Can read access and log:admin. Project membership or Projects read alone shows run status but not the transcript.

Input

ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule the run belongs to.
run_idstringYesId of the run to read.

Output

FieldTypeRequiredDescription
runobjectYes
run.blocked_byobject | nullYesWhy this tick was skipped, including the blocking run and its frozen deadline.
run.blocked_by.phase"starting" | "running" | "stopping"Yes
run.blocked_by.runIdstring | nullYes
run.blocked_by.runtimeTaskIdstring | nullYes
run.blocked_by.startedAtstringYes
run.blocked_by.elapsedSecondsintegerYes
run.blocked_by.deadlinestring | nullYes
run.blocked_by.maximumDurationSecondsinteger | nullYes
run.idstringYesThe run's id — pass it to get_schedule_trigger_run.
run.trigger_idstringYesId of the schedule this run belongs to.
run.run_kind"due" | "manual"Yesdue = fired by the schedule; manual = started by a person.
run.status"running" | "success" | "failed" | "cancelled"YesCurrent state of the run.
run.started_atstring | nullYesISO 8601 timestamp the run started.
run.completed_atstring | nullYesISO 8601 timestamp the run settled; null while still running.
run.errorstring | nullYesFailure text when the run failed or was skipped — for example a run skipped because the previous one was still in progress.
run.chat_conversation_idstring | nullYesChat conversation holding the run's transcript, when linked.
run.runtime_task_idstring | nullYesAgent Runtime task id, when the run executed on the runtime.
run.created_atstringYesISO 8601 creation timestamp.
session_idstringYesThe run's session id. Pass it to list_openappa_consults or list_openappa_yells.
source"conversation" | "interactions" | "encrypted" | "runtime" | "pending" | "none"Yesconversation = the run's chat; interactions = rebuilt from its LLM calls; encrypted = the chat is encrypted and cannot be read here; runtime = it ran on the Agent Runtime, whose output is read on its run page; pending = it finished under a minute ago with nothing recorded yet; its record may still be written, so read it again shortly; none = nothing was recorded.
messagesobject[]YesThe run's messages in order, with long values shortened.
messages[].rolestringYes
messages[].partsobject[]Yes
messages[].parts[].typestringYestext, tool, or the UI part type when it is something else.
messages[].parts[].textstringNoMessage text, for a text part.
messages[].parts[].tool_namestringNoTool called, for a tool part.
messages[].parts[].tool_call_idstringNoThe tool call's id.
messages[].parts[].parent_tool_call_idstringNoFor a delegated agent's call, the delegation call that started that agent.
messages[].parts[].statestringNoThe tool call's final state.
messages[].parts[].inputstringNoThe tool call's arguments as JSON.
messages[].parts[].outputstringNoThe tool result as JSON, including any guardrails ruling.
messages[].parts[].error_textstringNoThe tool call's error text.
truncatedbooleanYesTrue when parts were left out to keep the result small.

enable_schedule_trigger

Required RBAC permission: project:update

Additional access requirement: Requires a user token. Only the schedule actor or someone with organization-wide Projects Can update access can perform this action. Project membership alone permits reading. See Granular Access Control.

Input

ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule to enable.

Output

FieldTypeRequiredDescription
idstringYesThe trigger's id — pass it to get_schedule_trigger.
namestringYesThe trigger's name.
agent_idstringYesId of the agent the schedule runs.
agent_namestring | nullYesName of that agent.
project_idstring | nullYesProject the schedule belongs to, when it is project-scoped.
cron_expressionstringYes5-part cron expression driving the schedule.
timezonestringYesIANA timezone the cron expression is read in.
enabledbooleanYesWhether the schedule is currently picked up when due.
last_executed_atstring | nullYesISO 8601 timestamp of the last time the schedule fired, or null if it never has. Compare with run history when checking schedule activity.
actor_user_idstringYesThe user the scheduled run executes as.
actor_namestring | nullYesDisplay name of that user.
created_atstringYesISO 8601 creation timestamp.

disable_schedule_trigger

Required RBAC permission: project:update

Additional access requirement: Requires a user token. Only the schedule actor or someone with organization-wide Projects Can update access can perform this action. Project membership alone permits reading. See Granular Access Control.

Input

ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule to disable.

Output

FieldTypeRequiredDescription
idstringYesThe trigger's id — pass it to get_schedule_trigger.
namestringYesThe trigger's name.
agent_idstringYesId of the agent the schedule runs.
agent_namestring | nullYesName of that agent.
project_idstring | nullYesProject the schedule belongs to, when it is project-scoped.
cron_expressionstringYes5-part cron expression driving the schedule.
timezonestringYesIANA timezone the cron expression is read in.
enabledbooleanYesWhether the schedule is currently picked up when due.
last_executed_atstring | nullYesISO 8601 timestamp of the last time the schedule fired, or null if it never has. Compare with run history when checking schedule activity.
actor_user_idstringYesThe user the scheduled run executes as.
actor_namestring | nullYesDisplay name of that user.
created_atstringYesISO 8601 creation timestamp.

run_schedule_trigger_now

Required RBAC permission: project:create

Additional access requirement: Requires a user token. Only the schedule actor or someone with organization-wide Projects Can use access can perform this action. Project membership alone permits reading. See Granular Access Control.

Input

ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule to run.

Output

FieldTypeRequiredDescription
blocked_byobject | nullYesWhy this tick was skipped, including the blocking run and its frozen deadline.
blocked_by.phase"starting" | "running" | "stopping"Yes
blocked_by.runIdstring | nullYes
blocked_by.runtimeTaskIdstring | nullYes
blocked_by.startedAtstringYes
blocked_by.elapsedSecondsintegerYes
blocked_by.deadlinestring | nullYes
blocked_by.maximumDurationSecondsinteger | nullYes
idstringYesThe run's id — pass it to get_schedule_trigger_run.
trigger_idstringYesId of the schedule this run belongs to.
run_kind"due" | "manual"Yesdue = fired by the schedule; manual = started by a person.
status"running" | "success" | "failed" | "cancelled"YesCurrent state of the run.
started_atstring | nullYesISO 8601 timestamp the run started.
completed_atstring | nullYesISO 8601 timestamp the run settled; null while still running.
errorstring | nullYesFailure text when the run failed or was skipped — for example a run skipped because the previous one was still in progress.
chat_conversation_idstring | nullYesChat conversation holding the run's transcript, when linked.
runtime_task_idstring | nullYesAgent Runtime task id, when the run executed on the runtime.
created_atstringYesISO 8601 creation timestamp.