@controllerai/cli 0.2.18 → 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/package.json +6 -4
- package/skills/controllerai-agents/SKILL.md +66 -152
- package/skills/controllerai-agents/references/instructions-and-versioning.md +32 -34
- package/skills/controllerai-ai-nodes/SKILL.md +57 -65
- package/skills/controllerai-ai-nodes/references/selection-and-testing.md +44 -26
- package/skills/controllerai-data/SKILL.md +65 -118
- package/skills/controllerai-data/references/data-rails.md +24 -26
- package/skills/controllerai-expressions/SKILL.md +48 -117
- package/skills/controllerai-expressions/references/dsl-and-recipes.md +42 -40
- package/skills/controllerai-flow-control/SKILL.md +66 -122
- package/skills/controllerai-flow-control/references/patterns.md +23 -60
- package/skills/controllerai-integration-actions/SKILL.md +47 -75
- package/skills/controllerai-node-config/SKILL.md +60 -130
- package/skills/controllerai-node-config/references/prop-and-readiness.md +28 -78
- package/skills/controllerai-runs/SKILL.md +50 -85
- package/skills/controllerai-runs/references/debugging.md +24 -22
- package/skills/controllerai-start/SKILL.md +53 -58
- package/skills/controllerai-start/references/mcp-tool-map.md +21 -16
- package/skills/controllerai-triggers/SKILL.md +62 -159
- package/skills/controllerai-triggers/references/lifecycle.md +36 -48
- package/skills/controllerai-workflows/SKILL.md +70 -70
- package/skills/controllerai-workflows/references/command-map.md +19 -44
- package/skills/manifest.json +80 -77
- 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/manifest.json
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"skillSetVersion": "2026.09.
|
|
3
|
+
"skillSetVersion": "2026.09.07.1",
|
|
4
4
|
"minCliVersion": "0.2.0",
|
|
5
|
-
"latestCliVersion": "0.2.
|
|
5
|
+
"latestCliVersion": "0.2.21",
|
|
6
6
|
"skills": [
|
|
7
7
|
{
|
|
8
8
|
"name": "controllerai-start",
|
|
9
9
|
"files": [
|
|
10
10
|
{
|
|
11
11
|
"path": "controllerai-start/SKILL.md",
|
|
12
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
13
|
-
"sha256": "
|
|
14
|
-
"size":
|
|
12
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-start/SKILL.md",
|
|
13
|
+
"sha256": "0d79439019310289d9f1a19ceb153756f6cec6d6cf80e46c9da1caf33cc6b183",
|
|
14
|
+
"size": 11209
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"path": "controllerai-start/agents/openai.yaml",
|
|
18
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
18
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-start/agents/openai.yaml",
|
|
19
19
|
"sha256": "3240c24df8ba5ebfb67bc3e9dbce97f4a78384c352123210197a2dbf27c51150",
|
|
20
20
|
"size": 226
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
"path": "controllerai-start/references/mcp-tool-map.md",
|
|
24
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
25
|
-
"sha256": "
|
|
26
|
-
"size":
|
|
24
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-start/references/mcp-tool-map.md",
|
|
25
|
+
"sha256": "f08325ad01ada76a2fac75c0969367167441931638dd9d91c87cce94cbf9620b",
|
|
26
|
+
"size": 26595
|
|
27
27
|
}
|
|
28
28
|
]
|
|
29
29
|
},
|
|
@@ -32,21 +32,21 @@
|
|
|
32
32
|
"files": [
|
|
33
33
|
{
|
|
34
34
|
"path": "controllerai-workflows/SKILL.md",
|
|
35
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
36
|
-
"sha256": "
|
|
37
|
-
"size":
|
|
35
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-workflows/SKILL.md",
|
|
36
|
+
"sha256": "a2419265809b6f822ed22be4cfbfc1c56107e7afffffc41a0f527fd93018dc8a",
|
|
37
|
+
"size": 9472
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
"path": "controllerai-workflows/agents/openai.yaml",
|
|
41
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
41
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-workflows/agents/openai.yaml",
|
|
42
42
|
"sha256": "6fb00a93a5f83fc2664679eb633ab07b477105472f8790fcf6dbcca913921a84",
|
|
43
43
|
"size": 251
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
"path": "controllerai-workflows/references/command-map.md",
|
|
47
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
48
|
-
"sha256": "
|
|
49
|
-
"size":
|
|
47
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-workflows/references/command-map.md",
|
|
48
|
+
"sha256": "81cc467172c5e431f4d9a9b833e24dfed42392d679f766d4fc6d1ac0722c71e7",
|
|
49
|
+
"size": 2091
|
|
50
50
|
}
|
|
51
51
|
]
|
|
52
52
|
},
|
|
@@ -55,21 +55,21 @@
|
|
|
55
55
|
"files": [
|
|
56
56
|
{
|
|
57
57
|
"path": "controllerai-node-config/SKILL.md",
|
|
58
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
59
|
-
"sha256": "
|
|
60
|
-
"size":
|
|
58
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-node-config/SKILL.md",
|
|
59
|
+
"sha256": "fb7ad0999e772079d7ce94f25d9fddca9b483b81a11bbaba47d618825d5585fe",
|
|
60
|
+
"size": 11614
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
63
|
"path": "controllerai-node-config/agents/openai.yaml",
|
|
64
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
64
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-node-config/agents/openai.yaml",
|
|
65
65
|
"sha256": "7fbd6f0c1f9ea40c41051d532736a4718895cfa397608a2c716300bcf4256df1",
|
|
66
66
|
"size": 242
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
69
|
"path": "controllerai-node-config/references/prop-and-readiness.md",
|
|
70
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
71
|
-
"sha256": "
|
|
72
|
-
"size":
|
|
70
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-node-config/references/prop-and-readiness.md",
|
|
71
|
+
"sha256": "6a1aa046bac6c5f1a68cbe242bdeb584f9a01e2de7248742460064a4d2708f75",
|
|
72
|
+
"size": 5583
|
|
73
73
|
}
|
|
74
74
|
]
|
|
75
75
|
},
|
|
@@ -78,21 +78,21 @@
|
|
|
78
78
|
"files": [
|
|
79
79
|
{
|
|
80
80
|
"path": "controllerai-expressions/SKILL.md",
|
|
81
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
82
|
-
"sha256": "
|
|
83
|
-
"size":
|
|
81
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-expressions/SKILL.md",
|
|
82
|
+
"sha256": "01240f493ec5bbd1ed562f988d243e3797577eee5ccc9d207f8bc45485b99108",
|
|
83
|
+
"size": 10310
|
|
84
84
|
},
|
|
85
85
|
{
|
|
86
86
|
"path": "controllerai-expressions/agents/openai.yaml",
|
|
87
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
87
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-expressions/agents/openai.yaml",
|
|
88
88
|
"sha256": "280d1f4d0a44cb5cfd3e5649e0a123b91b57b1484dcbc3a02ace988233234bc3",
|
|
89
89
|
"size": 249
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
92
|
"path": "controllerai-expressions/references/dsl-and-recipes.md",
|
|
93
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
94
|
-
"sha256": "
|
|
95
|
-
"size":
|
|
93
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-expressions/references/dsl-and-recipes.md",
|
|
94
|
+
"sha256": "efe4a5eba0ea7636387443af0a6cc082a41209404b92c3af5c8a029075db70f6",
|
|
95
|
+
"size": 5197
|
|
96
96
|
}
|
|
97
97
|
]
|
|
98
98
|
},
|
|
@@ -101,21 +101,21 @@
|
|
|
101
101
|
"files": [
|
|
102
102
|
{
|
|
103
103
|
"path": "controllerai-flow-control/SKILL.md",
|
|
104
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
105
|
-
"sha256": "
|
|
106
|
-
"size":
|
|
104
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-flow-control/SKILL.md",
|
|
105
|
+
"sha256": "c535a1ff61cc65cca53af083081935dc8672f7ce5d048dbb29334808428feec3",
|
|
106
|
+
"size": 11563
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
109
|
"path": "controllerai-flow-control/agents/openai.yaml",
|
|
110
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
110
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-flow-control/agents/openai.yaml",
|
|
111
111
|
"sha256": "164adf3b887bf9f67bba9cd210b5b49935c29ea0f52f76325fe5df517d279592",
|
|
112
112
|
"size": 229
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
"path": "controllerai-flow-control/references/patterns.md",
|
|
116
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
117
|
-
"sha256": "
|
|
118
|
-
"size":
|
|
116
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-flow-control/references/patterns.md",
|
|
117
|
+
"sha256": "f1a718de837dc541e58914f40b4a89e6e81ba80afac37731e381db73a4712d90",
|
|
118
|
+
"size": 4901
|
|
119
119
|
}
|
|
120
120
|
]
|
|
121
121
|
},
|
|
@@ -124,21 +124,21 @@
|
|
|
124
124
|
"files": [
|
|
125
125
|
{
|
|
126
126
|
"path": "controllerai-runs/SKILL.md",
|
|
127
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
128
|
-
"sha256": "
|
|
129
|
-
"size":
|
|
127
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-runs/SKILL.md",
|
|
128
|
+
"sha256": "5eeda1f95f8c18c12b968d6c2ea9008c2dd99d8953268c4ffd06652f43a91516",
|
|
129
|
+
"size": 9196
|
|
130
130
|
},
|
|
131
131
|
{
|
|
132
132
|
"path": "controllerai-runs/agents/openai.yaml",
|
|
133
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
133
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-runs/agents/openai.yaml",
|
|
134
134
|
"sha256": "63180f12974e19ce7b714695944608760e4132bfb88947543e52616098a88f5c",
|
|
135
135
|
"size": 234
|
|
136
136
|
},
|
|
137
137
|
{
|
|
138
138
|
"path": "controllerai-runs/references/debugging.md",
|
|
139
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
140
|
-
"sha256": "
|
|
141
|
-
"size":
|
|
139
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-runs/references/debugging.md",
|
|
140
|
+
"sha256": "341f9e056445bdffdcc67771fd62b28fb2125a661d5d8a5c4fb16bcac57417c0",
|
|
141
|
+
"size": 3127
|
|
142
142
|
}
|
|
143
143
|
]
|
|
144
144
|
},
|
|
@@ -147,21 +147,21 @@
|
|
|
147
147
|
"files": [
|
|
148
148
|
{
|
|
149
149
|
"path": "controllerai-triggers/SKILL.md",
|
|
150
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
151
|
-
"sha256": "
|
|
152
|
-
"size":
|
|
150
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-triggers/SKILL.md",
|
|
151
|
+
"sha256": "c8a88bb69a0e032f1fd2716e1a2cd0690e62ae0b9bb996bf30643d4bd3b8fab2",
|
|
152
|
+
"size": 11800
|
|
153
153
|
},
|
|
154
154
|
{
|
|
155
155
|
"path": "controllerai-triggers/agents/openai.yaml",
|
|
156
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
156
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-triggers/agents/openai.yaml",
|
|
157
157
|
"sha256": "56aa1bd33e54045d88002ade0c420be7bca37ac39433e6eedccef2e22bbd9515",
|
|
158
158
|
"size": 239
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
"path": "controllerai-triggers/references/lifecycle.md",
|
|
162
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
163
|
-
"sha256": "
|
|
164
|
-
"size":
|
|
162
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-triggers/references/lifecycle.md",
|
|
163
|
+
"sha256": "4dce6484b6abaa0eaf4ddbe366e60480180fc5b5aeb7e3c975bbe316b88dc0e5",
|
|
164
|
+
"size": 3340
|
|
165
165
|
}
|
|
166
166
|
]
|
|
167
167
|
},
|
|
@@ -170,21 +170,21 @@
|
|
|
170
170
|
"files": [
|
|
171
171
|
{
|
|
172
172
|
"path": "controllerai-data/SKILL.md",
|
|
173
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
174
|
-
"sha256": "
|
|
175
|
-
"size":
|
|
173
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-data/SKILL.md",
|
|
174
|
+
"sha256": "1418b287af30968634c69dbdbd54d22354f5f79f52389e6d1c94a87421c20e78",
|
|
175
|
+
"size": 12059
|
|
176
176
|
},
|
|
177
177
|
{
|
|
178
178
|
"path": "controllerai-data/agents/openai.yaml",
|
|
179
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
179
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-data/agents/openai.yaml",
|
|
180
180
|
"sha256": "5c54b0a714086088213c679fb904a69a599374847f9aa1d6c0756172c2a2f227",
|
|
181
181
|
"size": 219
|
|
182
182
|
},
|
|
183
183
|
{
|
|
184
184
|
"path": "controllerai-data/references/data-rails.md",
|
|
185
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
186
|
-
"sha256": "
|
|
187
|
-
"size":
|
|
185
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-data/references/data-rails.md",
|
|
186
|
+
"sha256": "0c03f25a099d168b8ae1fe54087ce59d06fcfc8631046927a996a88f0c4f9835",
|
|
187
|
+
"size": 2819
|
|
188
188
|
}
|
|
189
189
|
]
|
|
190
190
|
},
|
|
@@ -193,21 +193,21 @@
|
|
|
193
193
|
"files": [
|
|
194
194
|
{
|
|
195
195
|
"path": "controllerai-ai-nodes/SKILL.md",
|
|
196
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
197
|
-
"sha256": "
|
|
198
|
-
"size":
|
|
196
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-ai-nodes/SKILL.md",
|
|
197
|
+
"sha256": "4e4bdf53e300adedf5e03f282687d0d20e200baf056cd59bf8df98d7b8b21403",
|
|
198
|
+
"size": 8940
|
|
199
199
|
},
|
|
200
200
|
{
|
|
201
201
|
"path": "controllerai-ai-nodes/agents/openai.yaml",
|
|
202
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
202
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-ai-nodes/agents/openai.yaml",
|
|
203
203
|
"sha256": "3ba8b8bb6f0cd4b0d5675ebda0af10bb79dc7a42e394eb98479343c83da92599",
|
|
204
204
|
"size": 256
|
|
205
205
|
},
|
|
206
206
|
{
|
|
207
207
|
"path": "controllerai-ai-nodes/references/selection-and-testing.md",
|
|
208
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
209
|
-
"sha256": "
|
|
210
|
-
"size":
|
|
208
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-ai-nodes/references/selection-and-testing.md",
|
|
209
|
+
"sha256": "66b235b9e81645ab877b31443505c7b07ea3f2e5a357053f266c121415f8cf5c",
|
|
210
|
+
"size": 3111
|
|
211
211
|
}
|
|
212
212
|
]
|
|
213
213
|
},
|
|
@@ -216,13 +216,13 @@
|
|
|
216
216
|
"files": [
|
|
217
217
|
{
|
|
218
218
|
"path": "controllerai-integration-actions/SKILL.md",
|
|
219
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
220
|
-
"sha256": "
|
|
221
|
-
"size":
|
|
219
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-integration-actions/SKILL.md",
|
|
220
|
+
"sha256": "855556937687acc9dbfc22f65f75e98fb9974838776b5c53414193e19b490b7b",
|
|
221
|
+
"size": 8764
|
|
222
222
|
},
|
|
223
223
|
{
|
|
224
224
|
"path": "controllerai-integration-actions/agents/openai.yaml",
|
|
225
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
225
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-integration-actions/agents/openai.yaml",
|
|
226
226
|
"sha256": "82ee62aa48a644e658c9bb6a78c417dc15eb4f3ec9f4abc9081b6d24d16fe92d",
|
|
227
227
|
"size": 262
|
|
228
228
|
}
|
|
@@ -233,23 +233,26 @@
|
|
|
233
233
|
"files": [
|
|
234
234
|
{
|
|
235
235
|
"path": "controllerai-agents/SKILL.md",
|
|
236
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
237
|
-
"sha256": "
|
|
238
|
-
"size":
|
|
236
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-agents/SKILL.md",
|
|
237
|
+
"sha256": "5dadcac767c9f2e7a701081d38e1e1d5350fd2cf2f273dd3ee6d5be818371124",
|
|
238
|
+
"size": 11539
|
|
239
239
|
},
|
|
240
240
|
{
|
|
241
241
|
"path": "controllerai-agents/agents/openai.yaml",
|
|
242
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
242
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-agents/agents/openai.yaml",
|
|
243
243
|
"sha256": "f4684ec904f3ebb051bb48460375756899c3316fbb16304aad5fff3d89692b09",
|
|
244
244
|
"size": 293
|
|
245
245
|
},
|
|
246
246
|
{
|
|
247
247
|
"path": "controllerai-agents/references/instructions-and-versioning.md",
|
|
248
|
-
"url": "https://getcontroller.ai/skills/2026.09.
|
|
249
|
-
"sha256": "
|
|
250
|
-
"size":
|
|
248
|
+
"url": "https://getcontroller.ai/skills/2026.09.07.1/controllerai-agents/references/instructions-and-versioning.md",
|
|
249
|
+
"sha256": "88b059e74aef03ccb12a53815d1090e5449090ff6dfd863b6cef5a12b434cb65",
|
|
250
|
+
"size": 5644
|
|
251
251
|
}
|
|
252
252
|
]
|
|
253
253
|
}
|
|
254
|
-
]
|
|
254
|
+
],
|
|
255
|
+
"surfaces": {
|
|
256
|
+
"mcp": "skills-mcp"
|
|
257
|
+
}
|
|
255
258
|
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: controllerai-agents
|
|
3
|
+
description: Design, assemble, test, publish and share user-facing Controller AI agents built from instructions, knowledge files, workflow tools and ready integration actions. Use when creating or editing an agent, choosing its tool architecture, attaching tools, verifying draft or live conversations, or publishing and sharing it.
|
|
4
|
+
---
|
|
5
|
+
<!-- generated from .claude/skills by cli/scripts/render-skills.mjs; edit the source -->
|
|
6
|
+
|
|
7
|
+
# Agents
|
|
8
|
+
|
|
9
|
+
## Use this when
|
|
10
|
+
|
|
11
|
+
- The user wants something people chat with: an assistant, a copilot, a file-enrichment helper, an internal tool with judgment.
|
|
12
|
+
- An existing agent needs new instructions, tools or knowledge, or must be verified, published or shared.
|
|
13
|
+
- A capability must be placed: in the agent's instructions, in a workflow tool, in a direct action, or in a knowledge file.
|
|
14
|
+
|
|
15
|
+
Direct actions belong to `controllerai-integration-actions`; the workflows behind workflow tools to `controllerai-workflows`; the wider deliverable choice to `controllerai-start`.
|
|
16
|
+
|
|
17
|
+
## How it works
|
|
18
|
+
|
|
19
|
+
**What an agent is.** A person chats with it; it reasons, reads conversation attachments and reference knowledge, calls tools, and creates files for the user. It is the right shape for judgment, conversation and file handling; deterministic business rules, custom workflow data and multi-step processing belong in workflow tools it calls, and one existing app operation is a direct action.
|
|
20
|
+
|
|
21
|
+
**One draft, immutable versions.** Editing changes only the mutable draft, and saving the draft updates the owner-only Test environment at once. Publishing snapshots the display name, instructions, tool identities, descriptions, approval policies and knowledge files into a new immutable version, moves the live pointer, and restamps every existing live conversation to it; that cutover interrupts in-flight answers and expires pending approvals. The runtime model is not part of the snapshot. There is no rollback: a bad version is corrected forward.
|
|
22
|
+
|
|
23
|
+
**Test versus Live.**
|
|
24
|
+
|
|
25
|
+
| Context | Test (draft) conversation | Live (shared) conversation |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
| Agent configuration | Current mutable draft | Latest published immutable agent version |
|
|
28
|
+
| Workflow tools | Each workflow's current development head | Each workflow's latest live release; never pinned |
|
|
29
|
+
| Reference files | Current draft knowledge files | Knowledge frozen into the published agent version |
|
|
30
|
+
| Runtime files | Current live runtime files, overlaid by development/test runtime files at the same path | Current live runtime files only |
|
|
31
|
+
| Access | Owner only | Owner, plus organization members when shared; non-owners never see the draft |
|
|
32
|
+
|
|
33
|
+
**Three kinds of files.** Conversation attachments belong to one chat. Knowledge is versioned reference material in the draft: text types only (`txt`, `md`, `json`, `csv`, `html`, `xml`), each added once under the name the agent should see. When the user asks for a PDF or another unsupported format, store a supported text type under the plain requested name and say why; a name that still carries the wrong extension is not the same document. Shared runtime files are live workspace state, visible without a publish, and no substitute for an upload. Paths come from returned metadata; runtime mounts can prefix them.
|
|
34
|
+
|
|
35
|
+
**Live-bound state.** Enabling or disabling is runtime state, independent of publication: disabling pauses live use, while the owner's Test conversations still work. A workflow publish changes every live agent that follows that workflow without an agent publish, and live workflow resolution is cached per session, so an in-flight turn may finish on the prior release. A direct action's connection is a live grant: rebinding redirects it and revocation or detachment blocks it immediately; detachment still needs a later agent publish to remove the tool from the published list.
|
|
36
|
+
|
|
37
|
+
**Runtime usage.** Test and live conversations consume the organization's runtime usage and cause the connected providers' side effects; the builder's own subscription pays only for building.
|
|
38
|
+
|
|
39
|
+
## Rules
|
|
40
|
+
|
|
41
|
+
1. **Instructions hold judgment; tools hold work; knowledge holds sources.** Each tool description says when to use it, what to pass, what comes back.
|
|
42
|
+
2. **Test every workflow tool on development before attaching it**, with a non-empty output contract the run actually returns, unless the user declined that test and asked for the attachment anyway.
|
|
43
|
+
3. **Decide the approval policy before attaching a consequential tool.** The default is no approval, which is right for reads and searches; for a tool that sends, posts, spends or deletes, choose `requireConfirmation` or explicitly tell the user it will run unattended, and mention the choice in the report to the user. The policy is a runtime setting for the agent's users, not a permission gate on your own work, so honor a policy the user already specified.
|
|
44
|
+
4. **Never promise a pinned workflow tool.** Live tools follow the latest release and nothing else is supported; when asked to freeze one, explain that, ask whether following the latest release is acceptable, and finish the independent work meanwhile.
|
|
45
|
+
5. **One conversation per verification task, on an explicit rail.** Reuse its ID for follow-ups and approvals; never resend the request or open a replacement after an approval pause, and never approve merely to continue.
|
|
46
|
+
6. **Resolve the task's pending requests, in its conversation and within the user's scope, before publishing**, because a publish expires the unexecuted requests in the affected live conversations.
|
|
47
|
+
7. **Draft-only means stop at Test evidence.** Readiness authorizes nothing; a draft never proves the live agent.
|
|
48
|
+
8. **Publish in dependency order**: attached workflows the user authorized, then agent preflight, then the agent, then one fresh live conversation. A preflight blocker on an unfinished workflow tool is cleared by detaching that tool; never delete its flow or publish the workflow to make preflight pass, because both release or destroy work the user did not ask to ship.
|
|
49
|
+
9. **Failure instructions are specific.** Say what failed and what was attempted, retry at most once, distinguish reads from rejected validation from uncertain mutations, and name the integration when a connection breaks.
|
|
50
|
+
10. **Keep internals out of the runtime user's view**: no workflow, flow, node, rail, prop or version names in instructions or replies.
|
|
51
|
+
|
|
52
|
+
## Recipes
|
|
53
|
+
|
|
54
|
+
### Create the draft
|
|
55
|
+
|
|
56
|
+
- `agent_list` — `ownership`, `search`
|
|
57
|
+
- `agent_create` — `disabled`, `instructions`, `name`
|
|
58
|
+
- `agent_get` — `agentId`
|
|
59
|
+
|
|
60
|
+
`agent_create` takes the complete Markdown in `instructions`; there is no file to read.
|
|
61
|
+
A draft is private and by default enabled on creation, so the user can open it and start testing at once; nothing is live until a publish. Write instructions from the template in [references/instructions-and-versioning.md](references/instructions-and-versioning.md) and delete every sentence that does not change behavior.
|
|
62
|
+
|
|
63
|
+
### Attach tools and knowledge
|
|
64
|
+
|
|
65
|
+
- `run_flow` — `flowId`, `confirmLive`, `inputs`, `target`, `waitSeconds`, `workflowId`
|
|
66
|
+
- `agent_tool_workflow_add` — `agentId`, `description`, `flow`, `requireConfirmation`, `workflowId`
|
|
67
|
+
- `agent_tool_workflow_add` — `agentId`, `description`, `flow`, `requireConfirmation`, `workflowId`
|
|
68
|
+
- `agent_knowledge_file_add` — `agentId`, `content`, `name`, `type` / `agent_workspace_file_add` — `agentId`, `content`, `name`, `space`, `type`
|
|
69
|
+
- `agent_tool_list` — `agentId`
|
|
70
|
+
- `agent_file_list` — `agentId`, `cursor`, `environment`, `folderPrefix`, `limit`, `live`, `search`, `space`
|
|
71
|
+
|
|
72
|
+
`agent_tool_workflow_add` and `agent_tool_action_add` take `requireConfirmation`, optional and `false` by default. Files travel inline: `agent_knowledge_file_add` (`name`, `type`, `content`) for knowledge, `agent_workspace_file_add` with `space` for shared runtime files (live immediately); each call creates another file, so read the result before a second call. `agent_file_list` filters runtime files by `environment`.
|
|
73
|
+
Flow inputs become the tool's parameters and its outputs the result.
|
|
74
|
+
|
|
75
|
+
### Verify in Test
|
|
76
|
+
|
|
77
|
+
- `agent_test` — `agentId`, `message`, `model`, `waitSeconds`, `title`, `rail`
|
|
78
|
+
- `agent_conversation_create` — `agentId`, `model`, `title`, `rail`
|
|
79
|
+
- `agent_conversation_send` — `conversationId`, `message`, `waitSeconds`
|
|
80
|
+
- `agent_conversation_history` — `conversationId`, `last`
|
|
81
|
+
- `agent_conversation_approve` — `conversationId`, `requestId`
|
|
82
|
+
- `agent_conversation_deny` — `conversationId`, `message`, `requestId`
|
|
83
|
+
|
|
84
|
+
`agent_test` takes `rail: "draft"` or `"live"` and `waitSeconds`; `agent_conversation_send` takes `waitSeconds`; when a wait returns unfinished, poll `agent_conversation_status` and read `agent_conversation_history` for that conversation instead of sending again; approve and deny take the `requestId` of the pending request.
|
|
85
|
+
`agent_test` is a one-shot that always creates a conversation; use `agent_conversation_create` and `agent_conversation_send` when follow-up or an approval may be needed.
|
|
86
|
+
Test positive and negative tool selection, exact arguments, results, errors and knowledge. A workflow tool's side effect is proved by its terminal workflow execution; a direct action by its persisted action events, result and external effect, never by an execution ID it does not have. After removing a tool, test one request that must no longer use it and one that still uses a retained tool. Say before the first test that it consumes runtime usage and may reach providers.
|
|
87
|
+
|
|
88
|
+
### Publish and share
|
|
89
|
+
|
|
90
|
+
- `workflow_status` — `workflowId`
|
|
91
|
+
- `workflow_publish` — `acknowledgeDualDispatch`, `acknowledgeValidationErrors`, `name`, `workflowId`
|
|
92
|
+
- `agent_get` — `agentId`
|
|
93
|
+
- `agent_publish_preflight` — `agentId`
|
|
94
|
+
- `agent_publish` — `agentId`, `name`
|
|
95
|
+
- `agent_version_list` — `agentId`
|
|
96
|
+
- `agent_test` — `agentId`, `message`, `model`, `waitSeconds`, `title`, `rail`
|
|
97
|
+
- `agent_visibility_set` — `agentId`, `value`
|
|
98
|
+
|
|
99
|
+
`workflow_status` and `workflow_publish` take the explicit `workflowId` of each attached workflow; `agent_get` reports `hasUnpublishedChanges`; `agent_version_list` is the release history; `agent_visibility_set` takes `value`.
|
|
100
|
+
Publish an attached workflow only when its verified development state must go live and the user authorized it. `hasUnpublishedChanges` on the agent read says whether a publish would change anything; do not publish an unchanged draft. Preflight is the arbiter of structural readiness: report blockers and stop; with none and an authorized release, publish unless an error you watched happen remains. Then verify with a fresh live conversation. Agents stay private unless the user asks for organization access: members use the published version through the owner's connected accounts and the organization's usage pool, and private visibility revokes access immediately. After a publish, offer the product's Slack setup.
|
|
101
|
+
|
|
102
|
+
### Runtime state
|
|
103
|
+
|
|
104
|
+
- `agent_update` — `agentId`, `instructions`, `name` / `agent_set_enabled` — `agentId`, `enabled`
|
|
105
|
+
- `agent_update` — `agentId`, `instructions`, `name` / `agent_set_enabled` — `agentId`, `enabled`
|
|
106
|
+
- `agent_delete` — `agentId`
|
|
107
|
+
|
|
108
|
+
`agent_set_enabled` takes `enabled: false` to pause or `enabled: true` to resume; `agent_update` edits the draft; `agent_delete` has no confirmation parameter.
|
|
109
|
+
Disable pauses live use without a publish; the owner's Test conversations keep working. Delete is a soft delete that revokes access and asks active sessions to stop; there is no restore.
|
|
110
|
+
|
|
111
|
+
### Hand over
|
|
112
|
+
|
|
113
|
+
Call `agent_present` for the finished agent and relay the returned card with its name, purpose, tools and link.
|
|
114
|
+
|
|
115
|
+
## Verify
|
|
116
|
+
|
|
117
|
+
The tool list shows the intended tools with exact identities, descriptions and confirmation policies; the knowledge list shows the intended files; the agent read-back matches the instructions; the captured conversation exists on the requested rail without duplicates, its history shows the intended arguments, terminal results and no unresolved request, and stateful behavior is proved by a same-rail record query; a release shows a clean preflight, the new version in the version list, and one fresh live conversation.
|
|
118
|
+
|
|
119
|
+
## Report
|
|
120
|
+
|
|
121
|
+
The agent ID and version, its tools with their confirmation policies, what the Test and live conversations proved, connections and access, and what is still unverified or unpublished.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<!-- generated from .claude/skills by cli/scripts/render-skills.mjs; edit the source -->
|
|
2
|
+
# Agent instructions and versioning
|
|
3
|
+
|
|
4
|
+
## Instruction template
|
|
5
|
+
|
|
6
|
+
```markdown
|
|
7
|
+
You are <role> for <audience>. You own <outcome>.
|
|
8
|
+
|
|
9
|
+
## Actions
|
|
10
|
+
|
|
11
|
+
- `<tool_name>`: Use when <specific situation>. Pass <inputs in user terms>. It returns <result>; <how to use it>.
|
|
12
|
+
|
|
13
|
+
## Judgment
|
|
14
|
+
|
|
15
|
+
- <decision threshold or boundary>
|
|
16
|
+
- <what requires clarification or approval>
|
|
17
|
+
- <what must never happen>
|
|
18
|
+
|
|
19
|
+
## Responses
|
|
20
|
+
|
|
21
|
+
- <tone, length, format>
|
|
22
|
+
|
|
23
|
+
## When something fails
|
|
24
|
+
|
|
25
|
+
- Tell the user what failed and what you were trying to do.
|
|
26
|
+
- Retry a read once; do not retry a rejected validation; check the result before repeating an uncertain write.
|
|
27
|
+
- If a connection is broken, name the integration that needs attention.
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Delete any sentence that does not change behavior. Do not expose workflow, flow, node, rail, prop, schema-tier or version internals to the runtime user.
|
|
31
|
+
|
|
32
|
+
## Draft and live model
|
|
33
|
+
|
|
34
|
+
- Agent edits change only the mutable draft; saving the draft updates Test immediately.
|
|
35
|
+
- Publishing snapshots display name, instructions, tool identities, descriptions and approval policies, and knowledge files into a new immutable version. The runtime model is not part of that snapshot.
|
|
36
|
+
- Publishing moves the live pointer and restamps every existing live conversation to the new version; new and existing shared conversations therefore use the latest published agent version. In-flight answers are interrupted and pending approvals expire.
|
|
37
|
+
- Non-owners never receive draft instructions, tools or knowledge. Test conversations are owner-only.
|
|
38
|
+
- There is no rollback; correct a bad version by editing the draft and publishing forward. `agent versions` is the release history.
|
|
39
|
+
- Test conversations run each workflow tool against its current development head; live conversations follow each workflow's latest live release and cannot pin a version.
|
|
40
|
+
- Workflow and agent publishing are independent. A workflow publish changes every live agent that follows it without another agent publish. Live workflow resolution is cached per runtime session: an in-flight turn or approval episode may finish on the prior release, then the session refreshes. Use a fresh live conversation for post-publish proof and disclose any refresh warning.
|
|
41
|
+
- A direct action's identity, description and confirmation policy are versioned; its connection and grant are live: rebinding can redirect an invocation, and failure, revocation or detachment can block it immediately. Confirmation is strictest-wins: turning it on for a direct action blocks the published action at once until the next publish carries it. Detachment also changes the draft tool list, so publish afterward to remove the tool from the published list.
|
|
42
|
+
- Organization members use the owner's connected external accounts for direct actions, and usage comes from the organization's shared pool.
|
|
43
|
+
- Development and live workflow records are separate; stateful live behavior needs live-store proof.
|
|
44
|
+
|
|
45
|
+
## File context by mode
|
|
46
|
+
|
|
47
|
+
- **Live:** knowledge frozen in the latest published agent version plus current live shared or runtime files.
|
|
48
|
+
- **Test:** current draft knowledge plus current live shared or runtime files, overlaid by development/test files at the same sandbox path, where the development/test file wins.
|
|
49
|
+
- Runtime files live outside the immutable snapshot, so a live runtime-file change appears in live conversations without a publish. Conversation attachments belong to one conversation only.
|
|
50
|
+
|
|
51
|
+
## Updating a published agent
|
|
52
|
+
|
|
53
|
+
1. Edit the draft.
|
|
54
|
+
2. Read it back and verify it in a Test conversation.
|
|
55
|
+
3. Publish any changed workflow dependency the user authorized.
|
|
56
|
+
4. Run preflight and publish the agent.
|
|
57
|
+
5. Verify with a new live conversation.
|
|
58
|
+
|
|
59
|
+
Do not republish the agent merely to pick up a followed workflow's new release or a direct-action rebind, failure, revocation or detachment; those effects are already live. Verify and disclose every live-bound change.
|
|
60
|
+
|
|
61
|
+
## Verification matrix
|
|
62
|
+
|
|
63
|
+
| Layer | Evidence |
|
|
64
|
+
| --- | --- |
|
|
65
|
+
| Workflow tool | A completed development flow run; an intentional, authorized live flow run is stronger evidence of published behavior than a draft-agent proxy |
|
|
66
|
+
| Direct action | Persisted conversation action events, the returned result, and the intended external effect |
|
|
67
|
+
| Draft routing | A Test conversation that chooses the correct tool with the correct arguments |
|
|
68
|
+
| Published workflow | `workflow status` reporting the intended live release and active state |
|
|
69
|
+
| Published agent | The publish version plus a new live conversation |
|
|
70
|
+
| Stateful live behavior | A live conversation or trigger run that reads and writes the expected live records |
|
|
71
|
+
|
|
72
|
+
Direct actions do not create workflow execution IDs. Never claim a higher layer from lower-layer evidence alone.
|
|
73
|
+
|
|
74
|
+
## File-handling agents
|
|
75
|
+
|
|
76
|
+
An agent, not a workflow, reads a chat-uploaded file and produces the output file; workflows receive typed values extracted from the rows, and a workflow `file` value is hosted-file metadata, not an upload or a parser. For a per-row enrichment: build and test a typed one-item flow (clear match, ambiguous match, missing data, a failed lookup), attach it, instruct the agent to inspect the columns, process every row, keep failures on their original rows, preserve column and row order and append the new columns, then have the exported file checked (quoted commas, a missing company, an ambiguous name) for opening and retaining every input row. The upload and the download happen on the product's file surface, which the builder cannot drive, so that check is the user's; "saved the file" is not proof of an accessible download.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: controllerai-ai-nodes
|
|
3
|
+
description: Configure and verify AI steps inside Controller AI workflows: the native Ask AI node, its provider, model, prompt and typed response, and the workflow actions that talk to a platform agent. Use when a flow needs generation, classification, extraction, summarization or structured AI output, or must create or message an agent conversation.
|
|
4
|
+
---
|
|
5
|
+
<!-- generated from .claude/skills by cli/scripts/render-skills.mjs; edit the source -->
|
|
6
|
+
|
|
7
|
+
# AI nodes
|
|
8
|
+
|
|
9
|
+
## Use this when
|
|
10
|
+
|
|
11
|
+
- One step of a flow needs language-model judgment: classify, extract, summarize, draft, decide.
|
|
12
|
+
- An AI step must return fields that later nodes read.
|
|
13
|
+
- A flow must open or message a Controller AI agent conversation or manage its files.
|
|
14
|
+
|
|
15
|
+
A conversational assistant with tools and knowledge is an agent (`controllerai-agents`); a step whose logic can be written and tested exactly is an expression or an ordinary action, not AI.
|
|
16
|
+
|
|
17
|
+
## How it works
|
|
18
|
+
|
|
19
|
+
**Ask AI is one bounded transformation.** The native component (`registry_askai`, action `registry_askai-ask-ai`) has two text props: a required user message, the input the model answers, and an optional prompt, the standing system instructions. It returns text or a primitive by default, or a typed response when a shape is bound. Its props resolve in dependency order: the provider is a static selector (it defaults to one provider, so options exist for whichever provider is current) that reloads the dependent props, the model is a remote dropdown filtered by label substring, the response data type is a shape selector that takes a primitive or a `custom.*` type, and the user message is an expression bound to the real inputs. Prop names and option values come from the node's current metadata, never from memory, because the registry changes.
|
|
20
|
+
|
|
21
|
+
**Typed output is a contract, not a prompt.** A prompt that says "return JSON" does not set the output type. When downstream nodes need fields, define or reuse the small `custom.*` type first, bind it as the response data type, then describe each field's meaning, allowed values and uncertainty representation in the prompt; a single word or number needs no schema. Fluent output in the wrong shape is a failure.
|
|
22
|
+
|
|
23
|
+
**Models are discovered.** The catalog, availability and prices change; the returned options are the only valid values, and the setter validates the value against them with its matching label. A requested model that is absent is reported and never substituted: a new node stays unset, and a repair keeps the existing working selection.
|
|
24
|
+
|
|
25
|
+
**Platform agents from a flow.** The `registry_agent` component exposes actions to create a conversation (agent plus initial message), send a message to an existing conversation (agent, conversation and message), and create agent or conversation files. Their outputs are dispatch metadata such as the conversation ID, never the assistant's answer; the answer is read on the conversation itself. These actions message real conversations and write real runtime files when they run.
|
|
26
|
+
|
|
27
|
+
**Runtime evidence.** `resolvedConfigs` proves which message, prompt, provider, model and response type reached the action; the node output proves what the provider returned. Inspect both. Executing the node is platform usage, separate from the builder's own subscription.
|
|
28
|
+
|
|
29
|
+
## Rules
|
|
30
|
+
|
|
31
|
+
1. **Keep the native Ask AI node** for a bounded AI step; never replace it with a provider integration or delete an existing one to escape its configuration, unless the user asks for a different component.
|
|
32
|
+
2. **Discover the component, the props and the model options**; never hardcode a component key, a prop name or a model ID, because the registry and the catalogs change under you.
|
|
33
|
+
3. **Provider first, then re-read the props, then the model, then the response type, then the user message and prompt.** Setting a dependent prop before its selector writes into a stale schema; on a provider-only or model-only repair, leave the existing message, prompt and output contract alone.
|
|
34
|
+
4. **A missing model or provider is a gap to report**, not a reason to choose a similar one; balance quality, latency, cost and structured-output reliability inside the user's stated constraints.
|
|
35
|
+
5. **Bind the user message to the real inputs** through the expression context; a literal message is only right for a step whose input never changes.
|
|
36
|
+
6. **Delimit untrusted input** inside the prompt and state that instructions embedded in it are data, not authority; keep credentials and unnecessary personal data out of prompts.
|
|
37
|
+
7. **For a new classifier or extractor, test the failure cases, not only the happy path**: missing or ambiguous input, an alternate category, conflicting evidence, instruction-like text in the data, and a provider failure where it can occur. A repair or a declined test needs only the evidence the request calls for.
|
|
38
|
+
8. **Read the resolved prompt and the typed fields**, not just that text came back, before wiring anything downstream.
|
|
39
|
+
|
|
40
|
+
## Recipes
|
|
41
|
+
|
|
42
|
+
### Add the node
|
|
43
|
+
|
|
44
|
+
- `integration_action_list` — `query`, `integration`, `limit`
|
|
45
|
+
- `integration_action_get` — `integration`, `key`
|
|
46
|
+
- `node_add` — `after`, `connection`, `enableProp`, `flow`, `key`, `name`, `node`, `output`, `props`, `workflowId`
|
|
47
|
+
- `node_status` — `nodeId`, `workflowId`
|
|
48
|
+
|
|
49
|
+
### Configure in dependency order
|
|
50
|
+
|
|
51
|
+
- `node_prop_set` — `nodeId`, `js`, `label`, `prop`, `rawExpressionJson`, `value`, `workflowId`, `valueJson`
|
|
52
|
+
- `node_prop_list` — `nodeId`, `workflowId`
|
|
53
|
+
- `node_prop_options` — `nodeId`, `for`, `page`, `prevContext`, `prop`, `query`, `workflowId`
|
|
54
|
+
- `node_prop_set` — `nodeId`, `js`, `label`, `prop`, `rawExpressionJson`, `value`, `workflowId`, `valueJson`
|
|
55
|
+
- `schema_type_create` — `name`, `display`, `field`, `fromJson`, `workflowId`
|
|
56
|
+
- `node_prop_set` — `nodeId`, `js`, `label`, `prop`, `rawExpressionJson`, `value`, `workflowId`, `valueJson`
|
|
57
|
+
- `expr_context` — `nodeId`, `methods`, `prop`, `workflowId`
|
|
58
|
+
- `node_prop_set` — `nodeId`, `js`, `label`, `prop`, `rawExpressionJson`, `value`, `workflowId`, `valueJson`
|
|
59
|
+
- `node_prop_set` — `nodeId`, `js`, `label`, `prop`, `rawExpressionJson`, `value`, `workflowId`, `valueJson`
|
|
60
|
+
|
|
61
|
+
The query is a label substring, not a preference: search a family name, then judge the returned options by cost, quality, latency and constraints. The schema step applies only when downstream nodes need fields.
|
|
62
|
+
|
|
63
|
+
`node_prop_options` takes `prop` and `query` (page with `page` and `prevContext`); `node_prop_set` is the single setter, taking `value` (with `label` as an array for a dropdown) or `js` for the user message, exactly one per call: one call each for the provider prop, the model prop, the response type prop and the message prop. `schema_type_create` takes `name` and `field` as an array such as `["category:text:Category", "confidence:number:Confidence", "rationale:text:Rationale"]`. Reuse an existing schema when one already has the intended shape.
|
|
64
|
+
|
|
65
|
+
The user message carries the inputs through exact bindings; the prompt carries the standing material: the task and audience, the decision rules and constraints, the output fields and format, and the explicit no-data or uncertainty behavior. No filler persona, no repeated instruction, no claim about data the context does not expose.
|
|
66
|
+
|
|
67
|
+
### Call a platform agent from a flow
|
|
68
|
+
|
|
69
|
+
- `integration_action_list` — `query`, `integration`, `limit`
|
|
70
|
+
- `integration_action_get` — `integration`, `key`
|
|
71
|
+
- `node_add` — `after`, `connection`, `enableProp`, `flow`, `key`, `name`, `node`, `output`, `props`, `workflowId`
|
|
72
|
+
- `node_prop_list` — `nodeId`, `workflowId`
|
|
73
|
+
|
|
74
|
+
`integration_action_list` takes `query` and `integration: "registry_agent"`; `node_add` takes `node: "registry_agent"` and the exact `key`.
|
|
75
|
+
Select the intended agent from the returned options; a send-message action also needs the `conversationId` it targets, and the "current agent" or "current conversation" choices work only when the flow itself was started by an agent. The output confirms dispatch (conversation ID, sent flag); read the answer on the conversation with `controllerai-agents`.
|
|
76
|
+
|
|
77
|
+
### Test
|
|
78
|
+
|
|
79
|
+
- `run_node` — `nodeId`, `inputs`, `waitSeconds`, `workflowId`
|
|
80
|
+
- `execution_node_get` — `nodeExecutionId`, `full`, `workflowId`
|
|
81
|
+
|
|
82
|
+
`run_node` takes the parsed `inputs` and `waitSeconds`; `execution_node_get` with `full: true` returns the untruncated output.
|
|
83
|
+
|
|
84
|
+
For a new classifier or extractor, run the normal case, the missing-data case, an alternate or negative case, and an adversarial case when the input can carry instructions; a repair needs the case it fixed. When the message reads upstream values, run the containing flow and check its declared outputs as in `controllerai-runs`. Read [references/selection-and-testing.md](references/selection-and-testing.md) for the surface choice table, the model trade-offs and the evaluation set.
|
|
85
|
+
|
|
86
|
+
## Verify
|
|
87
|
+
|
|
88
|
+
The node read identifies the native Ask AI component (or the exact `registry_agent` action); the status read reports ready; for Ask AI the props hold the exact returned provider and model value with its label, the intended response type and the bound message; the execution shows the resolved message with the real input values and, when a shape is bound, the typed fields with allowed values, which downstream nodes read instead of free text; for an agent action the props hold the agent, conversation and message bindings and the run shows the dispatch result.
|
|
89
|
+
|
|
90
|
+
## Report
|
|
91
|
+
|
|
92
|
+
Which provider and model were chosen and why, the response type and its fields, which cases were tested and what they returned, and any model or provider constraint that could not be met.
|