@n8n/instance-ai 1.24.4 → 1.25.0

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 (270) hide show
  1. package/README.md +2 -3
  2. package/dist/agent/credential-guardrails.prompt.d.ts +1 -0
  3. package/dist/agent/credential-guardrails.prompt.js +2 -1
  4. package/dist/agent/credential-guardrails.prompt.js.map +1 -1
  5. package/dist/agent/instance-agent.js +11 -18
  6. package/dist/agent/instance-agent.js.map +1 -1
  7. package/dist/agent/shared-prompts.d.ts +2 -2
  8. package/dist/agent/shared-prompts.js +2 -2
  9. package/dist/agent/shared-prompts.js.map +1 -1
  10. package/dist/agent/sub-agent-factory.d.ts +1 -1
  11. package/dist/agent/sub-agent-factory.js +2 -1
  12. package/dist/agent/sub-agent-factory.js.map +1 -1
  13. package/dist/agent/system-prompt.d.ts +1 -0
  14. package/dist/agent/system-prompt.js +29 -4
  15. package/dist/agent/system-prompt.js.map +1 -1
  16. package/dist/build.tsbuildinfo +1 -1
  17. package/dist/constants/max-steps.d.ts +0 -1
  18. package/dist/constants/max-steps.js +0 -1
  19. package/dist/constants/max-steps.js.map +1 -1
  20. package/dist/debug/sanitize-debug-snapshot.js +3 -3
  21. package/dist/debug/sanitize-debug-snapshot.js.map +1 -1
  22. package/dist/error-formatting.js +5 -12
  23. package/dist/error-formatting.js.map +1 -1
  24. package/dist/index.d.ts +5 -10
  25. package/dist/index.js +10 -9
  26. package/dist/index.js.map +1 -1
  27. package/dist/knowledge-base/materialize-knowledge-base.js +24 -16
  28. package/dist/knowledge-base/materialize-knowledge-base.js.map +1 -1
  29. package/dist/mcp/mcp-client-manager.js +3 -4
  30. package/dist/mcp/mcp-client-manager.js.map +1 -1
  31. package/dist/runtime/background-task-manager.js +5 -5
  32. package/dist/runtime/background-task-manager.js.map +1 -1
  33. package/dist/runtime/resumable-stream-executor.js +2 -3
  34. package/dist/runtime/resumable-stream-executor.js.map +1 -1
  35. package/dist/runtime/run-state-registry.js +1 -1
  36. package/dist/runtime/run-state-registry.js.map +1 -1
  37. package/dist/skills/materialize-runtime-skills.js +30 -23
  38. package/dist/skills/materialize-runtime-skills.js.map +1 -1
  39. package/dist/skills/runtime-skills.d.ts +1 -0
  40. package/dist/skills/runtime-skills.js +11 -0
  41. package/dist/skills/runtime-skills.js.map +1 -1
  42. package/dist/skills/skill-gates.d.ts +2 -0
  43. package/dist/skills/skill-gates.js +4 -1
  44. package/dist/skills/skill-gates.js.map +1 -1
  45. package/dist/storage/workflow-loop-storage.d.ts +550 -0
  46. package/dist/storage/workflow-loop-storage.js +31 -1
  47. package/dist/storage/workflow-loop-storage.js.map +1 -1
  48. package/dist/stream/consume-with-hitl.d.ts +0 -28
  49. package/dist/stream/consume-with-hitl.js +0 -50
  50. package/dist/stream/consume-with-hitl.js.map +1 -1
  51. package/dist/tools/activity.tool.d.ts +2 -0
  52. package/dist/tools/activity.tool.js +102 -0
  53. package/dist/tools/activity.tool.js.map +1 -0
  54. package/dist/tools/credentials.tool.js +5 -3
  55. package/dist/tools/credentials.tool.js.map +1 -1
  56. package/dist/tools/executions.tool.js +47 -10
  57. package/dist/tools/executions.tool.js.map +1 -1
  58. package/dist/tools/filesystem/create-tools-from-mcp-server.js +1 -0
  59. package/dist/tools/filesystem/create-tools-from-mcp-server.js.map +1 -1
  60. package/dist/tools/index.d.ts +1 -1
  61. package/dist/tools/index.js +45 -55
  62. package/dist/tools/index.js.map +1 -1
  63. package/dist/tools/n8n-docs/schemas.js +1 -1
  64. package/dist/tools/n8n-docs/schemas.js.map +1 -1
  65. package/dist/tools/n8n-docs.tool.d.ts +2 -1
  66. package/dist/tools/n8n-docs.tool.js +11 -3
  67. package/dist/tools/n8n-docs.tool.js.map +1 -1
  68. package/dist/tools/orchestration/agent-persistence.d.ts +0 -12
  69. package/dist/tools/orchestration/agent-persistence.js +0 -34
  70. package/dist/tools/orchestration/agent-persistence.js.map +1 -1
  71. package/dist/tools/orchestration/build-agent.tool.js +3 -3
  72. package/dist/tools/orchestration/build-agent.tool.js.map +1 -1
  73. package/dist/tools/orchestration/complete-checkpoint.tool.js +1 -1
  74. package/dist/tools/orchestration/complete-checkpoint.tool.js.map +1 -1
  75. package/dist/tools/orchestration/plan.tool.js +5 -1
  76. package/dist/tools/orchestration/plan.tool.js.map +1 -1
  77. package/dist/tools/orchestration/report-verification-verdict.tool.js +7 -1
  78. package/dist/tools/orchestration/report-verification-verdict.tool.js.map +1 -1
  79. package/dist/tools/orchestration/tracing-utils.d.ts +1 -6
  80. package/dist/tools/orchestration/tracing-utils.js +0 -99
  81. package/dist/tools/orchestration/tracing-utils.js.map +1 -1
  82. package/dist/tools/orchestration/verification/analyze-result.d.ts +5 -0
  83. package/dist/tools/orchestration/verification/analyze-result.js +27 -5
  84. package/dist/tools/orchestration/verification/analyze-result.js.map +1 -1
  85. package/dist/tools/orchestration/verification/claim.d.ts +14 -0
  86. package/dist/tools/orchestration/verification/claim.js +52 -0
  87. package/dist/tools/orchestration/verification/claim.js.map +1 -0
  88. package/dist/tools/orchestration/verification/finalize-result.d.ts +5 -2
  89. package/dist/tools/orchestration/verification/finalize-result.js +21 -25
  90. package/dist/tools/orchestration/verification/finalize-result.js.map +1 -1
  91. package/dist/tools/orchestration/verification/resolve-target.js +39 -15
  92. package/dist/tools/orchestration/verification/resolve-target.js.map +1 -1
  93. package/dist/tools/orchestration/verification/resolved-parameter-warnings.d.ts +58 -0
  94. package/dist/tools/orchestration/verification/resolved-parameter-warnings.js +127 -0
  95. package/dist/tools/orchestration/verification/resolved-parameter-warnings.js.map +1 -0
  96. package/dist/tools/orchestration/verification/scripted-gate-run.d.ts +3 -0
  97. package/dist/tools/orchestration/verification/scripted-gate-run.js +22 -2
  98. package/dist/tools/orchestration/verification/scripted-gate-run.js.map +1 -1
  99. package/dist/tools/orchestration/verification/types.d.ts +8 -1
  100. package/dist/tools/orchestration/verify-built-workflow.tool.d.ts +3 -0
  101. package/dist/tools/orchestration/verify-built-workflow.tool.js +141 -18
  102. package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
  103. package/dist/tools/research.tool.js +3 -2
  104. package/dist/tools/research.tool.js.map +1 -1
  105. package/dist/tools/task-control.tool.js +8 -1
  106. package/dist/tools/task-control.tool.js.map +1 -1
  107. package/dist/tools/tool-ids.d.ts +1 -3
  108. package/dist/tools/tool-ids.js +2 -3
  109. package/dist/tools/tool-ids.js.map +1 -1
  110. package/dist/tools/web-research/sanitize-web-content.d.ts +1 -2
  111. package/dist/tools/web-research/sanitize-web-content.js +6 -19
  112. package/dist/tools/web-research/sanitize-web-content.js.map +1 -1
  113. package/dist/tools/workflows/build-workflow.tool.d.ts +12 -0
  114. package/dist/tools/workflows/build-workflow.tool.js +158 -12
  115. package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
  116. package/dist/tools/workflows/detect-unparseable-openai-schema.js +1 -1
  117. package/dist/tools/workflows/detect-unparseable-openai-schema.js.map +1 -1
  118. package/dist/tools/workflows/detect-wrong-kind-locator.js +7 -9
  119. package/dist/tools/workflows/detect-wrong-kind-locator.js.map +1 -1
  120. package/dist/tools/workflows/reconcile-simulation-plan.js +1 -1
  121. package/dist/tools/workflows/reconcile-simulation-plan.js.map +1 -1
  122. package/dist/tools/workflows/resolve-credentials.js.map +1 -1
  123. package/dist/tools/workflows/setup-items.d.ts +5 -0
  124. package/dist/tools/workflows/setup-items.js +29 -0
  125. package/dist/tools/workflows/setup-items.js.map +1 -1
  126. package/dist/tools/workflows/setup-panel-state.d.ts +31 -0
  127. package/dist/tools/workflows/setup-panel-state.js +197 -0
  128. package/dist/tools/workflows/setup-panel-state.js.map +1 -0
  129. package/dist/tools/workflows/setup-workflow.service.d.ts +3 -1
  130. package/dist/tools/workflows/setup-workflow.service.js +20 -13
  131. package/dist/tools/workflows/setup-workflow.service.js.map +1 -1
  132. package/dist/tools/workflows/validate-workflow.service.js.map +1 -1
  133. package/dist/tools/workflows/wait-gate-script.js +1 -1
  134. package/dist/tools/workflows/wait-gate-script.js.map +1 -1
  135. package/dist/tools/workflows/workflow-build-reporting.d.ts +1 -0
  136. package/dist/tools/workflows/workflow-build-reporting.js +1 -0
  137. package/dist/tools/workflows/workflow-build-reporting.js.map +1 -1
  138. package/dist/tools/workflows/workflow-build-telemetry.d.ts +5 -1
  139. package/dist/tools/workflows/workflow-build-telemetry.js +8 -0
  140. package/dist/tools/workflows/workflow-build-telemetry.js.map +1 -1
  141. package/dist/tools/workflows/workflow-file-bindings.js +0 -2
  142. package/dist/tools/workflows/workflow-file-bindings.js.map +1 -1
  143. package/dist/tools/workflows/workflow-source-compiler.js +80 -25
  144. package/dist/tools/workflows/workflow-source-compiler.js.map +1 -1
  145. package/dist/tools/workflows/workflow-validation-warnings.d.ts +13 -2
  146. package/dist/tools/workflows/workflow-validation-warnings.js +55 -1
  147. package/dist/tools/workflows/workflow-validation-warnings.js.map +1 -1
  148. package/dist/tools/workflows.tool.d.ts +1 -5
  149. package/dist/tools/workflows.tool.js +112 -136
  150. package/dist/tools/workflows.tool.js.map +1 -1
  151. package/dist/tracing/langsmith-tracing.d.ts +10 -22
  152. package/dist/tracing/langsmith-tracing.js +106 -110
  153. package/dist/tracing/langsmith-tracing.js.map +1 -1
  154. package/dist/tracing/sandbox-tracing.d.ts +17 -0
  155. package/dist/tracing/sandbox-tracing.js +60 -0
  156. package/dist/tracing/sandbox-tracing.js.map +1 -0
  157. package/dist/tracing/trace-payloads.d.ts +1 -0
  158. package/dist/tracing/trace-payloads.js +17 -4
  159. package/dist/tracing/trace-payloads.js.map +1 -1
  160. package/dist/tracing/trace-replay.js.map +1 -1
  161. package/dist/types.d.ts +53 -66
  162. package/dist/types.js.map +1 -1
  163. package/dist/utils/eval-agents.js +3 -7
  164. package/dist/utils/eval-agents.js.map +1 -1
  165. package/dist/utils/generate-validated-json.js +2 -6
  166. package/dist/utils/generate-validated-json.js.map +1 -1
  167. package/dist/workflow-loop/guidance.d.ts +1 -0
  168. package/dist/workflow-loop/guidance.js +48 -4
  169. package/dist/workflow-loop/guidance.js.map +1 -1
  170. package/dist/workflow-loop/render-claim.d.ts +6 -0
  171. package/dist/workflow-loop/render-claim.js +61 -0
  172. package/dist/workflow-loop/render-claim.js.map +1 -0
  173. package/dist/workflow-loop/setup-verification-policy.d.ts +3 -1
  174. package/dist/workflow-loop/setup-verification-policy.js +38 -0
  175. package/dist/workflow-loop/setup-verification-policy.js.map +1 -1
  176. package/dist/workflow-loop/verification-obligation.d.ts +1 -0
  177. package/dist/workflow-loop/verification-obligation.js +47 -14
  178. package/dist/workflow-loop/verification-obligation.js.map +1 -1
  179. package/dist/workflow-loop/verification-progress.d.ts +62 -0
  180. package/dist/workflow-loop/verification-progress.js +64 -0
  181. package/dist/workflow-loop/verification-progress.js.map +1 -0
  182. package/dist/workflow-loop/workflow-loop-controller.js +2 -0
  183. package/dist/workflow-loop/workflow-loop-controller.js.map +1 -1
  184. package/dist/workflow-loop/workflow-loop-state.d.ts +993 -0
  185. package/dist/workflow-loop/workflow-loop-state.js +32 -1
  186. package/dist/workflow-loop/workflow-loop-state.js.map +1 -1
  187. package/dist/workflow-loop/workflow-task-service.d.ts +6 -1
  188. package/dist/workflow-loop/workflow-task-service.js +86 -6
  189. package/dist/workflow-loop/workflow-task-service.js.map +1 -1
  190. package/dist/workspace/lazy-runtime-workspace.js +57 -9
  191. package/dist/workspace/lazy-runtime-workspace.js.map +1 -1
  192. package/dist/workspace/prebaked-workspace-bundle.js +93 -58
  193. package/dist/workspace/prebaked-workspace-bundle.js.map +1 -1
  194. package/dist/workspace/sandbox-fs.js +56 -32
  195. package/dist/workspace/sandbox-fs.js.map +1 -1
  196. package/dist/workspace/sandbox-setup.js +65 -52
  197. package/dist/workspace/sandbox-setup.js.map +1 -1
  198. package/dist/workspace/workspace-files.js +76 -57
  199. package/dist/workspace/workspace-files.js.map +1 -1
  200. package/knowledge-base/reference/workflow-builder-guardrails.md +4 -2
  201. package/package.json +12 -12
  202. package/skills/agent-builder/SKILL.md +15 -6
  203. package/skills/credential-recipe-research/SKILL.md +1 -1
  204. package/skills/debugging-executions/SKILL.md +24 -0
  205. package/skills/instance-awareness/SKILL.md +122 -0
  206. package/skills/intent-recognition/SKILL.md +83 -49
  207. package/skills/n8n-docs-assistant/SKILL.md +5 -9
  208. package/skills/planned-task-runtime/SKILL.md +2 -2
  209. package/skills/post-build-flow/SKILL.md +173 -23
  210. package/skills/workflow-builder/SKILL.md +45 -21
  211. package/dist/agent/sub-agent-briefing.d.ts +0 -20
  212. package/dist/agent/sub-agent-briefing.js +0 -39
  213. package/dist/agent/sub-agent-briefing.js.map +0 -1
  214. package/dist/tools/evals/analyze-agent-input-columns.service.d.ts +0 -6
  215. package/dist/tools/evals/analyze-agent-input-columns.service.js +0 -17
  216. package/dist/tools/evals/analyze-agent-input-columns.service.js.map +0 -1
  217. package/dist/tools/evals/apply-pin-data.service.d.ts +0 -3
  218. package/dist/tools/evals/apply-pin-data.service.js +0 -19
  219. package/dist/tools/evals/apply-pin-data.service.js.map +0 -1
  220. package/dist/tools/evals/column-ref-utils.d.ts +0 -20
  221. package/dist/tools/evals/column-ref-utils.js +0 -274
  222. package/dist/tools/evals/column-ref-utils.js.map +0 -1
  223. package/dist/tools/evals/describe-metric-for-workflow.service.d.ts +0 -6
  224. package/dist/tools/evals/describe-metric-for-workflow.service.js +0 -90
  225. package/dist/tools/evals/describe-metric-for-workflow.service.js.map +0 -1
  226. package/dist/tools/evals/detect-agent-named-refs.service.d.ts +0 -9
  227. package/dist/tools/evals/detect-agent-named-refs.service.js +0 -83
  228. package/dist/tools/evals/detect-agent-named-refs.service.js.map +0 -1
  229. package/dist/tools/evals/detect-ai-nodes.d.ts +0 -7
  230. package/dist/tools/evals/detect-ai-nodes.js +0 -75
  231. package/dist/tools/evals/detect-ai-nodes.js.map +0 -1
  232. package/dist/tools/evals/detect-tool-refs.service.d.ts +0 -7
  233. package/dist/tools/evals/detect-tool-refs.service.js +0 -66
  234. package/dist/tools/evals/detect-tool-refs.service.js.map +0 -1
  235. package/dist/tools/evals/ensure-eval-data-table.service.d.ts +0 -15
  236. package/dist/tools/evals/ensure-eval-data-table.service.js +0 -83
  237. package/dist/tools/evals/ensure-eval-data-table.service.js.map +0 -1
  238. package/dist/tools/evals/eval-data-requirements.service.d.ts +0 -20
  239. package/dist/tools/evals/eval-data-requirements.service.js +0 -187
  240. package/dist/tools/evals/eval-data-requirements.service.js.map +0 -1
  241. package/dist/tools/evals/evals.tool.d.ts +0 -45
  242. package/dist/tools/evals/evals.tool.js +0 -454
  243. package/dist/tools/evals/evals.tool.js.map +0 -1
  244. package/dist/tools/evals/extract-rows-from-history.service.d.ts +0 -17
  245. package/dist/tools/evals/extract-rows-from-history.service.js +0 -103
  246. package/dist/tools/evals/extract-rows-from-history.service.js.map +0 -1
  247. package/dist/tools/evals/format-eval-setup-task.d.ts +0 -16
  248. package/dist/tools/evals/format-eval-setup-task.js +0 -167
  249. package/dist/tools/evals/format-eval-setup-task.js.map +0 -1
  250. package/dist/tools/evals/generate-sample-rows.service.d.ts +0 -35
  251. package/dist/tools/evals/generate-sample-rows.service.js +0 -259
  252. package/dist/tools/evals/generate-sample-rows.service.js.map +0 -1
  253. package/dist/tools/evals/generate-tool-ref-pin-data.service.d.ts +0 -11
  254. package/dist/tools/evals/generate-tool-ref-pin-data.service.js +0 -112
  255. package/dist/tools/evals/generate-tool-ref-pin-data.service.js.map +0 -1
  256. package/dist/tools/evals/metric-catalog.d.ts +0 -63
  257. package/dist/tools/evals/metric-catalog.js +0 -81
  258. package/dist/tools/evals/metric-catalog.js.map +0 -1
  259. package/dist/tools/orchestration/eval-data-agent.tool.d.ts +0 -2
  260. package/dist/tools/orchestration/eval-data-agent.tool.js +0 -184
  261. package/dist/tools/orchestration/eval-data-agent.tool.js.map +0 -1
  262. package/dist/tools/orchestration/eval-setup-agent.prompt.d.ts +0 -1
  263. package/dist/tools/orchestration/eval-setup-agent.prompt.js +0 -238
  264. package/dist/tools/orchestration/eval-setup-agent.prompt.js.map +0 -1
  265. package/dist/tools/orchestration/eval-setup-agent.tool.d.ts +0 -31
  266. package/dist/tools/orchestration/eval-setup-agent.tool.js +0 -204
  267. package/dist/tools/orchestration/eval-setup-agent.tool.js.map +0 -1
  268. package/dist/tools/workflows/observed-workflow-checksums.d.ts +0 -4
  269. package/dist/tools/workflows/observed-workflow-checksums.js +0 -82
  270. package/dist/tools/workflows/observed-workflow-checksums.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@n8n/instance-ai",
3
- "version": "1.24.4",
3
+ "version": "1.25.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "src/index.ts",
6
6
  "types": "dist/index.d.ts",
@@ -8,8 +8,8 @@
8
8
  "dist/**/*",
9
9
  "knowledge-base/**/*",
10
10
  "skills/**/*",
11
- "LICENSE.md",
12
- "LICENSE_EE.md"
11
+ "LICENSE_EE.md",
12
+ "LICENSE.md"
13
13
  ],
14
14
  "exports": {
15
15
  ".": {
@@ -42,12 +42,12 @@
42
42
  "dependencies": {
43
43
  "@daytona/sdk": "0.205.1",
44
44
  "@e965/xlsx": "0.20.3",
45
- "@n8n/agents": "0.24.3",
46
- "@n8n/ai-utilities": "0.32.3",
47
- "@n8n/api-types": "1.39.3",
48
- "@n8n/mcp-browser": "0.20.0",
49
- "@n8n/utils": "1.47.0",
50
- "@n8n/workflow-sdk": "0.32.1",
45
+ "@n8n/agents": "0.25.0",
46
+ "@n8n/ai-utilities": "0.33.0",
47
+ "@n8n/api-types": "1.40.0",
48
+ "@n8n/mcp-browser": "0.21.0",
49
+ "@n8n/utils": "1.48.0",
50
+ "@n8n/workflow-sdk": "0.33.0",
51
51
  "@opentelemetry/api": "1.9.1",
52
52
  "@thednp/dommatrix": "^3.1.1",
53
53
  "ai": "^7.0.66",
@@ -56,7 +56,7 @@
56
56
  "linkedom": "^0.18.13",
57
57
  "luxon": "3.7.2",
58
58
  "mammoth": "1.12.1",
59
- "n8n-workflow": "2.39.1",
59
+ "n8n-workflow": "2.40.0",
60
60
  "nanoid": "6.0.1",
61
61
  "pdf-parse": "2.4.5",
62
62
  "psl": "1.15.0",
@@ -68,8 +68,8 @@
68
68
  "devDependencies": {
69
69
  "@langchain/anthropic": "1.5.6",
70
70
  "@langchain/core": "1.2.8",
71
- "@n8n/typescript-config": "1.11.0",
72
- "@n8n/vitest-config": "1.21.0",
71
+ "@n8n/typescript-config": "1.12.0",
72
+ "@n8n/vitest-config": "1.22.0",
73
73
  "@types/luxon": "3.2.0",
74
74
  "@types/psl": "1.1.3",
75
75
  "@types/turndown": "^5.0.6",
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: agent-builder
3
3
  description: >-
4
- Load before calling build-agent for a new or existing n8n Agent. Governs
5
- prerequisite creation, faithful handoff of the user's request, agent
6
- targeting across turns, builder questions, testing, and publishing. Use
7
- directly for routine follow-ups when the conversation already targets an
8
- Agent; rerun intent-recognition only when the requested artifact is no
9
- longer clear.
4
+ Load immediately after an Agent intent. Then call build-agent with the user's
5
+ request after any required orchestrator-owned prerequisites are ready. Agent
6
+ Builder owns Agent setup and implementation questions. Governs prerequisite
7
+ creation, faithful handoff, targeting, testing, and publishing. Use directly
8
+ for routine Agent follow-ups; rerun intent-recognition only when the requested
9
+ artifact is no longer clear.
10
10
  recommended_tools:
11
11
  - build-agent
12
12
  - build-workflow
@@ -22,6 +22,15 @@ when the conversation already targets an Agent and the user is continuing that
22
22
  build. Do not rerun intent recognition for routine Agent edits or extensions.
23
23
  Use `build-agent` only for Agent artifacts.
24
24
 
25
+ For a new Agent request, make the first `build-agent` call with a faithful copy
26
+ of the request as soon as any required orchestrator-owned prerequisites are
27
+ ready. Before that call, use `ask-user` only to choose a supported channel or to
28
+ define a workflow or data-table prerequisite that the orchestrator must create.
29
+ Only ask about the channel after `list-agent-capabilities` shows that the
30
+ requested channel is unsupported. Do not collect model, service, tool, topic,
31
+ schedule, credential, or other Agent implementation choices first. The embedded
32
+ Agent Builder asks those questions through the `build-agent` call.
33
+
25
34
  When the conversation opens from an existing Agent in the editor and the user
26
35
  asks to change its configuration or capabilities, that is an agent-anchored
27
36
  request — target that Agent and call `build-agent`. Do not reroute to
@@ -34,7 +34,7 @@ that is not expressible as a template — use the matching generic type instead
34
34
  ## 2. Key page (docsUrl)
35
35
 
36
36
  Find where a logged-in user CREATES or COPIES the key. The URL is not shown
37
- in the form — the AI Assistant help thread presents it as THE place to get
37
+ in the form — the n8n Assistant help thread presents it as THE place to get
38
38
  the value, so a wrong URL sends the user to a dead end with full confidence:
39
39
 
40
40
  - Search `"<service> dashboard API keys"`, and scan the fetched auth docs for
@@ -27,6 +27,30 @@ empty node, or a missing node is a real defect to investigate, not something to
27
27
  explain away. If you genuinely cannot re-run the failing path, say so plainly and
28
28
  name what is unconfirmed instead of repeating a success claim.
29
29
 
30
+ ## Draft versus live
31
+
32
+ A published workflow runs the version that was published, not the draft you
33
+ edit. Your save creates a draft, and the draft is not live until somebody
34
+ publishes it. So a fix to a live workflow changes nothing in production on its
35
+ own.
36
+
37
+ Two consequences when the user reports a live workflow failing:
38
+
39
+ - **Read the version each execution ran.** `executions(action="list", workflowId)`
40
+ returns `workflowVersionId` on every row, plus `workflow.activeVersionId`
41
+ (the published version) and `workflow.draftVersionId`. Only a row whose
42
+ `workflowVersionId` equals `workflow.activeVersionId` ran the published code.
43
+ A run of a draft proves nothing about production. A `workflow.draftVersionId`
44
+ different from `workflow.activeVersionId` means the latest changes, including
45
+ any fix you just made, are not live.
46
+ - **Name the version when you invite a retest.** Say whether the user tests the
47
+ draft or the published version. "Try it again" after a draft-only fix sends
48
+ the user to the broken published version, and the fix looks like it failed.
49
+
50
+ Do not report a fix as live until the published version is the fixed one. Ask
51
+ whether to publish it instead. After a publish, a new live run is what confirms
52
+ the fix — an earlier execution ran the old version.
53
+
30
54
  ## Testing event-triggered workflows
31
55
 
32
56
  Use `executions(action="run")` with `inputData` matching the trigger's output
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: instance-awareness
3
+ description: >-
4
+ Load when the request depends on what is already on this instance rather than
5
+ on what the user just typed: a short or ambiguous opener ("fix it", "carry on",
6
+ "what should I look at"), a reference to earlier work in a new conversation, or
7
+ any question about what has recently run or broken.
8
+ recommended_tools:
9
+ - activity
10
+ - workflows
11
+ - executions
12
+ - credentials
13
+ ---
14
+
15
+ # Instance Awareness
16
+
17
+ The conversation is not the only context you have. This instance carries a
18
+ record of what has been built, changed, run and broken. Most of it is cheap to
19
+ read, and reading it is usually better than asking.
20
+
21
+ ## The one rule
22
+
23
+ **Ask about intent. Look up state.**
24
+
25
+ What the user wants next is theirs to tell you. What already exists here is
26
+ yours to find out. A question you could have answered by looking costs the user
27
+ a turn and tells them you are not paying attention — and it is the most common
28
+ complaint in reviewed conversations: the assistant re-asking for something it
29
+ had, or restarting work it had already finished.
30
+
31
+ ## Read in this order — cheapest first
32
+
33
+ Each rung answers a narrower question at a higher cost. Stop at the first one
34
+ that answers yours. Do not start at the bottom.
35
+
36
+ ### 0. The block you were already given
37
+
38
+ If an `<instance-context>` block is in this turn, you already have three things
39
+ for free: which workflows exist here, what changed recently, and what has run
40
+ or failed. Read it before your first tool call.
41
+
42
+ It is a set of pointers, not contents. Each change line ends with the resource
43
+ it is about, and the bracketed number is a stable id. Run lines carry the
44
+ execution id of the last failure, which is what `executions` takes.
45
+
46
+ A later turn may bring a shorter block that says it is an addition. Those are
47
+ extra entries, not a replacement — the earlier ones still stand.
48
+
49
+ ### 1. `activity(action="list")` and `activity(action="expand", id=N)`
50
+
51
+ `list` looks further back than the block, or filters to one category or one
52
+ resource. `expand` opens a single entry in full **and returns up to 20 more
53
+ recent entries for the same resource** — which is how you see a workflow's
54
+ recent change history in a single call. Twenty is a cap, not a total: an older
55
+ history continues past it, and `list` with that `resourceId` reads further
56
+ back.
57
+
58
+ Use `expand` when a line is interesting but thin: a save you want the detail of,
59
+ or a workflow you want the history of. An id that no longer resolves is ordinary
60
+ — entries are pruned — so carry on rather than treating it as an error.
61
+
62
+ The log covers workflow and credential changes. It does not record runs; those
63
+ come from the block, and `executions` has the detail.
64
+
65
+ ### 2. One workflow, read in full
66
+
67
+ `workflows(action="get", workflowId, full=true)` on **one** example — the one
68
+ the block points at, or the one the user named. This rung is for what an entry
69
+ cannot express: parameter values, naming, retry settings, error-workflow
70
+ wiring, how a prompt is structured.
71
+
72
+ Pass `full=true`. Without it a large workflow comes back as structure only,
73
+ with its node parameters omitted — which is exactly what this rung is for.
74
+
75
+ Read one, not several. If one example is not enough to see the pattern, there is
76
+ probably no pattern to follow.
77
+
78
+ ## What each surface can and cannot tell you
79
+
80
+ | Question | Where it is answered |
81
+ |---|---|
82
+ | What already exists here? | the block, rung 0 |
83
+ | What did they just change? | the block, rung 0 |
84
+ | Which workflow do they mean by "it"? | the block — the most recent one they touched |
85
+ | What is broken right now? | the block's run lines, then `executions` for the detail |
86
+ | Did the nightly job run? | the block, then `executions` |
87
+ | Who changed this, and was it me? | `activity(action="expand")` — entries carry provenance |
88
+ | How do they configure it? | one workflow, rung 2 |
89
+ | Do they have a credential for X? | `credentials(action="list")` |
90
+
91
+ ## Resolving a vague opener
92
+
93
+ "fix it", "carry on", "why is this broken", "what should I look at", or a new
94
+ conversation about work from yesterday: the answer is nearly always the most
95
+ recent thing in the block, and usually the most recent *failure*.
96
+
97
+ Name what you think they mean and act on it — "picking up the stale-issue nudge
98
+ workflow, which failed twice this morning" — rather than asking them to choose
99
+ from a list they can already see. If two candidates are equally recent, that is
100
+ when to ask, and ask with the candidates named.
101
+
102
+ ## Reusing what they changed by hand
103
+
104
+ A save entry records which node types were added or removed, and whether the
105
+ change came from the assistant or from the user. A change the user made by hand
106
+ to something you built is a preference worth honouring: reuse it if it is a
107
+ small tweak, and ask before overriding it if it conflicts with what you were
108
+ about to do.
109
+
110
+ ## Where this stops
111
+
112
+ - **An entry is not the workflow.** It records that a save happened and which
113
+ node types moved, never the parameters. Anything about contents is rung 2.
114
+ - **An entry can outlive its resource.** A deletion entry points at a workflow
115
+ that is gone; that is the entry doing its job.
116
+ - **Runs end where retention ends.** The instance keeps executions for a bounded
117
+ window, so an older failure may be gone even though the workflow is not.
118
+ - **Recent is not the same as typical.** The newest workflow may be the odd one
119
+ out.
120
+ - **Do not narrate the block.** It is context for reading intent, not a status
121
+ report. Unless the user asked what has been happening, let it change what you
122
+ do rather than what you say.
@@ -10,8 +10,9 @@ description: >-
10
10
  including compound requests, independent automations introduced mid-build,
11
11
  one-off questions or reports that need external systems you cannot query
12
12
  directly, and requests that need clarification before an anchor can be
13
- chosen. Do not load for routine edits or extensions when the conversation
14
- already targets a workflow or Agent.
13
+ chosen. An explicit Agent request routes to agent-builder before ask-user.
14
+ Do not load for routine edits or extensions when the conversation already
15
+ targets a workflow or Agent.
15
16
  ---
16
17
 
17
18
  # Intent recognition
@@ -44,8 +45,10 @@ directly for out-of-scope.
44
45
  Context continuity and Existing-agent modification.
45
46
  - Any explicit constraints about determinism, auditability, latency, cost,
46
47
  compliance, reusability, or allowed tools.
47
- - If the request is underspecified on an anchor-deciding axis, ask for the
48
- missing detail instead of guessing.
48
+ - If the user did not explicitly select an Agent and the request is
49
+ underspecified on an anchor-deciding axis, ask for the missing detail instead
50
+ of guessing. An explicit Agent request already decides the anchor. Leave
51
+ missing setup and implementation details to the Agent Builder.
49
52
 
50
53
  ## Decisions
51
54
 
@@ -57,10 +60,10 @@ Two orthogonal decisions per request, or per part for compound requests:
57
60
  steps as bounded transformers (classify, extract, summarize, score, a
58
61
  single decision feeding fixed branches).
59
62
  - **agent-anchored**: an agent owns the flow; the LLM decides the next step
60
- at runtime. n8n Agents are not chat-only: besides chat sessions, they run
61
- recurring objectives on a cron schedule (**tasks**) and keep memory across
62
- sessions and runs — so recurring or scheduled duties do not disqualify this
63
- anchor.
63
+ at runtime or owns an ongoing role that requires judgment. n8n Agents are not
64
+ chat-only: besides chat sessions, they run recurring objectives on a cron
65
+ schedule (**tasks**) and keep memory across sessions and runs — so recurring
66
+ or scheduled duties do not disqualify this anchor.
64
67
  - **needs-clarification**: the request is under-specified on an
65
68
  anchor-deciding axis.
66
69
  - **out-of-scope**: not a build intent at all. Covers meta or product
@@ -73,9 +76,14 @@ Two orthogonal decisions per request, or per part for compound requests:
73
76
  tracker, wiki, or CRM) is not out-of-scope — classify it, and when
74
77
  answering requires judgment-driven navigation of those systems it is
75
78
  agent-anchored (see Signals). Requests to operate on existing resources
76
- (debugging a failed execution, listing or managing workflows or agents,
77
- querying data) are not classified by this skill at all — route them
78
- through their normal paths. Finally, a one-off task with a concrete
79
+ (running or triggering a workflow the user already has, debugging a failed
80
+ execution, listing or managing workflows or agents, querying data) are not
81
+ classified by this skill at all — route them through their normal paths.
82
+ Per the system prompt's "Existing Resources" section, check
83
+ `workflows(action="list")` before reading "trigger my X" as a build: a
84
+ workflow's own name can contain a build verb ("X — Create"), and a link to
85
+ a service you integrate with is an input value, not a request to build an
86
+ integration for it. Finally, a one-off task with a concrete
79
87
  external *effect* (export/copy data somewhere once, a migration, a
80
88
  backfill) is **workflow-anchored**, not out-of-scope — the workflow is
81
89
  just the vehicle. Classify it by shape (bounded data already in hand,
@@ -128,16 +136,21 @@ builder.
128
136
  0. If the user is mid-build on an existing workflow or agent, apply context
129
137
  continuity (see Signals) before anything else — an incremental request
130
138
  normally extends the current primitive.
131
- 1. **Explicit artifact requests.** When the user names the deliverable —
132
- "build me an agent/assistant that…", "create a workflow that…" — the
133
- named primitive is a routing instruction, not surface vocabulary.
134
- Classify by it unless the described behavior is unambiguously the other
135
- primitive's shape (e.g. "an agent" whose behavior is a fixed
136
- schedule-fetch-notify pipeline). Even then, never switch silently:
137
- propose the reclassified design and say you are deviating from the named
138
- primitive, grounding the choice in the task's shape. The false-friends
139
- rule applies to task descriptions, not to an explicitly requested
140
- artifact.
139
+ 1. **Explicit artifact requests.** "Build me an Agent/assistant that…" selects
140
+ an Agent artifact and decides the anchor. Do not ask the user to reconsider
141
+ that choice during intent recognition. Do not silently substitute a workflow,
142
+ even when it could implement the same behavior. You may explain a simpler
143
+ workflow alternative, but switch only after the user chooses it. Route
144
+ missing setup and implementation choices to Agent Builder. The immediate
145
+ next routing action is to load `agent-builder`. Do not call `ask-user`
146
+ between classification and that handoff. Forward the request without
147
+ selecting services, tools, topics, schedules, or other implementation
148
+ details. Agent Builder owns those questions. An explicit
149
+ workflow request normally selects a workflow. If its required interaction is
150
+ unambiguously Agent-shaped, such as ongoing open-ended chat, explain why an
151
+ Agent fits and say that you are deviating from the named workflow. The
152
+ false-friends rule applies to task descriptions, not to an explicit Agent
153
+ request.
141
154
  2. If the request is not a build intent — a meta or product question, or a
142
155
  one-off content task with no trigger or reuse — classify **out-of-scope**
143
156
  and answer or do it directly.
@@ -148,11 +161,16 @@ builder.
148
161
  Do not split a single automation that merely enumerates many tools or
149
162
  steps. Run steps 4-9 on each part.
150
163
  4. Test the agent signals. If any one holds, classify **agent-anchored**.
151
- 5. Otherwise, test the workflow conditions. If all of them hold, classify
164
+ 5. Before selecting a workflow, verify that the request supplies or clearly
165
+ entails every workflow condition. Do not invent a fixed sequence, decision
166
+ policy, or bounded LLM task from a generic outcome. If a missing
167
+ anchor-defining detail could make the work judgment-driven, classify
168
+ **needs-clarification** and ask only for that detail.
169
+ 6. Otherwise, test the workflow conditions. If all of them hold, classify
152
170
  **workflow-anchored**.
153
- 6. Decide `embeds_other` in both directions: does an agent step appear inside
171
+ 7. Decide `embeds_other` in both directions: does an agent step appear inside
154
172
  this workflow, or does this agent invoke workflows as tools?
155
- 7. **Degenerate-shell check.** If a workflow-anchored design reduces to a
173
+ 8. **Degenerate-shell check.** If a workflow-anchored design reduces to a
156
174
  trigger plus a single open-ended agent step that does all the work — no
157
175
  deterministic steps earning the shell — the anchor is wrong: reclassify
158
176
  **agent-anchored** and build an n8n Agent (an on-demand duty becomes the
@@ -160,9 +178,6 @@ builder.
160
178
  this check while building: when fixed nodes prove unusable and the work
161
179
  migrates into one embedded agent step, stop and re-anchor instead of
162
180
  finishing the degenerate workflow.
163
- 8. If the request is under-specified on an anchor-deciding axis (rule-based
164
- vs judgment-based, scope/autonomy, interaction mode), classify
165
- **needs-clarification** and name the missing axis instead of guessing.
166
181
  9. If both anchors are genuinely defensible, apply the growth tiebreaker:
167
182
  prefer whichever primitive scales with likely complexity growth — usually
168
183
  agent-anchored when novel situations, longer horizons, or learning are
@@ -177,6 +192,11 @@ builder.
177
192
  **Agent-anchored** (any one is enough):
178
193
 
179
194
  - Reasoning dominates the flow: investigate, decide, act, iterate.
195
+ - Persistent delegated role: the user gives an analyst, coordinator,
196
+ receptionist, researcher, or similar role continuing responsibility for a
197
+ changing domain. The role must require judgment such as choosing what
198
+ matters, selecting tools, following up, or adapting actions. A role noun by
199
+ itself is not enough.
180
200
  - On-demand question or report that requires judgment-driven navigation of
181
201
  external systems (which items matter, how they map to goals) and cannot be
182
202
  answered directly with your own tools — the user is in effect already
@@ -208,14 +228,15 @@ builder.
208
228
 
209
229
  **Scheduled judgment work** (recurring cadence + open-ended body): both
210
230
  primitives can own it — a workflow shell with an embedded agent step, or an
211
- agent with a scheduled task. Default to the workflow shell for a standalone,
212
- single-duty job: a deterministic trigger and delivery around one open-ended
213
- step keeps auditability and avoids unnecessary agency. Choose an agent with a
214
- task instead when the duty belongs to an agent the user also interacts with
215
- or that has other duties, when it needs memory across runs (tracking open
216
- threads, "what did I flag last time"), or when the user explicitly asked for
217
- an agent. A recurring duty added to an agent mid-build is always a task on
218
- that agent, never a spawned workflow.
231
+ agent with a scheduled task. Default to an Agent task when the open-ended duty
232
+ is the whole outcome and the workflow shell would only trigger the duty and
233
+ deliver its result. Use a workflow shell when its deterministic collection,
234
+ gating, transformation, branching, or delivery steps are independently
235
+ meaningful and the agent owns only one bounded stage. Choose an Agent when the
236
+ duty belongs to a persistent role, needs memory across runs, supports user
237
+ interaction, or has other duties. An explicit Agent request remains binding.
238
+ A recurring duty added to an agent mid-build is always a task on that agent,
239
+ never a spawned workflow.
219
240
 
220
241
  **Embeds-other signals**:
221
242
 
@@ -271,16 +292,17 @@ that the agent cannot fully satisfy, not a workflow-anchored one.
271
292
 
272
293
  **Clarify triggers**: rule-based vs judgment-based (what defines "important"
273
294
  or "urgent"?), scope/autonomy (act on its own vs draft for review),
274
- interaction mode (one-shot vs chat). Do not clarify when the criterion could
275
- defensibly go either way — that is a genuine tie, name both readings
276
- instead.
295
+ interaction mode (one-shot vs chat). Clarify when the missing answer changes
296
+ the anchor. When the request supplies enough evidence and both designs remain
297
+ valid, apply the growth tiebreaker instead of asking a theoretical preference.
277
298
 
278
- **False friends — not signals**:
299
+ **False friends — not signals by themselves**:
279
300
 
280
301
  - Surface vocabulary: "agent", "assistant", "bot", "workflow", "automate"
281
- in a *task description* carry no weight — classify the shape, not the
282
- words. An explicit artifact request ("build me an agent that…") is not a
283
- false friend; see Decision Step 1.
302
+ in a *task description* carries no weight — classify the shape, not the
303
+ words. A persistent delegated role combines the role with ongoing judgment,
304
+ so it is a real Agent signal. An explicit artifact request ("build me an
305
+ agent that…") is binding; see Decision Step 1.
284
306
  - Step count and tool count: long linear pipelines and high tool counts are
285
307
  not agentic. Seven deterministic steps with zero branches is still a
286
308
  workflow.
@@ -319,12 +341,18 @@ instead.
319
341
  vendors, follow up with each team lead, and send reminders through our
320
342
  existing reminder workflow when a task stalls." -> **agent-anchored**,
321
343
  `embeds_other: true`: long-running coordination invoking a workflow tool.
322
- - "Configure an AI agent to send me a nightly digest of new GitHub stars."
323
- -> **workflow-anchored**, `embeds_other: false`: fixed schedule and action
324
- despite the word "agent" — a false friend. When the user instead
325
- explicitly asks to *build an agent* around a fixed pipeline like this,
326
- keep the workflow classification but say so rather than switching
327
- silently (step 1).
344
+ - "Every night, fetch the day's new GitHub stars and send me a digest." ->
345
+ **workflow-anchored**, `embeds_other: false`: fixed schedule, source,
346
+ transform, and delivery, with no Agent artifact or judgment requirement.
347
+ - "Build me an agent that fetches new GitHub stars each night and sends me a
348
+ digest." -> **agent-anchored**, `embeds_other: false`: the user selected an
349
+ Agent, and the recurring duty is a scheduled task on it. A workflow can be
350
+ offered as an alternative, but it cannot silently replace the requested
351
+ artifact.
352
+ - "Set up a daily market analyst. It should research market changes, decide
353
+ which developments matter, and send me a briefing each morning." ->
354
+ **agent-anchored**, `embeds_other: false`: the analyst owns a persistent,
355
+ judgment-driven role; the morning cadence is a task on that Agent.
328
356
  - "Spin up a lightweight workflow that talks to shoppers on our storefront
329
357
  and handles their product questions." -> **agent-anchored**: chat-based
330
358
  Q&A means the LLM owns turn-by-turn control despite the word "workflow" —
@@ -363,6 +391,9 @@ instead.
363
391
  - "Tell me when something important happens with our shipments." ->
364
392
  **needs-clarification**: "important" is undefined; ask whether concrete
365
393
  rules exist or this needs judgment-based triage.
394
+ - "Ingest each cybersecurity alert, analyze it, and take actions depending on
395
+ the finding." -> **needs-clarification**: ask whether fixed rules select the
396
+ actions or whether an investigator must choose and adapt them.
366
397
  - "Build me an agent my team can @mention on WhatsApp to triage customer
367
398
  messages." -> **agent-anchored** (explicit agent artifact + chat
368
399
  interaction), but call `list-agent-capabilities` first: WhatsApp is absent,
@@ -397,6 +428,9 @@ instead.
397
428
  - Unnecessary agency adds latency, cost, and compounding error risk — do not
398
429
  reach for an agent when a bounded workflow fully satisfies a task-shaped
399
430
  request. This is not a license to override an explicit agent request.
431
+ - Unnecessary workflow shells hide Agent intent. Do not wrap an open-ended
432
+ delegated duty in a workflow when the shell only supplies a schedule and a
433
+ destination.
400
434
  - Never satisfy an **agent-anchored** classification with a workflow
401
435
  containing a Chat Trigger + AI Agent node. Agent-anchored requests
402
436
  produce an n8n Agent artifact via the agent build path; the AI Agent
@@ -413,7 +447,7 @@ instead.
413
447
  agent steps inside a pipeline the user described as a pipeline.
414
448
  - A workflow whose only real step is one embedded agent doing all the work
415
449
  is an agent wearing a workflow costume — the mirror image of the Chat
416
- Trigger gotcha above. Apply the degenerate-shell check (step 7) and
450
+ Trigger gotcha above. Apply the degenerate-shell check (step 8) and
417
451
  re-anchor instead of shipping trigger + AI Agent node.
418
452
  - Do not treat a cron schedule as a workflow signal by itself — agents run
419
453
  scheduled tasks. Classify by the body of each run, and when a one-off
@@ -2,10 +2,9 @@
2
2
  name: n8n-docs-assistant
3
3
  description: >-
4
4
  Answers n8n product, setup, credential, node, hosting, API, and usage
5
- questions from current n8n docs. Load n8n-docs via load_tool before calling it
6
- (search "n8n docs" if not visible). Use when the user asks how to configure,
5
+ questions from current n8n docs. Use when the user asks how to configure,
7
6
  set up, troubleshoot, or understand n8n behavior, especially credential setup
8
- questions opened from the credential modal.
7
+ questions — including which OAuth scopes or permissions a provider app needs.
9
8
  recommended_tools:
10
9
  - n8n-docs
11
10
  - credentials
@@ -17,14 +16,11 @@ recommended_tools:
17
16
  Use this skill when the user asks how to configure, set up, troubleshoot, or
18
17
  understand n8n behavior and the answer should come from current n8n docs.
19
18
 
20
- Before calling `n8n-docs`, load it via `load_tool` (search "n8n docs" if it is
21
- not visible).
22
-
23
19
  ## Default Procedure
24
20
 
25
- 1. Load `n8n-docs` via `load_tool` if needed, then call `n8n-docs(action="lookup")`
26
- first for credential setup and direct n8n docs questions. Use `search` then
27
- `read` only when you need tighter control over candidate pages.
21
+ 1. Call `n8n-docs(action="lookup")` first for credential setup and direct n8n
22
+ docs questions. Use `search` then `read` only when you need tighter control
23
+ over candidate pages.
28
24
  2. For credential setup, pass `intent: "credential-setup"` and all available
29
25
  context fields: `credentialType`, `credentialDisplayName`,
30
26
  `documentationUrl`, `oauthRedirectUrl`, and `nodeType`.
@@ -133,7 +133,7 @@ workflow loop or when the user explicitly requested a live run. If verification
133
133
  succeeds and any verified workflow dependency outcome has
134
134
  `outcome.setupRequirement.status === "required"`, call
135
135
  `workflows(action="setup")` with that workflowId before `complete-checkpoint`;
136
- the inline setup card appears automatically in the AI Assistant panel, so do not
136
+ the inline setup card appears automatically in the n8n Assistant panel, so do not
137
137
  tell the user to open the editor, use the canvas, or click a Setup button. If
138
138
  setup returns `deferred: true`, or reports `skippedByUser`, respect it and still
139
139
  complete the checkpoint with a result that says setup was deferred — never call
@@ -156,7 +156,7 @@ and let replan take over.
156
156
  ## Background task completed
157
157
 
158
158
  When `<background-task-completed>` is present, a detached background task
159
- finished (for example eval setup). The `result` field holds the task's
159
+ finished. The `result` field holds the task's
160
160
  authoritative summary of what was actually done. **When you write the user-facing recap, take factual details —
161
161
  model IDs, node names, resource IDs, parameter values — directly from this
162
162
  `result` text.** Do not substitute values from conversation history or training