You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .agents/skills/add-block/SKILL.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,6 +19,10 @@ When the user asks you to create a block:
19
19
20
20
Blocks depend on tool outputs. If the underlying tool response schema is not documented or live-verified, you MUST tell the user instead of guessing block outputs.
21
21
22
+
When block work changes tool execution, same-process work must use a registered
23
+
`InternalToolConfig.operation`. Never add a Sim `/api/...` self-hop or the retired
24
+
`directExecution` property.
25
+
22
26
- Do NOT invent block outputs for undocumented tool responses
23
27
- Do NOT describe unknown JSON shapes as if they were confirmed
24
28
- Do NOT wire fields into the block just because they seem likely to exist
Copy file name to clipboardExpand all lines: .agents/skills/tool-registry-boundary/SKILL.md
+8-2Lines changed: 8 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,12 @@ You keep the 4,300-tool executable registry out of module graphs that don't exec
11
11
12
12
> Client-reachable code reads tool **metadata**. Only code that actually executes a tool imports the **registry**.
13
13
14
-
`@/tools/registry` is a ~9,000-line barrel importing every tool. Each `ToolConfig` mixes plain data (`params`, `outputs`, `name`) with closures — `request.url`, `request.headers`, `transformResponse`, `directExecution`, `postProcess`. Those closures reach the SDK clients, API helpers and parsers each integration needs, and that is what makes the barrel expensive: reaching it costs ~4,700 additional modules.
14
+
`@/tools/registry` is a ~9,000-line barrel importing every tool. External `ToolConfig` entries mix
15
+
plain data (`params`, `outputs`, `name`) with request/response closures, while
16
+
`InternalToolConfig` entries contain semantic input projection and load their server implementation
17
+
through `lib/internal/tool-operations/registry.server.ts`. Request closures can still reach SDK
18
+
clients, API helpers, and parsers, which is what makes the executable barrel expensive: reaching it
19
+
costs ~4,700 additional modules.
15
20
16
21
`getTool()` returns the whole `ToolConfig`, so a single `getTool` import anywhere in a client-reachable file drags all of it in.
17
22
@@ -95,4 +100,5 @@ The canvas route reached the registry through **four** redundant edges — `prov
95
100
96
101
Ask what the caller does with the config. If it reads `params`, `outputs`, `name`, `description` or just checks existence, it belongs on `@/tools/metadata` — no exceptions, even on a path you believe is server-only today, because a future client import will silently re-attach the registry to the graph.
97
102
98
-
If it genuinely executes — builds a request, transforms a response, runs `directExecution` — use `getTool`, and keep that file off client-reachable paths.
103
+
If it genuinely executes — builds an external request, transforms a response, or dispatches a
104
+
registered internal operation — use `getTool`, and keep that file off client-reachable paths.
Copy file name to clipboardExpand all lines: apps/sim/app/workspace/[workspaceId]/w/components/preview/components/preview-workflow/preview-workflow.tsx
+3-3Lines changed: 3 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -416,12 +416,12 @@ export function PreviewWorkflow({
416
416
417
417
// Check for direct error on the subflow block itself (e.g., loop resolution errors)
0 commit comments