43 skills · 279 min
Skills
Skill 24 of 43
Classifies automation requests using two decisions: anchor (which primitive owns the top-level control flow — workflow-anchored, agent-anchored, needs-clarification, or…
19 minutes · 4,123 words · 9 sections
Install
npx skills add n8n-io/n8n --skill intent-recognitionnpx skills add n8n-io/n8n/plugin marketplace add n8n-io/n8nThe first command installs just this skill, by the name in its SKILL.md; the second installs the whole repository.
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.
Two orthogonal decisions per request, or per part for compound requests:
1. Anchor — which primitive owns the top-level control flow:
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. a
scheduled pipeline whose middle step is open-ended investigation).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.
After choosing an agent-anchored design, decide whether each capability should be a direct agent tool or a workflow tool:
embeds_other: false.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.
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.embeds_other in both directions: does an agent step appear inside
this workflow, or does this agent invoke workflows as tools?Agent-anchored (any one is enough):
Workflow-anchored (all must hold):
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:
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:
embeds_other: false: fixed
schedule, source, and destination.embeds_other: false: bounded classification feeding fixed routing (would
have been hybrid under the old taxonomy).embeds_other: true: schedule
and destination are fixed; “work out why” is open-ended investigation, best
run as an embedded agent step.embeds_other: false: chat interaction, the LLM decides what to look up
each turn.embeds_other: true: explicitly reusable actions are
workflows the agent calls as tools.embeds_other: false: proactive, heartbeat-driven,
no fixed check schedule.embeds_other: false: skill accretion from feedback is first-class.embeds_other: true: long-running coordination invoking a workflow tool.embeds_other: false: fixed schedule, source,
transform, and delivery, with no Agent artifact or judgment requirement.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.embeds_other to false without checking both directions:
an agent step hiding inside a workflow, and a workflow acting as an
agent’s tool.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.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.embeds_other: true is for
agent steps inside a pipeline the user described as a pipeline.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.
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. An explicit Agent request routes to agent-builder before ask-user. Do not load for routine edits or extensions when the conversation already targets a workflow or Agent.
The verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
master, last pushed 24 September 2026.SKILL.md, not by matching a directory convention. 5 distinct layouts observed: .agents/skills/*/SKILL.md, .claude/plugins/n8n/skills/*/SKILL.md, .opencode/skills/*/SKILL.md, packages/@n8n/cli/skills/*/SKILL.md, packages/@n8n/instance-ai/skills/*/SKILL.md.h1 and no skipped levels:embeds_other: false: the analyst owns a persistent,
judgment-driven role; the morning cadence is a task on that Agent.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.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.embeds_other: false) and “refund-handling agent”
(agent-anchored, embeds_other: true).embeds_other: false), while
chasing stalled deals is an ongoing judgment-driven automation with its
own lifecycle (agent-anchored).embeds_other: true: many tools but one lifecycle — do not split on tool
count.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.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.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..claude/plugins/n8n/.claude-plugin/marketplace.json by n8n, declaring 1 plugin. It is read for editorial metadata only — never as the skill index, which is always the repository tree./n8n-io/n8n.md, and each skill at its own .md URL.