@controllerai/cli 0.2.20 → 0.2.21
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.
- package/dist/api/client.js +0 -32
- package/dist/api/client.js.map +1 -1
- package/dist/commands/agent.js +8 -101
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/expr.js +10 -3
- package/dist/commands/expr.js.map +1 -1
- package/dist/commands/integration.js +2 -8
- package/dist/commands/integration.js.map +1 -1
- package/dist/commands/workflow.js +6 -7
- package/dist/commands/workflow.js.map +1 -1
- package/dist/errors.js +2 -5
- package/dist/errors.js.map +1 -1
- package/package.json +6 -4
- package/skills/controllerai-agents/SKILL.md +107 -26
- package/skills/controllerai-agents/references/instructions-and-versioning.md +32 -34
- package/skills/controllerai-ai-nodes/SKILL.md +83 -10
- package/skills/controllerai-ai-nodes/references/selection-and-testing.md +44 -26
- package/skills/controllerai-data/SKILL.md +106 -34
- package/skills/controllerai-data/references/data-rails.md +24 -26
- package/skills/controllerai-expressions/SKILL.md +82 -29
- package/skills/controllerai-expressions/references/dsl-and-recipes.md +42 -40
- package/skills/controllerai-flow-control/SKILL.md +104 -21
- package/skills/controllerai-flow-control/references/patterns.md +23 -60
- package/skills/controllerai-integration-actions/SKILL.md +84 -11
- package/skills/controllerai-node-config/SKILL.md +108 -18
- package/skills/controllerai-node-config/references/prop-and-readiness.md +28 -78
- package/skills/controllerai-runs/SKILL.md +82 -25
- package/skills/controllerai-runs/references/debugging.md +24 -22
- package/skills/controllerai-start/SKILL.md +61 -35
- package/skills/controllerai-start/references/mcp-tool-map.md +20 -21
- package/skills/controllerai-triggers/SKILL.md +113 -16
- package/skills/controllerai-triggers/references/lifecycle.md +36 -48
- package/skills/controllerai-workflows/SKILL.md +105 -25
- package/skills/controllerai-workflows/references/command-map.md +19 -44
- package/skills/manifest.json +80 -137
- package/skills-mcp/controllerai-agents/SKILL.md +121 -0
- package/skills-mcp/controllerai-agents/references/instructions-and-versioning.md +76 -0
- package/skills-mcp/controllerai-ai-nodes/SKILL.md +92 -0
- package/skills-mcp/controllerai-ai-nodes/references/selection-and-testing.md +66 -0
- package/skills-mcp/controllerai-data/SKILL.md +119 -0
- package/skills-mcp/controllerai-data/references/data-rails.md +45 -0
- package/skills-mcp/controllerai-expressions/SKILL.md +98 -0
- package/skills-mcp/controllerai-expressions/references/dsl-and-recipes.md +136 -0
- package/skills-mcp/controllerai-flow-control/SKILL.md +114 -0
- package/skills-mcp/controllerai-flow-control/references/patterns.md +83 -0
- package/skills-mcp/controllerai-integration-actions/SKILL.md +89 -0
- package/skills-mcp/controllerai-node-config/SKILL.md +106 -0
- package/skills-mcp/controllerai-node-config/references/prop-and-readiness.md +49 -0
- package/skills-mcp/controllerai-runs/SKILL.md +88 -0
- package/skills-mcp/controllerai-runs/references/debugging.md +53 -0
- package/skills-mcp/controllerai-start/SKILL.md +80 -0
- package/skills-mcp/controllerai-start/references/mcp-tool-map.md +175 -0
- package/skills-mcp/controllerai-triggers/SKILL.md +112 -0
- package/skills-mcp/controllerai-triggers/references/lifecycle.md +59 -0
- package/skills-mcp/controllerai-workflows/SKILL.md +109 -0
- package/skills-mcp/controllerai-workflows/references/command-map.md +1 -0
- package/skills-mcp/manifest.json +189 -0
- package/skills/controllerai-agents/references/command-reference.md +0 -205
- package/skills/controllerai-ai-nodes/references/command-reference.md +0 -98
- package/skills/controllerai-data/references/command-reference.md +0 -177
- package/skills/controllerai-expressions/references/command-reference.md +0 -166
- package/skills/controllerai-flow-control/references/command-reference.md +0 -171
- package/skills/controllerai-integration-actions/references/command-reference.md +0 -118
- package/skills/controllerai-node-config/references/command-reference.md +0 -186
- package/skills/controllerai-runs/references/command-reference.md +0 -113
- package/skills/controllerai-triggers/references/command-reference.md +0 -215
- package/skills/controllerai-workflows/references/command-reference.md +0 -118
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: controllerai-workflows
|
|
3
|
+
description: Build, inspect, edit, recover, and publish Controller AI workflows and their flows. Use when a user asks to create or change an automation, a flow, or a workflow release, and for the lifecycle rules every other workflow skill relies on.
|
|
4
|
+
---
|
|
5
|
+
<!-- generated from .claude/skills by cli/scripts/render-skills.mjs; edit the source -->
|
|
6
|
+
|
|
7
|
+
# Workflows
|
|
8
|
+
|
|
9
|
+
## Use this when
|
|
10
|
+
|
|
11
|
+
- Creating a workflow, adding or repairing flows, orienting inside an existing graph, validating, checkpointing, restoring, publishing, or deleting.
|
|
12
|
+
- Another skill needs the shared lifecycle rules: which rail an edit lands on, how contracts and IDs behave, what validation and publishing require.
|
|
13
|
+
|
|
14
|
+
Load the narrow skill when the work reaches it: nodes, connections, props and wiring → `controllerai-node-config`; computed values and conditions → `controllerai-expressions`; Router, If/Else, loops, joins, subflows → `controllerai-flow-control`; runs and debugging → `controllerai-runs`; schedules, webhooks, app events → `controllerai-triggers`; schemas and records → `controllerai-data`; Ask AI and agent nodes → `controllerai-ai-nodes`; user-facing agents → `controllerai-agents`.
|
|
15
|
+
|
|
16
|
+
## How it works
|
|
17
|
+
|
|
18
|
+
A **workflow** groups flows, custom schemas, data collections and triggers, and its flows share one data store per environment. A **flow** is one canvas and one callable contract: typed inputs, connected nodes, typed outputs. A Return node maps values into the declared outputs; declaring an output does not fill it. Workflow, flow, node, input and output IDs are distinct identities; never swap one for another.
|
|
19
|
+
|
|
20
|
+
Every graph edit lands on the **development** version. Publishing creates the **live** release; a live agent that uses the workflow as a tool follows its latest live release without an agent publish, while the owner's Test conversations run the development version. Publishing never copies development records into the live store, and every environment keeps its own data.
|
|
21
|
+
|
|
22
|
+
Every save is a **state**. History lists states in groups and gives candidate state IDs; a restore rolls the definition back to one state and leaves records and external effects untouched. How far back history is listed and how far back a state can be restored are two separate plan limits, so a listed state is not always restorable.
|
|
23
|
+
|
|
24
|
+
Deleting a workflow tears down its deployed triggers and soft-deletes it. It is refused while any draft or live agent depends on the workflow, and nothing undeletes. The dependency map shows a workflow's agent and workflow callers and the connections it uses. Deleting a flow removes its graph, its contract and the triggers targeting it, and breaks every caller bound to it.
|
|
25
|
+
|
|
26
|
+
The account event feed records only supported events: connections created, workflows created, updated, deleted, published and run, agents created and published, members added. Settings changes, member removals and label edits are not in it, and a past change that is not recorded cannot be reconstructed from names or current state.
|
|
27
|
+
|
|
28
|
+
## Rules
|
|
29
|
+
|
|
30
|
+
1. **Before changing an existing workflow, read its outline and the affected flow**, then repair those IDs rather than creating a replacement workflow or flow. A repair that recreates loses history, triggers and callers.
|
|
31
|
+
2. **Rename contracts in place.** Deleting and recreating an input or output breaks every expression, subflow mapping and agent tool bound to it. After a rename or deletion, re-read the flow and repair the affected dependents before validating or running; a stored input-ID binding survives a rename, so the readback may show nothing to repair.
|
|
32
|
+
3. **"Store, save, log, record" without a named destination means a custom data type plus a create-record node.** A flow output alone persists nothing. When the user names a destination (a sheet, a CRM, an app, a file), write there through that integration; add a platform record only if they also want a copy kept here.
|
|
33
|
+
4. **Validate after structural edits and before publishing.** Fix every listed prop, wire, expression, type, subflow, branch and trigger error, or report each one with what it breaks. Publish refuses errors; `acknowledgeValidationErrors` is for issues the user has seen and accepted, never a shortcut. If the user forbids a repair, report and stop.
|
|
34
|
+
5. **Validation counts are status.** Do not write them into unrelated workflow properties unless the user asks for exactly that.
|
|
35
|
+
6. **Deleting a workflow needs the user's explicit intent.** A confirmation flag is not authorization. Check dependencies first; detach draft tools with `agent_tool_remove`, and treat a live agent's republish as its own decision.
|
|
36
|
+
7. **Layout once per changed flow.** After adds, deletes or rewires, run the flow layout as the last structural step; placement at add time only avoids overlap.
|
|
37
|
+
8. **Never weaken the request to make a test pass.** Report an unsupported capability or ask the product question. Keep deliberately armed triggers and advisory-only nodes the user chose.
|
|
38
|
+
9. **A conflict means re-read, then reapply the intent to the current graph.** Never replay a stale document or old IDs; the retried write uses the IDs the current state holds.
|
|
39
|
+
10. **Say "not recorded" and change nothing** when asked to reconstruct history the feed does not hold.
|
|
40
|
+
|
|
41
|
+
## Recipes
|
|
42
|
+
|
|
43
|
+
### Establish context
|
|
44
|
+
|
|
45
|
+
Call `account_status`, select the workflow from `workflow_list`, then call `workflow_status` with its exact `workflowId`. There is no pin: capture the ID once and pass it on every workflow-scoped call.
|
|
46
|
+
|
|
47
|
+
### Create
|
|
48
|
+
|
|
49
|
+
- `workflow_create` — `name`
|
|
50
|
+
|
|
51
|
+
Create with the final name. Read `flowCount` and `nextStep`: with 0 flows, create the first flow with `flow_create`; with one empty default flow, rename it and build in it; when either field is missing, list the flows before deciding. Add flows only for genuinely separate canvases, and stop at an empty workflow when that is what was asked. A missing projected field is not a failed create: read the full result or the exact inventory before retrying.
|
|
52
|
+
|
|
53
|
+
### Orient
|
|
54
|
+
|
|
55
|
+
- `workflow_outline` — `workflowId`
|
|
56
|
+
- `workflow_state_get` — `flowId`, `stateId`, `workflowId`
|
|
57
|
+
- `flow_get` — `flowId`, `workflowId`
|
|
58
|
+
|
|
59
|
+
The outline shows flows, contracts, graph dependencies, triggers and data inventory in one call. State is a bounded projection; pass the flow ID for node and edge identities. The flow read exposes props and expressions.
|
|
60
|
+
|
|
61
|
+
### Build
|
|
62
|
+
|
|
63
|
+
1. Translate the request into inputs, steps, outputs, trigger, integrations, failure behavior and publish intent.
|
|
64
|
+
2. Declare flow inputs and outputs before nodes whose props derive from them. Pass a human display label; use the current binding from `flow get` (`jsBinding`) or the outline (`binding`), never the diagnostic `legacyBinding`.
|
|
65
|
+
3. Add nodes in execution order and name each after the data it produces; downstream bindings are seeded from that name when wired.
|
|
66
|
+
4. Lay out each changed flow, validate, test on development, re-read status. Publish only when the user asked for a live change or authorized deployment.
|
|
67
|
+
|
|
68
|
+
### Publish
|
|
69
|
+
|
|
70
|
+
- `workflow_status` — `workflowId`
|
|
71
|
+
- `trigger_list` — `workflowId`
|
|
72
|
+
- `workflow_publish` — `acknowledgeDualDispatch`, `acknowledgeValidationErrors`, `name`, `workflowId`
|
|
73
|
+
|
|
74
|
+
Read status and every trigger first: publishing activates enabled triggers on the live release. The publish refuses validation errors and may return an approval that the user must grant.
|
|
75
|
+
|
|
76
|
+
`workflow_publish` takes `workflowId`, `name`, `acknowledgeValidationErrors` and `acknowledgeDualDispatch`. When it returns an approval, continue it with `approval_resume` (`approvalId`, `waitSeconds`) rather than publishing again.
|
|
77
|
+
|
|
78
|
+
### Checkpoint and recover
|
|
79
|
+
|
|
80
|
+
- `workflow_state_save` — `name`, `workflowId`
|
|
81
|
+
- `workflow_history` — `group`, `version`, `workflowId`
|
|
82
|
+
- `workflow_history` — `group`, `version`, `workflowId`
|
|
83
|
+
- `workflow_state_restore` — `stateId`, `version`, `workflowId`
|
|
84
|
+
|
|
85
|
+
Save before a risky rewrite. Expand a group to find the state ID; restore by state, not by group.
|
|
86
|
+
|
|
87
|
+
### Delete
|
|
88
|
+
|
|
89
|
+
- `dependency_map` — `workflowId`
|
|
90
|
+
- `workflow_delete` — `workflowId`
|
|
91
|
+
`dependency_map` takes an optional `workflowId`; omit it for the account-wide map. `workflow_delete` has no confirmation parameter, which changes nothing about needing the user's intent.
|
|
92
|
+
|
|
93
|
+
## Verify
|
|
94
|
+
|
|
95
|
+
- `workflow_outline` — `workflowId`
|
|
96
|
+
- `workflow_validate` — `workflowId`
|
|
97
|
+
- `workflow_status` — `workflowId`
|
|
98
|
+
- `flow_get` — `flowId`, `workflowId`
|
|
99
|
+
- `run_flow` — `flowId`, `confirmLive`, `inputs`, `target`, `waitSeconds`, `workflowId`
|
|
100
|
+
|
|
101
|
+
Pass the parsed values as `inputs` and set `waitSeconds` on `run_flow`.
|
|
102
|
+
|
|
103
|
+
Evidence that a build works: validation reports zero errors, or each remaining error is reported with its effect; required connections and props are complete; expressions resolve to the expected values, with intentional empties explained; the expected branch and error paths ran where practical; the flow outputs contain the promised values; the development or live state matches the request; the final outline matches the request, with only your own abandoned scratch objects removed. A checkpoint or a rename needs its readback, not a run. Once the requested blockers are fixed and each changed path ran once, stop; warnings alone do not justify a redesign.
|
|
104
|
+
|
|
105
|
+
## Report
|
|
106
|
+
|
|
107
|
+
What was built, what ran and what it returned, whether it is published, and any connection or product decision still pending. Share returned product links only; never guess one.
|
|
108
|
+
|
|
109
|
+
When a task spans several domains, the generated tool map in `controllerai-start` lists every tool and its parameters by CLI command family.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!-- generated from .claude/skills by cli/scripts/render-skills.mjs; edit the source -->
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"skillSetVersion": "2026.09.07.1",
|
|
4
|
+
"minCliVersion": "0.2.0",
|
|
5
|
+
"latestCliVersion": "0.2.21",
|
|
6
|
+
"skills": [
|
|
7
|
+
{
|
|
8
|
+
"name": "controllerai-start",
|
|
9
|
+
"files": [
|
|
10
|
+
{
|
|
11
|
+
"path": "controllerai-start/SKILL.md",
|
|
12
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-start/SKILL.md",
|
|
13
|
+
"sha256": "479df6a863d207f7f8179d6491a16c0d2399d1973c8ef0cd4a310781ff360548",
|
|
14
|
+
"size": 10967
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"path": "controllerai-start/references/mcp-tool-map.md",
|
|
18
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-start/references/mcp-tool-map.md",
|
|
19
|
+
"sha256": "edf8213da96c4a8a71b74b1fb644db87a3fb8354385dd086335f08df870529ae",
|
|
20
|
+
"size": 26437
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "controllerai-workflows",
|
|
26
|
+
"files": [
|
|
27
|
+
{
|
|
28
|
+
"path": "controllerai-workflows/SKILL.md",
|
|
29
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-workflows/SKILL.md",
|
|
30
|
+
"sha256": "45b5d4cfda5e1f8e206192fae2076d0e137300f45f264e0fc28e3f9a994351ff",
|
|
31
|
+
"size": 9607
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"path": "controllerai-workflows/references/command-map.md",
|
|
35
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-workflows/references/command-map.md",
|
|
36
|
+
"sha256": "3a1fe464d00c2ae734dab11db3b338436d91a9c32dd8a1b3f1843ac4200a739c",
|
|
37
|
+
"size": 89
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"name": "controllerai-node-config",
|
|
43
|
+
"files": [
|
|
44
|
+
{
|
|
45
|
+
"path": "controllerai-node-config/SKILL.md",
|
|
46
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-node-config/SKILL.md",
|
|
47
|
+
"sha256": "7fbc68a24ccc08c04be8b6c4184b74b238058b637e4203293e0c5eae332bac2d",
|
|
48
|
+
"size": 11678
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"path": "controllerai-node-config/references/prop-and-readiness.md",
|
|
52
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-node-config/references/prop-and-readiness.md",
|
|
53
|
+
"sha256": "87da8b25c8303818b1f0c677b2cc6f7121910e8fcd94371ed5bc2065f7b7b845",
|
|
54
|
+
"size": 5344
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "controllerai-expressions",
|
|
60
|
+
"files": [
|
|
61
|
+
{
|
|
62
|
+
"path": "controllerai-expressions/SKILL.md",
|
|
63
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-expressions/SKILL.md",
|
|
64
|
+
"sha256": "993216f7070a1d4c16c66b4cc5d4e39bf87deef6a6c22b646cd72640d7dcd523",
|
|
65
|
+
"size": 10570
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"path": "controllerai-expressions/references/dsl-and-recipes.md",
|
|
69
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-expressions/references/dsl-and-recipes.md",
|
|
70
|
+
"sha256": "741b03033cb655dde95be99dcf6e00295b1b2d4f385ad42bbf4bb3c4001c9973",
|
|
71
|
+
"size": 4915
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "controllerai-flow-control",
|
|
77
|
+
"files": [
|
|
78
|
+
{
|
|
79
|
+
"path": "controllerai-flow-control/SKILL.md",
|
|
80
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-flow-control/SKILL.md",
|
|
81
|
+
"sha256": "3545a2cd9dee516e2cc9a56f22a9ca6e725be5cbcc7b734ceaad8498233304ce",
|
|
82
|
+
"size": 12553
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"path": "controllerai-flow-control/references/patterns.md",
|
|
86
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-flow-control/references/patterns.md",
|
|
87
|
+
"sha256": "dabb6e4aa81de05cd9bceb9f4bc3b3a5a005723f17b6b69958939a36ce10062b",
|
|
88
|
+
"size": 4770
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "controllerai-runs",
|
|
94
|
+
"files": [
|
|
95
|
+
{
|
|
96
|
+
"path": "controllerai-runs/SKILL.md",
|
|
97
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-runs/SKILL.md",
|
|
98
|
+
"sha256": "7056e18550425bcd0bb1189f48cc06ed4d7def2c6a2becbf1a1c51f9b6ca77d3",
|
|
99
|
+
"size": 9370
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"path": "controllerai-runs/references/debugging.md",
|
|
103
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-runs/references/debugging.md",
|
|
104
|
+
"sha256": "616d13ea43785e4d11bdb50b9e4098126fbc470ee2568b250e1af5f15cab3edf",
|
|
105
|
+
"size": 3162
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"name": "controllerai-triggers",
|
|
111
|
+
"files": [
|
|
112
|
+
{
|
|
113
|
+
"path": "controllerai-triggers/SKILL.md",
|
|
114
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-triggers/SKILL.md",
|
|
115
|
+
"sha256": "2329a5d829f21cc6cc1ec30815b8302108ea7c5eb20d7470bb340bd2798b3e30",
|
|
116
|
+
"size": 12609
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"path": "controllerai-triggers/references/lifecycle.md",
|
|
120
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-triggers/references/lifecycle.md",
|
|
121
|
+
"sha256": "519d9f858ee2ec8ab5f1c988e547f5a8c5478f4da3d454236354ade9800ed044",
|
|
122
|
+
"size": 3438
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"name": "controllerai-data",
|
|
128
|
+
"files": [
|
|
129
|
+
{
|
|
130
|
+
"path": "controllerai-data/SKILL.md",
|
|
131
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-data/SKILL.md",
|
|
132
|
+
"sha256": "5f12370f5eb65a23aad16c3a47f32e3a1e006b47ea62caa3fff7869f66a12054",
|
|
133
|
+
"size": 12754
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"path": "controllerai-data/references/data-rails.md",
|
|
137
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-data/references/data-rails.md",
|
|
138
|
+
"sha256": "c0ee68db825b643027d348352ec5d78d3001aee233a53aabafdae1e0526569af",
|
|
139
|
+
"size": 2974
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"name": "controllerai-ai-nodes",
|
|
145
|
+
"files": [
|
|
146
|
+
{
|
|
147
|
+
"path": "controllerai-ai-nodes/SKILL.md",
|
|
148
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-ai-nodes/SKILL.md",
|
|
149
|
+
"sha256": "af5ea6d1ffaa6d58ad6a84d048814ccf8c6100dd86e8eca7cf9450329161c326",
|
|
150
|
+
"size": 9595
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"path": "controllerai-ai-nodes/references/selection-and-testing.md",
|
|
154
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-ai-nodes/references/selection-and-testing.md",
|
|
155
|
+
"sha256": "66b235b9e81645ab877b31443505c7b07ea3f2e5a357053f266c121415f8cf5c",
|
|
156
|
+
"size": 3111
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"name": "controllerai-integration-actions",
|
|
162
|
+
"files": [
|
|
163
|
+
{
|
|
164
|
+
"path": "controllerai-integration-actions/SKILL.md",
|
|
165
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-integration-actions/SKILL.md",
|
|
166
|
+
"sha256": "166d301233d3e5a4f0db1bf76c4c1bf28924c1fb4564d03ade0372c91d31c951",
|
|
167
|
+
"size": 9024
|
|
168
|
+
}
|
|
169
|
+
]
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"name": "controllerai-agents",
|
|
173
|
+
"files": [
|
|
174
|
+
{
|
|
175
|
+
"path": "controllerai-agents/SKILL.md",
|
|
176
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-agents/SKILL.md",
|
|
177
|
+
"sha256": "5bb9ee73fb9e0336a5aadf412a44d4c3012c24d7d2961544a4be1c66d6eba17f",
|
|
178
|
+
"size": 12331
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"path": "controllerai-agents/references/instructions-and-versioning.md",
|
|
182
|
+
"url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-agents/references/instructions-and-versioning.md",
|
|
183
|
+
"sha256": "88b059e74aef03ccb12a53815d1090e5449090ff6dfd863b6cef5a12b434cb65",
|
|
184
|
+
"size": 5644
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
}
|
|
188
|
+
]
|
|
189
|
+
}
|
|
@@ -1,205 +0,0 @@
|
|
|
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,98 +0,0 @@
|
|
|
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.
|