@controllerai/cli 0.2.17 → 0.2.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/api/client.js +32 -0
  2. package/dist/api/client.js.map +1 -1
  3. package/dist/commands/agent.js +101 -8
  4. package/dist/commands/agent.js.map +1 -1
  5. package/dist/commands/expr.js +3 -10
  6. package/dist/commands/expr.js.map +1 -1
  7. package/dist/commands/file.js +11 -1
  8. package/dist/commands/file.js.map +1 -1
  9. package/dist/commands/integration.js +8 -2
  10. package/dist/commands/integration.js.map +1 -1
  11. package/dist/commands/workflow.js +29 -6
  12. package/dist/commands/workflow.js.map +1 -1
  13. package/dist/errors.js +5 -2
  14. package/dist/errors.js.map +1 -1
  15. package/package.json +1 -1
  16. package/skills/controllerai-agents/SKILL.md +25 -192
  17. package/skills/controllerai-agents/references/command-reference.md +205 -0
  18. package/skills/controllerai-ai-nodes/SKILL.md +11 -92
  19. package/skills/controllerai-ai-nodes/references/command-reference.md +98 -0
  20. package/skills/controllerai-data/SKILL.md +34 -159
  21. package/skills/controllerai-data/references/command-reference.md +177 -0
  22. package/skills/controllerai-expressions/SKILL.md +29 -151
  23. package/skills/controllerai-expressions/references/command-reference.md +166 -0
  24. package/skills/controllerai-expressions/references/dsl-and-recipes.md +1 -1
  25. package/skills/controllerai-flow-control/SKILL.md +21 -160
  26. package/skills/controllerai-flow-control/references/command-reference.md +171 -0
  27. package/skills/controllerai-integration-actions/SKILL.md +11 -112
  28. package/skills/controllerai-integration-actions/references/command-reference.md +118 -0
  29. package/skills/controllerai-node-config/SKILL.md +18 -178
  30. package/skills/controllerai-node-config/references/command-reference.md +186 -0
  31. package/skills/controllerai-runs/SKILL.md +25 -117
  32. package/skills/controllerai-runs/references/command-reference.md +113 -0
  33. package/skills/controllerai-start/SKILL.md +36 -67
  34. package/skills/controllerai-start/references/mcp-tool-map.md +6 -0
  35. package/skills/controllerai-triggers/SKILL.md +16 -210
  36. package/skills/controllerai-triggers/references/command-reference.md +215 -0
  37. package/skills/controllerai-workflows/SKILL.md +24 -104
  38. package/skills/controllerai-workflows/references/command-reference.md +118 -0
  39. package/skills/manifest.json +120 -60
@@ -0,0 +1,205 @@
1
+ # Controller AI agents
2
+
3
+ An agent has one mutable draft and immutable published versions. Build instructions, tools, permissions, and files on the draft; verify in Test; publish last. Draft edits never update Live by themselves.
4
+
5
+
6
+
7
+ - Attach one ready action directly instead of wrapping it; see Choose the capability architecture.
8
+ - Choose confirmation before attaching a consequential tool; see Create and assemble the draft.
9
+ - Use one conversation on an explicit rail for each verification task; see Verify the draft as an agent.
10
+ - Resolve pending requests in that same conversation; see Verify the draft as an agent.
11
+ - Enablement is runtime state, not publication; see Create and assemble the draft.
12
+ - Publish authorized workflow dependencies, preflight, then publish the agent; see Publish in dependency order.
13
+ - Draft-only means stop before publish; draft evidence never proves Live. See Publish in dependency order.
14
+
15
+ ## 1. Choose the capability architecture
16
+
17
+ - Use `controllerai-integration-actions` when one existing app operation completes it.
18
+ - Use a workflow tool for multiple steps, transformations, branching, looping, durable state, triggers, a custom typed contract, or reusable business logic.
19
+ - Put judgment, tool-selection rules, tone, and escalation in instructions; put stable sources in knowledge files.
20
+
21
+ Do not create a one-node workflow merely to expose a ready action, or replace orchestration with several independent direct actions when ordering or data handling must be deterministic.
22
+
23
+ ## 2. Build and verify capabilities
24
+
25
+ For a ready action, follow `controllerai-integration-actions`: discover exact identities, select a connection, decide confirmation, then attach.
26
+
27
+ For every workflow tool, load the relevant workflow skills and test the development state before attaching:
28
+
29
+ ```bash
30
+ cai use <workflowId>
31
+ cai flow get <flowId> --json
32
+ cai run flow <flowId> --inputs values.json --json
33
+ ```
34
+
35
+ MCP: there is no pin; pass `workflowId` to `flow_get` and `run_flow`, pass parsed `inputs`, and set `waitSeconds`.
36
+
37
+ Capture the successful execution ID. Inputs become tool parameters and outputs its result. Require a nonempty output contract and verify the run returns it.
38
+
39
+ ## 3. Create and assemble the draft
40
+
41
+
42
+ Read [instructions-and-versioning.md](instructions-and-versioning.md) before publishing or explaining Test versus Live behavior.
43
+
44
+ ```bash
45
+ cai agent create --name "<agent name>" --instructions-file instructions.md --json
46
+ ```
47
+
48
+ MCP: `agent_create` takes complete Markdown in `instructions`; it cannot read `instructions.md`.
49
+
50
+ ```bash
51
+ cai agent add-action <agentId> \
52
+ --integration <integrationSlug> \
53
+ --action <actionKey> \
54
+ --connection <connectionId> \
55
+ --description "Use when ..." \
56
+ --json
57
+
58
+ cai agent add-workflow <agentId> \
59
+ --workflow-id <workflowId> \
60
+ --flow <flowId> \
61
+ --description "Use when ...; accepts ...; returns ..." \
62
+ --json
63
+ ```
64
+
65
+ MCP: use `agent_tool_action_add` or `agent_tool_workflow_add`; `requireConfirmation` is optional and defaults to `false`.
66
+
67
+ ```bash
68
+ cai agent add-file <agentId> --file <path> --space <knowledge|shared> --json
69
+ cai agent files <agentId> --space <knowledge|shared> [--live] --json
70
+ cai agent tools <agentId> --json
71
+ cai agent get <agentId> --json
72
+ ```
73
+
74
+ MCP: use `agent_knowledge_file_add` or `agent_workspace_file_add` with inline `content`; `agent_file_list` uses `environment: dev|live`. Shared runtime files update live immediately.
75
+
76
+ The default is no approval: attached actions and workflow tools run without a human approval step unless `requireConfirmation` is `true`, and omitting `--require-confirmation` has the same behavior. When attaching an action that sends, posts, spends, or deletes, choose `true` or explicitly tell the user that it will run unattended. Mention the confirmation choice in the report to the user; `cai agent update-tool` can change it later.
77
+
78
+ Keep the two modes straight:
79
+
80
+ | Context | Test / draft conversation | Live / shared conversation |
81
+ | --- | --- | --- |
82
+ | Agent configuration | Current mutable draft | Latest published immutable agent version |
83
+ | Workflow tools | Current workflow development heads | Each workflow's latest live release; never pinned |
84
+ | Reference files | Current draft knowledge files | Knowledge frozen into the published agent version |
85
+ | Runtime files | Current live runtime files, overlaid by development/test runtime files at the same path | Current live runtime files only |
86
+ | Access | Owner only | Owner, plus organization members when shared; non-owners never see the draft |
87
+
88
+ Version pinning for workflow tools does not exist. Live tools track the latest release. If asked to freeze one, explain this, attach with policy `latest`, and never abandon the attachment.
89
+
90
+ Publishing snapshots versioned fields, moves the live pointer, and restamps every existing live conversation. It does not snapshot the runtime model. This cutover interrupts in-flight answers and expires pending approvals; time it accordingly.
91
+
92
+ Runtime lifecycle changes do not require publishing:
93
+
94
+ ```bash
95
+ cai agent update <agentId> --disabled --json
96
+ cai agent update <agentId> --enabled --json
97
+ cai agent delete <agentId> --confirm --json
98
+ ```
99
+
100
+ MCP: draft edits use `agent_update`; runtime uses `agent_set_enabled`; `agent_delete` has no `confirm`. Disable pauses runtime. Soft delete revokes access and requests session termination; there is no CLI restore.
101
+
102
+ ## Runtime usage boundary
103
+
104
+
105
+ ## 4. Verify the draft as an agent
106
+
107
+ Saving the draft updates the agent's Test environment — there is no separate deploy step. Test conversations run each workflow tool's DEVELOPMENT version.
108
+
109
+ ```bash
110
+ cai agent test <agentId> --draft --message "<representative request>" --json
111
+ cai agent conversation history <conversationId> --json
112
+ ```
113
+
114
+ MCP: `agent_test` requires `rail: draft` or `rail: live` and takes `waitSeconds`.
115
+
116
+ `agent test` always creates a conversation. Use it for a one-shot check. When a task may need follow-up or approval, create one conversation on the requested rail, capture its ID, and reuse it:
117
+
118
+ ```bash
119
+ cai agent conversation create <agentId> --draft --title "<test case>" --json
120
+ cai agent conversation send <conversationId> --message "<request>" --wait --json
121
+ ```
122
+
123
+ Do not resend the request or create a replacement after an approval pause. A required post-publish Live check is a separate rail task and gets one fresh Live conversation.
124
+
125
+ Test positive and negative tool selection, exact arguments, results, errors, and knowledge. Offer the returned `appUrl`; on MCP, call `agent_present` and relay the returned card.
126
+
127
+ - For a workflow tool, correlate a side-effectful call with its terminal workflow execution ID.
128
+ - For a direct integration action, inspect persisted conversation action events/run result and the intended external effect. Direct actions do not create workflow execution IDs.
129
+
130
+ For a pending approval, inspect the exact request first:
131
+
132
+ ```bash
133
+ cai agent conversation approve <conversationId> --request <requestId> --json
134
+ cai agent conversation deny <conversationId> --request <requestId> --message "<reason>" --json
135
+ ```
136
+
137
+ The server resolves the tool from the request ID. Do not approve merely to continue. Resolve every pending request before publishing; approval or denial resumes this conversation, while publishing expires it.
138
+
139
+ After `cai agent remove-tool`, test one request that must no longer use the removed capability and one retained capability.
140
+
141
+ ## 5. Publish in dependency order
142
+
143
+ For attached workflows only:
144
+
145
+ ```bash
146
+ cai use <workflowId>
147
+ cai workflow status --json
148
+ cai workflow publish --name "<release>" --json
149
+ ```
150
+
151
+ MCP: there is no `use`; pass `workflowId` to `workflow_status` and `workflow_publish`.
152
+
153
+ Publish a workflow only when its verified development state must go live and the user authorized it. A workflow publish already followed by a live agent changes that tool's live behavior immediately; do not republish the agent merely to pick it up.
154
+
155
+ For a draft-only request, stop after Test evidence. Do not publish a workflow or agent merely because it is ready.
156
+
157
+ Then publish the agent:
158
+
159
+ ```bash
160
+ cai agent publish-preflight <agentId> --json
161
+ cai agent publish <agentId> --name "<release>" --json
162
+ cai agent versions <agentId> --json
163
+ cai agent test <agentId> --live --message "<representative request>" --json
164
+ ```
165
+
166
+ MCP: `agent_test` requires `rail: draft` or `rail: live` and takes `waitSeconds`.
167
+
168
+ `publish-preflight` is the arbiter of structural readiness. Report blockers and stop. With none and an authorized release, publish, except an error you actually watched happen; that blocks even a green preflight.
169
+
170
+ Email verification is not a publishing prerequisite. An unclaimed agent-created account may publish; email claiming only raises its monthly usage cap and enables account recovery.
171
+
172
+ Use one loop: edit draft, read back, verify Test, publish, verify Live. Published versions have no rollback. Recover forward from `agent versions`; restore workflow definitions with history/restore, then republish. Workflow releases, action grants, and runtime files are live-bound; see [instructions-and-versioning.md](instructions-and-versioning.md). After detaching an action, publish to remove it from the published list.
173
+
174
+ Draft evidence does not prove the live agent. Test is owner-only; shared users always run the latest published agent version and never see draft instructions, tools, or knowledge.
175
+
176
+ ## 6. Offer Slack and organization sharing
177
+
178
+ After publish, offer product setup for Slack. Agents remain private unless the user requests organization access:
179
+
180
+ ```bash
181
+ cai agent visibility <agentId> --value organization --json
182
+ ```
183
+
184
+ Members use the published version. Direct actions use the owner's external account and organization usage pool. Grant changes affect Live immediately; private visibility revokes access.
185
+
186
+ ## Before you finish
187
+
188
+ ```bash
189
+ cai agent tools <agentId> --json
190
+ cai agent conversation list <agentId> --mode dev --json
191
+ cai data query --type custom.<type> --env dev --json
192
+ cai agent conversation history <conversationId> --json
193
+ cai agent publish-preflight <agentId> --json
194
+ cai agent versions <agentId> --json
195
+ cai agent test <agentId> --live --message "<representative request>" --json
196
+ ```
197
+
198
+ Run the last three commands only for an authorized release. For Live verification, use `--mode live` and `--env live` in the same pair.
199
+
200
+ - Conversation list must show the captured ID on the requested rail, without retry-created duplicates.
201
+ - History must show the intended tool arguments, terminal result, and no unresolved permission request.
202
+ - For stateful behavior, the same-rail data query must show the expected record; an assistant reply is not proof.
203
+ - A release requires clean preflight, agent version read-back, and one fresh Live conversation. Draft-only work must remain unpublished.
204
+
205
+ Report the agent ID/version, tools and confirmation policies, execution or direct-action evidence, rail state, connections, access, and anything unverified.
@@ -1,105 +1,24 @@
1
1
  ---
2
2
  name: controllerai-ai-nodes
3
- description: Configure and verify AI-powered Controller AI workflow nodes, especially Ask AI and actions that interact with Controller AI agents. Use when a workflow needs generation, classification, extraction, summarization, structured AI output, model/provider selection, or a workflow action that creates or messages an agent conversation.
3
+ description: Configure Controller AI AI-powered workflow actions for generation, extraction, classification and structured results, or call a Controller AI agent from a flow. Use when deterministic workflow steps need language-model reasoning.
4
4
  ---
5
5
 
6
- # Controller AI AI nodes
6
+ # AI inside a workflow
7
7
 
8
- The `cai ...` examples are canonical grammar. Use the transport selected in `controllerai-start` and its MCP tool map; never mix transports in one task.
8
+ Use an AI action when a flow needs generation, extraction, classification or summarization. Use ordinary data/condition nodes for exact validation and CRUD. A user-facing conversational assistant is an agent; an AI node is one step in a workflow.
9
9
 
10
- ## Rules that break tasks when skipped
10
+ Discover the available AI action and current properties. Configure the connection/model, prompt and output contract using the action's actual schema. For an action calling a Controller AI agent, select the intended agent and verify which conversation/result fields it returns.
11
11
 
12
- - Use native Ask AI for a bounded AI step; see Configure Ask AI in dependency order.
13
- - Keep an existing Ask AI node unless the requested component changes; see Configure Ask AI in dependency order.
14
- - Set reload selectors before fetching live model options; see Configure Ask AI in dependency order.
15
- - Never invent or hardcode a model ID; see Configure Ask AI in dependency order.
12
+ ## Structured results
16
13
 
17
- ## Choose the AI surface
14
+ Define the schema before downstream mappings. State the required fields, allowed statuses and missing-data behavior in the prompt. Configure the action's structured output mechanism when available. A prompt saying “return JSON” alone does not establish a typed output contract.
18
15
 
19
- - Use Ask AI for one bounded transformation with explicit inputs and output contract.
20
- - Use a Controller AI agent for conversational judgment, multiple tools, durable instructions, and knowledge files. Load `controllerai-agents`.
21
- - Use `registry_agent` workflow actions only when a workflow must create/message a platform agent conversation or manage its files; discover the exact action and props rather than treating the whole agent as one node.
16
+ For contact research, separate evidence from interpretation. Return source URLs, matched identity, confidence and explicit missing/ambiguous status. “Not found in this search” does not establish that a contact method does not exist. Do not fill an email field with an invented pattern.
22
17
 
23
- ## Configure Ask AI in dependency order
18
+ A research provider can return variable or unstructured material. Add a typed normalization step when the final flow promises stable fields. Test missing fields, conflicting matches and provider failure as well as the happy path.
24
19
 
25
- For a bounded workflow transformation, use the native Ask AI component. Do not replace it with a provider integration action or delete an existing Ask AI node to bypass configuration.
20
+ ## Verify
26
21
 
27
- Discover the current component instead of hardcoding a key:
22
+ Run with representative input, inspect the actual output schema and value, then wire downstream nodes from the confirmed output. Verify the final flow return contract. If a connected provider rejects authentication, report the connection and error code without echoing credentials.
28
23
 
29
- ```bash
30
- cai integration actions "ask AI" --json
31
- cai integration action --integration <nodeSlug> --key <nodeKey> --json
32
- cai node init --flow <flowId> --node <nodeSlug> --key <nodeKey> --name "<result produced>" --json
33
- cai node status <nodeId> --json
34
- ```
35
-
36
- Typical selectors are provider, model, prompt/user message, and response data type. Trust current prop metadata over these names.
37
-
38
- 1. Set the provider or other `reloadProps` selector.
39
- 2. Re-read props.
40
- 3. Fetch live model options; never invent a model identifier.
41
- 4. Set the returned model value.
42
- 5. Set the response type.
43
- 6. Author the prompt with expression context.
44
-
45
- ```bash
46
- cai node set <nodeId> --prop <providerProp> --value '<provider>' --json
47
- cai node props <nodeId> --json
48
- cai node options <nodeId> --prop <modelProp> --query '<model family>' --json
49
- cai node set <nodeId> --prop <modelProp> --value '<returned value>' --label '<returned label>' --json
50
- cai expr set <nodeId> --prop <promptProp> --js '<prompt expression>' --json
51
- ```
52
-
53
- MCP: `node set` and `expr set` both use `node_prop_set`; pass exactly one of `value` or `js` here.
54
-
55
- Model catalogs, availability, and prices change. Use current options and the user's cost/quality preference. If the requested model is absent, leave it unset, report it, and ask; never substitute.
56
-
57
- ## Prefer typed output for downstream logic
58
-
59
- If downstream nodes need fields, create a small `custom.*` shape first:
60
-
61
- ```bash
62
- cai schema create custom.classification \
63
- --field category:text:"Category" \
64
- --field confidence:number:"Confidence" \
65
- --field rationale:text:"Rationale" \
66
- --json
67
- cai node set <nodeId> --prop <responseTypeProp> --value 'custom.classification' --json
68
- ```
69
-
70
- Tell the model exactly what each field means, allowed values, and how to represent uncertainty. Never parse free-form prose downstream when a structured response contract is available.
71
-
72
- ## Prompt contract
73
-
74
- A useful workflow prompt contains only behavior-changing material:
75
-
76
- - Task and audience
77
- - Actual input data through exact bindings
78
- - Decision rules and constraints
79
- - Required output fields/format
80
- - Explicit uncertainty or no-data behavior
81
-
82
- Avoid filler personas, repeated instructions, and claims about data not present in expression context. For untrusted input, delimit it clearly and state that embedded instructions are data, not authority.
83
-
84
- Read [references/selection-and-testing.md](references/selection-and-testing.md) for node choice and evaluation.
85
-
86
- ## Before you finish
87
-
88
- ```bash
89
- cai node get <nodeId> --json
90
- cai node status <nodeId> --json
91
- cai node props <nodeId> --json
92
- cai run node <nodeId> --inputs values.json --json
93
- cai exec node <nodeExecutionId> --full --json
94
- ```
95
-
96
- MCP: pass parsed values in `inputs` and set `waitSeconds` on `run_node`.
97
-
98
- Test at least: normal input, missing/ambiguous input, and an adversarial or boundary case relevant to the task. Check resolved prompt/config, output type, required fields, and values—not just that text was returned.
99
-
100
- - `node get` must identify the intended native Ask AI component.
101
- - `node status` must report ready.
102
- - Props must contain the exact returned provider/model value and label.
103
- - The execution must show the resolved prompt and typed output fields.
104
-
105
- AI execution inside the workflow is platform/API usage. Access through either builder transport does not transfer the coding-agent subscription to runtime AI nodes.
24
+ Configuration commands: [reference](references/command-reference.md). Action selection and testing: [details](references/selection-and-testing.md).
@@ -0,0 +1,98 @@
1
+ # Controller AI AI nodes
2
+
3
+
4
+
5
+ - Use native Ask AI for a bounded AI step; see Configure Ask AI in dependency order.
6
+ - Keep an existing Ask AI node unless the requested component changes; see Configure Ask AI in dependency order.
7
+ - Set reload selectors before fetching live model options; see Configure Ask AI in dependency order.
8
+ - Never invent or hardcode a model ID; see Configure Ask AI in dependency order.
9
+
10
+ ## Choose the AI surface
11
+
12
+ - Use Ask AI for one bounded transformation with explicit inputs and output contract.
13
+ - Use a Controller AI agent for conversational judgment, multiple tools, durable instructions, and knowledge files. Load `controllerai-agents`.
14
+ - Use `registry_agent` workflow actions only when a workflow must create/message a platform agent conversation or manage its files; discover the exact action and props rather than treating the whole agent as one node.
15
+
16
+ ## Configure Ask AI in dependency order
17
+
18
+ For a bounded workflow transformation, use the native Ask AI component. Do not replace it with a provider integration action or delete an existing Ask AI node to bypass configuration.
19
+
20
+ Discover the current component instead of hardcoding a key:
21
+
22
+ ```bash
23
+ cai integration actions "ask AI" --json
24
+ cai integration action --integration <nodeSlug> --key <nodeKey> --json
25
+ cai node init --flow <flowId> --node <nodeSlug> --key <nodeKey> --name "<result produced>" --json
26
+ cai node status <nodeId> --json
27
+ ```
28
+
29
+ Typical selectors are provider, model, prompt/user message, and response data type. Trust current prop metadata over these names.
30
+
31
+ 1. Set the provider or other `reloadProps` selector.
32
+ 2. Re-read props.
33
+ 3. Fetch live model options; never invent a model identifier.
34
+ 4. Set the returned model value.
35
+ 5. Set the response type.
36
+ 6. Author the prompt with expression context.
37
+
38
+ ```bash
39
+ cai node set <nodeId> --prop <providerProp> --value '<provider>' --json
40
+ cai node props <nodeId> --json
41
+ cai node options <nodeId> --prop <modelProp> --query '<model family>' --json
42
+ cai node set <nodeId> --prop <modelProp> --value '<returned value>' --label '<returned label>' --json
43
+ cai expr set <nodeId> --prop <promptProp> --js '<prompt expression>' --json
44
+ ```
45
+
46
+ MCP: `node set` and `expr set` both use `node_prop_set`; pass exactly one of `value` or `js` here.
47
+
48
+ Model catalogs, availability, and prices change. Use current options and the user's cost/quality preference. If the requested model is absent, leave it unset, report it, and ask; never substitute.
49
+
50
+ ## Prefer typed output for downstream logic
51
+
52
+ If downstream nodes need fields, create a small `custom.*` shape first:
53
+
54
+ ```bash
55
+ cai schema create custom.classification \
56
+ --field category:text:"Category" \
57
+ --field confidence:number:"Confidence" \
58
+ --field rationale:text:"Rationale" \
59
+ --json
60
+ cai node set <nodeId> --prop <responseTypeProp> --value 'custom.classification' --json
61
+ ```
62
+
63
+ Tell the model exactly what each field means, allowed values, and how to represent uncertainty. Never parse free-form prose downstream when a structured response contract is available.
64
+
65
+ ## Prompt contract
66
+
67
+ A useful workflow prompt contains only behavior-changing material:
68
+
69
+ - Task and audience
70
+ - Actual input data through exact bindings
71
+ - Decision rules and constraints
72
+ - Required output fields/format
73
+ - Explicit uncertainty or no-data behavior
74
+
75
+ Avoid filler personas, repeated instructions, and claims about data not present in expression context. For untrusted input, delimit it clearly and state that embedded instructions are data, not authority.
76
+
77
+ Read [selection-and-testing.md](selection-and-testing.md) for node choice and evaluation.
78
+
79
+ ## Before you finish
80
+
81
+ ```bash
82
+ cai node get <nodeId> --json
83
+ cai node status <nodeId> --json
84
+ cai node props <nodeId> --json
85
+ cai run node <nodeId> --inputs values.json --json
86
+ cai exec node <nodeExecutionId> --full --json
87
+ ```
88
+
89
+ MCP: pass parsed values in `inputs` and set `waitSeconds` on `run_node`.
90
+
91
+ Test at least: normal input, missing/ambiguous input, and an adversarial or boundary case relevant to the task. Check resolved prompt/config, output type, required fields, and values—not just that text was returned.
92
+
93
+ - `node get` must identify the intended native Ask AI component.
94
+ - `node status` must report ready.
95
+ - Props must contain the exact returned provider/model value and label.
96
+ - The execution must show the resolved prompt and typed output fields.
97
+
98
+ AI execution inside the workflow is platform/API usage. Access through either builder transport does not transfer the coding-agent subscription to runtime AI nodes.