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": "SentientAGI",
"nodes": [
{
"parameters": {
"fieldToSplitOut": "tweets",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
-96,
-256
],
"id": "235521e5-1ee9-4817-8fa8-886ea1b5054b",
"name": "Split Out",
"alwaysOutputData": true
},
{
"parameters": {
"url": "=https://api.twitterapi.io/twitter/tweet/advanced_search",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "query",
"value": "={{$json.query}}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
560,
-496
],
"id": "268a74cc-25d9-4ff2-8635-584c8f5ab126",
"name": "Sentient",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "// T\u00fcm item'lar\u0131 al\nconst items = $input.all().map(i => i.json);\n\n// View say\u0131s\u0131n\u0131 olas\u0131 alanlardan \u00e7ek\nconst getViews = (j) => {\n const cands = [\n j.viewCount, j.views, j.view_count,\n j.metrics?.viewCount, j.metrics?.impression_count,\n j.impression_count, j.legacy?.views?.count, j.legacy?.view_count\n ];\n for (const v of cands) {\n const n = Number(v);\n if (Number.isFinite(n)) return n;\n }\n return 0;\n};\n\n// Top10'u bul (view'e g\u00f6re azalan)\nconst top10 = items\n .map(j => ({ text: j.text ?? j.data?.text ?? j.legacy?.full_text ?? \"\", views: getViews(j) }))\n .filter(r => r.text)\n .sort((a,b) => b.views - a.views)\n .slice(0, 10);\n\n// Sadece metinleri alt alta yaz\nconst joined = top10.map(r => r.text).join(\"\\n\");\n\n// Tek \u00e7\u0131kt\u0131: sadece text\nreturn [{ json: { text: joined } }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
128,
-256
],
"id": "1092965c-69dd-45a4-b005-c26e4d682a6e",
"name": "Tweets"
},
{
"parameters": {
"method": "POST",
"url": "https://api.fireworks.ai/inference/v1/chat/completions",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer fw_3ZN44gAXzejooyEFaJd6wPz2"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ $json.body }}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
576,
-256
],
"id": "2006edab-5bb2-4b46-92e2-71cc9fc9c036",
"name": "Dobby"
},
{
"parameters": {
"jsCode": "// Top10 metinleri ve mod se\u00e7imi\nconst tweetsText = $json.text ?? \"\";\nconst mode = $('Webhook').first().json.body.mode ?? \"motive\";\nconst username = $('Webhook').first().json.body.username ?? \"user\";\n\n\n// Geli\u015ftirilmi\u015f Dobby prompt\nconst content = `You are Dobby, an unhinged AI analyst who gives brutal crypto/Web3 reality checks.\nYour personality: Sharp, direct, uses crypto slang, occasionally drops f-bombs when content is really bad, but stays insightful.\n\nYou're analyzing @${username}'s recent tweets. Give feedback based on the selected mode while maintaining your edgy personality.\n\nMODE STYLES:\n- motive \u2192 Find genuine strengths and hype them up with real enthusiasm. \"Your [specific thing] actually slaps, here's why...\"\n- constructive \u2192 Balanced roasting. Point out what works, what's trash, specific improvements. \"You're killing it with X, but Y is mid...\"\n- harsh \u2192 Full savage mode. Tear apart their strategy with brutal honesty and specific examples. \"This shit is cringe because...\"\n\nRULES:\n- Keep it to 5-7 sentences MAX (punchy and memorable)\n- Reference actual patterns from their tweets (don't be generic)\n- End with ONE specific actionable insight\n- Use natural crypto/Web3 terminology\n- Maintain Dobby's unhinged-but-smart personality throughout\n- Be brutally honest but constructive (even in harsh mode)\n\nTWEETS TO ANALYZE:\n${tweetsText}\n\nSelected mode: ${mode}\n\nGive me your ${mode} take on @${username}:`;\n\n// API payload\nconst payload = {\n model: \"accounts/sentientfoundation/models/dobby-unhinged-llama-3-3-70b-new\",\n messages: [{ role: \"user\", content }],\n max_tokens: 256, // Reduced for shorter, punchier responses\n temperature: 0.8, // Higher for more personality\n top_p: 1,\n top_k: 40,\n presence_penalty: 0.1, // Reduce repetition\n frequency_penalty: 0.1 // Encourage variety\n};\n\n// Return for HTTP node\nreturn [{ json: { body: JSON.stringify(payload), payload } }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
352,
-256
],
"id": "1cbddb25-1972-43ae-b49e-39bc7e11a9e2",
"name": "Propmt"
},
{
"parameters": {
"httpMethod": "POST",
"path": "evaluate",
"authentication": "headerAuth",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
-112,
-496
],
"id": "6709707d-2503-40f7-9694-f14a47739438",
"name": "Webhook",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "// Gelen t\u00fcm item'lardan body alan\u0131n\u0131 \u00e7ek\nconst items = $input.all();\n\nreturn items.map(item => {\n const body = item.json.body || {};\n return { json: body };\n});"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
112,
-496
],
"id": "50ddee50-1e00-43a6-93a8-1f6e2c1fc9b1",
"name": "Code"
},
{
"parameters": {
"jsCode": "const username = $json.username;\nconst project = $json.project;\nconst handle = $json.handle;\n\n\nconst query =\n 'from:' + username +\n ' (\"' + project + '\" OR @' + handle + ')' +\n ' -filter:nativeretweets -filter:retweets -filter:replies';\n\nreturn [{ json: { query } }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
336,
-496
],
"id": "bccd2022-68e2-4132-9798-71c1e24690ea",
"name": "Query"
},
{
"parameters": {
"jsCode": "// Dobby node'un JSON \u00e7\u0131kt\u0131s\u0131\nconst dobby = $json; // bu Code node'u Dobby'den sonra geliyorsa\n\n// Kullan\u0131c\u0131 metaverisi: username/mode/project/handle\n// (Bunlar bir \u00f6nceki \"Code\" ya da \"Webhook\" node'undan geliyorsa ad\u0131n\u0131 de\u011fi\u015ftir)\nconst meta =\n $node[\"Code\"]?.json // \u00f6rnek: sabit de\u011fer d\u00f6nd\u00fcrd\u00fc\u011f\u00fcn Code node\n || $node[\"Webhook\"]?.json?.body // \u00f6rnek: webhook body'sinden\n || {};\n\nlet content = dobby?.choices?.[0]?.message?.content ?? \"\";\n\n// Uzun tire ve k\u0131sa tireyi bo\u015flukla de\u011fi\u015ftir\ncontent = content.replace(/\u2014/g, \" \").replace(/-/g, \" \");\n\nconst model = dobby?.model ?? \"\";\nconst created = dobby?.created ?? null;\n\n// Web app'in bekledi\u011fi net bir payload haz\u0131rla\nconst payload = {\n username: meta.username ?? null,\n mode: meta.mode ?? null,\n project: meta.project ?? null,\n handle: meta.handle ?? null,\n model,\n created,\n content\n};\n\nreturn [{ json: { payload } }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
800,
-256
],
"id": "02a24ff2-36db-4478-a6d4-34427ac5065a",
"name": "Payload"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "dc1b687f-4453-423e-b140-7acd7af16fd9",
"leftValue": "={{ $json.hasTweets }}",
"rightValue": "",
"operator": {
"type": "boolean",
"operation": "false",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
1008,
-496
],
"id": "66c6294d-67d5-4858-aead-5256cbb01b70",
"name": "If"
},
{
"parameters": {
"jsCode": "const tweets = $json.tweets || [];\nreturn [{\n json: {\n hasTweets: tweets.length > 0,\n tweets\n }\n}];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
784,
-496
],
"id": "43c42466-7914-4df2-b12a-e77d32dcd0a9",
"name": "Check Tweets"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "{\n \"success\": false,\n \"message\": \"No tweets found for this user\"\n}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.4,
"position": [
1216,
-384
],
"id": "f51d1768-0a13-4066-bdb7-996a5f012274",
"name": "NoTweetsRespond"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.4,
"position": [
1024,
-256
],
"id": "1a921b87-91c8-4e61-a9c4-439c48ad259a",
"name": "AIRespond"
}
],
"connections": {
"Sentient": {
"main": [
[
{
"node": "Check Tweets",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Tweets",
"type": "main",
"index": 0
}
]
]
},
"Tweets": {
"main": [
[
{
"node": "Propmt",
"type": "main",
"index": 0
}
]
]
},
"Propmt": {
"main": [
[
{
"node": "Dobby",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Code": {
"main": [
[
{
"node": "Query",
"type": "main",
"index": 0
}
]
]
},
"Query": {
"main": [
[
{
"node": "Sentient",
"type": "main",
"index": 0
}
]
]
},
"Dobby": {
"main": [
[
{
"node": "Payload",
"type": "main",
"index": 0
}
]
]
},
"Payload": {
"main": [
[
{
"node": "AIRespond",
"type": "main",
"index": 0
}
]
]
},
"If": {
"main": [
[
{
"node": "NoTweetsRespond",
"type": "main",
"index": 0
}
],
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Check Tweets": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "5852af06-fb4c-41fd-a6c4-e18e9d52fbdd",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "FkZzQFPoFOyy33ZL",
"tags": []
}
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.
httpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
SentientAGI. Uses httpRequest. Webhook trigger; 13 nodes.
Source: https://github.com/alptugyaman/dobby-x-ray/blob/a71c90d529043a96b8b8213499e4c9586581dfcf/SentientAGI.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.
This n8n template provides enterprise-level version control for your workflows using GitHub integration. Stop losing hours to broken workflows and manual exports – get proper commit history, visual di
This flow creates dummy files for every item added in your *Arrs (Radarr/Sonarr) with the tag .
This workflow acts as a central API gateway for all technical indicator agents in the Binance Spot Market Quant AI system. It listens for incoming webhook requests and dynamically routes them to the c
Sign PDF documents with legally-compliant digital signatures using X.509 certificates. Supports multiple PAdES signature levels (B, T, LT, LTA) with optional visible stamps.
📡 This workflow serves as the central Alpha Vantage API fetcher for Tesla trading indicators, delivering cleaned 20-point JSON outputs for three timeframes: , , and . It is required by the following a