Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Load before calling build-agent for a new or existing n8n Agent. Governs prerequisite creation, faithful handoff of the user's request, agent targeting across turns, builder questions, testing, and publishing. Use directly for routine follow-ups when the conversation already targets an Agent; rerun intent-recognition only when the requested artifact is no longer clear.
.claude/skills/n8n-io-agent-builder/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 39% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 36% | 0% |
Use this skill after intent-recognition chooses an agent-anchored design, or when the conversation already targets an Agent and the user is continuing that build. Do not rerun intent recognition for routine Agent edits or extensions. Use build-agent only for Agent artifacts.
For a new Agent request, make the first build-agent call with a faithful copy of the request as soon as any required orchestrator-owned prerequisites are ready. Before that call, use ask-user only to choose a supported channel or to define a workflow or data-table prerequisite that the orchestrator must create. Only ask about the channel after list-agent-capabilities shows that the requested channel is unsupported. Do not collect model, service, tool, topic, schedule, credential, or other Agent implementation choices first. The embedded Agent Builder asks those questions through the build-agent call.
When the conversation opens from an existing Agent in the editor and the user asks to change its configuration or capabilities, that is an agent-anchored request — target that Agent and call build-agent. Do not reroute to workflow-builder, and do not spawn a workflow to satisfy a capability change on the Agent.
list-agent-capabilities returns every chat channel n8n Agents support, each with capabilities, useIntegrationWhen, and useNodeToolWhen. It is the authoritative source the orchestrator can read before building; a channel absent from its result is unsupported for agents.
When the user asks for a channel that is not supported (e.g. WhatsApp, Microsoft Teams), do not forward it to the builder as a channel to configure and do not fake it by adding the platform as an agent tool. Explain the channel is unsupported for agents, offer the supported alternatives, and ask which to use — or whether the user explicitly wants that unsupported platform as the conversation surface, in which case offer the agent-entrypoint workflow bridge described in Prerequisites (it connects the platform trigger to Message an Agent; it is not a channel config). Only forward a channel to build-agent once it is a supported type or the user has chosen an alternative.
Treat message as a faithful handoff of the user's request, not an Agent build specification authored by you. Forward the user's wording as close to verbatim as possible. Include only:
stated.
current request.
The host appends an <aia-handoff> block with the current user text and pending ask-user answers that have not yet reached Agent Builder. Treat those as the user's decisions for this build call, not as implementation you invented. Still copy user-stated model, channel, and credential choices into message; do not omit them because the host also injected them.
Never infer, invent, expand, recommend, or prescribe implementation details the user did not request, and never present your assumptions as user requirements. In particular, do not choose or tell the builder which model, instructions, tools, tool types, integrations, channels, MCP servers, workflows, skills, tasks, memory, credentials, triggers, schedules, approvals, or test strategy to use.
Do not translate an outcome or named service into a specific implementation. For example, forward "a Slack agent that says hello to me" without turning it into a request for a Slack node tool. Preserve unspecified and ambiguous implementation details so the builder can resolve them with its own guidance and interactive tools.
Before the first build-agent call, create prerequisites the builder cannot create when they must be attached to or used by the Agent:
multi-node procedure, or when the user explicitly needs that workflow to be reusable, manually callable, or usable outside the Agent. Follow workflow-builder, then pass the built workflow in workflowContext.
data-table-managerand create the required tables via data-tables. The builder cannot create tables.
List prerequisite names and schemas in message. Let the builder gather the remaining Agent-specific requirements, including model, credentials, integrations, and direct tools.
build-agent can return structured requiredArtifacts when the embedded builder discovers something Instance AI must create:
relationship: "agent-tool", build it, pass it inworkflowContext, and call build-agent again so the builder can attach it.
relationship: "agent-entrypoint", build it after theAgent exists, using the returned agentId. This workflow invokes the Agent; never pass it in workflowContext, never attach it to the Agent as a tool, and do not call build-agent again solely to attach it.
build-agent again with its name andschema in message.
For an unsupported chat channel, an agent-entrypoint workflow should connect the platform trigger to Message an Agent, map the incoming message, use a stable platform conversation/sender identifier as the custom session key, and send the Agent's text response through the platform. Native Agent channels do not need this wrapper.
If an older builder only lists missing workflows or tables in builderReply, handle them the same way based on whether the workflow calls the Agent or is called by the Agent. Never ask the user to create prerequisites manually.
Address Agents in this conversation with agentRef, a short stable key similar to a workflow filePath.
agentRef and name.agentRef on later calls. Calls with neither agentRef noragentId continue editing the current Agent.
createNew: true with a differentagentRef and name.
agentId once,optionally with an agentRef, then prefer the returned agentRef.
Naming or renaming the current Agent never silently creates another one.
When the user asks for an Agent that uses other newly built Agents as saved sub-agents:
agentRef before attaching it to theparent.
build-agent for the parent and identify the child by its display name.The parent builder must discover the saved child and map its name to the valid stored ID. Do not pass a raw agentId as a user requirement.
publication intent only when the user explicitly asks to publish or activate an Agent.
When the user asks to test, run, publish, activate, make usable, unpublish, or otherwise change the Agent, forward that intent in message. The builder owns its internal testing tools; do not conclude testing is unavailable because those tools do not appear in your toolset.
When the builder needs a user choice, credential, chat channel, or approval, it surfaces an interactive card in this chat. Do not relay the question yourself; the build-agent call resumes with the user's answer.
When you send the user to the agent editor, use the labels they see:
Never say Runs tab, Executions tab, Activity History, or Runs Activity History for an agent.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 20,390 | 5,082 | -75% | 1 | 1 | 0% | 3,801 | 2,034 | -46% | 0 | 0 | — |
case-02 | fail→fail | 20,659 | 10,374 | -50% | 1 | 1 | 0% | 3,969 | 2,594 | -35% | 0 | 0 | — |
case-03 | fail→fail | 16,625 | 20,170 | +21% | 1 | 1 | 0% | 2,851 | 2,743 | -4% | 0 | 0 | — |
case-04 | pass→fail | 19,666 | 11,014 | -44% | 1 | 1 | 0% | 3,597 | 3,489 | -3% | 0 | 0 | — |
case-05 | fail→fail | 9,029 | 28,609 | +217% | 1 | 1 | 0% | 1,749 | 4,299 | +146% | 0 | 0 | — |
case-06 | pass→pass | 9,741 | 4,408 | -55% | 1 | 1 | 0% | 1,408 | 2,383 | +69% | 0 | 0 | — |
case-07 | fail→fail | 21,028 | 21,141 | +1% | 1 | 1 | 0% | 3,859 | 2,076 | -46% | 0 | 0 | — |
case-08 | fail→fail | 22,392 | 20,440 | -9% | 1 | 1 | 0% | 4,106 | 2,812 | -32% | 0 | 0 | — |
case-09 | pass→fail | 15,427 | 5,573 | -64% | 1 | 1 | 0% | 2,873 | 1,977 | -31% | 0 | 0 | — |
case-10 | fail→fail | 13,764 | 3,895 | -72% | 1 | 1 | 0% | 1,979 | 2,374 | +20% | 0 | 0 | — |
case-11 | fail→pass | 11,330 | 5,717 | -50% | 1 | 1 | 0% | 1,930 | 2,690 | +39% | 0 | 0 | — |
case-12 | fail→fail | 12,721 | 11,794 | -7% | 1 | 1 | 0% | 2,006 | 2,404 | +20% | 0 | 0 | — |
case-13 | fail→fail | 7,259 | 11,430 | +57% | 1 | 1 | 0% | 1,211 | 2,299 | +90% | 0 | 0 | — |
case-14 | fail→fail | 13,202 | 8,173 | -38% | 1 | 1 | 0% | 2,013 | 2,191 | +9% | 0 | 0 | — |
case-15 | fail→fail | 20,664 | 15,559 | -25% | 1 | 1 | 0% | 3,996 | 2,798 | -30% | 0 | 0 | — |
case-16 | fail→fail | 11,705 | 9,627 | -18% | 1 | 1 | 0% | 1,774 | 2,873 | +62% | 0 | 0 | — |
case-17 | pass→pass | 10,829 | 5,581 | -48% | 1 | 1 | 0% | 1,715 | 2,613 | +52% | 0 | 0 | — |
case-18 | pass→fail | 13,509 | 13,843 | +2% | 1 | 1 | 0% | 2,299 | 2,930 | +27% | 0 | 0 | — |
case-19 | fail→pass | 11,917 | 5,804 | -51% | 1 | 1 | 0% | 1,950 | 2,316 | +19% | 0 | 0 | — |
case-20 | fail→pass | 10,514 | 4,501 | -57% | 1 | 1 | 0% | 1,658 | 2,276 | +37% | 0 | 0 | — |
case-21 | fail→pass | 11,370 | 3,834 | -66% | 1 | 1 | 0% | 1,720 | 2,307 | +34% | 0 | 0 | — |
case-22 | fail→pass | 11,782 | 9,914 | -16% | 1 | 1 | 0% | 1,824 | 2,475 | +36% | 0 | 0 | — |
case-23 | pass→pass | 8,870 | 9,678 | +9% | 1 | 1 | 0% | 1,487 | 2,457 | +65% | 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. 23 cases were attempted, and 12 counted toward the lift figure. The other 11 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 +9 percentage points is the difference between those two pass rates over the 12 comparable cases. 5 cases got worse with the skill loaded, and they are 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.