Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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 introdu
.claude/skills/n8n-io-intent-recognition/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 472% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 413% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 148% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 430% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 322% | 0% |
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.
conversation — incremental requests default to extending that primitive.
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.
compliance, reusability, or allowed tools.
underspecified on an anchor-deciding axis, ask for the missing detail instead of guessing. An explicit Agent request already decides the anchor. Leave missing setup and implementation details to the Agent Builder.
Two orthogonal decisions per request, or per part for compound requests:
1. Anchor — which primitive owns the top-level control flow:
steps as bounded transformers (classify, extract, summarize, score, a single decision feeding fixed branches).
at runtime or owns an ongoing role that requires judgment. 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.
anchor-deciding axis.
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 (running or triggering a workflow the user already has, 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. Per the system prompt's "Existing Resources" section, check workflows(action="list") before reading "trigger my X" as a build: a workflow's own name can contain a build verb ("X — Create"), and a link to a service you integrate with is an input value, not a request to build an integration for it. 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:
true: an agent embedded as a workflow step (e.g. ascheduled pipeline whose middle step is open-ended investigation).
true: workflows invoked as tools of the agent; see Agenttool 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.
After choosing an agent-anchored design, decide whether each capability should be a direct agent tool or a workflow tool:
independent node tools stay on the Agent build path with embeds_other: false.
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.
continuity (see Signals) before anything else — an incremental request normally extends the current primitive.
an Agent artifact and decides the anchor. Do not ask the user to reconsider that choice during intent recognition. Do not silently substitute a workflow, even when it could implement the same behavior. You may explain a simpler workflow alternative, but switch only after the user chooses it. Route missing setup and implementation choices to Agent Builder. The immediate next routing action is to load agent-builder. Do not call ask-user between classification and that handoff. Forward the request without selecting services, tools, topics, schedules, or other implementation details. Agent Builder owns those questions. An explicit workflow request normally selects a workflow. If its required interaction is unambiguously Agent-shaped, such as ongoing open-ended chat, explain why an Agent fits and say that you are deviating from the named workflow. The false-friends rule applies to task descriptions, not to an explicit Agent request.
one-off content task with no trigger or reuse — classify out-of-scope and answer or do it directly.
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.
entails every workflow condition. Do not invent a fixed sequence, decision policy, or bounded LLM task from a generic outcome. If a missing anchor-defining detail could make the work judgment-driven, classify needs-clarification and ask only for that detail.
workflow-anchored.
embeds_other in both directions: does an agent step appear insidethis workflow, or does this agent invoke workflows as tools?
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.
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).
Agent-anchored (any one is enough):
receptionist, researcher, or similar role continuing responsibility for a changing domain. The role must require judgment such as choosing what matters, selecting tools, following up, or adapting actions. A role noun by itself is not enough.
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.
threads, daily check-ins.
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).
over time, gets better at the task.
a substitute — this signal holds unless the chat merely triggers a fixed pipeline (see Gotchas).
Workflow-anchored (all must hold):
summarize, or a single decision.
never decides the anchor by itself — agents run scheduled tasks too; what must be deterministic is the body of each run.
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 an Agent task when the open-ended duty is the whole outcome and the workflow shell would only trigger the duty and deliver its result. Use a workflow shell when its deterministic collection, gating, transformation, branching, or delivery steps are independently meaningful and the agent owns only one bounded stage. Choose an Agent when the duty belongs to a persistent role, needs memory across runs, supports user interaction, or has other duties. An explicit Agent request remains binding. A recurring duty added to an agent mid-build is always a task on that agent, never a spawned workflow.
Embeds-other signals:
open-ended ("figure out why", "investigate", "decide what to do about it") while the trigger and surrounding steps stay deterministic.
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.
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). Clarify when the missing answer changes the anchor. When the request supplies enough evidence and both designs remain valid, apply the growth tiebreaker instead of asking a theoretical preference.
False friends — not signals by themselves:
in a task description carries no weight — classify the shape, not the words. A persistent delegated role combines the role with ongoing judgment, so it is a real Agent signal. An explicit artifact request ("build me an agent that…") is binding; see Decision Step 1.
not agentic. Seven deterministic steps with zero branches is still a workflow.
Discord channel." -> workflow-anchored, embeds_other: false: fixed schedule, source, and destination.
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).
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.
and get answers pulled from the finance handbook." -> agent-anchored, embeds_other: false: chat interaction, the LLM decides what to look up each turn.
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.
before we blow through budget, without me asking it to check." -> agent-anchored, embeds_other: false: proactive, heartbeat-driven, no fixed check schedule.
its sense of our tone the more we correct it." -> agent-anchored, embeds_other: false: skill accretion from feedback is first-class.
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.
workflow-anchored, embeds_other: false: fixed schedule, source, transform, and delivery, with no Agent artifact or judgment requirement.
digest." -> agent-anchored, embeds_other: false: the user selected an Agent, and the recurring duty is a scheduled task on it. A workflow can be offered as an alternative, but it cannot silently replace the requested artifact.
which developments matter, and send me a briefing each morning." -> agent-anchored, embeds_other: false: the analyst owns a persistent, judgment-driven role; the morning cadence is a task on that Agent.
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.
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.
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.
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).
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).
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.
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.
needs-clarification: "important" is undefined; ask whether concrete rules exist or this needs judgment-based triage.
the finding." -> needs-clarification: ask whether fixed rules select the actions or whether an investigator must choose and adapt them.
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.
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.
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.
or mentions AI.
repeatedly decides the next action after observing prior results.
axis is missing.
embeds_other to false without checking both directions:an agent step hiding inside a workflow, and a workflow acting as an agent's tool.
only on separate lifecycles.
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.
delegated duty in a workflow when the shell only supplies a schedule and a destination.
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.
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.
inside a workflow — workflow-anchored with embeds_other: true is for agent steps inside a pipeline the user described as a pipeline.
is an agent wearing a workflow costume — the mirror image of the Chat Trigger gotcha above. Apply the degenerate-shell check (step 8) and re-anchor instead of shipping trigger + AI Agent node.
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.
be scripted and the result cannot be checked, the design is not ready.
active primitive unless it carries its own anchor signal.
not replace the workflow engine.
Return a concise classification and reason:
textAnchor: 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.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 10,091 | 5,583 | -45% | 1 | 1 | 0% | 1,265 | 7,240 | +472% | 0 | 0 | — |
case-02 | pass→pass | 8,344 | 6,303 | -24% | 1 | 1 | 0% | 1,189 | 7,396 | +522% | 0 | 0 | — |
case-03 | fail→pass | 8,553 | 6,177 | -28% | 1 | 1 | 0% | 1,455 | 7,469 | +413% | 0 | 0 | — |
case-04 | fail→pass | 17,075 | 6,005 | -65% | 1 | 1 | 0% | 2,979 | 7,402 | +148% | 0 | 0 | — |
case-05 | fail→pass | 10,371 | 7,688 | -26% | 1 | 1 | 0% | 1,444 | 7,651 | +430% | 0 | 0 | — |
case-06 | fail→fail | 8,180 | 6,885 | -16% | 1 | 1 | 0% | 1,072 | 7,430 | +593% | 0 | 0 | — |
case-07 | fail→pass | 11,934 | 5,629 | -53% | 1 | 1 | 0% | 1,717 | 7,238 | +322% | 0 | 0 | — |
case-08 | fail→pass | 14,025 | 8,329 | -41% | 1 | 1 | 0% | 1,927 | 7,761 | +303% | 0 | 0 | — |
case-09 | fail→pass | 8,422 | 9,851 | +17% | 1 | 1 | 0% | 1,288 | 8,074 | +527% | 0 | 0 | — |
case-10 | fail→pass | 7,469 | 5,565 | -25% | 1 | 1 | 0% | 1,144 | 7,385 | +546% | 0 | 0 | — |
case-11 | fail→pass | 11,826 | 6,598 | -44% | 1 | 1 | 0% | 1,582 | 7,269 | +359% | 0 | 0 | — |
case-12 | fail→pass | 9,879 | 4,437 | -55% | 1 | 1 | 0% | 1,547 | 7,028 | +354% | 0 | 0 | — |
case-13 | pass→pass | 22,858 | 5,218 | -77% | 1 | 1 | 0% | 4,567 | 7,221 | +58% | 0 | 0 | — |
case-14 | fail→fail | 17,232 | 11,003 | -36% | 1 | 1 | 0% | 2,613 | 7,880 | +202% | 0 | 0 | — |
case-15 | fail→pass | 8,756 | 12,662 | +45% | 1 | 1 | 0% | 1,296 | 7,978 | +516% | 0 | 0 | — |
case-16 | pass→pass | 23,727 | 7,733 | -67% | 1 | 1 | 0% | 4,528 | 7,550 | +67% | 0 | 0 | — |
case-17 | fail→pass | 5,180 | 5,966 | +15% | 1 | 1 | 0% | 725 | 7,435 | +926% | 0 | 0 | — |
case-18 | fail→pass | 13,335 | 5,685 | -57% | 1 | 1 | 0% | 1,660 | 7,254 | +337% | 0 | 0 | — |
case-19 | fail→pass | 17,314 | 7,113 | -59% | 1 | 1 | 0% | 2,765 | 7,392 | +167% | 0 | 0 | — |
case-20 | pass→pass | 10,558 | 5,767 | -45% | 1 | 1 | 0% | 1,637 | 7,322 | +347% | 0 | 0 | — |
case-21 | fail→fail | 5,606 | 10,158 | +81% | 1 | 1 | 0% | 765 | 6,985 | +813% | 0 | 0 | — |
case-22 | fail→pass | 3,950 | 19,039 | +382% | 1 | 1 | 0% | 467 | 7,737 | +1557% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +68 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.