Skip to content

CLI Command Reference

Which command, flag and result should an assistant use? This reference gives the supported CLI 0.2.24 command tree from the frozen snapshot, including required arguments, option defaults and corresponding MCP tools. Use the CLI guide for installation, workflow selection and interpreting a command that is still running.

For the Invoice intake example, first find the workflow and its Check invoice flow. In the app, open Workflows, choose the workflow, select its flow, then use Test current flow when you are ready to test it. With an assistant, start with cai workflow list --json; its data.items entries supply the workflow IDs and names. The example below selects the matching IDs from that inventory before reading the flow’s accepted inputs. It assumes you already built the first workflow.

Angle brackets mark values to replace; square brackets mark optional arguments in the syntax summaries. In option tables, Required means Commander requires the flag. Additional flag combinations appear beside the affected entries. A dash in the default column means the command definition supplies no explicit default. Examples here assume no pinned workflow and pass --workflow <workflowId> when needed. Keep the displayed units: run timeouts use milliseconds, while connection and conversation waits use seconds.

MCP links name typed tools, including commands that split into separate tools or share one tool. A hosted replacement runs in the MCP server with the inputs in its linked contract. Follow that contract when switching from a terminal to MCP.

List workflows and note the data.items entry named Invoice intake; its id is <workflowId> below.

Terminal window
cai workflow list --json

List that workflow’s flows, then note the data.items entry named Check invoice; its id is <flowId>.

Terminal window
cai flow list --workflow <workflowId> --json

Read that flow’s accepted inputs before choosing values for a run.

Terminal window
cai run inputs <flowId> --flow --workflow <workflowId> --json

The MCP counterpart run_inputs takes workflowId, nodeIdOrFlowId: "<flowId>" and flow: true.

--json, --workflow and --api-url work before or after a subcommand.

OptionMeaning
-V, --versionoutput the version number
--jsonmachine-readable output on stdout
--workflow <id>workflow id (overrides cai use and CAI_WORKFLOW)
--api-url <url>backend base URL (overrides CAI_API_URL)
--id <value>positional id, for ids that begin with ”-”
-h, --helpDisplay command help.

Workflow selection is --workflow → CAI_WORKFLOW → .cai.json in the current directory → the configured default. --id carries a positional ID that starts with a hyphen.

Normal JSON results contain ok, command and data; most failures contain ok: false and error, including its code and message. An invalid workflow validate --json exits 1 with ok: true and data.valid: false. Warnings also go to stderr.

Interactive authorization can emit newline-delimited JSON events before the final result; after those events, the final result occupies the last stdout line.

Exit codeMeaning
0Successful CLI result, including acceptance of asynchronous work before it finishes. Help and version requests also use zero.
1Input, validation, action or unexpected local CLI error; inspect error.code. A dispatched run also exits 1 on pause, failure or timeout.
2State conflict.
3Authentication or authorization failure.
4Transport, server, protocol-response or approval-poll error.

An accepted message is not a completed reply: agent conversation send without --wait returns accepted. For run and approval waits, follow the CLI result guidance before repeating a write.

Input formAccepted content
run node --inputs, run flow --inputsInline JSON, a JSON file path, or - for stdin.
--js-file on expression-writing commandsUTF-8 file path or - for stdin; mutually exclusive with the inline expression flag.
schema create/update --from-json, data collection create --from-jsonJSON file path or - for stdin.
data create/update --fieldsInline JSON object, file path or - for stdin; keys are field IDs.
data import --fileCSV file path; --mode dryRun validates and --mode commit writes.
agent create/update --instructions-file, agent add-file --file, file share <path>Local file paths. These do not use - as a stdin shortcut.
GroupDirect children
caiauth, approval, signup, connect, skills, docs, upgrade, config, doctor, agent, use, workflow, file, flow, integration, node, expr, run, exec, connection, branch, data, deps, events, schema, trigger, template-setup, label
cai authlogin, password, token, key, logout, status
cai approvalresume
cai signupemail, verify
cai skillsinstall, update, status
cai configreset
cai agentsetup, list, get, create, update, delete, visibility, add-workflow, add-action, update-tool, remove-tool, files, add-file, tools, publish-preflight, publish, present, versions, conversation, test
cai agent conversationlist, create, status, history, approve, deny, send
cai workflowlist, create, get, rename, set-description, duplicate, delete, versions, releases, history, restore, save, document, state, outline, status, validate, publish
cai fileshare
cai flowlist, get, create, rename, delete, outputs, duplicate, layout, reorder, output, for-each, input
cai flow outputadd, update, delete
cai flow inputadd, update, delete
cai integrationsearch, actions, action
cai nodeadd, duplicate, set-flow, get, declare-output, props, reload, status, set, set-connection, connect, disconnect, only-when, optional-props, enable-prop, disable-prop, options, continue-on-error, rename, delete
cai exprcontext, validate, set, ops, decompile
cai runnode, flow, inputs, discover
cai execlist, get, flow, node, tree
cai connectionlist, update, delete, request, connect
cai branchlist, add, update, delete, connect, reorder
cai datacollections, fields, query, get, create, update, delete, delete-many, import, copy-to-live, collection
cai data collectioncreate
cai schemalist, get, resolve, create, update, delete
cai triggerlist, audit, get, test-events, search, props, options, create, events, event, select-event, replay, set-enabled, rename, delete
cai template-setupstatus, complete
cai labellist, set

Generated for CLI 0.2.24 from the frozen Commander snapshot rooted at buildProgram(). Generator checking compares this page with the frozen snapshot; it does not verify sibling repositories for newer code.

The catalog contains 164 supported operations and 25 command groups, counting the root cai group. cai signup is both an operation and a group.

cai run workflow is excluded: its handler always fails with NOT_IMPLEMENTED; use cai run flow with a chosen flow.

CLI source: all 26 command files plus shared command, argument, configuration and result code. Help comparison: marketing/docs/scripts/cli-help-0.2.24.txt. The export omits 14 third-level help sections; the captured Commander definitions supply them.

MCP counterparts come from the 149-tool typed registry, its operation dispositions and the generated command map. Catalog version: ac0cbaace014.

The MCP disposition column distinguishes direct tools, split tools, merged commands, hosted replacements and commands omitted from MCP. Local commands run on the assistant’s machine; build-chat presentation requires an in-product chat for its card.

Authenticate this machine with Controller AI.

Subcommands: login, password, token, key, logout, status.

Open a browser and authorize a revocable Controller AI CLI credential.

Terminal window
cai auth login [options]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Starts a local device-code login even though the MCP request is already OAuth-authorized.
OptionRequiredExplicit defaultMeaning
--no-openNo—headless/remote mode: print the URL without opening a browser
--timeout <seconds>No—maximum time to wait for browser approval

The wait defaults to the device authorization expiry returned by the server. A supplied —timeout is capped at that expiry.

Development fallback: exchange explicit email/password flags for a JWT.

Terminal window
cai auth password [options]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Accepts a development email/password credential on the local machine.
OptionRequiredExplicit defaultMeaning
--email <email>Yes—account email
--password <password>Yes—account password

Persist a credential you already hold (cai_, caib_, JWT, or sk- API key).

Terminal window
cai auth token [options]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Writes a bearer token into local CLI configuration.
OptionRequiredExplicit defaultMeaning
--token <token>Yes—bearer credential

Migration/development only: mint a legacy API key using a browser JWT.

Terminal window
cai auth key [options]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Mints a long-lived local credential and is not an MCP account operation.
OptionRequiredExplicit defaultMeaning
--name <name>No"cai"label for the key

Remove the locally stored credential.

Terminal window
cai auth logout [options]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Deletes local CLI credentials; it is not integration connection revocation.
OptionRequiredExplicit defaultMeaning
--revokeNofalserevoke the current CLI credential before removing it locally

Show the current account, backend, credential kind, and workflow.

Terminal window
cai auth status [options]
CLI surfaceMCP counterpartMCP disposition
Local CLIaccount_statusHosted replacement. The host reports the authenticated grant and combines it with server health facts.

Resume polling a durable browser-approved operation.

Subcommands: resume.

Resume an existing approval by ID without dispatching its gated command again.

Terminal window
cai approval resume [options] <id>
CLI surfaceMCP counterpartMCP disposition
CLIapproval_resumeDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<id>Yesapproval intent ID printed by the interrupted command

Create a Controller AI workspace without a browser account.

Terminal window
cai signup [options] [command]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. The OAuth-authorized caller already has a provisioned account; root signup is local bootstrap.
OptionRequiredExplicit defaultMeaning
--name <name>No—display name for the agent-created account
--forceNofalsereplace an existing valid credential after signup succeeds

Send a verification code to the account owner.

Terminal window
cai signup email [options] <address>
CLI surfaceMCP counterpartMCP disposition
Local CLIaccount_claim_startHosted replacement. Uses the OAuth grant durable email-claim adapter instead of local CLI credential replacement.
ArgumentRequiredMeaning
<address>YesOwner’s email address to claim the current agent account.

Verify the account owner email with its 6-digit code.

Terminal window
cai signup verify [options] <code>
CLI surfaceMCP counterpartMCP disposition
Local CLIaccount_claim_verifyHosted replacement. Uses the OAuth grant durable email verification adapter.
ArgumentRequiredMeaning
<code>YesVerification code sent to that email by cai signup email.

Install skills, authorize this machine, and verify the complete setup.

Terminal window
cai connect [options]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Installs local skills, opens a browser, and verifies a local project.
OptionRequiredExplicit defaultMeaning
--target <target>No"auto"auto, agents, codex, claude, cursor, copilot, all, or project
--project-dir <path>No—project root for the open-standard project target
--forceNofalsereplace existing unmanaged Controller AI skill folders
--no-openNo—headless/remote mode: print the URL without opening a browser
--timeout <seconds>No—maximum time to wait for browser approval

Its browser-authorization wait defaults to the device authorization expiry returned by the server. A supplied —timeout is capped at that expiry.

Install and update Controller AI guidance for your agent.

Subcommands: install, update, status.

Install the verified skill set bundled with this CLI.

Terminal window
cai skills install [options]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Writes guidance into a caller local project, which the hosted server cannot access.
OptionRequiredExplicit defaultMeaning
--target <target>No"auto"auto, agents, codex, claude, cursor, copilot, all, or project
--project-dir <path>No—project root for the open-standard project target
--forceNofalsereplace an existing unmanaged skill with the same name

Fetch, verify, and install the latest hosted Controller AI skill set.

Terminal window
cai skills update [options]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Updates guidance files in a caller local project.
OptionRequiredExplicit defaultMeaning
--target <target>No"auto"auto, agents, codex, claude, cursor, copilot, all, or project
--project-dir <path>No—project root for the open-standard project target
--forceNofalsereplace an existing unmanaged skill with the same name

Verify installed Controller AI skills, versions, and digests.

Terminal window
cai skills status [options]
CLI surfaceMCP counterpartMCP disposition
Local CLIguide_get
guide_list
Hosted replacement. guide_list and guide_get serve the bundled server guidance without inspecting a local project.
OptionRequiredExplicit defaultMeaning
--target <target>No"all"auto, agents, codex, claude, cursor, copilot, all, or project
--project-dir <path>No—project root for the open-standard project target

Read Controller AI documentation as Markdown in the terminal.

Terminal window
cai docs [options] [path]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Fetches documentation into a local terminal; hosted clients read guide_get or the docs site.
ArgumentRequiredMeaning
[path]Nodocumentation path, for example for-ai-agents/codex
OptionRequiredExplicit defaultMeaning
--listNofalseprint the top-level documentation index from llms.txt

With no path, fetches for-ai-agents. —list fetches llms.txt; a supplied page path is fetched as Markdown.

Show the CLI upgrade command and update skills for detected assistants.

Terminal window
cai upgrade [options]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Prints the local CLI upgrade command and updates local skills; nothing to do on a hosted server.

Inspect and reset CLI configuration.

Subcommands: reset.

Clear workflow pins while preserving credentials and other settings.

Terminal window
cai config reset [options]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Clears a local workflow pin; typed MCP calls are stateless.
OptionRequiredExplicit defaultMeaning
--localNo—clear only the exact-cwd .cai.json workflow pin
--globalNo—clear only the workflow pin in the configured config file

Verify authentication, API access, workflow pin, runtime, and installed skills.

Terminal window
cai doctor [options]
CLI surfaceMCP counterpartMCP disposition
Local CLIaccount_statusHosted replacement. Local runtime checks do not apply; useful account and version facts are in account_status.

Build and test mutable agent drafts, then publish immutable live versions.

Subcommands: setup, list, get, create, update, delete, visibility, add-workflow, add-action, update-tool, remove-tool, files, add-file, tools, publish-preflight, publish, present, versions, conversation, test.

Set up Controller AI end to end for installed coding assistants.

Terminal window
cai agent setup [options]
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Configures local coding assistants on the user machine; nothing to do on a hosted server.
OptionRequiredExplicit defaultMeaning
--client <client>No"all"claude-code, codex, cursor, or all
--statusNofalseshow installed state and the action plan without changing anything
--yesNofalseapprove setup actions without prompting
--skills-scope <scope>No"global"global or project

List agents visible to the current account.

Terminal window
cai agent list [options]
CLI surfaceMCP counterpartMCP disposition
CLIagent_listDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--search <text>No—filter by name
--ownership <mine|shared>No"mine"ownership filter

Inspect the agent configuration visible to this account and its version status.

Terminal window
cai agent get [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_getDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.

Create a private draft agent; nothing becomes live until publish.

Terminal window
cai agent create [options]
CLI surfaceMCP counterpartMCP disposition
CLIagent_createDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--name <name>Yes—agent display name
--instructions <text>No—agent instructions
--instructions-file <path>No—read agent instructions from a UTF-8 file
--disabledNofalsecreate the draft disabled

Update draft configuration or agent runtime state (in separate commands).

Terminal window
cai agent update [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_set_enabled
agent_update
Split. Choose the tool for the intended operation.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--name <name>No—new display name
--instructions <text>No—new agent instructions
--instructions-file <path>No—read instructions from a UTF-8 file
--disabledNo—disable the agent and pause its runtime immediately
--enabledNo—enable the agent immediately

Soft-delete an agent, revoke live access, and attempt to stop active sessions.

Terminal window
cai agent delete [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_deleteDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--confirmNofalseconfirm soft deletion, live-access revocation, and best-effort active-session termination

Change live agent access (organization requires publishing the agent first; no public mode).

Terminal window
cai agent visibility [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_visibility_setDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--value <private|organization>Yes—private revokes organization access; organization shares the published version

Add a follow-live workflow tool with a backend-generated name to the draft.

Terminal window
cai agent add-workflow [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_tool_workflow_addDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--workflow-id <id>Yes—workflow containing the tool flow
--flow <flowId>Yes—flow exposed to the agent
--description <text>No—description the model uses when choosing the tool
--require-confirmationNofalsepause every invocation for an explicit user approval before the workflow runs
--slack-connection <connectionId>No—your active Slack connection; requires —slack-channel and —require-confirmation
--slack-channel <channelId>No—approval channel; requires —slack-connection
--slack-channel-name <name>No—optional approval channel display name
--slack-approver <slackUserId>No—who can approve in Slack; repeat for 1–8 users; requires —slack-channel; without it anyone in the channel can approve

Attach one ready integration action to the draft; explicitly review its confirmation policy.

Terminal window
cai agent add-action [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_tool_action_addDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--integration <slug>Yes—exact slug from cai integration search
--action <key>Yes—exact action key from cai integration actions
--connection <id>No—active connection when this integration requires auth
--description <text>No—when the agent should choose this action
--require-confirmationNofalserequire approval before each run; default is no approval, so decide for writes or spend
--slack-connection <connectionId>No—your active Slack connection; requires —slack-channel and —require-confirmation
--slack-channel <channelId>No—approval channel; requires —slack-connection
--slack-channel-name <name>No—optional approval channel display name
--slack-approver <slackUserId>No—who can approve in Slack; repeat for 1–8 users; requires —slack-channel; without it anyone in the channel can approve

Update a draft tool; action connection grants apply immediately without publishing.

Terminal window
cai agent update-tool [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_tool_updateDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--tool <toolId>Yes—draft tool id
--description <text>No—new routing description
--connection <id>No—rebind a ready integration action to another connection
--require-confirmationNo—require approval before every invocation
--no-confirmationNo—run without approval; use only after reviewing writes, messages, deletion, and spend
--slack-connection <connectionId>No—your active Slack connection; requires —slack-channel and an approval-requiring tool
--slack-channel <channelId>No—approval channel; requires —slack-connection
--slack-channel-name <name>No—optional approval channel display name
--slack-approver <slackUserId>No—who can approve in Slack; repeat for 1–8 users; requires —slack-channel; without it anyone in the channel can approve
--no-slackNo—remove Slack approval routing from the draft tool

Remove a draft tool; direct-action detachment revokes live authorization immediately.

Terminal window
cai agent remove-tool [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_tool_removeDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--tool <toolId>Yes—draft tool id

List reference and runtime files. Non-managers receive the published view regardless of the requested view.

Terminal window
cai agent files [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_file_listDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--space <knowledge|shared|runtime>No—knowledge = agent reference material (draft, publishes); shared = runtime workspace files seen live; runtime is an alias for shared
--environment <live|dev>No—shared runtime environment; not valid for knowledge
--liveNo—request published-live instead of owner-current; non-managers receive published-live regardless
--search <text>No—filter by file name or path
--folder-prefix <path>No—filter to a folder path and its descendants
--cursor <cursor>No—opaque cursor from the previous page; repeat identical filters
--limit <n>No"50"files per page (default 50, max 200)

Add a reference file to the draft or a runtime file to the shared workspace.

Terminal window
cai agent add-file [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_knowledge_file_add
agent_workspace_file_add
Split. Choose the tool for the intended operation.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--file <path>Yes—local file to add
--name <fileName>No—name visible to the agent
--type <fileType>No—txt, md, json, csv, html, or xml
--space <knowledge|shared|runtime>No"knowledge"knowledge: reference material in the draft; shared: runtime workspace files; runtime is an alias for shared.

Knowledge files update the draft and require publication for Live. Shared/runtime files are available without publication and apply when enabled or on the next turn. Every successful add creates another file; read the returned file identity or list files before retrying.

List draft tools for an owner or published tools for a shared user.

Terminal window
cai agent tools [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_tool_listDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.

Check the agent draft and every attached tool before publishing.

Terminal window
cai agent publish-preflight [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_publish_preflightDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.

Snapshot the draft and move every existing live conversation to the new version.

Terminal window
cai agent publish [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_publishDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--name <releaseName>No—optional release name

The new immutable snapshot replaces the version used by existing Live conversations. Publication stops in-flight Live sessions and expires unexecuted approvals; resolve them first. There is no rollback: fix the draft and publish again.

Return an agent summary and app link, and request a card when a build chat is available.

Terminal window
cai agent present [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLI with build-chat presentationagent_presentHosted replacement. Returns a hosted agent summary and app link for the MCP host to present.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--description <text>No—one-line user-facing summary shown on the card
--updatedNofalsethis re-presents an agent changed by a follow-up request

A build chat is needed for the card. Check presentedInChat and cardDeliveryFailed; appUrl is still returned when it can be resolved.

List immutable published versions.

Terminal window
cai agent versions [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_version_listDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.

Verify owner-only Test/draft or latest-published Live agent conversations.

Subcommands: list, create, status, history, approve, deny, send.

List verification conversations for an agent.

Terminal window
cai agent conversation list [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_conversation_listDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--mode <dev|live>No—Filter to Test (draft) or Live conversations.

Create a Live conversation by default; pass —draft for an owner-only Test conversation.

Terminal window
cai agent conversation create [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_conversation_createDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--draftNo—owner-only Test: current agent draft and workflow development heads
--liveNo—Live: latest published agent and workflow releases (default)
--title <title>No—conversation title
--model <model>No—runtime model override

—draft and —live are mutually exclusive. With neither flag, the new conversation uses Live.

Read the conversation mode, adopted version, model and status.

Terminal window
cai agent conversation status [options] <conversationId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_conversation_statusDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<conversationId>YesConversation ID from cai agent conversation list or create.

Read persisted messages, events, and pending permission requests.

Terminal window
cai agent conversation history [options] <conversationId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_conversation_historyDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<conversationId>YesConversation ID from cai agent conversation list or create.
OptionRequiredExplicit defaultMeaning
--lastNo—aggregates the assistant turn: status, text, tool-call summary, cost

Approve one pending tool request and resume the active conversation.

Terminal window
cai agent conversation approve [options] <conversationId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_conversation_approveDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<conversationId>YesConversation ID from cai agent conversation list or create.
OptionRequiredExplicit defaultMeaning
--request <requestId>Yes—exact requestId from conversation history
--tool <toolName>No—normally unnecessary; server knows the tool; if needed, pass exact mcp__controllerai__tool_ name

Deny one pending tool request and resume the active conversation.

Terminal window
cai agent conversation deny [options] <conversationId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_conversation_denyDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<conversationId>YesConversation ID from cai agent conversation list or create.
OptionRequiredExplicit defaultMeaning
--request <requestId>Yes—exact requestId from conversation history
--tool <toolName>No—normally unnecessary; server knows the tool; if needed, pass exact mcp__controllerai__tool_ name
--message <reason>No—reason returned to the agent

Send a message, optionally waiting for a verifiable persisted reply.

Terminal window
cai agent conversation send [options] <conversationId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_conversation_sendDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<conversationId>YesConversation ID from cai agent conversation list or create.
OptionRequiredExplicit defaultMeaning
--message <text>Yes—message to send
--waitNofalsewait for the next completed persisted assistant reply
--timeout <seconds>No"300"Reply wait in seconds, greater than 0 and at most 600; checked only with —wait.

Create a Test conversation by default, send a message and verify its persisted reply; pass —live for the published version.

Terminal window
cai agent test [options] <agentId>
CLI surfaceMCP counterpartMCP disposition
CLIagent_testDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<agentId>YesAgent ID from cai agent list.
OptionRequiredExplicit defaultMeaning
--message <text>Yes—verification prompt
--draftNo—owner-only Test: current agent draft and workflow development heads (default)
--liveNo—Live: latest published agent and workflow releases
--title <title>No"CLI verification"conversation title
--model <model>No—runtime model override
--timeout <seconds>No"300"Reply wait in seconds, greater than 0 and at most 600.

—draft and —live are mutually exclusive. Each invocation creates a persisted conversation and executes real tools with usage charges; inspect that conversation before retrying.

Pin a default workflow so —workflow can be omitted.

Terminal window
cai use [options] <workflowId>
CLI surfaceMCP counterpartMCP disposition
Local CLI—Omitted from MCP. Persists a local workflow pin; every typed workflow call carries an explicit id.
ArgumentRequiredMeaning
<workflowId>Yesworkflow id to pin as the default

Create, inspect, test and publish workflows.

Subcommands: list, create, get, rename, set-description, duplicate, delete, versions, releases, history, restore, save, document, state, outline, status, validate, publish.

List workflows visible to this account.

Terminal window
cai workflow list [options]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_listDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--limit <n>No"25"max rows

Create and select a named workflow.

Terminal window
cai workflow create [options]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_createDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--name <name>Yes—workflow name

Fetch one workflow.

Terminal window
cai workflow get [options] [workflowId]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_getDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
[workflowId]Noworkflow id (defaults to the pinned one)

Rename a workflow (PATCH /workflow/:id).

Terminal window
cai workflow rename [options] [workflowId]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_renameDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
[workflowId]Noworkflow id (defaults to the pinned one)
OptionRequiredExplicit defaultMeaning
--name <name>Yes—new workflow name

Set a workflow’s description.

Terminal window
cai workflow set-description [options] [workflowId]

Aliases: describe.

CLI surfaceMCP counterpartMCP disposition
CLIworkflow_description_setDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
[workflowId]Noworkflow id (defaults to the pinned one)
OptionRequiredExplicit defaultMeaning
--description <text>Yes—new description ("" clears it)

Copy the workflow definition into a new unpublished workflow. Records are not copied, and flow and node IDs are preserved.

Terminal window
cai workflow duplicate [options] [workflowId]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_duplicateDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
[workflowId]Noworkflow id (defaults to the pinned one)
OptionRequiredExplicit defaultMeaning
--useNofalsepin the copy as the default workflow

Select the returned copy ID before editing: flow and node IDs are only unique within a workflow, so stale workflow context edits the original. —use selects the copy as the configured default.

Delete a workflow after detaching dependent draft and Live agent tools.

Terminal window
cai workflow delete [options] <workflowId>
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_deleteDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<workflowId>Yesworkflow id — required explicitly, never the pinned default
OptionRequiredExplicit defaultMeaning
--yesYes—confirm soft deletion and deployed-trigger teardown
--forceNofalsedeprecated compatibility flag; ignored because agent dependents must be detached first

The deprecated —force flag is ignored. Both draft and Live agent dependencies block deletion. The soft delete commits before external trigger teardown: a teardown error can mean the workflow is already deleted and cleanup remains. There is no public undelete.

Read the development and live versions of a workflow.

Terminal window
cai workflow versions [options] [workflowId]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_version_listDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
[workflowId]Noworkflow id (defaults to the pinned one)

Published release checkpoints.

Terminal window
cai workflow releases [options] [workflowId]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_release_listDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
[workflowId]Noworkflow id (defaults to the pinned one)

Version-state history — the ids cai workflow restore takes.

Terminal window
cai workflow history [options]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_historyDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--version <workflowVersionId>No—defaults to the current development version
--group <groupId>No—expand one group into its individual states

Restore an earlier saved definition into the development version.

Terminal window
cai workflow restore [options]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_state_restoreDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--state <workflowVersionStateId>Yes—state id from cai workflow history
--version <workflowVersionId>No—defaults to the current development version

Use —state with a saved state ID, not a history-group ID or positional argument. Restore creates a new development head and retains newer history. A listed state can be outside the plan’s restore window. Live, records and external effects remain unchanged; enabled Live triggers keep using the current release until publication.

Save a NAMED development snapshot you can restore to later.

Terminal window
cai workflow save [options]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_state_saveDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--name <name>Yes—label for this checkpoint

Complete JSON document for the development head or one historical state.

Terminal window
cai workflow document [options]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_document_getDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--state <workflowVersionStateId>No—read a historical state from cai workflow history instead of the head

Bounded development-state metadata and per-flow summaries.

Terminal window
cai workflow state [options]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_state_getDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--state <workflowVersionStateId>No—read a historical state from cai workflow history instead of the head
--flow <flowId>No—include node and edge detail for one exact flow id

Compact orientation map: flows, inputs/outputs, nodes with deps, triggers, data types.

Terminal window
cai workflow outline [options] [workflowId]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_outlineDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
[workflowId]Noworkflow id (defaults to the pinned one)

Publish state: is development ahead of live, do triggers fire.

Terminal window
cai workflow status [options]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_statusDirect. Typed counterpart; use its input schema.

Deep-validate the development workflow: required props, connections, wiring, expressions, types, subflows, branches, triggers.

Terminal window
cai workflow validate [options]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_validateDirect. Typed counterpart; use its input schema.

Invalid validation exits 1 while the JSON result still has ok: true and data.valid: false. Read the validation fields as well as the exit code.

Publish the development version as a live release.

Terminal window
cai workflow publish [options]
CLI surfaceMCP counterpartMCP disposition
CLIworkflow_publishDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--name <name>No—release name
--acknowledge-dual-dispatchNo—publish even though armed test events can run one real event in both development and live
--acknowledge-validation-errorsNo—Publish despite validation errors — only after the user explicitly approved the listed issues.

Publication copies the development definition and schemas, activates enabled Live triggers, and refreshes following Live agent conversations. Development records are never copied; agent workflow tools follow the new release without an agent republish. Inspect warnings for interface changes or failed conversation refreshes. Validation-error and dual-dispatch acknowledgements are separate flags.

Hand files back to the user inside the build chat.

Subcommands: share.

Share one file with the user as a downloadable card in this build chat. Use it to deliver reports, exports, or other artifacts you produced.

Terminal window
cai file share [options] <path>
CLI surfaceMCP counterpartMCP disposition
Hosted-only CLIfile_shareHosted replacement. Stores inline bytes as a private artifact and returns its browser-openable link.
ArgumentRequiredMeaning
<path>YesRegular local file path to share with the build chat.
OptionRequiredExplicit defaultMeaning
--name <displayName>No—name shown on the file card (defaults to the file name)

Hosted-only CLI operation: requires a builder-session credential. It accepts a regular local file up to 25 × 1024 × 1024 bytes. Check sharedInChat to confirm delivery.

Flows — a workflow has many canvases.

Subcommands: list, get, create, rename, delete, outputs, duplicate, layout, reorder, output, for-each, input.

List the flows on this workflow.

Terminal window
cai flow list [options]
CLI surfaceMCP counterpartMCP disposition
CLIflow_listDirect. Typed counterpart; use its input schema.

Nodes, edges and inputs of one flow.

Terminal window
cai flow get [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIflow_getDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.

Create a new flow canvas.

Terminal window
cai flow create [options]
CLI surfaceMCP counterpartMCP disposition
CLIflow_createDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--name <name>Yes—Name for the new flow, such as Check invoice.

Rename a flow.

Terminal window
cai flow rename [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIflow_renameDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.
OptionRequiredExplicit defaultMeaning
--name <name>Yes—Replacement flow name.

Delete a flow.

Terminal window
cai flow delete [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIflow_deleteDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.

Declared outputs of a flow.

Terminal window
cai flow outputs [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIflow_output_listDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.

Copy a flow with fresh ids for every node and edge.

Terminal window
cai flow duplicate [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIflow_duplicateDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.

Deterministically tidy positions after headless builds; an open builder auto-tidies while you build.

Terminal window
cai flow layout [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIflow_layoutDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.

Reorder the workflow’s flows (presentation order, not execution order).

Terminal window
cai flow reorder [options]
CLI surfaceMCP counterpartMCP disposition
CLIflow_reorderDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--order <flowIds>Yes—every flow id, comma-separated, in the new order

Flow outputs — declare these BEFORE adding a Return response node.

Subcommands: add, update, delete.

Declare an output a flow returns.

Terminal window
cai flow output add [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIflow_output_addDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.
OptionRequiredExplicit defaultMeaning
--display <name>Yes—human-readable output label
--type <ctype>Yes—e.g. text / number / list.text / custom.invoice
--name <name>No—internal snake_case name (generated from —display when omitted)
--description <text>No—Description of the returned value.

Update a flow output (Return response props are kept in sync).

Terminal window
cai flow output update [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIflow_output_updateDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.
OptionRequiredExplicit defaultMeaning
--output <id>Yes—flow output id
--name <name>No—internal snake_case payload key callers read; a —display rename regenerates it unless —name is set
--display <name>No—human label
--type <ctype>No—Replacement output data type, such as text or number.
--description <text>No—Replacement description of the returned value.

Supply at least one of —name, —display, —type or —description. An empty —description clears this output description.

Remove a flow output (its Return response prop goes too).

Terminal window
cai flow output delete [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIflow_output_deleteDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.
OptionRequiredExplicit defaultMeaning
--output <id>Yes—Output ID from cai flow outputs for this flow.

Build the for-each pattern; the core scaffold is atomic and maxItems is verified afterward.

Terminal window
cai flow for-each [options]
CLI surfaceMCP counterpartMCP disposition
CLIflow_for_each_scaffoldDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--flow <flowId>Yes—parent flow holding the list-producing node
--from <nodeId>No—node whose output carries the list; optional with —list-js
--source-output <outputId>No—exact opaque outputs[].id from cai node get <nodeId> --json; never a label
--name <bodyFlowName>Yes—name for the new per-item flow
--item-type <type>Yes—one item: a primitive (text|number|date|boolean), an existing/new custom.* type, or a dataRecord.custom.* record
--item-field <id:type[:display]>No—field of a NEW custom item type; repeatable. Omit to reuse an existing custom type
--list-js <expr>No—JS selecting the list from the wired input
--js-file <path|->No—read the list-selection JS from a UTF-8 file or stdin
--list-field <path>No—nested list field under the source output; builds the exact inputs..data path
--max-items <n>No—runtime list cap, 1..10000 (default when omitted: 500)
--item-name <displayName>No—display name of the item flow input
--continue-on-errorNofalsekeep looping when one iteration fails

Flow inputs.

Subcommands: add, update, delete.

Add a flow input.

Terminal window
cai flow input add [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIflow_input_addDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.
OptionRequiredExplicit defaultMeaning
--name <displayName>No—legacy alias for —display; the server derives compiler-current jsBinding
--type <ctype>Yes—data type, e.g. text / number / custom.invoice
--display <name>No—human label used to derive compiler-current jsBinding; legacyBinding is diagnostic
--listNofalsethe input is a list of —type
--optionalNofalseinput is optional
--description <text>No—Description of the value the caller supplies.

Update a flow input.

Terminal window
cai flow input update [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIflow_input_updateDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.
OptionRequiredExplicit defaultMeaning
--input <id>Yes—flow input id
--name <displayName>No—legacy alias for —display; display changes recompute compiler-current jsBinding
--display <name>No—new human label; recomputes jsBinding while legacyBinding stays diagnostic
--type <ctype>No—Replacement input data type, such as text or number.
--description <text>No—Set a non-empty description. An empty string is treated as absent and cannot clear it.
--optionalNo—the input can be omitted by callers
--requiredNo—the input must be supplied by callers
--default-value <literal>No—stored default metadata (JSON when it parses, else a string); an omitted optional input still resolves to null at run time

Supply at least one non-empty —display (or its —name alias), —type, —description, —optional/—required, or —default-value. —optional and —required are mutually exclusive. An empty description is ignored, so it cannot clear the field. Renaming the display changes the current expression binding; read the flow again afterward.

Delete a flow input.

Terminal window
cai flow input delete [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIflow_input_deleteDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.
OptionRequiredExplicit defaultMeaning
--input <id>Yes—Input ID from cai flow get for this flow.

Discover integrations and the actions they publish.

Subcommands: search, actions, action.

Search provider integrations and native registry nodes in one ranked list.

Terminal window
cai integration search [options] <query>
CLI surfaceMCP counterpartMCP disposition
CLIintegration_searchDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<query>Yesintegration, native node, or capability to find
OptionRequiredExplicit defaultMeaning
--actionsNo—only integrations that publish actions
--eventsNo—only integrations that publish trigger events
--agent-attachableNo—only integrations with actions attachable to agents
--limit <n>No"20"maximum ranked integrations to return

List one integration’s actions or search exact action pairs across the catalog.

Terminal window
cai integration actions [options] [query]
CLI surfaceMCP counterpartMCP disposition
CLIintegration_action_listDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
[query]Noaction intent to rank across one or all integrations
OptionRequiredExplicit defaultMeaning
--integration <slug>No—restrict results to one exact integration slug
--agent-attachableNo—only actions attachable directly to agents
--limit <n>No"50"maximum ranked actions to return

Read the full static prop schema of one action before adding or attaching it.

Terminal window
cai integration action [options]
CLI surfaceMCP counterpartMCP disposition
CLIintegration_action_getDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--integration <slug>Yes—exact integration slug
--key <key>Yes—exact action key paired with that integration

Placed workflow nodes — add, configure, wire.

Subcommands: add, duplicate, set-flow, get, declare-output, props, reload, status, set, set-connection, connect, disconnect, only-when, optional-props, enable-prop, disable-prop, options, continue-on-error, rename, delete.

Initialize a discovered integration action with its connection, wiring, optional props, and values.

Terminal window
cai node add [options]

Aliases: init.

CLI surfaceMCP counterpartMCP disposition
CLInode_addDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--flow <flowId>Yes—Destination flow ID from cai flow list.
--key <componentKey>Yes—exact action key from cai integration actions
--node <slug>No—exact integration slug paired with —key (inferred when omitted)
--name <displayName>No—display name; also the outgoing connection label
--after <nodeId>No—wire this upstream node into the new node at creation
--output <main|error>No"main"which system output —after connects from
--connection <id>No—bind an existing connection
--props <jsonOrFile>No—initial prop map; direct values become {value:…}, advanced per-prop writes pass through
--enable-prop <names...>No—optional prop names to materialize at creation

Copy a node into the same flow (offset position, no incoming edges).

Terminal window
cai node duplicate [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_duplicateDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.

Point a subflow node at a flow; its input props are generated from that flow.

Terminal window
cai node set-flow [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_subflow_setDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>Yesa Run flow / Run flow on list node
OptionRequiredExplicit defaultMeaning
--flow <flowId>Yes—target flow to call

Full node record: component, inputs, outputs, connection.

Terminal window
cai node get [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_getDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.

Declare an unverified dynamic output contract from documented response data.

Terminal window
cai node declare-output [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_output_type_declareDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--sample-file <file|->Yes—documented provider response data: a JSON object or a non-empty JSON array of items; - reads stdin

Visible + catalog props with current values and decompiled valueJs.

Terminal window
cai node props [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_prop_listDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.

Reload and reconcile dependent props, then report the readiness change.

Terminal window
cai node reload [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_prop_reloadDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.

Return deterministic configuration readiness and exact blockers.

Terminal window
cai node status [options] <nodeId>

Aliases: output.

CLI surfaceMCP counterpartMCP disposition
CLInode_statusDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.

Set a prop, selecting and verifying the correct storage shape automatically.

Terminal window
cai node set [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_prop_setDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--prop <name>Yes—prop key from cai node props
--value <literal>No—static value (JSON string literals are decoded; other JSON is parsed for non-text props and preserved for text props)
--js <src>No—expression DSL source, compiled server-side before writing
--js-file <path|->No—read expression DSL source from a UTF-8 file or stdin
--raw-expression-json <path|->No—raw expression object as JSON from a UTF-8 file or stdin, written verbatim — the escape hatch for advanced constraints, injected chips, and loop traversals the DSL cannot author
--label <labels...>No—live option label(s), one per value; used to search providers that do not index opaque ids
--expressionNofalsedeprecated compatibility flag; storage is selected automatically

Choose exactly one of —value, —js, —js-file or —raw-expression-json. The deprecated —expression flag does not select how the value is stored.

Bind a connection to an action node.

Terminal window
cai node set-connection [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_connection_setDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--connection <id>Yes—connection id from cai connection list

Wire two nodes; the source output becomes an input on the target.

Terminal window
cai node connect [options]
CLI surfaceMCP counterpartMCP disposition
CLInode_connectDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--from <nodeId>Yes—upstream node
--to <nodeId>Yes—downstream node
--flow <flowId>Yes—flow containing both nodes
--output <main|error>No"main"which system output to wire from

Remove an edge.

Terminal window
cai node disconnect [options]
CLI surfaceMCP counterpartMCP disposition
CLInode_disconnectDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--edge <edgeId>Yes—Edge ID from cai flow get for the connected canvas.

Set or clear a node’s conditional-execution rule.

Terminal window
cai node only-when [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_only_when_setDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--js <expr>No—boolean expression; the node runs only when it is true
--js-file <path|->No—read the boolean expression from a UTF-8 file or stdin
--groups-json <json>No—condition string[][]: expressions in each row are AND-ed; rows are OR-ed
--clearNofalseremove all conditions

Choose —js/—js-file, —groups-json or —clear; these forms are mutually exclusive. In —groups-json, each row combines its expressions with AND, and rows combine with OR.

List togglable optional props.

Terminal window
cai node optional-props [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_optional_prop_listDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.

Enable an optional prop so it becomes settable.

Terminal window
cai node enable-prop [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_optional_prop_setMerged. The explicit enabled boolean replaces the separate enabling command.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--prop <name>Yes—Optional property name from cai node optional-props.

Disable an optional prop and remove its stored value. Reload-dependent fields are recalculated when the prop controls them.

Terminal window
cai node disable-prop [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_optional_prop_setMerged. The explicit enabled boolean replaces the separate disabling command.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--prop <name>Yes—enabled optional prop key from cai node props

Resolved remote dropdown options for a prop.

Terminal window
cai node options [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_prop_optionsDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--prop <name>Yes—Property name from cai node props whose choices you want.
--query <q>No—search term — strongly preferred over paging
--page <n>No—0-based page when not searching
--prev-context <json>No—pagination context returned by a previous options response
--for <prop>=<value>No—override an earlier prop value for option resolution; JSON literals are accepted, bare text is passed as a string; repeatable

Set continue-on-error to an explicit enabled or disabled state.

Terminal window
cai node continue-on-error [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_continue_on_error_setDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--enableNo—Enable continue-on-error.
--disableNo—Disable continue-on-error.

Pass exactly one of —enable or —disable. Disabling removes edges from the Error output.

Rename a node (also renames its outgoing connection label).

Terminal window
cai node rename [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_renameDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--name <displayName>Yes—Replacement node display name.

Delete a node.

Terminal window
cai node delete [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_deleteDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.

The expression surface.

Subcommands: context, validate, set, ops, decompile.

MANDATORY before writing any —js. Lists every in-scope binding.

Terminal window
cai expr context [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLIexpr_contextDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--prop <name>No—the destination prop — adds its expected type and mode
--methodsNofalseinclude the full method catalog (large)

Compile an expression against the node’s real scope. Side-effect free.

Terminal window
cai expr validate [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLIexpr_validateDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--js <src>No—expression DSL source
--js-file <path|->No—read expression DSL source from a UTF-8 file or stdin
--prop <name>No—destination prop — validates against its real type and mode
--mode <text|expression|onlyWhen>No—compile target when —prop is unknown

Context-check, compile, persist to the correct channel, and verify readback.

Terminal window
cai expr set [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLInode_prop_setMerged. node_prop_set exposes the same expression write alongside literal and raw-expression forms.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--prop <name>Yes—destination prop
--js <src>No—expression DSL source
--js-file <path|->No—read expression DSL source from a UTF-8 file or stdin
--forceNofalseoverwrite a stored expression the JS DSL cannot fully express, losing those constructs

The method catalog: which operations exist per data type.

Terminal window
cai expr ops [options]
CLI surfaceMCP counterpartMCP disposition
CLIexpr_operation_listDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--type <ctype>No—restrict to one data type; results are cataloged by base type (for example list.custom.video_calendar -> list)

Read a stored expression as JavaScript-like source.

Terminal window
cai expr decompile [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLIexpr_decompileDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--prop <name>Yes—Property name from cai node props whose expression you want to read.

Run nodes and flows. Integration actions execute against their connected accounts.

Subcommands: node, flow, inputs, discover.

Run one node in isolation on the development version and return its resolvedConfigs.

Terminal window
cai run node [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLIrun_nodeDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesNode ID from cai flow get in the selected workflow.
OptionRequiredExplicit defaultMeaning
--inputs <json|file|->No—inline JSON or a JSON file; - reads stdin
--timeout <ms>No"120000"how long to wait for the run to finish

This executes real integration actions against connected accounts and spends usage. An isolated run does not execute upstream nodes. Only completed is success; pause, another terminal status or timeout exits nonzero with error.detail.workflowExecutionId and lastSnapshot. Inspect that existing execution instead of dispatching another run.

Run one flow end-to-end on the development or published live version.

Terminal window
cai run flow [options] <flowId>
CLI surfaceMCP counterpartMCP disposition
CLIrun_flowDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowId>YesFlow ID from cai flow list in the selected workflow.
OptionRequiredExplicit defaultMeaning
--inputs <json|file|->No—inline JSON or a JSON file; - reads stdin
--target <dev|live>No"dev"Development version or published live release.
--confirm-liveNofalseacknowledge LIVE run side effects and usage
--timeout <ms>No"300000"how long to wait for the run to finish

—target live requires —confirm-live. Both targets execute real integration actions and spend usage when the flow contains them. Only completed is success; paused, completed_with_error, failed, cancelled or timeout exits nonzero with error.detail.workflowExecutionId and lastSnapshot. Inspect that execution instead of redispatching; a polling timeout does not stop it.

Show inputs for a node, or pass —flow to inspect a flow before run flow.

Terminal window
cai run inputs [options] <nodeIdOrFlowId>
CLI surfaceMCP counterpartMCP disposition
CLIrun_inputsDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeIdOrFlowId>YesNode ID from cai flow get, or flow ID from cai flow list when using —flow.
OptionRequiredExplicit defaultMeaning
--flowNofalsetreat the argument as a flow id

Probe a component output with a temporary node. Connected actions can have real effects.

Terminal window
cai run discover [options]
CLI surfaceMCP counterpartMCP disposition
CLIrun_discoverDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--node <slug>Yes—integration node slug
--key <componentKey>Yes—exact action key from cai integration actions
--connection <id|none>Yes—connection id, or “none” for a component that needs no auth
--props <json|file|->No—prop values, same per-prop shape as node add
--enable <prop>No—optional prop to enable first; repeatable
--keepNofalsekeep the scratch node instead of deleting it
--timeout <ms>No—poll budget, backend caps at 55000

Read execution history.

Subcommands: list, get, flow, node, tree.

Recent workflow executions.

Terminal window
cai exec list [options]
CLI surfaceMCP counterpartMCP disposition
CLIexecution_listDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--limit <n>No"10"max rows

One workflow execution with its flat node executions.

Terminal window
cai exec get [options] <workflowExecutionId>
CLI surfaceMCP counterpartMCP disposition
CLIexecution_getDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<workflowExecutionId>YesWorkflow execution ID from cai run node, cai run flow or cai exec list.

Returns at most the 200 newest node executions, with nodeExecutionsTruncated when more exist. Use cai exec tree to page through the nodes.

Node-by-node detail of one flow execution (includes resolvedConfigs).

Terminal window
cai exec flow [options] <flowExecutionId>
CLI surfaceMCP counterpartMCP disposition
CLIexecution_flow_getDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<flowExecutionId>YesFlow execution ID from cai exec tree.

One node execution: status, output, and resolvedConfigs.

Terminal window
cai exec node [options] <nodeExecutionId>
CLI surfaceMCP counterpartMCP disposition
CLIexecution_node_getDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeExecutionId>YesNode execution ID from cai exec tree or cai exec get.
OptionRequiredExplicit defaultMeaning
--fullNofalseprint the untruncated output blob

Paginated node-by-node status rows across a workflow execution.

Terminal window
cai exec tree [options] <workflowExecutionId>
CLI surfaceMCP counterpartMCP disposition
CLIexecution_treeDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<workflowExecutionId>YesWorkflow execution ID from cai run node, cai run flow or cai exec list.
OptionRequiredExplicit defaultMeaning
--limit <n>No—maximum rows to return (1-200; default 50)
--cursor <opaque>No—continue from a returned execution-tree cursor
--status <status...>No—filter by one or more statuses: pending, running, completed, completed_with_error, failed, skipped, cancelled
--flow <flowId>No—filter by one exact workflow flow id

If any node-detail read fails, the command exits nonzero and returns successfully read rows in error.detail.partialData. A cursor belongs to one execution and cannot be reused with a different limit or filters.

Existing user connections.

Subcommands: list, update, delete, request, connect.

List account connections without requiring workflow context.

Terminal window
cai connection list [options]
CLI surfaceMCP counterpartMCP disposition
CLIconnection_listDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--integration <slug>No—only connections for this integration
--node <slug>No—legacy alias for —integration

Rename a connection or change whether it is the integration default.

Terminal window
cai connection update [options] <connectionId>
CLI surfaceMCP counterpartMCP disposition
CLIconnection_updateDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<connectionId>Yesconnection id from cai connection list
OptionRequiredExplicit defaultMeaning
--name <displayName>No—new display name
--defaultNo—make this the default connection for its integration
--no-defaultNo—clear this connection’s default flag

Supply at least one of —name, —default or —no-default. —default and —no-default are mutually exclusive. Changing the default does not rebind existing nodes or agent tools.

Delete a connection; nodes and agent tools bound to this connection lose their authorization immediately.

Terminal window
cai connection delete [options] <connectionId>
CLI surfaceMCP counterpartMCP disposition
CLIconnection_deleteDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<connectionId>Yesconnection id from cai connection list
OptionRequiredExplicit defaultMeaning
--yesYes—confirm deletion and immediate authorization loss

Ask the user to connect an integration: places a connect card in the build chat and returns immediately.

Terminal window
cai connection request [options] <nodeSlug>
CLI surfaceMCP counterpartMCP disposition
CLI with build-chat presentation—Omitted from MCP. Posts a connect card into build chat; connection_connect_url supplies the hosted outcome.
ArgumentRequiredMeaning
<nodeSlug>Yesintegration slug that needs a connected account
OptionRequiredExplicit defaultMeaning
--for-node <nodeId>No—workflow node that needs this connection (context only)
--reason <text>No—one short user-facing sentence shown on the card

A build chat is needed for a connect card. When requestedInChat is false, use the returned connectUrl.

Open the Controller AI browser flow for a missing integration, optionally waiting for completion.

Terminal window
cai connection connect [options] <nodeSlug>
CLI surfaceMCP counterpartMCP disposition
CLIconnection_connect_urlDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeSlug>Yesintegration slug reported by cai integration search
OptionRequiredExplicit defaultMeaning
--no-openNo—headless/remote mode: print the URL without opening a browser
--waitNofalsewait for a newly created connection for this integration
--timeout <seconds>No"300"maximum time to wait for the new connection

Router routes and If/Else branches — create, condition, wire, order.

Subcommands: list, add, update, delete, connect, reorder.

Routes/branches in evaluation order, with conditions and wired targets.

Terminal window
cai branch list [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLIbranch_listDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesRouter or If/Else node id

Add a Router route or an If/Else condition branch (inserted before Else).

Terminal window
cai branch add [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLIbranch_addDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesRouter or If/Else node id
OptionRequiredExplicit defaultMeaning
--name <displayName>No—route/branch label
--js <expr>No—boolean condition, one expression
--js-file <path|->No—read one boolean condition from a UTF-8 file or stdin
--condition-json <json>No—condition as string[][] — OR of AND-rows
--allow-duplicateNofalseadd even when a route/branch already carries —name

Rename a route/branch and/or replace its condition.

Terminal window
cai branch update [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLIbranch_updateDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesRouter or If/Else node id
OptionRequiredExplicit defaultMeaning
--route <id>No—route id (Router) or branch id (If/Else)
--branch <id>No—alias for —route
--name <displayName>No—new label
--js <expr>No—new boolean condition, one expression
--js-file <path|->No—read one boolean condition from a UTF-8 file or stdin
--condition-json <json>No—new condition as string[][] — OR of AND-rows

Delete a route/branch and its branch edge.

Terminal window
cai branch delete [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLIbranch_deleteDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesRouter or If/Else node id
OptionRequiredExplicit defaultMeaning
--route <id>No—route id (Router) or branch id (If/Else)
--branch <id>No—alias for —route

Connect a branch output to a target node.

Terminal window
cai branch connect [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLIbranch_connectDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesRouter or If/Else node id
OptionRequiredExplicit defaultMeaning
--route <id>No—route id (Router) or branch id (If/Else)
--branch <id>No—alias for —route
--to <nodeId>Yes—target node the branch runs
--flow <flowId>No—flow containing both nodes (resolved when omitted)

Reorder If/Else condition branches — first match wins, so order is semantics.

Terminal window
cai branch reorder [options] <nodeId>
CLI surfaceMCP counterpartMCP disposition
CLIbranch_reorderDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<nodeId>YesIf/Else node id
OptionRequiredExplicit defaultMeaning
--order <ids>Yes—every condition branch id, comma-separated, in new order

Workflow data store — collections and records (development and live stores are separate).

Subcommands: collections, fields, query, get, create, update, delete, delete-many, import, copy-to-live, collection.

Collections in one record store, with row counts.

Terminal window
cai data collections [options]
CLI surfaceMCP counterpartMCP disposition
CLIdata_collection_listDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--env <dev|live>No"dev"record store to read

Field id ⇄ display mapping — writes go by id, reads come back by display.

Terminal window
cai data fields [options]
CLI surfaceMCP counterpartMCP disposition
CLIdata_field_listDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--type <dataType>Yes—collection data type, e.g. custom.invoice

Records in one collection.

Terminal window
cai data query [options]
CLI surfaceMCP counterpartMCP disposition
CLIdata_record_queryDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--type <dataType>Yes—collection data type, e.g. custom.invoice
--env <dev|live>No"dev"record store to read
--query <text>No—plain-text search — NOT field-aware filtering
--limit <n>No—page size (backend caps at 100)
--offset <n>No—pagination offset

One record by id.

Terminal window
cai data get [options] <recordId>
CLI surfaceMCP counterpartMCP disposition
CLIdata_record_getDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<recordId>Yesrecord id, e.g. rec_…
OptionRequiredExplicit defaultMeaning
--type <dataType>Yes—Custom data type name from cai data collections for the selected environment.
--env <dev|live>No"dev"record store to read

Create a record (validated against the collection schema).

Terminal window
cai data create [options]
CLI surfaceMCP counterpartMCP disposition
CLIdata_record_createDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--type <dataType>Yes—Custom data type name from cai data collections for the selected environment.
--fields <json|file|->Yes—field values keyed by field id
--env <dev|live>No"dev"record store to write

Patch a record — omitted fields are left alone.

Terminal window
cai data update [options] <recordId>
CLI surfaceMCP counterpartMCP disposition
CLIdata_record_updateDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<recordId>YesRecord ID from cai data query for this data type and environment.
OptionRequiredExplicit defaultMeaning
--type <dataType>Yes—Custom data type name from cai data collections for the selected environment.
--fields <json|file|->Yes—fields to patch, keyed by field id
--env <dev|live>No"dev"record store to write

Soft-delete a record.

Terminal window
cai data delete [options] <recordId>
CLI surfaceMCP counterpartMCP disposition
CLIdata_record_deleteDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<recordId>YesRecord ID from cai data query for this data type and environment.
OptionRequiredExplicit defaultMeaning
--type <dataType>Yes—Custom data type name from cai data collections for the selected environment.
--env <dev|live>No"dev"record store to write

Bulk-delete records from the development or live store (soft delete; no undo).

Terminal window
cai data delete-many [options]
CLI surfaceMCP counterpartMCP disposition
CLIdata_record_delete_manyDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--type <dataType>Yes—Custom data type name from cai data collections for the selected environment.
--records <id,id,…>No—record ids to delete
--allNofalsedelete every record in the collection
--yesNofalseconfirm deleting every record when used with —all
--env <dev|live>No"dev"record store to delete from; live changes affect the published workflow immediately

Choose non-empty —records or —all, never both; —all also requires —yes. There is no public record undo.

Validate or import CSV records in the development or live store (commits append).

Terminal window
cai data import [options]
CLI surfaceMCP counterpartMCP disposition
CLIdata_record_import_commit
data_record_import_validate
Split. Choose the tool for the intended operation.
OptionRequiredExplicit defaultMeaning
--type <dataType>Yes—Custom data type name from cai data collections for the selected environment.
--file <path>Yes—CSV file to import
--env <dev|live>No"dev"record store to validate or write; live commits affect the published workflow immediately
--mode <dryRun|commit>No"dryRun"validate only, or actually write

CSV headers use field display names. —mode dryRun writes nothing. Commit validates again, appends valid rows and skips invalid rows; rerunning appends the valid rows again. Inspect imported and rejected counts, then query the same store before retrying.

Upsert active development records into the matching published Live collection by record key.

Terminal window
cai data copy-to-live [options]
CLI surfaceMCP counterpartMCP disposition
CLIdata_copy_to_liveDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--type <dataType>Yes—collection to copy from development to live

Requires a matching, current published schema. Matching record keys are overwritten or revived, Live-only rows remain, and an empty development source changes nothing. There is no dry run.

Collection lifecycle (collections are synced from custom.* schemas).

Subcommands: create.

Create a collection by defining its schema; equivalent to cai schema create.

Terminal window
cai data collection create [options] <dataType>
CLI surfaceMCP counterpartMCP disposition
CLIschema_type_createMerged. The collection command shares the schema-creation tool.
ArgumentRequiredMeaning
<dataType>Yescollection data type — must start with “custom.”
OptionRequiredExplicit defaultMeaning
--display <label>No—Human-readable name of the new data type.
--field <id:type[:display]>No—field spec; repeatable
--from-json <file|->No—full {display, fields} definition

Provide at least one —field or —from-json, following the same definition rules as cai schema create.

Dependency map: which agents and workflows depend on this workflow (or the whole account).

Terminal window
cai deps [options]
CLI surfaceMCP counterpartMCP disposition
CLIdependency_mapDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--accountNofalseaccount-wide resource map instead of the current workflow

Account activity feed, newest first: connections, workflow edits/publishes/runs, agents, org members.

Terminal window
cai events [options]
CLI surfaceMCP counterpartMCP disposition
CLIevent_listDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--type <types>No[]only these event types (comma-separated or repeated)
--since <when>No—ISO timestamp or relative like 30m, 2h, 7d
--cursor <cursor>No—opaque cursor from a previous page; returns strictly older events
--for-workflow <id>No—only events about this workflow
--limit <n>No—events per page (default 50, max 200)

Per-workflow custom data types (custom.*) — the data store’s schemas.

Subcommands: list, get, resolve, create, update, delete.

Every data type defined in this workflow.

Terminal window
cai schema list [options]
CLI surfaceMCP counterpartMCP disposition
CLIschema_type_listDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--allNofalseinclude the engine-derived custom.__* integration schemas

One data type with its field ids, displays and types.

Terminal window
cai schema get [options] <name>
CLI surfaceMCP counterpartMCP disposition
CLIschema_type_getDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<name>Yesschema name, e.g. custom.invoice

Read a type name, fields and whether it is a list.

Terminal window
cai schema resolve [options] <typeId>
CLI surfaceMCP counterpartMCP disposition
CLIschema_type_resolveDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<typeId>Yese.g. text, custom.invoice, list.custom.invoice, node.

Create a custom data type (this is also what creates a data collection).

Terminal window
cai schema create [options] <name>
CLI surfaceMCP counterpartMCP disposition
CLIschema_type_createDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<name>Yesschema name — must start with “custom.”
OptionRequiredExplicit defaultMeaning
--display <label>No—human label (defaults to the name without the prefix)
--field <id:type[:display]>No—field spec; repeatable
--from-json <file|->No—full {display, fields} definition instead of —field

Provide at least one —field or —from-json. JSON must contain fields with id and type; an omitted field display defaults to its ID. When both forms are supplied, —from-json supplies the definition.

Update a data type definition. —field or —from-json replaces the complete field list and removes omitted fields; a display-only update preserves fields.

Terminal window
cai schema update [options] <name>
CLI surfaceMCP counterpartMCP disposition
CLIschema_type_updateDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<name>Yesschema name, e.g. custom.invoice
OptionRequiredExplicit defaultMeaning
--display <label>No—new human label
--field <id:type[:display]>No—Repeat for each field. Replaces the complete field list.
--from-json <file|->No—full {display, fields} definition instead of —field

Supply —display, at least one —field, or —from-json. A field replacement removes omitted fields from the schema without converting stored values; a display-only edit preserves fields.

Remove the development type and deactivate its collection without deleting stored rows.

Terminal window
cai schema delete [options] <name>
CLI surfaceMCP counterpartMCP disposition
CLIschema_type_deleteDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<name>Yesschema name, e.g. custom.invoice
OptionRequiredExplicit defaultMeaning
--yesYes—confirm deleting the type and removing fields on other types that reference it

Recreating the same type and field IDs reactivates stored values. Fields removed from other types because they referenced this type are not restored automatically.

Inspect trigger sources, captured events and development or live dispatch.

Subcommands: list, audit, get, test-events, search, props, options, create, events, event, select-event, replay, set-enabled, rename, delete.

Trigger lifecycle rows: ids, development state, readiness and issues.

Terminal window
cai trigger list [options]
CLI surfaceMCP counterpartMCP disposition
CLItrigger_listDirect. Typed counterpart; use its input schema.

Pre-publish trigger coverage, development dispatch and double-run risk.

Terminal window
cai trigger audit [options]
CLI surfaceMCP counterpartMCP disposition
CLItrigger_auditDirect. Typed counterpart; use its input schema.

Full lifecycle for one trigger: capture, deployment, verification and issues.

Terminal window
cai trigger get [options] <triggerId>
CLI surfaceMCP counterpartMCP disposition
CLItrigger_getDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<triggerId>Yescanvas trigger id from cai trigger list

Set ambient development test-event dispatch (routine tests should use replay).

Terminal window
cai trigger test-events [options] <triggerId>
CLI surfaceMCP counterpartMCP disposition
CLItrigger_test_events_setDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<triggerId>Yescanvas trigger id from cai trigger list
OptionRequiredExplicit defaultMeaning
--allowNo—arm ambient real-event dispatch against the development canvas
--disallowNo—turn ambient development dispatch off
--acknowledge-dual-runNo—when arming, acknowledge that one real event can execute more than once

Choose —allow or —disallow. Enabling requires —acknowledge-dual-run because one event can start development and live executions.

Nodes that can trigger a flow, and the —event keys each one publishes.

Terminal window
cai trigger search [options] [query]
CLI surfaceMCP counterpartMCP disposition
CLItrigger_searchDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
[query]Nosearch term, plain English
OptionRequiredExplicit defaultMeaning
--node <slug>No—also return this node’s full event list
--limit <n>No"20"max nodes
--events-per-node <n>No"6"event rows listed per node (raise to see them all)

Configurable props for a trigger event; returns the dynamicPropsId to reuse.

Terminal window
cai trigger props [options]
CLI surfaceMCP counterpartMCP disposition
CLItrigger_component_propsDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--node <slug>Yes—trigger node slug
--event <eventKey>Yes—event key from cai trigger search — never guess it
--connection <id>No—connection id when the trigger needs auth
--configured <json|file|->No—already-set prop values, for dependent dynamic props
--dynamic-props-id <id>No—dynamicPropsId from a previous call, to reload

Resolve exact values for one trigger dropdown prop before trigger creation.

Terminal window
cai trigger options [options]
CLI surfaceMCP counterpartMCP disposition
CLItrigger_prop_optionsDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--node <slug>Yes—trigger node slug
--event <eventKey>Yes—event key from cai trigger search
--prop <name>Yes—option-backed prop name from cai trigger props
--connection <id>No—connection id when the trigger needs auth
--configured <json|file|->No—already-set trigger prop values
--dynamic-props-id <id>No—dynamicPropsId from cai trigger props
--query <text>No—search by human option label
--page <n>No—0-based option page when not searching
--prev-context <json|file|->No—context returned by a previous options page

Create a trigger source and its canvas.

Terminal window
cai trigger create [options]
CLI surfaceMCP counterpartMCP disposition
CLItrigger_createDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--flow <flowId>Yes—flow this trigger runs (a trigger targets exactly one)
--node <slug>Yes—trigger node slug
--event <eventKey>Yes—event key from cai trigger search — never guess it
--source-basis <basis>Yes—one of explicit-in-request | user-answer | inferred-from-existing-workflow
--connection <id>No—connection id when the trigger needs auth
--props <json|file|->No—configured prop values
--dynamic-props-id <id>No—dynamicPropsId from cai trigger props

Creation deploys a real source and starts traffic capture immediately. Captured events run the workflow after publication, during armed development dispatch, or through replay.

Captured events for a trigger source — compact payload previews.

Terminal window
cai trigger events [options]
CLI surfaceMCP counterpartMCP disposition
CLItrigger_event_listDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--trigger <backendTriggerId>Yes—the NUMERIC backendTriggerId, not the canvas id
--limit <n>No—newest-first page size (default 5, max 50)

One captured event with its full payload.

Terminal window
cai trigger event [options] <eventId>
CLI surfaceMCP counterpartMCP disposition
CLItrigger_event_getDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<eventId>Yescaptured event id from cai trigger events

Adopt a captured event as the trigger’s sample, defining its output schema.

Terminal window
cai trigger select-event [options]
CLI surfaceMCP counterpartMCP disposition
CLItrigger_event_selectDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--node <triggerNodeId>Yes—trigger node id from cai trigger create
--event <eventId>Yes—captured event id

Replay a captured event or supplied payload. The default target is development; actions have real effects.

Terminal window
cai trigger replay [options]
CLI surfaceMCP counterpartMCP disposition
CLItrigger_replayDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--trigger <backendTriggerId>Yes—the NUMERIC backendTriggerId
--event <eventId>No—captured event to replay (exclusive with —payload)
--payload <json|file|->No—custom raw payload (exclusive with —event)
--target <dev|live>No"dev"development pre-publish or LIVE post-publish verification
--confirm-liveNofalseacknowledge LIVE replay side effects and usage

Choose exactly one of —event or —payload. —target live requires —confirm-live.

Set a trigger to an explicit enabled or disabled state.

Terminal window
cai trigger set-enabled [options] <triggerId>
CLI surfaceMCP counterpartMCP disposition
CLItrigger_set_enabledMerged. The explicit enabled boolean combines the mutually exclusive enable and disable flags.
ArgumentRequiredMeaning
<triggerId>Yescanvas trigger id
OptionRequiredExplicit defaultMeaning
--enableNo—set the trigger enabled
--disableNo—set the trigger disabled

Pass exactly one of —enable or —disable. This changes development and armed development dispatch immediately; the published trigger keeps its prior state until workflow publication.

Rename a trigger.

Terminal window
cai trigger rename [options] <triggerId>
CLI surfaceMCP counterpartMCP disposition
CLItrigger_renameDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<triggerId>Yescanvas trigger id
OptionRequiredExplicit defaultMeaning
--name <name>Yes—Replacement trigger name.

Delete a trigger and its canvas.

Terminal window
cai trigger delete [options] <triggerId>
CLI surfaceMCP counterpartMCP disposition
CLItrigger_deleteDirect. Typed counterpart; use its input schema.
ArgumentRequiredMeaning
<triggerId>Yescanvas trigger id

Deletes the development trigger and stops its armed development dispatch immediately. The prior Live trigger continues until workflow publication.

Inspect and complete the assisted template setup bound to this build thread.

Subcommands: status, complete.

Read the assisted template setup state for this build thread.

Terminal window
cai template-setup status [options]
CLI surfaceMCP counterpartMCP disposition
CLI—Omitted from MCP. Assisted template setup runs inside the builder sandbox from its injected brief, not through the hosted MCP.

Verify every expected workflow release and tool binding, then complete setup.

Terminal window
cai template-setup complete [options]
CLI surfaceMCP counterpartMCP disposition
CLI—Omitted from MCP. Assisted template setup runs inside the builder sandbox from its injected brief, not through the hosted MCP.

Workflow and agent labels; rename or delete account labels in the UI.

Subcommands: list, set.

Every label you own.

Terminal window
cai label list [options]
CLI surfaceMCP counterpartMCP disposition
CLIlabel_listDirect. Typed counterpart; use its input schema.

Account-wide label renaming and deletion are app operations.

Set the exact labels on one workflow or one agent by name.

Terminal window
cai label set [options]
CLI surfaceMCP counterpartMCP disposition
CLIlabel_setDirect. Typed counterpart; use its input schema.
OptionRequiredExplicit defaultMeaning
--agent <agentId>No—agent id to label
--labels <name,...>No—comma-separated label names
--label <name>No—one label name; repeat for more than one
--noneNo—remove every label from the target

Pass exactly one explicit target: —workflow or —agent ; a pinned workflow alone is not accepted here. Choose —labels and/or repeat —label, or use —none alone. This replaces all labels on the target and creates missing account labels. Account-wide label renaming and deletion are app operations.