kipn.ai
Shared workflow report

Find Relevant Reddit Posts and Prepare an answer

Analyzed

Executive Summary
n8n
Production RiskHigh

External call with no timeout configured — A single slow external call can block the entire workflow execution. At high trigger frequency, accumulated stuck executions can exhaust the n8n execution queue.

Cost ExposureHigh

AI node has no output token cap — Without a cap, models occasionally produce very long outputs — particularly when given an ambiguous or open-ended prompt. This increases cost unpredictably and can cause downstream parsing to fail if the consumer expects a bounded response.

Observability Gap

Side-effect node has no audit trail — If this action is disputed, replayed, or causes a data inconsistency, there is no structured record of what was sent, when, and with what data. Debugging requires cross-referencing n8n execution history with the external system's own logs.

50/ 100
Overall
Risk: HighCost: High
Reliability
0
Security
100
Cost Risk
38
Observability
84
AI Governance
100
Naming
97
Complexity
100
Nodes
14
Edges
13
External calls
6
LLM nodes
4
AI via HTTP
0
Loops
0
Error handlers
0
Unreachable
0
Max depth
9
Workflow Graph
Graph
14 nodes · 13 edges
100%
click a node to highlight its upstream & downstream paths
Controls Matrix
Present Partial Missing
CheckDescriptionStatus
Failure Alerting

Failures silent — only visible in execution log

Missing
Retry on Failure

Transient failures cause permanent stops

Present
Request Timeouts

Slow providers can block execution indefinitely

Missing
Duplicate Prevention

Retry on write events creates duplicate records

Missing
Empty Response Handling

Zero-result lookups break downstream logic

Present
AI Output Limits

Output cost and parsing risk unbounded

2 of 4 AI nodes missing token cap

Partial
AI Output Format

Free-form output will break downstream parsers

2 of 4 AI nodes lack structured output

Partial
Activity Logging

Side effects unlogged

Missing
Write Deduplication

Webhook replays may create duplicate records

Present

Run this analysis on your own workflows

Break Points
1Missing timeoutRisk HighConfidence 90%6 nodes affected
Affected Nodes:
  • HTTP Request[3c35b597]
  • Posts Relevance AI Agent
  • Send a text message
What happens:

A single slow external call can block the entire workflow execution. At high trigger frequency, accumulated stuck executions can exhaust the n8n execution queue.

Recommended Fix:

Set a timeout under the node's Additional Options. A value of 10,000–30,000 ms (10–30 seconds) is a reasonable starting point for most APIs; adjust based on the provider's documented SLA.


2Missing error handlerRisk HighConfidence 85%8 nodes affected
Affected Nodes:
  • HTTP Request[3c35b597]
  • Posts Relevance AI Agent
  • Edit Fields[9aadc0a2]
What happens:

Operators cannot tell from external signals that a run failed. Silent failures go undetected until a downstream system shows missing data or a user reports a problem.

Recommended Fix:

Connect a dedicated Error Workflow in workflow settings, or add a per-node onError: "continueErrorOutput" path that sends an alert via Slack, email, or a logging service.


4Fragile expressionRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Filter
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed — causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:
  • In `conditions.conditions[0].leftValue`, change {{ !$items("Get row(s) in sheet").some(r => String(r.json.id) === String($json.id)) }} to {{ !$items("Get row(s) in sheet")?.some(r => String(r?.json?.id) === String($json?.id)) }}.

5Fragile expressionRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Append row in sheet
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed — causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:
  • In `columns.value.id`, change {{ $('Filter').item.json.id }} to {{ $('Filter')?.item?.json?.id }}.
  • In `columns.value.username`, change {{ $('Filter').item.json.username }} to {{ $('Filter')?.item?.json?.username }}.
  • In `columns.value.title`, change {{ $('Filter').item.json.title }} to {{ $('Filter')?.item?.json?.title }}.
  • In `columns.value.communityName`, change {{ $('Filter').item.json.parsedCommunityName }} to {{ $('Filter')?.item?.json?.parsedCommunityName }}.
  • In `columns.value.flair`, change {{ $('Filter').item.json.flair }} to {{ $('Filter')?.item?.json?.flair }}.
  • In `columns.value.relevancy`, change {{ $('Edit Fields').item.json.assessment }} to {{ $('Edit Fields')?.item?.json?.assessment }}.

6Fragile expressionRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Add relevant posts with replies
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed — causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:
  • In `columns.value.id`, change {{ $('Filter').item.json.id }} to {{ $('Filter')?.item?.json?.id }}.
  • In `columns.value.username`, change {{ $('Filter').item.json.username }} to {{ $('Filter')?.item?.json?.username }}.
  • In `columns.value.title`, change {{ $('Filter').item.json.title }} to {{ $('Filter')?.item?.json?.title }}.
  • In `columns.value.communityName`, change {{ $('Filter').item.json.parsedCommunityName }} to {{ $('Filter')?.item?.json?.parsedCommunityName }}.
  • In `columns.value.flair`, change {{ $('Filter').item.json.flair }} to {{ $('Filter')?.item?.json?.flair }}.
  • In `columns.value.relevancy`, change {{ $('Edit Fields').item.json.assessment }} to {{ $('Edit Fields')?.item?.json?.assessment }}.
  • In `columns.value.response`, change {{ $json.response }} to {{ $json?.response }}.
  • In `columns.value.date`, change {{ $('Filter').item.json.createdAt }} to {{ $('Filter')?.item?.json?.createdAt }}.

7Fragile expressionRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Response Creating AI Agent
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed — causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:
  • In `text`, change {{ $('Filter').item.json.title }} to {{ $('Filter')?.item?.json?.title }}.

8No AI token capRisk MediumConfidence 85%2 nodes affected
Affected Nodes:
  • Posts Relevance AI Agent
  • Response Creating AI Agent
What happens:

Without a cap, models occasionally produce very long outputs — particularly when given an ambiguous or open-ended prompt. This increases cost unpredictably and can cause downstream parsing to fail if the consumer expects a bounded response.

Recommended Fix:

Set maxTokens to a value appropriate for the task. Classification tasks rarely need more than 100 tokens; structured JSON output typically needs 200–500; long-form summaries may need 1,000–2,000. Start conservative and increase if needed.

Cost Hotspots

Currently covers AI/LLM nodes. Non-AI API costs will be added in a future update.

1Multiple cost risksHigh exposure40 pts2 nodes affected
Affected Nodes:
  • Posts Relevance AI Agent
  • Response Creating AI Agent
Cost risks:
  • Full payload in promptunbounded input tokens
  • No output capunbounded output tokens
  • Agent iteration riskno max iterations set
Recommended Fix:

Set maxTokens to a value appropriate for the task. Classification tasks rarely need more than 100 tokens; structured JSON output typically needs 200–500; long-form summaries may need 1,000–2,000. Start conservative and increase if needed.

Raw Findings (32)
#Issue titleIssue descriptionAffected nodes
1Cost RiskAI node has no output token cap

Node "Posts Relevance AI Agent" has no maxTokens or equivalent parameter set. Output length is controlled solely by the model.

Posts Relevance AI AgentHigh85%
2Cost RiskAI node has no output token cap

Node "Response Creating AI Agent" has no maxTokens or equivalent parameter set. Output length is controlled solely by the model.

Response Creating AI AgentHigh85%
3ReliabilityAI output drives downstream logic without a structured format

Node "Response Creating AI Agent" produces free-form text output that flows into downstream logic with no Output Parser or JSON mode configured.

Response Creating AI AgentHigh75%
4ReliabilityExternal call with no timeout configured

Node "HTTP Request" makes an external call with no timeout parameter set. The n8n execution will wait indefinitely if the provider is slow or unresponsive.

HTTP Request, Posts Relevance AI Agent, Send a text message, Response Creating AI Agent, Anthropic Chat Model, Anthropic Chat Model1High90%
5ReliabilityFinding: missing credentials

Posts Relevance AI Agent: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host)

Posts Relevance AI AgentHigh80%
6ReliabilityFinding: missing credentials

Send a text message: credentialsPresent=false

Send a text messageHigh80%
7ReliabilityFinding: missing credentials

Response Creating AI Agent: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host)

Response Creating AI AgentHigh80%
8ReliabilityFinding: missing credentials

Anthropic Chat Model: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host)

Anthropic Chat ModelHigh80%
9ReliabilityFinding: missing credentials

Anthropic Chat Model1: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host)

Anthropic Chat Model1High80%
10ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Response Creating AI Agent" contains expression(s) with risky patterns that assume fields are always present.

Response Creating AI AgentHigh85%
11ReliabilityNo error handler or failure notification path

Workflow has 8 high-risk nodes (external calls or writes) with no configured error workflow and no inline notification path. If a production execution fails, the failure only appears in execution history.

HTTP Request, Posts Relevance AI Agent, Edit Fields, Send a text message, Response Creating AI Agent, Anthropic Chat Model, Anthropic Chat Model1, Edit Fields1High85%
12Cost RiskAI agent has no iteration limit

Agent node "Posts Relevance AI Agent" has no maxIterations or equivalent parameter. The agent will continue calling tools until it decides to stop or hits a platform-level limit.

Posts Relevance AI AgentMedium85%
13Cost RiskAI agent has no iteration limit

Agent node "Response Creating AI Agent" has no maxIterations or equivalent parameter. The agent will continue calling tools until it decides to stop or hits a platform-level limit.

Response Creating AI AgentMedium85%
14ReliabilityAI output drives downstream logic without a structured format

Node "Posts Relevance AI Agent" produces free-form text output that flows into downstream logic with no Output Parser or JSON mode configured.

Posts Relevance AI AgentMedium75%
15ReliabilityFinding: dangling node reference

unreachable: $('Get row(s) in sheet')

FilterMedium80%
16ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Filter" contains expression(s) with risky patterns that assume fields are always present.

FilterMedium85%
17ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Append row in sheet" contains expression(s) with risky patterns that assume fields are always present.

Append row in sheetMedium85%
18ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Posts Relevance AI Agent" contains expression(s) with risky patterns that assume fields are always present.

Posts Relevance AI AgentMedium75%
19ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Add relevant posts with replies" contains expression(s) with risky patterns that assume fields are always present.

Add relevant posts with repliesMedium85%
20Cost RiskFull or large payload detected in AI prompt

Node "Posts Relevance AI Agent" receives text: large-payload keyword 'body' in its prompt parameter. This sends an unbounded amount of data to the model.

Posts Relevance AI AgentMedium80%
21Cost RiskFull or large payload detected in AI prompt

Node "Response Creating AI Agent" receives text: large-payload keyword 'body' in its prompt parameter. This sends an unbounded amount of data to the model.

Response Creating AI AgentMedium80%
22ReliabilityIrreversible write chain with no compensation path

Nodes HTTP Request, Send a text message perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated.

HTTP Request, Send a text messageMedium75%
23ObservabilitySide-effect node has no audit trail

Node "HTTP Request" performs a write node: "http request" (sideeffect: unknown_write) operation with no logging or audit trail detected downstream.

HTTP RequestMedium70%
24ObservabilitySide-effect node has no audit trail

Node "Send a text message" performs a write node: "send a text message" (sideeffect: external_write) operation with no logging or audit trail detected downstream.

Send a text messageMedium70%
25NamingFinding: poor naming generic

3 node(s) use default/generic names.. Node "HTTP Request" (n8n-nodes-base.httpRequest) has a generic default name.. Node "Edit Fields" (n8n-nodes-base.set) has a generic default name.. Node "If" (n8n-nodes-base.if) has a generic default name.

HTTP Request, Edit Fields, IfLow90%
26ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Edit Fields" contains expression(s) with risky patterns that assume fields are always present.

Edit FieldsLow75%
27ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "If" contains expression(s) with risky patterns that assume fields are always present.

IfLow75%
28ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Edit Fields1" contains expression(s) with risky patterns that assume fields are always present.

Edit Fields1Low75%
29ReliabilityFinding: external without retry

Node "Posts Relevance AI Agent" (@n8n/n8n-nodes-langchain.agent) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_agent. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Posts Relevance AI AgentInfo70%
30ReliabilityFinding: external without retry

Node "Response Creating AI Agent" (@n8n/n8n-nodes-langchain.agent) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_agent. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Response Creating AI AgentInfo70%
31ReliabilityFinding: external without retry

Node "Anthropic Chat Model" (@n8n/n8n-nodes-langchain.lmChatAnthropic) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_model_call. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Anthropic Chat ModelInfo70%
32ReliabilityFinding: external without retry

Node "Anthropic Chat Model1" (@n8n/n8n-nodes-langchain.lmChatAnthropic) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_model_call. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Anthropic Chat Model1Info70%

Catch workflow risks before they catch you