Intent recognition
Purpose
Use this skill when an automation request still needs to be classified before
designing or building it, or when a new turn may require reconsidering the
current artifact. Do not load it again for a routine edit or extension when the
conversation already targets a workflow or Agent, unless the user introduces
an independent automation or the new request carries its own anchor signal.
The deciding question is not a single "workflow or agent" label — it is two
questions: who owns the top-level control flow, and does the other primitive
show up inside that flow.
If the user asked to build, route on the result: workflow-builder for
workflow-anchored (a bounded LLM step is an AI node in the graph; an embedded
agent is an AI Agent step inside it), an agent-oriented design for
agent-anchored (a tool-use loop), ask-user for needs-clarification, or answer
directly for out-of-scope.
Inputs
- The user's request or scenario prompt.
- Whether the user is mid-build on an existing workflow or agent in this
conversation — incremental requests default to extending that primitive.
- Whether the editor/canvas context the conversation opened from shows an
existing agent or an existing workflow (or both). An existing agent
in context that the user asks to change is an agent-anchored request — see
Context continuity and Existing-agent modification.
- Any explicit constraints about determinism, auditability, latency, cost,
compliance, reusability, or allowed tools.
- If the request is underspecified on an anchor-deciding axis, ask for the
missing detail instead of guessing.
Decisions
Two orthogonal decisions per request, or per part for compound requests:
1. Anchor — which primitive owns the top-level control flow:
- workflow-anchored: the outer shell is a workflow graph. May include LLM
steps as bounded transformers (classify, extract, summarize, score, a
single decision feeding fixed branches).
- agent-anchored: an agent owns the flow; the LLM decides the next step
at runtime. n8n Agents are not chat-only: besides chat sessions, they run
recurring objectives on a cron schedule (tasks) and keep memory across
sessions and runs — so recurring or scheduled duties do not disqualify this
anchor.
- needs-clarification: the request is under-specified on an
anchor-deciding axis.
- out-of-scope: not a build intent at all. Covers meta or product
questions (e.g. asking what the assistant is capable of building) and
one-off content tasks with no trigger, no persistence, and no reuse intent
(summarize, translate, or draft something once) — answer or do these
directly instead of building an automation. This bucket only applies when
you can actually do the task directly: a one-off question or report that
needs external systems you have no ad-hoc access to (a private issue
tracker, wiki, or CRM) is not out-of-scope — classify it, and when
answering requires judgment-driven navigation of those systems it is
agent-anchored (see Signals). Requests to operate on existing resources
(debugging a failed execution, listing or managing workflows or agents,
querying data) are not classified by this skill at all — route them
through their normal paths. Finally, a one-off task with a concrete
external effect (export/copy data somewhere once, a migration, a
backfill) is workflow-anchored, not out-of-scope — the workflow is
just the vehicle. Classify it by shape (bounded data already in hand,
imperative ask, no trigger/schedule/reuse vocabulary) — users rarely say
"one-off" explicitly. Load the
one-off-operations skill before building
and pass executionIntent: "one-off" to build-workflow; the completion
criterion is then a live run with read-back instead of simulated
verification.
2. Embeds other — whether the other primitive appears inside the anchor:
- workflow-anchored +
true: an agent embedded as a workflow step (e.g. a
scheduled pipeline whose middle step is open-ended investigation).
- agent-anchored +
true: workflows invoked as tools of the agent; see Agent
tool shape to distinguish them from direct tools.
n/a for needs-clarification and out-of-scope.
Migration from the old taxonomy: old hybrid → workflow-anchored,
embeds_other: false. Old single AI task → out-of-scope when it is a
one-off request (do the task directly); workflow-anchored with one LLM step
only when the user wants a persistent, triggerable automation. Old
ambiguous → needs-clarification. Old workflow and agent map
directly onto the matching anchor value.
Agent tool shape
After choosing an agent-anchored design, decide whether each capability should
be a direct agent tool or a workflow tool:
- Direct agent tools are the default. One node-backed capability or multiple
independent node tools stay on the Agent build path with
embeds_other: false.
- Use a workflow tool only when one agent tool call must run an ordered
multi-node procedure, or when the user explicitly needs that workflow
reusable, manually callable, or usable outside the agent. Build the workflow
first, pass it to
build-agent via workflowContext, and set
embeds_other: true.
Count the nodes required inside one tool invocation, not the total number of
tools on the agent. For example, looking up and inserting Data Table rows are
two direct node tools; an atomic lookup-transform-write procedure is one
workflow tool.
After choosing an agent-anchored design, load agent-builder before calling
build-agent. It owns prerequisite creation and the handoff to the delegated
builder.
Decision Steps
- If the user is mid-build on an existing workflow or agent, apply context
continuity (see Signals) before anything else — an incremental request
normally extends the current primitive.
- Explicit artifact requests. When the user names the deliverable —
"build me an agent/assistant that…", "create a workflow that…" — the
named primitive is a routing instruction, not surface vocabulary.
Classify by it unless the described behavior is unambiguously the other
primitive's shape (e.g. "an agent" whose behavior is a fixed
schedule-fetch-notify pipeline). Even then, never switch silently:
propose the reclassified design and say you are deviating from the named
primitive, grounding the choice in the task's shape. The false-friends
rule applies to task descriptions, not to an explicitly requested
artifact.
- If the request is not a build intent — a meta or product question, or a
one-off content task with no trigger or reuse — classify out-of-scope
and answer or do it directly.
- Split the request into parts only if it contains multiple independent
automations with separate lifecycles (unrelated triggers, audiences, or
cadences). Markers like numbering or "and separately" are a giveaway but
are not required — a single plain sentence can contain two automations.
Do not split a single automation that merely enumerates many tools or
steps. Run steps 4-9 on each part.
- Test the agent signals. If any one holds, classify agent-anchored.
- Otherwise, test the workflow conditions. If all of them hold, classify
workflow-anchored.
- Decide
embeds_other in both directions: does an agent step appear inside
this workflow, or does this agent invoke workflows as tools?
- Degenerate-shell check. If a workflow-anchored design reduces to a
trigger plus a single open-ended agent step that does all the work — no
deterministic steps earning the shell — the anchor is wrong: reclassify
agent-anchored and build an n8n Agent (an on-demand duty becomes the
agent's chat use; a scheduled duty becomes a task on the agent). Re-run
this check while building: when fixed nodes prove unusable and the work
migrates into one embedded agent step, stop and re-anchor instead of
finishing the degenerate workflow.
- If the request is under-specified on an anchor-deciding axis (rule-based
vs judgment-based, scope/autonomy, interaction mode), classify
needs-clarification and name the missing axis instead of guessing.
- If both anchors are genuinely defensible, apply the growth tiebreaker:
prefer whichever primitive scales with likely complexity growth — usually
agent-anchored when novel situations, longer horizons, or learning are
implied. The tiebreaker applies only to genuine ties: when a bounded
workflow reading fully satisfies the request, prefer it. If it is a real
toss-up, say so and name both readings instead of feigning certainty.
The workflow preference applies to task-shaped requests; it never
overrides an explicitly requested agent artifact (step 1).
Signals
Agent-anchored (any one is enough):
- Reasoning dominates the flow: investigate, decide, act, iterate.
- On-demand question or report that requires judgment-driven navigation of
external systems (which items matter, how they map to goals) and cannot be
answered directly with your own tools — the user is in effect already
chatting with the automation they need. The artifact is an agent with those
tools that can be asked again anytime, not a manually triggered workflow.
- Multi-session or long-running: coordination across days, tracked open
threads, daily check-ins.
- Proactive or recurring on its own: wakes on a heartbeat or a scheduled
task, checks state, and decides what to do about it each run. The judgment
per run is the signal, not the cadence — a schedule alone is anchor-neutral
(see Scheduled judgment work).
- Self-improving or skill accretion is first-class: learns from feedback
over time, gets better at the task.
- Chat or session-based interaction. A workflow with a Chat Trigger is not
a substitute — this signal holds unless the chat merely triggers a fixed
pipeline (see Gotchas).
- Cross-session memory.
Workflow-anchored (all must hold):
- Structure is a graph of enumerable steps.
- Any LLM use is a bounded transformer: fixed-label classify, extract,
summarize, or a single decision.
- Trigger and actions are deterministic. A cron schedule satisfies this but
never decides the anchor by itself — agents run scheduled tasks too; what
must be deterministic is the body of each run.
- Reproducibility or auditability is served by the same graph running every
time.
Scheduled judgment work (recurring cadence + open-ended body): both
primitives can own it — a workflow shell with an embedded agent step, or an
agent with a scheduled task. Default to the workflow shell for a standalone,
single-duty job: a deterministic trigger and delivery around one open-ended
step keeps auditability and avoids unnecessary agency. Choose an agent with a
task instead when the duty belongs to an agent the user also interacts with
or that has other duties, when it needs memory across runs (tracking open
threads, "what did I flag last time"), or when the user explicitly asked for
an agent. A recurring duty added to an agent mid-build is always a task on
that agent, never a spawned workflow.
Embeds-other signals:
- Workflow with an embedded agent: a step in an otherwise fixed pipeline is
open-ended ("figure out why", "investigate", "decide what to do about it")
while the trigger and surrounding steps stay deterministic.
- The embedding is often implicit — the request never says "agent". Ask of
each step: could a fixed-instruction transform do it (enumerable labels,
one bounded rewrite), or does doing it well require gathering and weighing
context that differs per item, then producing a judgment? A nightly job
that drafts a tailored renewal pitch for each account from its usage
history embeds an agent; a nightly job that condenses each ticket into a
two-sentence summary does not.
- For an agent with workflow tools, apply Agent tool shape.
Context continuity (step 0): inside a workflow build, a request to insert
a scoring step stays a bounded LLM step, not a new agent. Inside an agent
build, a request to post an update on completion is a new tool on that
agent, not a spawned workflow — and a recurring duty ("also send me a Monday
summary") is a scheduled task on that agent, not a new scheduled workflow.
Only cross into the other primitive when the
incremental request itself carries its own anchor signal — and even then,
prefer asking before switching paradigm if it isn't clearly load-bearing.
Existing-agent modification: context continuity extends to an agent the
user did not build in this conversation but opened in the editor. When the
editor/canvas context shows an existing agent and the user asks to change,
add, or remove its configuration or capabilities (instructions, model,
tools, skills, tasks, channels, memory, sub-agents), classify
agent-anchored and route to build-agent targeting that agent. Do not
route to workflow-builder, and do not treat the request as a workflow
change even when a workflow is also in context, unless the user explicitly
names the workflow as the target. A capability the agent cannot have is
still an agent-anchored request — handle it per Unsupported capabilities
below, do not reclassify it as a workflow.
Mixed agent + workflow context: when both an agent and a workflow are in
context and the request is ambiguous about which one the user wants to
change, classify needs-clarification and ask which target — do not
assume the workflow. Once the user names the target, follow context
continuity for that primitive.
Unsupported capabilities: when the user names a specific channel or
capability for an agent (e.g. "WhatsApp", "Teams"), call
list-agent-capabilities before classifying. If the named channel is
absent, it is unsupported for agents — do not classify the request as a
workflow substitute, do not improvise workflow nodes to fake the channel,
and do not claim it can be configured. Explain that it is unavailable for
agents, offer the supported alternatives the tool returned (with their
capabilities), and only build a workflow if the user explicitly chooses
that path after the limitation is stated. This is an agent-anchored request
that the agent cannot fully satisfy, not a workflow-anchored one.
Clarify triggers: rule-based vs judgment-based (what defines "important"
or "urgent"?), scope/autonomy (act on its own vs draft for review),
interaction mode (one-shot vs chat). Do not clarify when the criterion could
defensibly go either way — that is a genuine tie, name both readings
instead.
False friends — not signals:
- Surface vocabulary: "agent", "assistant", "bot", "workflow", "automate"
in a task description carry no weight — classify the shape, not the
words. An explicit artifact request ("build me an agent that…") is not a
false friend; see Decision Step 1.
- Step count and tool count: long linear pipelines and high tool counts are
not agentic. Seven deterministic steps with zero branches is still a
workflow.
Examples
- "Every day at 6pm, pull today's Shopify order count and post it to a
Discord channel." -> workflow-anchored,
embeds_other: false: fixed
schedule, source, and destination.
- "When a new Jira issue is created, classify it as bug/feature/question and
route it to the matching Discord channel." -> workflow-anchored,
embeds_other: false: bounded classification feeding fixed routing (would
have been hybrid under the old taxonomy).
- "Every night, gather the day's failed background jobs, dig into the logs
and recent deploys to work out why each one failed, and post a write-up to
a Notion page." -> workflow-anchored,
embeds_other: true: schedule
and destination are fixed; "work out why" is open-ended investigation, best
run as an embedded agent step.
- "Give me a chat window where I can ask about our expense-reporting rules
and get answers pulled from the finance handbook." -> agent-anchored,
embeds_other: false: chat interaction, the LLM decides what to look up
each turn.
- "Build an ops agent that can check server health, restart services via our
runbook, and file a Jira ticket if it can't resolve things — the restart
and ticket-filing should also be triggerable manually elsewhere." ->
agent-anchored,
embeds_other: true: explicitly reusable actions are
workflows the agent calls as tools.
- "Have an agent keep an eye on our AWS spend throughout the day and flag me
before we blow through budget, without me asking it to check." ->
agent-anchored,
embeds_other: false: proactive, heartbeat-driven,
no fixed check schedule.
- "Build an agent that drafts replies to Notion comment threads and sharpens
its sense of our tone the more we correct it." -> agent-anchored,
embeds_other: false: skill accretion from feedback is first-class.
- "Put an agent in charge of coordinating our office relocation — track
vendors, follow up with each team lead, and send reminders through our
existing reminder workflow when a task stalls." -> agent-anchored,
embeds_other: true: long-running coordination invoking a workflow tool.
- "Configure an AI agent to send me a nightly digest of new GitHub stars."
-> workflow-anchored,
embeds_other: false: fixed schedule and action
despite the word "agent" — a false friend. When the user instead
explicitly asks to build an agent around a fixed pipeline like this,
keep the workflow classification but say so rather than switching
silently (step 1).
- "Spin up a lightweight workflow that talks to shoppers on our storefront
and handles their product questions." -> agent-anchored: chat-based
Q&A means the LLM owns turn-by-turn control despite the word "workflow" —
a false friend in the other direction.
- "Build me an agent that answers customer questions from our docs." ->
agent-anchored,
embeds_other: false: explicit agent artifact
request plus chat-shaped open-ended Q&A. The deliverable is an n8n Agent
— not a workflow with a Chat Trigger and an AI Agent node.
- "Give me a chat box where I paste a company name and it runs our
enrichment steps and replies with the result." -> workflow-anchored,
embeds_other: false: chat is merely the manual trigger for a fixed
graph — the one case where a Chat Trigger workflow is the right build.
- "Post every new Airtable record to a Discord channel, and separately set up
an agent that handles customer refund requests end-to-end." -> two parts,
joined only by topic, not data or trigger: "Airtable-to-Discord posting"
(workflow-anchored,
embeds_other: false) and "refund-handling agent"
(agent-anchored, embeds_other: true).
- "Transcribe my sales calls and chase the deals that go quiet." -> two
parts despite the plain single sentence: transcription is a bounded
per-call pipeline (workflow-anchored,
embeds_other: false), while
chasing stalled deals is an ongoing judgment-driven automation with its
own lifecycle (agent-anchored).
- "Set up a research helper capable of searching the web, querying our
internal wiki, pulling numbers from Google Analytics, and drafting a slide
deck that summarizes the findings." -> one part, agent-anchored,
embeds_other: true: many tools but one lifecycle — do not split on tool
count.
- "Tell me how the platform team is progressing against their cycle goals —
current status is in our issue tracker, the goals are on our internal
wiki." -> agent-anchored,
embeds_other: false: an on-demand judgment
report over external systems you cannot query directly. The artifact is an
agent with tracker and wiki tools the user can ask again anytime — not a
manual-trigger workflow whose only real step is an embedded agent with
those same tools. If the user later wants it every Friday, that becomes a
scheduled task on the same agent, not a conversion to a workflow.
- "Tell me when something important happens with our shipments." ->
needs-clarification: "important" is undefined; ask whether concrete
rules exist or this needs judgment-based triage.
- "Build me an agent my team can @mention on WhatsApp to triage customer
messages." -> agent-anchored (explicit agent artifact + chat
interaction), but call
list-agent-capabilities first: WhatsApp is absent,
so do not build. Explain WhatsApp is unsupported for agents, offer the
supported chat channels the tool returned, with their
capabilities, and ask which to use — or whether the user wants a
workflow path instead. Do not improvise a workflow with a WhatsApp node
and do not claim the channel is configured.
- (An existing agent is open in the editor.) "Make it also file a Linear
ticket when it can't resolve an issue." -> agent-anchored: the open
agent is the target; route to
build-agent targeting that agent to add the
capability. Do not start a workflow build, even though a workflow could
also file a ticket — the user asked to change the agent.
- (Both an agent and a workflow are open.) "Add a daily summary of new
signups to the data warehouse." -> needs-clarification: ask whether
the summary belongs to the agent (a scheduled task on it) or the workflow
(a new branch in the graph); do not assume the workflow.
Gotchas
- Do not label a request agent-anchored just because it is long, multi-step,
or mentions AI.
- Do not label classify-then-route as agent-anchored unless the model
repeatedly decides the next action after observing prior results.
- Do not force vague prompts into an anchor; ask when an anchor-deciding
axis is missing.
- Never default
embeds_other to false without checking both directions:
an agent step hiding inside a workflow, and a workflow acting as an
agent's tool.
- Never split a compound request on tool or step enumeration alone — split
only on separate lifecycles.
- Unnecessary agency adds latency, cost, and compounding error risk — do not
reach for an agent when a bounded workflow fully satisfies a task-shaped
request. This is not a license to override an explicit agent request.
- Never satisfy an agent-anchored classification with a workflow
containing a Chat Trigger + AI Agent node. Agent-anchored requests
produce an n8n Agent artifact via the agent build path; the AI Agent
node exists only for
embeds_other: true steps inside a genuinely
workflow-anchored pipeline. A Chat Trigger workflow is correct only when
chat is merely the manual trigger for a fixed graph.
- Never improvise a workflow substitute for an unsupported agent channel or
capability. When the user names a channel not in
list-agent-capabilities,
explain the limitation and offer supported alternatives — do not add
workflow nodes that fake the channel or silently translate the request
into a workflow change.
- Do not demote an explicitly requested agent to an embedded AI Agent step
inside a workflow — workflow-anchored with
embeds_other: true is for
agent steps inside a pipeline the user described as a pipeline.
- A workflow whose only real step is one embedded agent doing all the work
is an agent wearing a workflow costume — the mirror image of the Chat
Trigger gotcha above. Apply the degenerate-shell check (step 7) and
re-anchor instead of shipping trigger + AI Agent node.
- Do not treat a cron schedule as a workflow signal by itself — agents run
scheduled tasks. Classify by the body of each run, and when a one-off
question can't be answered directly, do not fall back to "build a workflow
or do it yourself": an agent with the right tools is usually the missing
option.
- Do not use an agent when progress cannot be verified: if the path cannot
be scripted and the result cannot be checked, the design is not ready.
- Respect the current build context: an incremental request stays on the
active primitive unless it carries its own anchor signal.
- Keep n8n framing clear: agents operate inside workflow guardrails; they do
not replace the workflow engine.
Output Format
Return a concise classification and reason:
Anchor: workflow-anchored | agent-anchored | needs-clarification | out-of-scope
Embeds other: true | false | n/a
Reason: <one or two sentences citing the deciding signals>
Next step: <build workflow / build workflow with embedded agent step / build n8n Agent artifact (agent build path; recurring duties as scheduled tasks on the agent) / ask clarification / answer directly>
For build requests, do not expose this format unless the user asks for
classification. Instead, proceed according to the selected next step. When
the user asks for classification in a specific format, such as a JSON block,
follow that format and map the vocabulary accordingly (workflow-anchored,
agent-anchored, needs-clarification, out-of-scope, and their equivalents).
For compound requests, output one classification block per part.
1---2name: intent-recognition3description: Classifies automation requests using two decisions: anchor (which primitive owns the top-level control flow — workflow-anchored, agent-anchored, needs-clarification, or out-of-scope) and embeds_other (whether the other primitive appears embedded inside — an agent step inside a workflow, or a workflow invoked as an agent tool). Must be used whenever the current turn requires choosing or reconsidering the intent of an automation request, including compound requests, independent automations introduced mid-build, one-off questions or reports that need external systems you cannot query directly, and requests that need clarification before an anchor can be chosen. Do not load for routine edits or extensions when the conversation already targets a workflow or Agent.4---5
6# Intent recognition
7
8## Purpose
9
10Use this skill when an automation request still needs to be classified before
11designing or building it, or when a new turn may require reconsidering the
12current artifact. Do not load it again for a routine edit or extension when the
13conversation already targets a workflow or Agent, unless the user introduces
14an independent automation or the new request carries its own anchor signal.
15The deciding question is not a single "workflow or agent" label — it is two
16questions: who owns the top-level control flow, and does the other primitive
17show up inside that flow.
18
19If the user asked to build, route on the result: workflow-builder for
20workflow-anchored (a bounded LLM step is an AI node in the graph; an embedded
21agent is an AI Agent step inside it), an agent-oriented design for
22agent-anchored (a tool-use loop), `ask-user` for needs-clarification, or answer
23directly for out-of-scope.
24
25## Inputs
26
27- The user's request or scenario prompt.
28- Whether the user is mid-build on an existing workflow or agent in this
29 conversation — incremental requests default to extending that primitive.
30- Whether the editor/canvas context the conversation opened from shows an
31 existing **agent** or an existing **workflow** (or both). An existing agent
32 in context that the user asks to change is an agent-anchored request — see
33 Context continuity and Existing-agent modification.
34- Any explicit constraints about determinism, auditability, latency, cost,
35 compliance, reusability, or allowed tools.
36- If the request is underspecified on an anchor-deciding axis, ask for the
37 missing detail instead of guessing.
38
39## Decisions
40
41Two orthogonal decisions per request, or per part for compound requests:
42
43**1. Anchor** — which primitive owns the top-level control flow:
44
45- **workflow-anchored**: the outer shell is a workflow graph. May include LLM
46 steps as bounded transformers (classify, extract, summarize, score, a
47 single decision feeding fixed branches).
48- **agent-anchored**: an agent owns the flow; the LLM decides the next step
49 at runtime. n8n Agents are not chat-only: besides chat sessions, they run
50 recurring objectives on a cron schedule (**tasks**) and keep memory across
51 sessions and runs — so recurring or scheduled duties do not disqualify this
52 anchor.
53- **needs-clarification**: the request is under-specified on an
54 anchor-deciding axis.
55- **out-of-scope**: not a build intent at all. Covers meta or product
56 questions (e.g. asking what the assistant is capable of building) and
57 one-off content tasks with no trigger, no persistence, and no reuse intent
58 (summarize, translate, or draft something once) — answer or do these
59 directly instead of building an automation. This bucket only applies when
60 you can actually do the task directly: a one-off question or report that
61 needs external systems you have no ad-hoc access to (a private issue
62 tracker, wiki, or CRM) is not out-of-scope — classify it, and when
63 answering requires judgment-driven navigation of those systems it is
64 agent-anchored (see Signals). Requests to operate on existing resources
65 (debugging a failed execution, listing or managing workflows or agents,
66 querying data) are not classified by this skill at all — route them
67 through their normal paths. Finally, a one-off task with a concrete
68 external *effect* (export/copy data somewhere once, a migration, a
69 backfill) is **workflow-anchored**, not out-of-scope — the workflow is
70 just the vehicle. Classify it by shape (bounded data already in hand,
71 imperative ask, no trigger/schedule/reuse vocabulary) — users rarely say
72 "one-off" explicitly. Load the `one-off-operations` skill before building
73 and pass `executionIntent: "one-off"` to `build-workflow`; the completion
74 criterion is then a live run with read-back instead of simulated
75 verification.
76
77**2. Embeds other** — whether the other primitive appears inside the anchor:
78
79- workflow-anchored + `true`: an agent embedded as a workflow step (e.g. a
80 scheduled pipeline whose middle step is open-ended investigation).
81- agent-anchored + `true`: workflows invoked as tools of the agent; see Agent
82 tool shape to distinguish them from direct tools.
83- `n/a` for needs-clarification and out-of-scope.
84
85**Migration from the old taxonomy**: old **hybrid** → workflow-anchored,
86`embeds_other: false`. Old **single AI task** → out-of-scope when it is a
87one-off request (do the task directly); workflow-anchored with one LLM step
88only when the user wants a persistent, triggerable automation. Old
89**ambiguous** → needs-clarification. Old **workflow** and **agent** map
90directly onto the matching anchor value.
91
92## Agent tool shape
93
94After choosing an agent-anchored design, decide whether each capability should
95be a direct agent tool or a workflow tool:
96
97- **Direct agent tools are the default.** One node-backed capability or multiple
98 independent node tools stay on the Agent build path with
99 `embeds_other: false`.
100- Use a **workflow tool** only when one agent tool call must run an ordered
101 multi-node procedure, or when the user explicitly needs that workflow
102 reusable, manually callable, or usable outside the agent. Build the workflow
103 first, pass it to `build-agent` via `workflowContext`, and set
104 `embeds_other: true`.
105
106Count the nodes required inside one tool invocation, not the total number of
107tools on the agent. For example, looking up and inserting Data Table rows are
108two direct node tools; an atomic lookup-transform-write procedure is one
109workflow tool.
110
111After choosing an agent-anchored design, load `agent-builder` before calling
112`build-agent`. It owns prerequisite creation and the handoff to the delegated
113builder.
114
115## Decision Steps
116
1170. If the user is mid-build on an existing workflow or agent, apply context
118 continuity (see Signals) before anything else — an incremental request
119 normally extends the current primitive.
1201. **Explicit artifact requests.** When the user names the deliverable —
121 "build me an agent/assistant that…", "create a workflow that…" — the
122 named primitive is a routing instruction, not surface vocabulary.
123 Classify by it unless the described behavior is unambiguously the other
124 primitive's shape (e.g. "an agent" whose behavior is a fixed
125 schedule-fetch-notify pipeline). Even then, never switch silently:
126 propose the reclassified design and say you are deviating from the named
127 primitive, grounding the choice in the task's shape. The false-friends
128 rule applies to task descriptions, not to an explicitly requested
129 artifact.
1302. If the request is not a build intent — a meta or product question, or a
131 one-off content task with no trigger or reuse — classify **out-of-scope**
132 and answer or do it directly.
1333. Split the request into parts only if it contains multiple independent
134 automations with separate lifecycles (unrelated triggers, audiences, or
135 cadences). Markers like numbering or "and separately" are a giveaway but
136 are not required — a single plain sentence can contain two automations.
137 Do not split a single automation that merely enumerates many tools or
138 steps. Run steps 4-9 on each part.
1394. Test the agent signals. If any one holds, classify **agent-anchored**.
1405. Otherwise, test the workflow conditions. If all of them hold, classify
141 **workflow-anchored**.
1426. Decide `embeds_other` in both directions: does an agent step appear inside
143 this workflow, or does this agent invoke workflows as tools?
1447. **Degenerate-shell check.** If a workflow-anchored design reduces to a
145 trigger plus a single open-ended agent step that does all the work — no
146 deterministic steps earning the shell — the anchor is wrong: reclassify
147 **agent-anchored** and build an n8n Agent (an on-demand duty becomes the
148 agent's chat use; a scheduled duty becomes a task on the agent). Re-run
149 this check while building: when fixed nodes prove unusable and the work
150 migrates into one embedded agent step, stop and re-anchor instead of
151 finishing the degenerate workflow.
1528. If the request is under-specified on an anchor-deciding axis (rule-based
153 vs judgment-based, scope/autonomy, interaction mode), classify
154 **needs-clarification** and name the missing axis instead of guessing.
1559. If both anchors are genuinely defensible, apply the growth tiebreaker:
156 prefer whichever primitive scales with likely complexity growth — usually
157 agent-anchored when novel situations, longer horizons, or learning are
158 implied. The tiebreaker applies only to genuine ties: when a bounded
159 workflow reading fully satisfies the request, prefer it. If it is a real
160 toss-up, say so and name both readings instead of feigning certainty.
161 The workflow preference applies to task-shaped requests; it never
162 overrides an explicitly requested agent artifact (step 1).
163
164## Signals
165
166**Agent-anchored** (any one is enough):
167
168- Reasoning dominates the flow: investigate, decide, act, iterate.
169- On-demand question or report that requires judgment-driven navigation of
170 external systems (which items matter, how they map to goals) and cannot be
171 answered directly with your own tools — the user is in effect already
172 chatting with the automation they need. The artifact is an agent with those
173 tools that can be asked again anytime, not a manually triggered workflow.
174- Multi-session or long-running: coordination across days, tracked open
175 threads, daily check-ins.
176- Proactive or recurring on its own: wakes on a heartbeat or a scheduled
177 task, checks state, and decides what to do about it each run. The judgment
178 per run is the signal, not the cadence — a schedule alone is anchor-neutral
179 (see Scheduled judgment work).
180- Self-improving or skill accretion is first-class: learns from feedback
181 over time, gets better at the task.
182- Chat or session-based interaction. A workflow with a Chat Trigger is not
183 a substitute — this signal holds unless the chat merely triggers a fixed
184 pipeline (see Gotchas).
185- Cross-session memory.
186
187**Workflow-anchored** (all must hold):
188
189- Structure is a graph of enumerable steps.
190- Any LLM use is a bounded transformer: fixed-label classify, extract,
191 summarize, or a single decision.
192- Trigger and actions are deterministic. A cron schedule satisfies this but
193 never decides the anchor by itself — agents run scheduled tasks too; what
194 must be deterministic is the body of each run.
195- Reproducibility or auditability is served by the same graph running every
196 time.
197
198**Scheduled judgment work** (recurring cadence + open-ended body): both
199primitives can own it — a workflow shell with an embedded agent step, or an
200agent with a scheduled task. Default to the workflow shell for a standalone,
201single-duty job: a deterministic trigger and delivery around one open-ended
202step keeps auditability and avoids unnecessary agency. Choose an agent with a
203task instead when the duty belongs to an agent the user also interacts with
204or that has other duties, when it needs memory across runs (tracking open
205threads, "what did I flag last time"), or when the user explicitly asked for
206an agent. A recurring duty added to an agent mid-build is always a task on
207that agent, never a spawned workflow.
208
209**Embeds-other signals**:
210
211- Workflow with an embedded agent: a step in an otherwise fixed pipeline is
212 open-ended ("figure out why", "investigate", "decide what to do about it")
213 while the trigger and surrounding steps stay deterministic.
214- The embedding is often implicit — the request never says "agent". Ask of
215 each step: could a fixed-instruction transform do it (enumerable labels,
216 one bounded rewrite), or does doing it well require gathering and weighing
217 context that differs per item, then producing a judgment? A nightly job
218 that drafts a tailored renewal pitch for each account from its usage
219 history embeds an agent; a nightly job that condenses each ticket into a
220 two-sentence summary does not.
221- For an agent with workflow tools, apply Agent tool shape.
222
223**Context continuity** (step 0): inside a workflow build, a request to insert
224a scoring step stays a bounded LLM step, not a new agent. Inside an agent
225build, a request to post an update on completion is a new tool on that
226agent, not a spawned workflow — and a recurring duty ("also send me a Monday
227summary") is a scheduled task on that agent, not a new scheduled workflow.
228Only cross into the other primitive when the
229incremental request itself carries its own anchor signal — and even then,
230prefer asking before switching paradigm if it isn't clearly load-bearing.
231
232**Existing-agent modification**: context continuity extends to an agent the
233user did not build in this conversation but opened in the editor. When the
234editor/canvas context shows an existing agent and the user asks to change,
235add, or remove its configuration or capabilities (instructions, model,
236tools, skills, tasks, channels, memory, sub-agents), classify
237**agent-anchored** and route to `build-agent` targeting that agent. Do not
238route to `workflow-builder`, and do not treat the request as a workflow
239change even when a workflow is also in context, unless the user explicitly
240names the workflow as the target. A capability the agent cannot have is
241still an agent-anchored request — handle it per Unsupported capabilities
242below, do not reclassify it as a workflow.
243
244**Mixed agent + workflow context**: when both an agent and a workflow are in
245context and the request is ambiguous about which one the user wants to
246change, classify **needs-clarification** and ask which target — do not
247assume the workflow. Once the user names the target, follow context
248continuity for that primitive.
249
250**Unsupported capabilities**: when the user names a specific channel or
251capability for an agent (e.g. "WhatsApp", "Teams"), call
252`list-agent-capabilities` before classifying. If the named channel is
253absent, it is unsupported for agents — do not classify the request as a
254workflow substitute, do not improvise workflow nodes to fake the channel,
255and do not claim it can be configured. Explain that it is unavailable for
256agents, offer the supported alternatives the tool returned (with their
257`capabilities`), and only build a workflow if the user explicitly chooses
258that path after the limitation is stated. This is an agent-anchored request
259that the agent cannot fully satisfy, not a workflow-anchored one.
260
261**Clarify triggers**: rule-based vs judgment-based (what defines "important"
262or "urgent"?), scope/autonomy (act on its own vs draft for review),
263interaction mode (one-shot vs chat). Do not clarify when the criterion could
264defensibly go either way — that is a genuine tie, name both readings
265instead.
266
267**False friends — not signals**:
268
269- Surface vocabulary: "agent", "assistant", "bot", "workflow", "automate"
270 in a *task description* carry no weight — classify the shape, not the
271 words. An explicit artifact request ("build me an agent that…") is not a
272 false friend; see Decision Step 1.
273- Step count and tool count: long linear pipelines and high tool counts are
274 not agentic. Seven deterministic steps with zero branches is still a
275 workflow.
276
277## Examples
278
279- "Every day at 6pm, pull today's Shopify order count and post it to a
280 Discord channel." -> **workflow-anchored**, `embeds_other: false`: fixed
281 schedule, source, and destination.
282- "When a new Jira issue is created, classify it as bug/feature/question and
283 route it to the matching Discord channel." -> **workflow-anchored**,
284 `embeds_other: false`: bounded classification feeding fixed routing (would
285 have been **hybrid** under the old taxonomy).
286- "Every night, gather the day's failed background jobs, dig into the logs
287 and recent deploys to work out why each one failed, and post a write-up to
288 a Notion page." -> **workflow-anchored**, `embeds_other: true`: schedule
289 and destination are fixed; "work out why" is open-ended investigation, best
290 run as an embedded agent step.
291- "Give me a chat window where I can ask about our expense-reporting rules
292 and get answers pulled from the finance handbook." -> **agent-anchored**,
293 `embeds_other: false`: chat interaction, the LLM decides what to look up
294 each turn.
295- "Build an ops agent that can check server health, restart services via our
296 runbook, and file a Jira ticket if it can't resolve things — the restart
297 and ticket-filing should also be triggerable manually elsewhere." ->
298 **agent-anchored**, `embeds_other: true`: explicitly reusable actions are
299 workflows the agent calls as tools.
300- "Have an agent keep an eye on our AWS spend throughout the day and flag me
301 before we blow through budget, without me asking it to check." ->
302 **agent-anchored**, `embeds_other: false`: proactive, heartbeat-driven,
303 no fixed check schedule.
304- "Build an agent that drafts replies to Notion comment threads and sharpens
305 its sense of our tone the more we correct it." -> **agent-anchored**,
306 `embeds_other: false`: skill accretion from feedback is first-class.
307- "Put an agent in charge of coordinating our office relocation — track
308 vendors, follow up with each team lead, and send reminders through our
309 existing reminder workflow when a task stalls." -> **agent-anchored**,
310 `embeds_other: true`: long-running coordination invoking a workflow tool.
311- "Configure an AI agent to send me a nightly digest of new GitHub stars."
312 -> **workflow-anchored**, `embeds_other: false`: fixed schedule and action
313 despite the word "agent" — a false friend. When the user instead
314 explicitly asks to *build an agent* around a fixed pipeline like this,
315 keep the workflow classification but say so rather than switching
316 silently (step 1).
317- "Spin up a lightweight workflow that talks to shoppers on our storefront
318 and handles their product questions." -> **agent-anchored**: chat-based
319 Q&A means the LLM owns turn-by-turn control despite the word "workflow" —
320 a false friend in the other direction.
321- "Build me an agent that answers customer questions from our docs." ->
322 **agent-anchored**, `embeds_other: false`: explicit agent artifact
323 request plus chat-shaped open-ended Q&A. The deliverable is an n8n Agent
324 — not a workflow with a Chat Trigger and an AI Agent node.
325- "Give me a chat box where I paste a company name and it runs our
326 enrichment steps and replies with the result." -> **workflow-anchored**,
327 `embeds_other: false`: chat is merely the manual trigger for a fixed
328 graph — the one case where a Chat Trigger workflow is the right build.
329- "Post every new Airtable record to a Discord channel, and separately set up
330 an agent that handles customer refund requests end-to-end." -> two parts,
331 joined only by topic, not data or trigger: "Airtable-to-Discord posting"
332 (**workflow-anchored**, `embeds_other: false`) and "refund-handling agent"
333 (**agent-anchored**, `embeds_other: true`).
334- "Transcribe my sales calls and chase the deals that go quiet." -> two
335 parts despite the plain single sentence: transcription is a bounded
336 per-call pipeline (**workflow-anchored**, `embeds_other: false`), while
337 chasing stalled deals is an ongoing judgment-driven automation with its
338 own lifecycle (**agent-anchored**).
339- "Set up a research helper capable of searching the web, querying our
340 internal wiki, pulling numbers from Google Analytics, and drafting a slide
341 deck that summarizes the findings." -> one part, **agent-anchored**,
342 `embeds_other: true`: many tools but one lifecycle — do not split on tool
343 count.
344- "Tell me how the platform team is progressing against their cycle goals —
345 current status is in our issue tracker, the goals are on our internal
346 wiki." -> **agent-anchored**, `embeds_other: false`: an on-demand judgment
347 report over external systems you cannot query directly. The artifact is an
348 agent with tracker and wiki tools the user can ask again anytime — not a
349 manual-trigger workflow whose only real step is an embedded agent with
350 those same tools. If the user later wants it every Friday, that becomes a
351 scheduled task on the same agent, not a conversion to a workflow.
352- "Tell me when something important happens with our shipments." ->
353 **needs-clarification**: "important" is undefined; ask whether concrete
354 rules exist or this needs judgment-based triage.
355- "Build me an agent my team can @mention on WhatsApp to triage customer
356 messages." -> **agent-anchored** (explicit agent artifact + chat
357 interaction), but call `list-agent-capabilities` first: WhatsApp is absent,
358 so do not build. Explain WhatsApp is unsupported for agents, offer the
359 supported chat channels the tool returned, with their
360 `capabilities`, and ask which to use — or whether the user wants a
361 workflow path instead. Do not improvise a workflow with a WhatsApp node
362 and do not claim the channel is configured.
363- (An existing agent is open in the editor.) "Make it also file a Linear
364 ticket when it can't resolve an issue." -> **agent-anchored**: the open
365 agent is the target; route to `build-agent` targeting that agent to add the
366 capability. Do not start a workflow build, even though a workflow could
367 also file a ticket — the user asked to change the agent.
368- (Both an agent and a workflow are open.) "Add a daily summary of new
369 signups to the data warehouse." -> **needs-clarification**: ask whether
370 the summary belongs to the agent (a scheduled task on it) or the workflow
371 (a new branch in the graph); do not assume the workflow.
372
373## Gotchas
374
375- Do not label a request agent-anchored just because it is long, multi-step,
376 or mentions AI.
377- Do not label classify-then-route as agent-anchored unless the model
378 repeatedly decides the next action after observing prior results.
379- Do not force vague prompts into an anchor; ask when an anchor-deciding
380 axis is missing.
381- Never default `embeds_other` to `false` without checking both directions:
382 an agent step hiding inside a workflow, and a workflow acting as an
383 agent's tool.
384- Never split a compound request on tool or step enumeration alone — split
385 only on separate lifecycles.
386- Unnecessary agency adds latency, cost, and compounding error risk — do not
387 reach for an agent when a bounded workflow fully satisfies a task-shaped
388 request. This is not a license to override an explicit agent request.
389- Never satisfy an **agent-anchored** classification with a workflow
390 containing a Chat Trigger + AI Agent node. Agent-anchored requests
391 produce an n8n Agent artifact via the agent build path; the AI Agent
392 *node* exists only for `embeds_other: true` steps inside a genuinely
393 workflow-anchored pipeline. A Chat Trigger workflow is correct only when
394 chat is merely the manual trigger for a fixed graph.
395- Never improvise a workflow substitute for an unsupported agent channel or
396 capability. When the user names a channel not in `list-agent-capabilities`,
397 explain the limitation and offer supported alternatives — do not add
398 workflow nodes that fake the channel or silently translate the request
399 into a workflow change.
400- Do not demote an explicitly requested agent to an embedded AI Agent step
401 inside a workflow — workflow-anchored with `embeds_other: true` is for
402 agent steps inside a pipeline the user described as a pipeline.
403- A workflow whose only real step is one embedded agent doing all the work
404 is an agent wearing a workflow costume — the mirror image of the Chat
405 Trigger gotcha above. Apply the degenerate-shell check (step 7) and
406 re-anchor instead of shipping trigger + AI Agent node.
407- Do not treat a cron schedule as a workflow signal by itself — agents run
408 scheduled tasks. Classify by the body of each run, and when a one-off
409 question can't be answered directly, do not fall back to "build a workflow
410 or do it yourself": an agent with the right tools is usually the missing
411 option.
412- Do not use an agent when progress cannot be verified: if the path cannot
413 be scripted and the result cannot be checked, the design is not ready.
414- Respect the current build context: an incremental request stays on the
415 active primitive unless it carries its own anchor signal.
416- Keep n8n framing clear: agents operate inside workflow guardrails; they do
417 not replace the workflow engine.
418
419## Output Format
420
421Return a concise classification and reason:
422
423```text
424Anchor: workflow-anchored | agent-anchored | needs-clarification | out-of-scope
425Embeds other: true | false | n/a
426Reason: <one or two sentences citing the deciding signals>
427Next step: <build workflow / build workflow with embedded agent step / build n8n Agent artifact (agent build path; recurring duties as scheduled tasks on the agent) / ask clarification / answer directly>
428```
429
430For build requests, do not expose this format unless the user asks for
431classification. Instead, proceed according to the selected next step. When
432the user asks for classification in a specific format, such as a JSON block,
433follow that format and map the vocabulary accordingly (workflow-anchored,
434agent-anchored, needs-clarification, out-of-scope, and their equivalents).
435For compound requests, output one classification block per part.