[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-n8n-config-evals":3,"mdc--jlh60d-key":52,"related-org-n8n-config-evals":763,"related-repo-n8n-config-evals":912},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":47,"sourceUrl":50,"mdContent":51},"config-evals","configure workflow evaluations","Builds and maintains configuration-based evaluations on a workflow with the eval-config tool. Use when the user asks to set up, add, view, change, or remove an evaluation, score, grade, or judge a workflow's output, or measure answer quality against a test dataset. This is the only eval form Instance AI handles — it does not touch on-canvas evaluation nodes.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},"n8n","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fn8n.png","n8n-io",[12,14,17,20],{"name":8,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Evals","evals",{"name":18,"slug":19,"type":13},"Testing","testing",{"name":21,"slug":22,"type":13},"Workflow Automation","workflow-automation",198156,"https:\u002F\u002Fgithub.com\u002Fn8n-io\u002Fn8n","2026-07-24T05:37:07.398695",null,59655,[29,30,31,32,33,34,35,36,37,38,39,40,41,42,8,43,44,45,46,22],"ai","apis","automation","cli","data-flow","development","integration-framework","integrations","ipaas","low-code","low-code-platform","mcp","mcp-client","mcp-server","no-code","self-hosted","typescript","workflow",{"repoUrl":24,"stars":23,"forks":27,"topics":48,"description":49},[29,30,31,32,33,34,35,36,37,38,39,40,41,42,8,43,44,45,46,22],"Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.","https:\u002F\u002Fgithub.com\u002Fn8n-io\u002Fn8n\u002Ftree\u002FHEAD\u002Fpackages\u002F@n8n\u002Finstance-ai\u002Fskills\u002Fconfig-evals","---\nname: config-evals\ndescription: >-\n  Builds and maintains configuration-based evaluations on a workflow with the\n  eval-config tool. Use when the user asks to set up, add, view, change, or\n  remove an evaluation, score, grade, or judge a workflow's output, or measure\n  answer quality against a test dataset. This is the only eval form Instance AI\n  handles — it does not touch on-canvas evaluation nodes.\nrecommended_tools:\n  - eval-config\n  - data-tables\nplatforms:\n  - daytona\n---\n\n# Config-based Evaluations\n\nUse this skill to attach a configuration-based evaluation to a workflow with the\n`eval-config` tool. A config eval pairs a workflow with a name, a start node, an\nend node, one or more judged metrics, and a Data Table dataset. Nothing is added\nto the canvas — the config lives off-canvas via the evaluation-config API.\n\nConfig evals are the only evaluation form you work with. Do not add, read,\nrewire, or reason about on-canvas evaluation nodes (EvaluationTrigger,\nEvaluation\u002FcheckIfEvaluating\u002FsetOutputs\u002FsetMetrics). If the user asks for those,\nbuild a config eval instead and briefly say that is how you set up evaluations.\n\n## What a Config Eval Needs\n\n- `name` — a human-readable evaluation name.\n- `startNodeName` — the node where a run begins; it is fed one test-input row.\n  Must be a node with an incoming connection — **never a trigger** (see step 2).\n- `endNodeName` — the node whose output is judged.\n- `dataTableId` — a Data Table holding the test dataset. Create and populate it\n  with the `data-tables` tool first, then link it here by id.\n- `metrics` — one or more judged metrics (see below).\n\n## Default Procedure\n\n1. Identify the target workflow and read it. Trace the main path from trigger to\n   the node that produces the answer.\n2. Pick the nodes:\n   - `startNodeName` is the first node **after** the trigger — the node that\n     receives the input the dataset varies. Never use the trigger itself: an\n     eval run swaps the trigger for a dataset-driven one, so the start node must\n     have an incoming connection or the run fails to compile. For a chat\u002Fagent\n     workflow this is usually the agent node (often the same as `endNodeName`).\n   - `endNodeName` is the node whose output you want scored (usually the AI agent\n     or the final response node).\n3. Resolve the dataset. Call `data-tables(action=\"list\")` to find an existing\n   dataset, or create and seed one with `data-tables` before creating the config.\n   Never invent a `dataTableId`; use one returned by `data-tables`.\n4. Choose metrics and build the `actualAnswer` \u002F `expectedAnswer` \u002F `userQuery`\n   expressions (see Metrics).\n5. Call `eval-config` (`action=\"create\"`), or `update` when changing an existing\n   config. The tool shows an approval card automatically — call it and respect\n   the result; do not ask for chat approval first.\n6. Close with facts: evaluation name, workflow, start\u002Fend nodes, dataset name and\n   id, and the metrics configured.\n\n## Metrics\n\nEach metric is LLM-judged and needs a judge model: a `credentialId`, a `model`,\nand an `outputType` (`numeric`, the default, or `boolean`). Reuse an LLM\ncredential the workflow already uses when one fits.\n\nDo **not** set `provider` unless you know the exact chat-model node type — it is\nderived automatically from the credential you pass (each credential type maps to\none provider). Just pick the credential and the model.\n\nTwo presets are available:\n\n- **`correctness`** — compares the produced answer to a ground-truth answer.\n  Requires `expectedAnswer` (an n8n expression resolving to the ground-truth\n  value, typically a dataset column, e.g. `={{ $json.expected_output }}`).\n- **`helpfulness`** — judges the produced answer against the user's query.\n  Requires `userQuery` (an n8n expression for the input the user asked, e.g.\n  `={{ $json.input }}`).\n\nEvery metric also needs `actualAnswer`: an n8n expression resolving to the\nworkflow's produced answer at the end node, e.g. `={{ $json.output }}`.\n\n`userQuery` and `expectedAnswer` name **dataset columns** (the input the user\nasked; the ground-truth answer). `actualAnswer` names a field of the workflow's\n**produced output**. Write all of them as `={{ $json.\u003Cname> }}` — the evaluation\nreads dataset columns from the dataset row and `actualAnswer` from the end node\nautomatically. Do not reference the trigger or any node by name.\n\n### Expression fields must begin with `=`\n\n`actualAnswer`, `userQuery`, and `expectedAnswer` are n8n **expressions** — they\nread a value out of each test row at runtime. The leading `=` is what tells n8n\nto evaluate the `{{ … }}` template. **Without it the string is stored as literal\ntext**: the field shows `{{ $json.output }}` verbatim and the judge scores that\nraw string instead of the resolved value.\n\n- Correct: `={{ $json.output }}`, `={{ $json.expected_output }}`\n- Wrong: `{{ $json.output }}` (no `=` → treated as fixed text)\n\nOnly add `=` when the value references workflow data via `{{ … }}`. A genuinely\nfixed constant (rare for these fields) is written as plain text without `=`.\n\nPick `correctness` when the dataset has a known right answer to compare against;\npick `helpfulness` when there is no single ground truth and quality is judged\nrelative to the request. Use `prompt` only to override the default judge prompt.\n\n## Dataset Boundary\n\n- Build the dataset with the `data-tables` tool: one column for each input the\n  evaluation varies, plus a ground-truth column when using `correctness`.\n- The config only references the dataset by `dataTableId`; the `eval-config` tool\n  does not create or populate rows. If no suitable dataset exists, create one\n  first, then create the config.\n- Do not weaken the evaluation to fit a thin dataset — seed the dataset to match\n  the metrics, or ask the user for the expected answers.\n\n## More Detail\n\nUse [references\u002Fconfig-eval-playbook.md](references\u002Fconfig-eval-playbook.md) for\ntool-call recipes, worked examples, and output shapes.\n",{"data":53,"body":59},{"name":4,"description":6,"recommended_tools":54,"platforms":57},[55,56],"eval-config","data-tables",[58],"daytona",{"type":60,"children":61},"root",[62,71,85,90,97,172,178,324,329,373,393,398,457,476,529,542,603,641,666,693,699,744,750],{"type":63,"tag":64,"props":65,"children":67},"element","h1",{"id":66},"config-based-evaluations",[68],{"type":69,"value":70},"text","Config-based Evaluations",{"type":63,"tag":72,"props":73,"children":74},"p",{},[75,77,83],{"type":69,"value":76},"Use this skill to attach a configuration-based evaluation to a workflow with the\n",{"type":63,"tag":78,"props":79,"children":81},"code",{"className":80},[],[82],{"type":69,"value":55},{"type":69,"value":84}," tool. A config eval pairs a workflow with a name, a start node, an\nend node, one or more judged metrics, and a Data Table dataset. Nothing is added\nto the canvas — the config lives off-canvas via the evaluation-config API.",{"type":63,"tag":72,"props":86,"children":87},{},[88],{"type":69,"value":89},"Config evals are the only evaluation form you work with. Do not add, read,\nrewire, or reason about on-canvas evaluation nodes (EvaluationTrigger,\nEvaluation\u002FcheckIfEvaluating\u002FsetOutputs\u002FsetMetrics). If the user asks for those,\nbuild a config eval instead and briefly say that is how you set up evaluations.",{"type":63,"tag":91,"props":92,"children":94},"h2",{"id":93},"what-a-config-eval-needs",[95],{"type":69,"value":96},"What a Config Eval Needs",{"type":63,"tag":98,"props":99,"children":100},"ul",{},[101,113,132,143,161],{"type":63,"tag":102,"props":103,"children":104},"li",{},[105,111],{"type":63,"tag":78,"props":106,"children":108},{"className":107},[],[109],{"type":69,"value":110},"name",{"type":69,"value":112}," — a human-readable evaluation name.",{"type":63,"tag":102,"props":114,"children":115},{},[116,122,124,130],{"type":63,"tag":78,"props":117,"children":119},{"className":118},[],[120],{"type":69,"value":121},"startNodeName",{"type":69,"value":123}," — the node where a run begins; it is fed one test-input row.\nMust be a node with an incoming connection — ",{"type":63,"tag":125,"props":126,"children":127},"strong",{},[128],{"type":69,"value":129},"never a trigger",{"type":69,"value":131}," (see step 2).",{"type":63,"tag":102,"props":133,"children":134},{},[135,141],{"type":63,"tag":78,"props":136,"children":138},{"className":137},[],[139],{"type":69,"value":140},"endNodeName",{"type":69,"value":142}," — the node whose output is judged.",{"type":63,"tag":102,"props":144,"children":145},{},[146,152,154,159],{"type":63,"tag":78,"props":147,"children":149},{"className":148},[],[150],{"type":69,"value":151},"dataTableId",{"type":69,"value":153}," — a Data Table holding the test dataset. Create and populate it\nwith the ",{"type":63,"tag":78,"props":155,"children":157},{"className":156},[],[158],{"type":69,"value":56},{"type":69,"value":160}," tool first, then link it here by id.",{"type":63,"tag":102,"props":162,"children":163},{},[164,170],{"type":63,"tag":78,"props":165,"children":167},{"className":166},[],[168],{"type":69,"value":169},"metrics",{"type":69,"value":171}," — one or more judged metrics (see below).",{"type":63,"tag":91,"props":173,"children":175},{"id":174},"default-procedure",[176],{"type":69,"value":177},"Default Procedure",{"type":63,"tag":179,"props":180,"children":181},"ol",{},[182,187,229,263,291,319],{"type":63,"tag":102,"props":183,"children":184},{},[185],{"type":69,"value":186},"Identify the target workflow and read it. Trace the main path from trigger to\nthe node that produces the answer.",{"type":63,"tag":102,"props":188,"children":189},{},[190,192],{"type":69,"value":191},"Pick the nodes:\n",{"type":63,"tag":98,"props":193,"children":194},{},[195,219],{"type":63,"tag":102,"props":196,"children":197},{},[198,203,205,210,212,217],{"type":63,"tag":78,"props":199,"children":201},{"className":200},[],[202],{"type":69,"value":121},{"type":69,"value":204}," is the first node ",{"type":63,"tag":125,"props":206,"children":207},{},[208],{"type":69,"value":209},"after",{"type":69,"value":211}," the trigger — the node that\nreceives the input the dataset varies. Never use the trigger itself: an\neval run swaps the trigger for a dataset-driven one, so the start node must\nhave an incoming connection or the run fails to compile. For a chat\u002Fagent\nworkflow this is usually the agent node (often the same as ",{"type":63,"tag":78,"props":213,"children":215},{"className":214},[],[216],{"type":69,"value":140},{"type":69,"value":218},").",{"type":63,"tag":102,"props":220,"children":221},{},[222,227],{"type":63,"tag":78,"props":223,"children":225},{"className":224},[],[226],{"type":69,"value":140},{"type":69,"value":228}," is the node whose output you want scored (usually the AI agent\nor the final response node).",{"type":63,"tag":102,"props":230,"children":231},{},[232,234,240,242,247,249,254,256,261],{"type":69,"value":233},"Resolve the dataset. Call ",{"type":63,"tag":78,"props":235,"children":237},{"className":236},[],[238],{"type":69,"value":239},"data-tables(action=\"list\")",{"type":69,"value":241}," to find an existing\ndataset, or create and seed one with ",{"type":63,"tag":78,"props":243,"children":245},{"className":244},[],[246],{"type":69,"value":56},{"type":69,"value":248}," before creating the config.\nNever invent a ",{"type":63,"tag":78,"props":250,"children":252},{"className":251},[],[253],{"type":69,"value":151},{"type":69,"value":255},"; use one returned by ",{"type":63,"tag":78,"props":257,"children":259},{"className":258},[],[260],{"type":69,"value":56},{"type":69,"value":262},".",{"type":63,"tag":102,"props":264,"children":265},{},[266,268,274,276,282,283,289],{"type":69,"value":267},"Choose metrics and build the ",{"type":63,"tag":78,"props":269,"children":271},{"className":270},[],[272],{"type":69,"value":273},"actualAnswer",{"type":69,"value":275}," \u002F ",{"type":63,"tag":78,"props":277,"children":279},{"className":278},[],[280],{"type":69,"value":281},"expectedAnswer",{"type":69,"value":275},{"type":63,"tag":78,"props":284,"children":286},{"className":285},[],[287],{"type":69,"value":288},"userQuery",{"type":69,"value":290},"\nexpressions (see Metrics).",{"type":63,"tag":102,"props":292,"children":293},{},[294,296,301,303,309,311,317],{"type":69,"value":295},"Call ",{"type":63,"tag":78,"props":297,"children":299},{"className":298},[],[300],{"type":69,"value":55},{"type":69,"value":302}," (",{"type":63,"tag":78,"props":304,"children":306},{"className":305},[],[307],{"type":69,"value":308},"action=\"create\"",{"type":69,"value":310},"), or ",{"type":63,"tag":78,"props":312,"children":314},{"className":313},[],[315],{"type":69,"value":316},"update",{"type":69,"value":318}," when changing an existing\nconfig. The tool shows an approval card automatically — call it and respect\nthe result; do not ask for chat approval first.",{"type":63,"tag":102,"props":320,"children":321},{},[322],{"type":69,"value":323},"Close with facts: evaluation name, workflow, start\u002Fend nodes, dataset name and\nid, and the metrics configured.",{"type":63,"tag":91,"props":325,"children":326},{"id":169},[327],{"type":69,"value":328},"Metrics",{"type":63,"tag":72,"props":330,"children":331},{},[332,334,340,342,348,350,356,357,363,365,371],{"type":69,"value":333},"Each metric is LLM-judged and needs a judge model: a ",{"type":63,"tag":78,"props":335,"children":337},{"className":336},[],[338],{"type":69,"value":339},"credentialId",{"type":69,"value":341},", a ",{"type":63,"tag":78,"props":343,"children":345},{"className":344},[],[346],{"type":69,"value":347},"model",{"type":69,"value":349},",\nand an ",{"type":63,"tag":78,"props":351,"children":353},{"className":352},[],[354],{"type":69,"value":355},"outputType",{"type":69,"value":302},{"type":63,"tag":78,"props":358,"children":360},{"className":359},[],[361],{"type":69,"value":362},"numeric",{"type":69,"value":364},", the default, or ",{"type":63,"tag":78,"props":366,"children":368},{"className":367},[],[369],{"type":69,"value":370},"boolean",{"type":69,"value":372},"). Reuse an LLM\ncredential the workflow already uses when one fits.",{"type":63,"tag":72,"props":374,"children":375},{},[376,378,383,385,391],{"type":69,"value":377},"Do ",{"type":63,"tag":125,"props":379,"children":380},{},[381],{"type":69,"value":382},"not",{"type":69,"value":384}," set ",{"type":63,"tag":78,"props":386,"children":388},{"className":387},[],[389],{"type":69,"value":390},"provider",{"type":69,"value":392}," unless you know the exact chat-model node type — it is\nderived automatically from the credential you pass (each credential type maps to\none provider). Just pick the credential and the model.",{"type":63,"tag":72,"props":394,"children":395},{},[396],{"type":69,"value":397},"Two presets are available:",{"type":63,"tag":98,"props":399,"children":400},{},[401,429],{"type":63,"tag":102,"props":402,"children":403},{},[404,413,415,420,422,428],{"type":63,"tag":125,"props":405,"children":406},{},[407],{"type":63,"tag":78,"props":408,"children":410},{"className":409},[],[411],{"type":69,"value":412},"correctness",{"type":69,"value":414}," — compares the produced answer to a ground-truth answer.\nRequires ",{"type":63,"tag":78,"props":416,"children":418},{"className":417},[],[419],{"type":69,"value":281},{"type":69,"value":421}," (an n8n expression resolving to the ground-truth\nvalue, typically a dataset column, e.g. ",{"type":63,"tag":78,"props":423,"children":425},{"className":424},[],[426],{"type":69,"value":427},"={{ $json.expected_output }}",{"type":69,"value":218},{"type":63,"tag":102,"props":430,"children":431},{},[432,441,443,448,450,456],{"type":63,"tag":125,"props":433,"children":434},{},[435],{"type":63,"tag":78,"props":436,"children":438},{"className":437},[],[439],{"type":69,"value":440},"helpfulness",{"type":69,"value":442}," — judges the produced answer against the user's query.\nRequires ",{"type":63,"tag":78,"props":444,"children":446},{"className":445},[],[447],{"type":69,"value":288},{"type":69,"value":449}," (an n8n expression for the input the user asked, e.g.\n",{"type":63,"tag":78,"props":451,"children":453},{"className":452},[],[454],{"type":69,"value":455},"={{ $json.input }}",{"type":69,"value":218},{"type":63,"tag":72,"props":458,"children":459},{},[460,462,467,469,475],{"type":69,"value":461},"Every metric also needs ",{"type":63,"tag":78,"props":463,"children":465},{"className":464},[],[466],{"type":69,"value":273},{"type":69,"value":468},": an n8n expression resolving to the\nworkflow's produced answer at the end node, e.g. ",{"type":63,"tag":78,"props":470,"children":472},{"className":471},[],[473],{"type":69,"value":474},"={{ $json.output }}",{"type":69,"value":262},{"type":63,"tag":72,"props":477,"children":478},{},[479,484,486,491,493,498,500,505,507,512,514,520,522,527],{"type":63,"tag":78,"props":480,"children":482},{"className":481},[],[483],{"type":69,"value":288},{"type":69,"value":485}," and ",{"type":63,"tag":78,"props":487,"children":489},{"className":488},[],[490],{"type":69,"value":281},{"type":69,"value":492}," name ",{"type":63,"tag":125,"props":494,"children":495},{},[496],{"type":69,"value":497},"dataset columns",{"type":69,"value":499}," (the input the user\nasked; the ground-truth answer). ",{"type":63,"tag":78,"props":501,"children":503},{"className":502},[],[504],{"type":69,"value":273},{"type":69,"value":506}," names a field of the workflow's\n",{"type":63,"tag":125,"props":508,"children":509},{},[510],{"type":69,"value":511},"produced output",{"type":69,"value":513},". Write all of them as ",{"type":63,"tag":78,"props":515,"children":517},{"className":516},[],[518],{"type":69,"value":519},"={{ $json.\u003Cname> }}",{"type":69,"value":521}," — the evaluation\nreads dataset columns from the dataset row and ",{"type":63,"tag":78,"props":523,"children":525},{"className":524},[],[526],{"type":69,"value":273},{"type":69,"value":528}," from the end node\nautomatically. Do not reference the trigger or any node by name.",{"type":63,"tag":530,"props":531,"children":533},"h3",{"id":532},"expression-fields-must-begin-with",[534,536],{"type":69,"value":535},"Expression fields must begin with ",{"type":63,"tag":78,"props":537,"children":539},{"className":538},[],[540],{"type":69,"value":541},"=",{"type":63,"tag":72,"props":543,"children":544},{},[545,550,552,557,559,564,566,571,573,578,580,586,588,593,595,601],{"type":63,"tag":78,"props":546,"children":548},{"className":547},[],[549],{"type":69,"value":273},{"type":69,"value":551},", ",{"type":63,"tag":78,"props":553,"children":555},{"className":554},[],[556],{"type":69,"value":288},{"type":69,"value":558},", and ",{"type":63,"tag":78,"props":560,"children":562},{"className":561},[],[563],{"type":69,"value":281},{"type":69,"value":565}," are n8n ",{"type":63,"tag":125,"props":567,"children":568},{},[569],{"type":69,"value":570},"expressions",{"type":69,"value":572}," — they\nread a value out of each test row at runtime. The leading ",{"type":63,"tag":78,"props":574,"children":576},{"className":575},[],[577],{"type":69,"value":541},{"type":69,"value":579}," is what tells n8n\nto evaluate the ",{"type":63,"tag":78,"props":581,"children":583},{"className":582},[],[584],{"type":69,"value":585},"{{ … }}",{"type":69,"value":587}," template. ",{"type":63,"tag":125,"props":589,"children":590},{},[591],{"type":69,"value":592},"Without it the string is stored as literal\ntext",{"type":69,"value":594},": the field shows ",{"type":63,"tag":78,"props":596,"children":598},{"className":597},[],[599],{"type":69,"value":600},"{{ $json.output }}",{"type":69,"value":602}," verbatim and the judge scores that\nraw string instead of the resolved value.",{"type":63,"tag":98,"props":604,"children":605},{},[606,622],{"type":63,"tag":102,"props":607,"children":608},{},[609,611,616,617],{"type":69,"value":610},"Correct: ",{"type":63,"tag":78,"props":612,"children":614},{"className":613},[],[615],{"type":69,"value":474},{"type":69,"value":551},{"type":63,"tag":78,"props":618,"children":620},{"className":619},[],[621],{"type":69,"value":427},{"type":63,"tag":102,"props":623,"children":624},{},[625,627,632,634,639],{"type":69,"value":626},"Wrong: ",{"type":63,"tag":78,"props":628,"children":630},{"className":629},[],[631],{"type":69,"value":600},{"type":69,"value":633}," (no ",{"type":63,"tag":78,"props":635,"children":637},{"className":636},[],[638],{"type":69,"value":541},{"type":69,"value":640}," → treated as fixed text)",{"type":63,"tag":72,"props":642,"children":643},{},[644,646,651,653,658,660,665],{"type":69,"value":645},"Only add ",{"type":63,"tag":78,"props":647,"children":649},{"className":648},[],[650],{"type":69,"value":541},{"type":69,"value":652}," when the value references workflow data via ",{"type":63,"tag":78,"props":654,"children":656},{"className":655},[],[657],{"type":69,"value":585},{"type":69,"value":659},". A genuinely\nfixed constant (rare for these fields) is written as plain text without ",{"type":63,"tag":78,"props":661,"children":663},{"className":662},[],[664],{"type":69,"value":541},{"type":69,"value":262},{"type":63,"tag":72,"props":667,"children":668},{},[669,671,676,678,683,685,691],{"type":69,"value":670},"Pick ",{"type":63,"tag":78,"props":672,"children":674},{"className":673},[],[675],{"type":69,"value":412},{"type":69,"value":677}," when the dataset has a known right answer to compare against;\npick ",{"type":63,"tag":78,"props":679,"children":681},{"className":680},[],[682],{"type":69,"value":440},{"type":69,"value":684}," when there is no single ground truth and quality is judged\nrelative to the request. Use ",{"type":63,"tag":78,"props":686,"children":688},{"className":687},[],[689],{"type":69,"value":690},"prompt",{"type":69,"value":692}," only to override the default judge prompt.",{"type":63,"tag":91,"props":694,"children":696},{"id":695},"dataset-boundary",[697],{"type":69,"value":698},"Dataset Boundary",{"type":63,"tag":98,"props":700,"children":701},{},[702,720,739],{"type":63,"tag":102,"props":703,"children":704},{},[705,707,712,714,719],{"type":69,"value":706},"Build the dataset with the ",{"type":63,"tag":78,"props":708,"children":710},{"className":709},[],[711],{"type":69,"value":56},{"type":69,"value":713}," tool: one column for each input the\nevaluation varies, plus a ground-truth column when using ",{"type":63,"tag":78,"props":715,"children":717},{"className":716},[],[718],{"type":69,"value":412},{"type":69,"value":262},{"type":63,"tag":102,"props":721,"children":722},{},[723,725,730,732,737],{"type":69,"value":724},"The config only references the dataset by ",{"type":63,"tag":78,"props":726,"children":728},{"className":727},[],[729],{"type":69,"value":151},{"type":69,"value":731},"; the ",{"type":63,"tag":78,"props":733,"children":735},{"className":734},[],[736],{"type":69,"value":55},{"type":69,"value":738}," tool\ndoes not create or populate rows. If no suitable dataset exists, create one\nfirst, then create the config.",{"type":63,"tag":102,"props":740,"children":741},{},[742],{"type":69,"value":743},"Do not weaken the evaluation to fit a thin dataset — seed the dataset to match\nthe metrics, or ask the user for the expected answers.",{"type":63,"tag":91,"props":745,"children":747},{"id":746},"more-detail",[748],{"type":69,"value":749},"More Detail",{"type":63,"tag":72,"props":751,"children":752},{},[753,755,761],{"type":69,"value":754},"Use ",{"type":63,"tag":756,"props":757,"children":759},"a",{"href":758},"references\u002Fconfig-eval-playbook.md",[760],{"type":69,"value":758},{"type":69,"value":762}," for\ntool-call recipes, worked examples, and output shapes.",{"items":764,"total":911},[765,772,788,802,814,827,839,856,865,877,887,897],{"slug":4,"name":4,"fn":5,"description":6,"org":766,"tags":767,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[768,769,770,771],{"name":15,"slug":16,"type":13},{"name":8,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":21,"slug":22,"type":13},{"slug":773,"name":773,"fn":774,"description":775,"org":776,"tags":777,"stars":23,"repoUrl":24,"updatedAt":787},"credential-setup-with-computer-use","configure n8n credentials via browser","Guides n8n credential setup through Computer Use browser tools. Use when a user needs OAuth apps, API keys, client IDs, client secrets, or other credential values from an external service console.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[778,780,783,784],{"name":779,"slug":31,"type":13},"Automation",{"name":781,"slug":782,"type":13},"Configuration","configuration",{"name":8,"slug":8,"type":13},{"name":785,"slug":786,"type":13},"OAuth","oauth","2026-06-30T07:40:45.54",{"slug":789,"name":789,"fn":790,"description":791,"org":792,"tags":793,"stars":23,"repoUrl":24,"updatedAt":801},"data-table-manager","manage n8n Data Tables","Load before calling data-tables or parse-file. Use for natural standalone requests like \"what data tables do I have?\", \"show\u002Flist my tables\", or \"what columns are in this table?\", and whenever the user asks to list, show, create, inspect, import, seed, query, update, clean up, rename columns in, or delete data tables and rows, especially from CSV\u002FXLSX\u002FJSON attachments. Also load before building or planning workflows that create or write to Data Tables (then load workflow-builder before build-workflow).",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[794,797,800],{"name":795,"slug":796,"type":13},"Data Engineering","data-engineering",{"name":798,"slug":799,"type":13},"Database","database",{"name":8,"slug":8,"type":13},"2026-07-27T06:07:14.648144",{"slug":803,"name":803,"fn":804,"description":805,"org":806,"tags":807,"stars":23,"repoUrl":24,"updatedAt":787},"debugging-executions","debug failed n8n workflow executions","Debug failed or wrong-output workflow executions using executions tools. Load when the user reports execution failures, unexpected node output, empty parameter values after a successful run, or a node showing a red or failed expression error.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[808,809,812,813],{"name":779,"slug":31,"type":13},{"name":810,"slug":811,"type":13},"Debugging","debugging",{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},{"slug":815,"name":815,"fn":816,"description":817,"org":818,"tags":819,"stars":23,"repoUrl":24,"updatedAt":826},"intent-recognition","classify automation requests by control flow","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 before deciding the intent of any automation request, including compound requests with multiple independent automations, mid-build extensions to an existing workflow or agent, one-off questions or reports that need external systems you cannot query directly, and requests that need clarification before an anchor can be chosen, before choosing workflow-builder, planning, or an agent-oriented design.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[820,823,824,825],{"name":821,"slug":822,"type":13},"Agents","agents",{"name":779,"slug":31,"type":13},{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},"2026-07-30T05:30:06.772347",{"slug":828,"name":828,"fn":829,"description":830,"org":831,"tags":832,"stars":23,"repoUrl":24,"updatedAt":838},"n8n-cli","manage n8n workflows from the CLI","Use the n8n CLI to manage workflows, credentials, executions, and more on an n8n instance. Use when the user asks to interact with n8n, automate workflows, manage credentials, or operate their instance from the command line.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[833,834,836,837],{"name":779,"slug":31,"type":13},{"name":835,"slug":32,"type":13},"CLI",{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},"2026-04-06T18:38:40.360123",{"slug":840,"name":840,"fn":841,"description":842,"org":843,"tags":844,"stars":23,"repoUrl":24,"updatedAt":855},"n8n-docs-assistant","retrieve n8n documentation and guidance","Answers n8n product, setup, credential, node, hosting, API, and usage questions from current n8n docs. Load n8n-docs via load_tool before calling it (search \"n8n docs\" if not visible). Use when the user asks how to configure, set up, troubleshoot, or understand n8n behavior, especially credential setup questions opened from the credential modal.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[845,848,849,852],{"name":846,"slug":847,"type":13},"Documentation","documentation",{"name":8,"slug":8,"type":13},{"name":850,"slug":851,"type":13},"Reference","reference",{"name":853,"slug":854,"type":13},"Search","search","2026-07-27T06:07:15.692906",{"slug":857,"name":857,"fn":858,"description":859,"org":860,"tags":861,"stars":23,"repoUrl":24,"updatedAt":787},"planned-task-runtime","manage n8n task runtimes","Handles system follow-up turns: planned-task-follow-up (synthesize, replan, build-workflow, checkpoint), background-task-completed, running-tasks context, and create-tasks silence rules. Load whenever any of these tags appear or after calling create-tasks.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[862,863,864],{"name":779,"slug":31,"type":13},{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},{"slug":866,"name":866,"fn":867,"description":868,"org":869,"tags":870,"stars":23,"repoUrl":24,"updatedAt":876},"planning","coordinate multi-artifact workflows","ONLY for coordinated multi-artifact work: multiple workflows with dependencies, shared data-table schema\u002Fmigration across tasks, or the user explicitly asked to review a plan first. Load create-tasks via load_tool before calling it (search \"create tasks\" if not visible). Do NOT use for new one-off workflows, single-workflow edits, verification-only requests, or standalone data-table ops — use workflow-builder or data-table-manager instead.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[871,872,873,875],{"name":779,"slug":31,"type":13},{"name":8,"slug":8,"type":13},{"name":874,"slug":866,"type":13},"Planning",{"name":21,"slug":22,"type":13},"2026-07-27T06:07:16.673218",{"slug":878,"name":878,"fn":879,"description":880,"org":881,"tags":882,"stars":23,"repoUrl":24,"updatedAt":886},"post-build-flow","verify and set up n8n workflows","Handles workflow verification and setup after build-workflow succeeds, or when the message contains workflow-verification-follow-up or workflow-setup-required. Load after direct builds, when verificationReadiness requires action, or on orchestrator verify\u002Fsetup follow-up turns.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[883,884,885],{"name":779,"slug":31,"type":13},{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},"2026-07-24T05:37:08.421329",{"slug":888,"name":888,"fn":889,"description":890,"org":891,"tags":892,"stars":23,"repoUrl":24,"updatedAt":896},"workflow-builder","build and edit n8n workflows","Load before calling build-workflow. Default path for all single-workflow work: new one-off workflows, existing-workflow edits, verification repairs, and workflow-local data tables. Write or edit a workspace source file, then call build-workflow with filePath. When the workflow creates or writes Data Tables, load data-table-manager first, then this skill. Do not load planning or create-tasks first. Load planning only when multiple coordinated workflows or shared cross-task data tables require a dependency-aware task graph.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[893,894,895],{"name":779,"slug":31,"type":13},{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},"2026-07-30T05:30:07.798011",{"slug":898,"name":898,"fn":899,"description":900,"org":901,"tags":902,"stars":908,"repoUrl":909,"updatedAt":910},"n8n-agents-official","build AI agents in n8n","Use when building or editing any AI feature in n8n: AI Agents, Text Classifier, Information Extractor, Sentiment Analysis, Summarization Chain, Basic LLM Chain, embeddings, vector stores, single one-shot LLM calls, or AI media generation (image \u002F audio \u002F video) via the native LangChain provider nodes. Triggers on any `@n8n\u002Fn8n-nodes-langchain.*` node, \"agent\", \"chat assistant\", \"LLM with tools\", \"tool calling\", \"fromAi\", \"system prompt\", \"memory window\", \"structured output\", \"outputParser\", \"function calling\", \"RAG\", \"vector store\", \"embeddings\", \"classify with AI\", \"extract fields with LLM\", \"sentiment analysis\", \"summarize with LLM\", \"single LLM call\", chat triggers with files, AI image \u002F video \u002F audio generation, or any multi-turn or one-shot LLM behavior.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[903,904,907],{"name":821,"slug":822,"type":13},{"name":905,"slug":906,"type":13},"LLM","llm",{"name":21,"slug":22,"type":13},319,"https:\u002F\u002Fgithub.com\u002Fn8n-io\u002Fskills","2026-07-08T05:44:47.938896",25,{"items":913,"total":962},[914,921,928,934,941,948,955],{"slug":4,"name":4,"fn":5,"description":6,"org":915,"tags":916,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[917,918,919,920],{"name":15,"slug":16,"type":13},{"name":8,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":21,"slug":22,"type":13},{"slug":773,"name":773,"fn":774,"description":775,"org":922,"tags":923,"stars":23,"repoUrl":24,"updatedAt":787},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[924,925,926,927],{"name":779,"slug":31,"type":13},{"name":781,"slug":782,"type":13},{"name":8,"slug":8,"type":13},{"name":785,"slug":786,"type":13},{"slug":789,"name":789,"fn":790,"description":791,"org":929,"tags":930,"stars":23,"repoUrl":24,"updatedAt":801},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[931,932,933],{"name":795,"slug":796,"type":13},{"name":798,"slug":799,"type":13},{"name":8,"slug":8,"type":13},{"slug":803,"name":803,"fn":804,"description":805,"org":935,"tags":936,"stars":23,"repoUrl":24,"updatedAt":787},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[937,938,939,940],{"name":779,"slug":31,"type":13},{"name":810,"slug":811,"type":13},{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},{"slug":815,"name":815,"fn":816,"description":817,"org":942,"tags":943,"stars":23,"repoUrl":24,"updatedAt":826},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[944,945,946,947],{"name":821,"slug":822,"type":13},{"name":779,"slug":31,"type":13},{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},{"slug":828,"name":828,"fn":829,"description":830,"org":949,"tags":950,"stars":23,"repoUrl":24,"updatedAt":838},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[951,952,953,954],{"name":779,"slug":31,"type":13},{"name":835,"slug":32,"type":13},{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},{"slug":840,"name":840,"fn":841,"description":842,"org":956,"tags":957,"stars":23,"repoUrl":24,"updatedAt":855},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[958,959,960,961],{"name":846,"slug":847,"type":13},{"name":8,"slug":8,"type":13},{"name":850,"slug":851,"type":13},{"name":853,"slug":854,"type":13},11]