@controllerai/cli 0.2.21 → 0.2.23

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/README.md +6 -3
  2. package/dist/api/client.js +5 -6
  3. package/dist/api/client.js.map +1 -1
  4. package/dist/commands/agent.js +178 -45
  5. package/dist/commands/agent.js.map +1 -1
  6. package/dist/commands/integration.js +28 -2
  7. package/dist/commands/integration.js.map +1 -1
  8. package/dist/commands/skills.js +1 -0
  9. package/dist/commands/skills.js.map +1 -1
  10. package/dist/commands/templateSetup.js +42 -0
  11. package/dist/commands/templateSetup.js.map +1 -0
  12. package/dist/index.js +2 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/permissionTool.js +1 -1
  15. package/dist/permissionTool.js.map +1 -1
  16. package/package.json +1 -1
  17. package/skills/controllerai-agents/SKILL.md +4 -2
  18. package/skills/controllerai-integration-actions/SKILL.md +21 -16
  19. package/skills/controllerai-start/SKILL.md +2 -0
  20. package/skills/controllerai-start/references/mcp-tool-map.md +3 -1
  21. package/skills/controllerai-template-setup/SKILL.md +132 -0
  22. package/skills/controllerai-template-setup/agents/openai.yaml +4 -0
  23. package/skills/controllerai-workflows/references/command-map.md +1 -0
  24. package/skills/manifest.json +61 -44
  25. package/skills-mcp/controllerai-agents/SKILL.md +5 -5
  26. package/skills-mcp/controllerai-ai-nodes/SKILL.md +0 -1
  27. package/skills-mcp/controllerai-data/SKILL.md +0 -3
  28. package/skills-mcp/controllerai-data/references/data-rails.md +0 -2
  29. package/skills-mcp/controllerai-expressions/SKILL.md +0 -1
  30. package/skills-mcp/controllerai-flow-control/SKILL.md +0 -2
  31. package/skills-mcp/controllerai-flow-control/references/patterns.md +0 -1
  32. package/skills-mcp/controllerai-integration-actions/SKILL.md +20 -19
  33. package/skills-mcp/controllerai-runs/SKILL.md +0 -1
  34. package/skills-mcp/controllerai-start/SKILL.md +2 -0
  35. package/skills-mcp/controllerai-start/references/mcp-tool-map.md +3 -1
  36. package/skills-mcp/controllerai-template-setup/SKILL.md +10 -0
  37. package/skills-mcp/controllerai-triggers/SKILL.md +0 -3
  38. package/skills-mcp/controllerai-workflows/SKILL.md +0 -1
  39. package/skills-mcp/manifest.json +60 -49
@@ -16,25 +16,27 @@ Building the agent itself belongs to `controllerai-agents`; a workflow node for
16
16
 
17
17
  ## How it works
18
18
 
19
- **A ready action is one operation.** The catalog exposes provider integration actions that an agent can call directly, without a workflow; native registry actions appear in the same discovery but are not attachable as direct actions, and every direct attachment needs a connection, so native and provider operations carry different authorization requirements. Use a workflow tool instead when the capability needs several operations, transformation, branching, loops, durable state, a trigger, a custom typed contract, or reuse outside the agent. Never wrap a ready action whose contract already fits in a one-node workflow, and never replace deterministic orchestration with several independent direct actions.
19
+ **A ready action is one operation.** The catalog exposes provider integration actions and native registry actions that an agent can call directly, without a workflow; a native action is attachable when the catalog marks it `agentAttachable`. Most native actions need no connection: they run on the platform's paid rails, bill the user's usage balance per call, and describe the charge in `usagePricingDescription`. A native action that does need authorization uses the platform connection flow (`connection_connect_url`), not Pipedream. Use a workflow tool instead when the capability needs several operations, transformation, branching, loops, durable state, a trigger, a custom typed contract, or reuse outside the agent. Never wrap a ready action whose contract already fits in a one-node workflow, and never replace deterministic orchestration with several independent direct actions.
20
20
 
21
- **Identity is a pair.** An action is the exact integration slug plus its action key, as returned by discovery; a display label is not an identity, and a similar integration with a familiar name is not evidence of the capability. The action binds to a connection whose `integration` matches that slug exactly.
21
+ **Identity is a pair.** An action is the exact integration slug plus its action key, as returned by discovery; a display label is not an identity, and a similar integration with a familiar name is not evidence of the capability. When the catalog says the action needs a connection, it binds to one whose `integration` matches that slug exactly.
22
22
 
23
- **Runtime.** The agent runtime configures the action's dynamic arguments when it invokes the action; nothing is preconfigured at attachment beyond identity, connection, description and approval policy. A direct action runs inline in the conversation and creates no workflow execution: the evidence is the persisted conversation, its action events with arguments and result, and the external effect.
23
+ **Runtime.** The agent runtime configures the action's dynamic arguments when it invokes the action; nothing is preconfigured at attachment beyond identity, any required connection, description and approval policy. A direct action runs inline in the conversation and creates no workflow execution: the evidence is the persisted conversation, its action events with arguments and result, and the external effect.
24
24
 
25
25
  **Approval policy.** An attached action runs without a human approval step unless `requireConfirmation` is `true`; the default is no approval. When confirmation is on, the runtime pauses with a pending request that the user approves or denies with the exact arguments visible.
26
26
 
27
- **Live bindings.** Publishing snapshots the action identity, description and approval policy into the agent version. The connection and its authorization grant are live security bindings: rebinding redirects the published action immediately, and revocation, breakage or detachment stops it immediately without an agent publish; detachment also removes the draft tool, and a later publish removes it from the published list. Confirmation is strictest-wins: tightening the grant to require confirmation blocks the published action at once until a publish carries the new policy, while relaxing it waits for the publish. Organization members use the published agent, never the draft; direct actions run through the owner's connected account and the organization's shared usage pool whoever calls them.
27
+ **Slack approvals.** Send approval requests to Slack through `slackRoute`. Routes publish with the agent; Test conversations use the draft, live conversations the published version. The route lists who can answer in `slackRoute.approvers`, defaulting to whoever connected Slack. Chat-in-Slack approvers also count; the app's approval card still works.
28
+
29
+ **Live bindings.** Publishing snapshots the action identity, description and approval policy into the agent version. When an action needs a connection, that connection and its authorization grant are live security bindings: rebinding redirects the published action immediately, and revocation, breakage or detachment stops it immediately without an agent publish. Detachment has the same immediate effect on a connectionless action, always removes the draft tool, and a later publish removes it from the published list. Confirmation is strictest-wins: tightening the grant to require confirmation blocks the published action at once until a publish carries the new policy, while relaxing it waits for the publish. Organization members use the published agent, never the draft; connected actions run through the owner's connected account and the organization's shared usage pool, while connectionless native actions use the platform's paid rails and bill that pool whoever invokes them.
28
30
 
29
31
  ## Rules
30
32
 
31
- 1. **Capture and reuse the exact identities**: integration slug, action key, connection ID, tool ID. Narrow the query or raise the result limit when more matches exist; never derive an identifier from a label.
32
- 2. **A missing connection is a handoff, not a substitution.** Keep the selected integration and action, give the user the authorization route, and stop the attachment there; never swap in `registry_http-http-request` or request provider credentials in chat. A raw endpoint the user mentions is context, not an instruction to hand-roll the call.
33
+ 1. **Capture and reuse the exact identities**: integration slug, action key, connection ID when required, tool ID. Narrow the query or raise the result limit when more matches exist; never derive an identifier from a label.
34
+ 2. **A required missing connection is a handoff, not a substitution.** Keep the selected integration and action, give the user the platform authorization route, and stop the attachment there; never request provider credentials in chat. Never swap in `registry_http-http-request`: the HTTP node is never agent-attachable, so that substitution is impossible by construction. A raw endpoint the user mentions is context, not an instruction to hand-roll the call.
33
35
  3. **Decide the approval policy before attaching.** For an action that sends, posts, spends or deletes, choose `true` or explicitly tell the user it will run unattended; prefer confirmation for permission changes, irreversible writes or an ambiguous destination, and omit it for reads and low-risk reversible operations the user asked to run autonomously. Mention the confirmation choice in the report to the user.
34
36
  4. **Attach once.** Read the tool list before and after; the final list holds one intended direct attachment.
35
- 5. **A stored active connection is not proof of authorization.** Only a representative action test proves the provider still accepts it.
37
+ 5. **A stored active connection is not proof of authorization.** For an action that needs one, only a representative action test proves the provider still accepts it.
36
38
  6. **Verify what the request asked for, where it lives.** Discovery proves metadata; a blocked attachment proves the honest handoff and the independent work; an attachment proves the saved grant; only an authorized runtime test proves the external effect, and for that the action event, its arguments and result, and the external state are the evidence, never a reply that says it ran. Inspect the external state before repeating a failed or uncertain mutation.
37
- 7. **Say whose account runs the action** before organization sharing: the owner's connection and the organization's usage pool, regardless of caller.
39
+ 7. **Say whose account and balance run the action** before organization sharing: connected actions use the owner's account; connectionless native actions use the platform's paid rails; calls use the organization's shared usage balance regardless of caller.
38
40
 
39
41
  ## Recipes
40
42
 
@@ -44,31 +46,30 @@ Building the agent itself belongs to `controllerai-agents`; a workflow node for
44
46
  - `integration_action_list` — `query`, `integration`, `limit`
45
47
  - `integration_action_get` — `integration`, `key`
46
48
 
47
- `integration_search` ranks integrations (`kind` narrows to actions or events); `integration_action_list` ranks actions across one or all integrations; `integration_action_get` returns the static metadata and props of one exact action. Read that metadata before choosing.
49
+ `integration_search` ranks integrations (`kind` narrows to actions or events); `integration_action_list` ranks actions across one or all integrations; `integration_action_get` returns the static metadata and props of one exact action. Read `agentAttachable`, the exact props and, for native actions, whether a connection is needed and `usagePricingDescription` before choosing.
48
50
 
49
51
  ### Select or request a connection
50
52
 
51
53
  - `connection_list` — `integration`
52
54
 
55
+ Skip this step when the catalog says the native action needs no connection.
56
+
53
57
  Use the active connection whose `integration` matches exactly. If none exists, `connection_connect_url` (it takes the `nodeSlug`) returns a `url`: show it as a markdown link, ask the user to finish, then `connection_list` with `integration` and use the new ID.
54
58
 
55
59
  ### Attach
56
60
 
57
- - `agent_tool_action_add` — `agentId`, `action`, `connectionId`, `description`, `integration`, `requireConfirmation`
61
+ - `agent_tool_action_add` — `agentId`, `action`, `connectionId`, `description`, `integration`, `requireConfirmation`, `slackRoute`
58
62
  - `agent_tool_list` — `agentId`
59
63
 
60
- `agent_tool_action_add` takes `requireConfirmation`, optional and `false` by default.
61
- The description tells the agent when to choose the tool. Read the saved grant back: `toolType`, integration, action key, connection, description and confirmation policy.
64
+ `agent_tool_action_add` takes `requireConfirmation`, optional and `false` by default; pass `connectionId` exactly when the action needs a connection.
65
+ The description tells the agent when to choose the tool. Read the saved grant back: `toolType`, integration, action key, any required connection, description and confirmation policy.
62
66
 
63
67
  ### Update
64
68
 
65
- - `agent_tool_update` — `agentId`, `connectionId`, `description`, `requireConfirmation`, `toolId`
66
- - `agent_tool_update` — `agentId`, `connectionId`, `description`, `requireConfirmation`, `toolId`
67
- - `agent_tool_update` — `agentId`, `connectionId`, `description`, `requireConfirmation`, `toolId`
68
- - `agent_tool_update` — `agentId`, `connectionId`, `description`, `requireConfirmation`, `toolId`
69
+ - `agent_tool_update` — `agentId`, `connectionId`, `description`, `requireConfirmation`, `toolId`, `slackRoute`
69
70
 
70
71
  `agent_tool_update` takes `toolId` and at least one of `connectionId`, `description` or `requireConfirmation: true|false`; an omitted field keeps its value, so a connection-only update never changes the approval policy.
71
- A connection change redirects the published action at once. A description change waits for the agent publish. A policy change is strictest-wins: turning confirmation on blocks the published action immediately until the next publish carries it, turning it off takes effect only at that publish.
72
+ A connection change redirects a connected published action at once. A description change waits for the agent publish. A policy change is strictest-wins: turning confirmation on blocks the published action immediately until the next publish carries it, turning it off takes effect only at that publish.
72
73
 
73
74
  ### Verify in a draft conversation
74
75
 
@@ -82,8 +83,8 @@ A connection change redirects the published action at once. A description change
82
83
 
83
84
  ## Verify
84
85
 
85
- For an attachment, the tool list shows exactly one intended direct attachment with the exact identities, connection, description and confirmation policy; for an authorized runtime test, the draft conversation history holds the action event, its arguments and its result, and the external effect was checked separately; for discovery alone, the exact metadata was read and nothing was changed. No wrapper workflow exists unless orchestration or reuse required it.
86
+ For an attachment, the tool list shows exactly one intended direct attachment with the exact identities, any required connection, description and confirmation policy; for an authorized runtime test, the draft conversation history holds the action event, its arguments and its result, and the external effect was checked separately; for discovery alone, the exact metadata was read and nothing was changed. No wrapper workflow exists unless orchestration or reuse required it.
86
87
 
87
88
  ## Report
88
89
 
89
- Which action is attached to which agent, its connection and confirmation choice, what the draft test proved, whose account and usage pool the action will use, and what remains: a connection to authorize, a publish, or a live verification.
90
+ Which action is attached to which agent, any connection and the confirmation choice, what the draft test proved, whose account or paid rail and usage balance the action will use, and what remains: a connection to authorize, a publish, or a live verification.
@@ -43,7 +43,6 @@ Expression authoring belongs to `controllerai-expressions`, branch and loop stru
43
43
 
44
44
  ### Prepare inputs and run
45
45
 
46
- - `run_inputs` — `nodeIdOrFlowId`, `flow`, `workflowId`
47
46
  - `run_inputs` — `nodeIdOrFlowId`, `flow`, `workflowId`
48
47
  - `run_node` — `nodeId`, `inputs`, `waitSeconds`, `workflowId`
49
48
  - `run_flow` — `flowId`, `confirmLive`, `inputs`, `target`, `waitSeconds`, `workflowId`
@@ -30,6 +30,8 @@ For the domain itself, load the relevant domain skill as the work reaches it: `c
30
30
 
31
31
  An agent can call several flows of one workflow as tools: flow inputs become tool arguments, flow outputs become tool results, and the workflow's data store is the agent's application backend.
32
32
 
33
+ Ready integration actions come from provider integrations or native registry services; only catalog actions marked `agentAttachable` can attach directly, and a native action may run without a connection.
34
+
33
35
  **Rails.** Every workflow has a development version and, after publishing, a live release. Every agent has a draft and, after publishing, a live version. Agent Test runs the draft against development workflows, draft knowledge, and live runtime files overlaid by development runtime files. Agent Live runs the latest published agent against each workflow's latest live release and frozen published knowledge. A change to the draft reaches Live and shared users only through another agent publish, which also restamps existing live conversations; the owner's Test already sees the draft. Publishing a workflow never copies development records into the live data store. Two bindings change Live without an agent publish: a live agent follows each workflow's newest release as soon as it is published, and a direct action's connection is a live grant, so rebinding it redirects Live and revoking it blocks Live.
34
36
 
35
37
  **Connections.** A connection is an authorized account for an app. Deleting a connection immediately removes authorization from every node and agent tool bound to it. Rename or change the default with `connection_update` (`displayName` and/or `isDefault`); delete one only with the user's explicit intent, with `connection_delete`.
@@ -3,7 +3,7 @@
3
3
 
4
4
  # CLI to typed MCP tool map
5
5
 
6
- This registry-derived map covers 165 CLI commands and 149 typed MCP tools. CLI examples remain the canonical grammar; typed MCP calls use the tool and camelCase parameters shown here. Global `--json` and `--api-url` flags are host-controlled and omitted.
6
+ This registry-derived map covers 167 CLI commands and 149 typed MCP tools. CLI examples remain the canonical grammar; typed MCP calls use the tool and camelCase parameters shown here. Global `--json` and `--api-url` flags are host-controlled and omitted.
7
7
 
8
8
  | `cai` command | MCP tool | Parameter mapping | Notes |
9
9
  | --- | --- | --- | --- |
@@ -137,6 +137,8 @@ This registry-derived map covers 165 CLI commands and 149 typed MCP tools. CLI e
137
137
  | `skills install` (CLI only) | — | — | dropped: Writes guidance into a caller local project, which the hosted server cannot access. |
138
138
  | `guide_get` / `guide_list` | `guide_get`<br>`guide_list` | `guide_get`: `name` (MCP-only) → `name`<br>`guide_list`: — | hosted: guide_list and guide_get serve the bundled server guidance without inspecting a local project. |
139
139
  | `skills update` (CLI only) | — | — | dropped: Updates guidance files in a caller local project. |
140
+ | `template-setup complete` (CLI only) | — | — | dropped: Managed-builder only: uses the current assisted-setup thread credential; no public MCP equivalent. |
141
+ | `template-setup status` (CLI only) | — | — | dropped: Managed-builder only: uses the current assisted-setup thread credential; no public MCP equivalent. |
140
142
  | `trigger_audit` | `trigger_audit` | `--workflow` → `workflowId` | — |
141
143
  | `trigger_create` | `trigger_create` | `--connection` → `connection`; `--dynamic-props-id` → `dynamicPropsId`; `--event` → `event`; `--flow` → `flow`; `--node` → `node`; `--props` → `props`; `--source-basis` → `sourceBasis`; `--workflow` → `workflowId` | — |
142
144
  | `trigger_delete` | `trigger_delete` | `<triggerId>` → `triggerId`; `--workflow` → `workflowId` | — |
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: controllerai-template-setup
3
+ description: Complete an assisted Controller AI agent-template setup from the injected setup brief. Use when the system prompt contains a `## Template Setup` section with copied workflows, required connections, expected workflow tools, and a brief.
4
+ ---
5
+ <!-- generated from .claude/skills by cli/scripts/render-skills.mjs; edit the source -->
6
+
7
+ # Assisted template setup
8
+
9
+ This procedure requires the managed builder credential for the current setup thread and has no public MCP equivalent. Stop if a `## Template Setup` block appears outside that managed builder session.
10
+
@@ -43,7 +43,6 @@ Flow inputs and mapping expressions belong to `controllerai-expressions`; readin
43
43
 
44
44
  ### Discover and resolve
45
45
 
46
- - `trigger_search` — `query`, `eventsPerNode`, `limit`, `node`, `workflowId`
47
46
  - `trigger_search` — `query`, `eventsPerNode`, `limit`, `node`, `workflowId`
48
47
  - `trigger_component_props` — `configured`, `connection`, `dynamicPropsId`, `event`, `node`, `workflowId`
49
48
  - `trigger_prop_options` — `configured`, `connection`, `dynamicPropsId`, `event`, `node`, `page`, `prevContext`, `prop`, `query`, `workflowId`
@@ -68,14 +67,12 @@ A representative event has to reach the source: through the provider, the return
68
67
 
69
68
  ### Arm ambient development dispatch (only on request)
70
69
 
71
- - `trigger_test_events_set` — `triggerId`, `acknowledgeDualRun`, `allowed`, `workflowId`
72
70
  - `trigger_test_events_set` — `triggerId`, `acknowledgeDualRun`, `allowed`, `workflowId`
73
71
 
74
72
  Arming makes every real event also execute the development canvas while it is half built; use it only when the user wants that after hearing it, and disarm at the end of setup. `trigger_test_events_set` takes `allowed: true|false` and `acknowledgeDualRun: true` when arming.
75
73
 
76
74
  ### Pause, resume, retire
77
75
 
78
- - `trigger_set_enabled` — `triggerId`, `enabled`, `workflowId`
79
76
  - `trigger_set_enabled` — `triggerId`, `enabled`, `workflowId`
80
77
  - `trigger_delete` — `triggerId`, `workflowId`
81
78
 
@@ -79,7 +79,6 @@ Read status and every trigger first: publishing activates enabled triggers on th
79
79
 
80
80
  - `workflow_state_save` — `name`, `workflowId`
81
81
  - `workflow_history` — `group`, `version`, `workflowId`
82
- - `workflow_history` — `group`, `version`, `workflowId`
83
82
  - `workflow_state_restore` — `stateId`, `version`, `workflowId`
84
83
 
85
84
  Save before a risky rewrite. Expand a group to find the state ID; restore by state, not by group.
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "skillSetVersion": "2026.09.07.1",
3
+ "skillSetVersion": "2026.09.15.3",
4
4
  "minCliVersion": "0.2.0",
5
- "latestCliVersion": "0.2.21",
5
+ "latestCliVersion": "0.2.23",
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-mcp/2026.09.07.1/controllerai-start/SKILL.md",
13
- "sha256": "479df6a863d207f7f8179d6491a16c0d2399d1973c8ef0cd4a310781ff360548",
14
- "size": 10967
12
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-start/SKILL.md",
13
+ "sha256": "65b35ecd4c5a94bd991f85aaaa6c26f1d551f646da136757c5a8a853b1f7389c",
14
+ "size": 11172
15
15
  },
16
16
  {
17
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
18
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-start/references/mcp-tool-map.md",
19
+ "sha256": "8dc049be93070daa4ad66d09883f2887cb130cf3d54cc50056a202a2e118a925",
20
+ "size": 26761
21
21
  }
22
22
  ]
23
23
  },
@@ -26,13 +26,13 @@
26
26
  "files": [
27
27
  {
28
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
29
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-workflows/SKILL.md",
30
+ "sha256": "94f6f343c3cc2a469cdd2247f8bcc9cb8fa56290a35d988409155d22f5c5c1f9",
31
+ "size": 9549
32
32
  },
33
33
  {
34
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",
35
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-workflows/references/command-map.md",
36
36
  "sha256": "3a1fe464d00c2ae734dab11db3b338436d91a9c32dd8a1b3f1843ac4200a739c",
37
37
  "size": 89
38
38
  }
@@ -43,13 +43,13 @@
43
43
  "files": [
44
44
  {
45
45
  "path": "controllerai-node-config/SKILL.md",
46
- "url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-node-config/SKILL.md",
46
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-node-config/SKILL.md",
47
47
  "sha256": "7fbc68a24ccc08c04be8b6c4184b74b238058b637e4203293e0c5eae332bac2d",
48
48
  "size": 11678
49
49
  },
50
50
  {
51
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",
52
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-node-config/references/prop-and-readiness.md",
53
53
  "sha256": "87da8b25c8303818b1f0c677b2cc6f7121910e8fcd94371ed5bc2065f7b7b845",
54
54
  "size": 5344
55
55
  }
@@ -60,13 +60,13 @@
60
60
  "files": [
61
61
  {
62
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
63
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-expressions/SKILL.md",
64
+ "sha256": "c54f8c3176ffe48ca7aa78cd85151a1edf1f0083f7cd8b906b5d1d2ff5f5cc20",
65
+ "size": 10495
66
66
  },
67
67
  {
68
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",
69
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-expressions/references/dsl-and-recipes.md",
70
70
  "sha256": "741b03033cb655dde95be99dcf6e00295b1b2d4f385ad42bbf4bb3c4001c9973",
71
71
  "size": 4915
72
72
  }
@@ -77,15 +77,15 @@
77
77
  "files": [
78
78
  {
79
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
80
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-flow-control/SKILL.md",
81
+ "sha256": "4bacfc3b7501565e0e5984b19d9223da1b5bf770875db804b5e6827d33efa967",
82
+ "size": 12367
83
83
  },
84
84
  {
85
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
86
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-flow-control/references/patterns.md",
87
+ "sha256": "a849179afb512e8fc0c3c833a1a2c737c5108e8ab8941c9fa261767671eceb01",
88
+ "size": 4704
89
89
  }
90
90
  ]
91
91
  },
@@ -94,13 +94,13 @@
94
94
  "files": [
95
95
  {
96
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
97
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-runs/SKILL.md",
98
+ "sha256": "ce8109606899a36dd298aa7fc41ff2288f62bfe9adeae0806b95fd22a317fe27",
99
+ "size": 9312
100
100
  },
101
101
  {
102
102
  "path": "controllerai-runs/references/debugging.md",
103
- "url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-runs/references/debugging.md",
103
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-runs/references/debugging.md",
104
104
  "sha256": "616d13ea43785e4d11bdb50b9e4098126fbc470ee2568b250e1af5f15cab3edf",
105
105
  "size": 3162
106
106
  }
@@ -111,13 +111,13 @@
111
111
  "files": [
112
112
  {
113
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
114
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-triggers/SKILL.md",
115
+ "sha256": "0797e2070acbd674deca6b659d467d1cc5a86cb26120e489c52d10cb58fc044b",
116
+ "size": 12374
117
117
  },
118
118
  {
119
119
  "path": "controllerai-triggers/references/lifecycle.md",
120
- "url": "https://getcontroller.ai/skills-mcp/2026.09.07.1/controllerai-triggers/references/lifecycle.md",
120
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-triggers/references/lifecycle.md",
121
121
  "sha256": "519d9f858ee2ec8ab5f1c988e547f5a8c5478f4da3d454236354ade9800ed044",
122
122
  "size": 3438
123
123
  }
@@ -128,15 +128,15 @@
128
128
  "files": [
129
129
  {
130
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
131
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-data/SKILL.md",
132
+ "sha256": "d17cfcda2abbccf6463edc6331c091175f7c7d92f6a2ce69dccc6d0fa4188e34",
133
+ "size": 12477
134
134
  },
135
135
  {
136
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
137
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-data/references/data-rails.md",
138
+ "sha256": "6d22c72b3b2da83cfaf078683ef41ec2b6f3b9b249789ab2bd23d01d6710c261",
139
+ "size": 2843
140
140
  }
141
141
  ]
142
142
  },
@@ -145,13 +145,13 @@
145
145
  "files": [
146
146
  {
147
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
148
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-ai-nodes/SKILL.md",
149
+ "sha256": "e6071d906cf1df7665cb63274a579d7a0f46796440112a74f190338389b2db33",
150
+ "size": 9484
151
151
  },
152
152
  {
153
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",
154
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-ai-nodes/references/selection-and-testing.md",
155
155
  "sha256": "66b235b9e81645ab877b31443505c7b07ea3f2e5a357053f266c121415f8cf5c",
156
156
  "size": 3111
157
157
  }
@@ -162,9 +162,9 @@
162
162
  "files": [
163
163
  {
164
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
165
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-integration-actions/SKILL.md",
166
+ "sha256": "d0cf193ec8efbf6339352964c16ebae9a83e6e6bf5691e36a13927e687f2a5c4",
167
+ "size": 10086
168
168
  }
169
169
  ]
170
170
  },
@@ -173,17 +173,28 @@
173
173
  "files": [
174
174
  {
175
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
176
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-agents/SKILL.md",
177
+ "sha256": "5e8cd8cf5474b22587c8083d52c56ba2b13a5e05b8c1c2fd6ed5ecaa03dfb997",
178
+ "size": 12725
179
179
  },
180
180
  {
181
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",
182
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-agents/references/instructions-and-versioning.md",
183
183
  "sha256": "88b059e74aef03ccb12a53815d1090e5449090ff6dfd863b6cef5a12b434cb65",
184
184
  "size": 5644
185
185
  }
186
186
  ]
187
+ },
188
+ {
189
+ "name": "controllerai-template-setup",
190
+ "files": [
191
+ {
192
+ "path": "controllerai-template-setup/SKILL.md",
193
+ "url": "https://getcontroller.ai/skills-mcp/2026.09.15.3/controllerai-template-setup/SKILL.md",
194
+ "sha256": "a530a694257ccf7622c4f16579cad91bf96ac06dfc7cbd82a919914abe387e52",
195
+ "size": 609
196
+ }
197
+ ]
187
198
  }
188
199
  ]
189
200
  }