This workflow follows the Anthropic Chat → Slack recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "prompt-qa-lab-claude",
"nodes": [
{
"id": "f6a7b8c9-0001-4000-8000-000000000001",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
0,
300
],
"parameters": {
"httpMethod": "POST",
"path": "prompt-qa-lab",
"responseMode": "onReceived",
"options": {}
}
},
{
"id": "f6a7b8c9-0002-4000-8000-000000000002",
"name": "Run Prompt: Claude Sonnet",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"typeVersion": 1,
"position": [
220,
160
],
"parameters": {
"model": "claude-3-5-sonnet-20241022",
"messages": {
"values": [
{
"role": "system",
"content": "={{ $json.system_prompt }}"
},
{
"role": "user",
"content": "={{ $json.user_input }}"
}
]
}
},
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
}
},
{
"id": "f6a7b8c9-0003-4000-8000-000000000003",
"name": "Run Prompt: Claude Haiku",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"typeVersion": 1,
"position": [
220,
440
],
"parameters": {
"model": "claude-haiku-4-5-20251001",
"messages": {
"values": [
{
"role": "system",
"content": "={{ $('Webhook Trigger').item.json.system_prompt }}"
},
{
"role": "user",
"content": "={{ $('Webhook Trigger').item.json.user_input }}"
}
]
}
},
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
}
},
{
"id": "f6a7b8c9-0004-4000-8000-000000000004",
"name": "Collect Outputs",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
440,
300
],
"parameters": {
"mode": "manual",
"fields": {
"values": [
{
"name": "prompt_label",
"type": "expression",
"value": "={{ $('Webhook Trigger').item.json.prompt_label }}"
},
{
"name": "system_prompt",
"type": "expression",
"value": "={{ $('Webhook Trigger').item.json.system_prompt }}"
},
{
"name": "user_input",
"type": "expression",
"value": "={{ $('Webhook Trigger').item.json.user_input }}"
},
{
"name": "rubric",
"type": "expression",
"value": "={{ $('Webhook Trigger').item.json.rubric }}"
},
{
"name": "output_sonnet",
"type": "expression",
"value": "={{ $('Run Prompt: Claude Sonnet').item.json.message.content[0].text }}"
},
{
"name": "output_haiku",
"type": "expression",
"value": "={{ $('Run Prompt: Claude Haiku').item.json.message.content[0].text }}"
}
]
}
}
},
{
"id": "f6a7b8c9-0005-4000-8000-000000000005",
"name": "Score Outputs",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"typeVersion": 1,
"position": [
660,
300
],
"parameters": {
"model": "claude-3-5-sonnet-20241022",
"messages": {
"values": [
{
"role": "system",
"content": "You are a prompt quality evaluator. Score two model outputs against a rubric. Return ONLY valid JSON:\n{\n \"scores\": {\n \"claude_sonnet\": {\"score\": 8, \"rationale\": \"one sentence\"},\n \"claude_haiku\": {\"score\": 6, \"rationale\": \"one sentence\"}\n },\n \"winner\": \"claude_sonnet\",\n \"recommendation\": \"one sentence on which model to use and why\"\n}"
},
{
"role": "user",
"content": "Rubric: {{ $json.rubric }}\n\nOutput A (claude-sonnet):\n{{ $json.output_sonnet }}\n\nOutput B (claude-haiku):\n{{ $json.output_haiku }}"
}
]
}
},
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
}
},
{
"id": "f6a7b8c9-0006-4000-8000-000000000006",
"name": "Build Report",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
880,
300
],
"parameters": {
"mode": "manual",
"fields": {
"values": [
{
"name": "report",
"type": "expression",
"value": "={{ JSON.parse($json.message.content[0].text) }}"
},
{
"name": "prompt_label",
"type": "expression",
"value": "={{ $('Collect Outputs').item.json.prompt_label }}"
},
{
"name": "output_sonnet",
"type": "expression",
"value": "={{ $('Collect Outputs').item.json.output_sonnet }}"
},
{
"name": "output_haiku",
"type": "expression",
"value": "={{ $('Collect Outputs').item.json.output_haiku }}"
}
]
}
}
},
{
"id": "f6a7b8c9-0007-4000-8000-000000000007",
"name": "Post Results to Slack",
"type": "n8n-nodes-base.slack",
"typeVersion": 2,
"position": [
1100,
300
],
"parameters": {
"operation": "post",
"select": "channel",
"channelId": {
"value": "#prompt-lab"
},
"text": "Prompt QA Results: {{ $json.prompt_label }}\n\nClaude Sonnet: {{ $json.report.scores.claude_sonnet.score }}/10 - {{ $json.report.scores.claude_sonnet.rationale }}\nClaude Haiku: {{ $json.report.scores.claude_haiku.score }}/10 - {{ $json.report.scores.claude_haiku.rationale }}\n\nWinner: {{ $json.report.winner }}\nRecommendation: {{ $json.report.recommendation }}",
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
}
}
],
"connections": {
"Webhook Trigger": {
"main": [
[
{
"node": "Run Prompt: Claude Sonnet",
"type": "main",
"index": 0
},
{
"node": "Run Prompt: Claude Haiku",
"type": "main",
"index": 0
}
]
]
},
"Run Prompt: Claude Sonnet": {
"main": [
[
{
"node": "Collect Outputs",
"type": "main",
"index": 0
}
]
]
},
"Run Prompt: Claude Haiku": {
"main": [
[
{
"node": "Collect Outputs",
"type": "main",
"index": 0
}
]
]
},
"Collect Outputs": {
"main": [
[
{
"node": "Score Outputs",
"type": "main",
"index": 0
}
]
]
},
"Score Outputs": {
"main": [
[
{
"node": "Build Report",
"type": "main",
"index": 0
}
]
]
},
"Build Report": {
"main": [
[
{
"node": "Post Results to Slack",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
},
"staticData": null,
"tags": [],
"triggerCount": 1,
"updatedAt": "2026-05-17T00:00:00.000Z",
"versionId": "v1"
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
anthropicApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
prompt-qa-lab-claude. Uses lmChatAnthropic, slack. Webhook trigger; 7 nodes.
Source: https://github.com/sondersos/n8n-workflows/blob/main/workflows/05-prompt-qa-lab/prompt-qa-lab-claude.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
cold-outbound-engine-claude. Uses httpRequest, lmChatAnthropic, airtable, slack. Webhook trigger; 10 nodes.
meeting-intelligence-claude. Uses lmChatAnthropic, notion, slack. Webhook trigger; 6 nodes.
proposal-assistant-claude. Uses lmChatAnthropic, googleDrive, slack. Webhook trigger; 5 nodes.
strategy-generator-claude. Uses lmChatAnthropic, notion, slack. Webhook trigger; 5 nodes.
GitHub PR Opened → AI Review Summary → Slack. Uses lmChatAnthropic, slack. Webhook trigger; 4 nodes.