Skip to content

Utility Nodes

Utility nodes handle cross-cutting concerns: logging, debugging, rate limiting, caching, secret resolution, retry policies, and placeholder steps during workflow design.

NodeTypeOutput
Loggerloggerjson
Debug Inspectordebug_inspectorjson
Secret Resolversecret_resolverjson
Rate Limitrate_limitjson
Cache Readcache_readjson
Cache Writecache_writejson
Retryretryjson
No-Opnoopany

Logger

Type: logger · Category: Utility

Write a structured log entry for debugging and audit trails. Use as the final node of any important branch to capture the result.

Inputs

NameTypeRequired
inputanyNo

Outputs

NameTypeDescription
resultjson{ logged: true, level: text }

Required Config

FieldTypeDescription
messagestringLog message template. Supports {{variable}} interpolation.

Optional Config

FieldTypeDefaultOptions
levelselectinfodebug · info · warn · error
includeInputbooleanfalseWhen true, attaches the upstream payload to the log entry.

Example

json
{
  "level": "info",
  "message": "Digest delivered: {{$.messageId}}",
  "includeInput": true
}

Scenario: Audit an email delivery at the end of the weekly digest workflow.

Expected output: { "logged": true, "level": "info" }

When to Use

  • At the end of any branch to capture final state.
  • After communication nodes to record delivery status.
  • After write operations (KV, storage, leaderboard) to confirm success.
  • As the downstream of stop_return or error_catch for terminal logging.

Common Mistakes

  • Placing Logger before the final delivery node — Logger should be the last step, not before email_send.
  • Using includeInput: true in high-volume pipelines — this writes the full payload to the log; omit it for rate-limited or large-array workflows.

Debug Inspector · Error Catch · Email Send


Debug Inspector

Type: debug_inspector · Category: Utility

Expose upstream payload shape in manual executions. Use during workflow design to inspect what data is available at each step.

Required Config

FieldTypeDescription
capturePathsjsonArray of paths to capture (e.g. ["$", "$.documents[0].metadata"]).

Optional Config

FieldTypeDefault
redactSecretsbooleantrue

Example

json
{
  "capturePaths": ["$", "$.documents[0].metadata"],
  "redactSecrets": true
}

Expected output: { "inspection": { "keys": ["documents", "summary"] } }

When to Use

  • During workflow design to verify path names before writing downstream config.
  • Before an embedding or rag_retrieval node to check that documents has the expected shape.

Execution Notes

  • Debug Inspector is a no-op in production executions — it only emits detailed inspection data in manual/development mode.
  • Always remove or replace Debug Inspector before publishing a production workflow.

Logger · No-Op


Secret Resolver

Type: secret_resolver · Category: Utility

Resolve a named secret reference for downstream server-side nodes. Use when a node's configuration cannot use {{secrets.keyName}} inline syntax and needs the resolved value as a payload field.

Required Config

FieldTypeDescription
secretRefstringSecret name registered in workspace secret storage.

Optional Config

FieldTypeDescription
exposeAsstringOutput key name (e.g. githubToken). Defaults to secretRef.

Example

json
{
  "secretRef": "github-api-token",
  "exposeAs": "githubToken"
}

Expected output: { "githubToken": "{{resolved-secret-ref}}" } (value is masked in logs)

Execution Notes

  • Resolved values are never logged, even with logger and includeInput: true.
  • Runs in server / worker environments only — secrets are not available in browser-only executions.

HTTP Request · Logger


Rate Limit

Type: rate_limit · Category: Utility

Throttle workflow items by key and limit. Use before high-volume API calls to avoid hitting external rate limits.

Required Config

FieldTypeDescription
limitnumberMaximum requests allowed within the window.

Optional Config

FieldTypeDefault
keystringRate limit key (e.g. github-api). Defaults to the workflow id.
windowSecondsnumber60

Example

json
{
  "key": "github-api",
  "limit": 30,
  "windowSeconds": 60
}

Expected output: { "allowed": true, "remaining": 29 }

When to Use

  • Before github_read, http_request, or any integration that has per-minute quotas.
  • In loop_map workflows processing many items against an external API.

Common Mistakes

  • Setting windowSeconds too low for bursty loops — items will be dropped or delayed.
  • Not using key — without a key, the limit applies globally to all workflows.

Retry · Loop / Map · HTTP Request


Cache Read

Type: cache_read · Category: Utility

Read cached data by key. Use to avoid redundant expensive operations (API calls, AI generations, DB queries) within a time window.

Required Config

FieldTypeDescription
keystringCache key (e.g. rss:github-blog:last-summary).

Outputs

NameTypeDescription
resultjson{ hit: boolean, value: any }

Example

json
{ "key": "rss:github-blog:last-summary" }

Expected output: { "hit": true, "value": { "summary": "..." } }

When to Use

  • Before an RSS fetch or API call to return cached results when fresh data is not needed.
  • Pair with if_condition to skip expensive steps on cache hit: $.hit === true.

Cache Write · If / Condition · KV Read


Cache Write

Type: cache_write · Category: Utility

Write data to cache by key with an optional TTL.

Required Config

FieldTypeDescription
keystringCache key.

Optional Config

FieldTypeDefault
valuePathstring$
ttlSecondsnumber3600

Example

json
{
  "key": "rss:github-blog:last-summary",
  "valuePath": "$.summary",
  "ttlSeconds": 3600
}

Expected output: { "written": true }

Cache Read · KV Write


Retry

Type: retry · Category: Utility

Retry an upstream operation branch with a configured backoff policy.

Required Config

FieldTypeDescription
attemptsnumberMaximum retry attempts.

Optional Config

FieldTypeDefault
backoffMsnumber2000
retryOnjson["timeout", "rate_limit"]

Example

json
{
  "attempts": 3,
  "backoffMs": 2000,
  "retryOn": ["timeout", "rate_limit"]
}

Expected output: { "attempts": 2, "succeeded": true }

When to Use

  • Around http_request, rss_feed, or any integration node that may transiently fail.
  • Around AI generation nodes (text_to_image, text_to_video) that have provider-side queuing.

Error Catch · Rate Limit · Wait / Delay


No-Op

Type: noop · Category: Utility

Pass input through unchanged. Use as a placeholder node while designing a workflow graph.

Optional Config

FieldTypeDescription
labelstringHuman-readable label describing intent (e.g. "placeholder while designing PR review workflow").

Example

json
{ "label": "placeholder while designing PR review workflow" }

Expected output: { "output": "unchanged" } (upstream payload passes through)

When to Use

  • As a placeholder to complete a graph edge during design before the real node is decided.
  • As a bypass node in A/B testing branches where one branch intentionally does nothing.

Debug Inspector · Stop / Return


See also: Node Catalog Index · Logic Nodes · Storage Nodes · Workflow Studio