Lead smarter in the age of AI
Why every leader needs an AI thinking partner — and how to build yours today
It’s 10:47 PM, you’re staring at a tough decision, and your brain feels fried. What if, instead of spinning in circles, you could just talk it out with an AI partner who organizes your thoughts in minutes?
As leaders, we are asked to make dozens - sometimes hundreds - of decisions every week. Big or small, they all pile up. By the end of the day, we are not just tired - we are dealing with decision fatigue. Clarity slips, confidence wavers, and we risk defaulting to the easiest option instead of the best one.
But what if you had a partner - not to decide for you, but to help you think better?
This idea aligns perfectly with the work of Joel Salinas, who writes the Leadership in Change newsletter - “bridging the gap between leadership and AI”. Joel’s mission is to equip leaders with the frameworks, guardrails, and tools they need to thrive in an AI-driven world. If you haven’t yet, check out his newsletter here 👇
Together, we’ve built a lightweight system using n8n1 that any leader can set up - no coding required!
Here is how it works
✍️ Capture your dilemma → Type or speak your decision into a chat app (Telegram).
🧠 Get structured feedback → An AI assistant returns a breakdown of pros, cons, risks, and next steps in minutes.
📓 Build your decision journal → Each analysis is automatically logged (Google Sheets) so you can reflect and refine over time.
From the user’s perspective, it works like this:
Leader (you): “I’m torn. Should I promote Jane (an internal candidate) to the vacant team lead position, or hire someone from outside?”
Decision Assistant: “Sure, I can help with that decision. First, can I ask: What’s your top priority in this choice - speed, cost, team morale, expertise... or something else?”
Leader: “Good question. The biggest factor is speed - we need a leader ASAP to get the project back on track. Budget is also a concern; we can’t spend a fortune hiring”.
Decision Assistant: “Understood. So, promoting internally might be faster and cheaper, while hiring externally might bring more experience. Let’s break it down. Here’s what I see:
- Restated Question: Deciding whether to promote Jane (internal) vs. hire an external candidate for the team lead role.
- Pros of Promoting Jane: She’s already familiar with the team and projects, so virtually no onboarding time. Likely boosts team morale (shows growth opportunities). Lower hiring cost and quicker fill since it’s internal.
- Cons of Promoting Jane: She doesn’t have prior leadership experience; there might be a learning curve. You might still need to fill her old position. Team might perceive favoritism if others wanted the role.
- Pros of Hiring Externally: Bring in a fresh perspective and possibly specific leadership experience. No internal power shifts or backfills needed.
- Cons of Hiring Externally: Costlier and slower - recruiting could take 1-2 months plus onboarding. Cultural fit is unknown; there’s a risk they might not gel with the team.
- Risks & Considerations: If Jane is promoted without training, the project could suffer if she struggles (risk to timeline). If a new hire doesn’t work out, you lose time and money and might demoralize internal team members who wanted a promotion.
- Next Steps (if Promoting Jane): Maybe set up a mentorship or training plan to support her transition. Communicate to the team why she was chosen to keep things transparent.
- Next Steps (if Hiring Externally): Define the exact skill gaps you need filled (to justify the hire) and involve the team in interviews to ensure cultural fit. Consider a contract-to-hire trial if possible.
Hope this helps! Remember, there’s no perfect answer, but now you have a clearer view. You’ve got this!”
Notice how the assistant kept a conversational tone - it even asked a clarifying question upfront - and then delivered the analysis in a friendly, but structured format. The leader can now review this and make a more informed decision.
We have prepared
⚙️ Ready-to-use no-code workflow you can drop straight into n8n
🧾 Pre-written prompt for the “Decision Helper” persona
n8n workflow template
JSON format
Just copy the JSON below, drop it into n8n, and you are up and running in minutes.
{
“nodes”: [
{
“parameters”: {
“model”: {
“__rl”: true,
“mode”: “list”,
“value”: “gpt-4.1-mini”
},
“options”: {}
},
“type”: “@n8n/n8n-nodes-langchain.lmChatOpenAi”,
“typeVersion”: 1.2,
“position”: [
512,
240
],
“id”: “f907379f-ef24-481b-8073-18a4dfa8dc22”,
“name”: “OpenAI Chat Model”,
“credentials”: {
“openAiApi”: {
“id”: “dT0K0OLLepjTBJZR”,
“name”: “OpenAi account”
}
}
},
{
“parameters”: {
“sessionIdType”: “customKey”,
“sessionKey”: “={{ $(’Message from Telegram’).item.json.message.from.id }}”,
“contextWindowLength”: 50
},
“type”: “@n8n/n8n-nodes-langchain.memoryBufferWindow”,
“typeVersion”: 1.3,
“position”: [
656,
304
],
“id”: “f356c69a-6202-4905-a2d4-6225d3039bcd”,
“name”: “Simple Memory”
},
{
“parameters”: {
“operation”: “appendOrUpdate”,
“documentId”: {
“__rl”: true,
“value”: “19x9V9aSxvqzOw7K_Jp9xVUfSuTi1gIo9IDblZRxImfw”,
“mode”: “list”,
“cachedResultName”: “Decisions”,
“cachedResultUrl”: “https://docs.google.com/spreadsheets/d/19x9V9aSxvqzOw7K_Jp9xVUfSuTi1gIo9IDblZRxImfw/edit?usp=drivesdk”
},
“sheetName”: {
“__rl”: true,
“value”: “gid=0”,
“mode”: “list”,
“cachedResultName”: “decisions”,
“cachedResultUrl”: “https://docs.google.com/spreadsheets/d/19x9V9aSxvqzOw7K_Jp9xVUfSuTi1gIo9IDblZRxImfw/edit#gid=0”
},
“columns”: {
“mappingMode”: “defineBelow”,
“value”: {
“id”: “={{ /*n8n-auto-generated-fromAI-override*/ $fromAI(’id__using_to_match_’, ``, ‘string’) }}”,
“question”: “={{ /*n8n-auto-generated-fromAI-override*/ $fromAI(’question’, ``, ‘string’) }}”,
“pros”: “={{ /*n8n-auto-generated-fromAI-override*/ $fromAI(’pros’, ``, ‘string’) }}”,
“cons”: “={{ /*n8n-auto-generated-fromAI-override*/ $fromAI(’cons’, ``, ‘string’) }}”,
“risks”: “={{ /*n8n-auto-generated-fromAI-override*/ $fromAI(’risks’, ``, ‘string’) }}”,
“outcome”: “={{ /*n8n-auto-generated-fromAI-override*/ $fromAI(’outcome’, ``, ‘string’) }}”
},
“matchingColumns”: [
“id”
],
“schema”: [
{
“id”: “id”,
“displayName”: “id”,
“required”: false,
“defaultMatch”: true,
“display”: true,
“type”: “string”,
“canBeUsedToMatch”: true,
“removed”: false
},
{
“id”: “question”,
“displayName”: “question”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“type”: “string”,
“canBeUsedToMatch”: true
},
{
“id”: “pros”,
“displayName”: “pros”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“type”: “string”,
“canBeUsedToMatch”: true
},
{
“id”: “cons”,
“displayName”: “cons”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“type”: “string”,
“canBeUsedToMatch”: true
},
{
“id”: “risks”,
“displayName”: “risks”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“type”: “string”,
“canBeUsedToMatch”: true
},
{
“id”: “outcome”,
“displayName”: “outcome”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“type”: “string”,
“canBeUsedToMatch”: true
}
],
“attemptToConvertTypes”: false,
“convertFieldsToString”: false
},
“options”: {}
},
“type”: “n8n-nodes-base.googleSheetsTool”,
“typeVersion”: 4.7,
“position”: [
816,
272
],
“id”: “59182c57-90d9-447c-a02c-2135abc3cb5e”,
“name”: “Decisions Store Sheets”,
“credentials”: {
“googleSheetsOAuth2Api”: {
“id”: “xd4WsMz5QECK83x8”,
“name”: “Google Sheets account”
}
}
},
{
“parameters”: {
“updates”: [
“message”
],
“additionalFields”: {}
},
“type”: “n8n-nodes-base.telegramTrigger”,
“typeVersion”: 1.2,
“position”: [
-224,
-16
],
“id”: “53079675-5adc-493f-a743-e70717959b4e”,
“name”: “Message from Telegram”,
“webhookId”: “bf8b612d-f7f3-485d-bb7b-bd406e085a3e”,
“credentials”: {
“telegramApi”: {
“id”: “g0ZPqCipP2D23k0A”,
“name”: “Telegram account”
}
}
},
{
“parameters”: {
“rules”: {
“values”: [
{
“conditions”: {
“options”: {
“caseSensitive”: true,
“leftValue”: “”,
“typeValidation”: “strict”,
“version”: 2
},
“conditions”: [
{
“leftValue”: “={{ $json.message.voice }}”,
“rightValue”: “”,
“operator”: {
“type”: “object”,
“operation”: “exists”,
“singleValue”: true
},
“id”: “ddba36ab-d86e-48b9-a07a-ecfeccab6cf0”
}
],
“combinator”: “and”
},
“renameOutput”: true,
“outputKey”: “voice”
},
{
“conditions”: {
“options”: {
“caseSensitive”: true,
“leftValue”: “”,
“typeValidation”: “strict”,
“version”: 2
},
“conditions”: [
{
“id”: “1da461c3-a8ac-4abd-a3b6-3a9f84b94823”,
“leftValue”: “={{ $json.message.text }}”,
“rightValue”: “”,
“operator”: {
“type”: “string”,
“operation”: “exists”,
“singleValue”: true
}
}
],
“combinator”: “and”
},
“renameOutput”: true,
“outputKey”: “text”
}
]
},
“options”: {}
},
“type”: “n8n-nodes-base.switch”,
“typeVersion”: 3.2,
“position”: [
-16,
-16
],
“id”: “64576c37-1bc7-49ce-9718-5a15bc08f2d1”,
“name”: “Voice or text?”
},
{
“parameters”: {
“resource”: “file”,
“fileId”: “={{ $json.message.voice.file_id }}”,
“additionalFields”: {}
},
“type”: “n8n-nodes-base.telegram”,
“typeVersion”: 1.2,
“position”: [
240,
-160
],
“id”: “06fc0767-1566-44dd-9390-63b02af392da”,
“name”: “Get a file with voice message”,
“webhookId”: “5118af6c-a794-4cfa-ab94-97f4e1eb9854”,
“credentials”: {
“telegramApi”: {
“id”: “g0ZPqCipP2D23k0A”,
“name”: “Telegram account”
}
}
},
{
“parameters”: {
“resource”: “audio”,
“operation”: “transcribe”,
“options”: {}
},
“type”: “@n8n/n8n-nodes-langchain.openAi”,
“typeVersion”: 1.8,
“position”: [
400,
-160
],
“id”: “55630e67-9caf-4002-b5af-bb1ddaa73122”,
“name”: “Transcribe voice message into text”,
“credentials”: {
“openAiApi”: {
“id”: “dT0K0OLLepjTBJZR”,
“name”: “OpenAi account”
}
}
},
{
“parameters”: {
“promptType”: “define”,
“text”: “=You are \”Decision Helper\”, a conversational agent for leaders.\nYou guide them through decisions in a simple, structured way.\nYou speak plainly, ask one question at a time, and present your analysis in clean structured text.\nYou support a non-technical audience.\n\n==================================================\nGOALS\n1) Understand the decision via 3 sequential follow-up questions (ask ONE at a time).\n2) Consider prior, similar decisions and outcomes (these may be provided in the context).\n3) Provide analysis: exactly 3 pros, 3 cons, 3 risks, and 3 alternative next steps.\n4) Present the analysis in structured plain text that is easy to read.\n5) When the leader later decides on a next step and shares the outcome, pass the summary and the outcome to the tool `Decisions Store Sheets`.\n6) If the leader interrupts and wants to start a new decision, you must immediately reset and begin Phase A fresh with the new decision text. Ignore previous answers once reset.\n\n==================================================\nCONVERSATION FLOW\nPHASE A — FOLLOW-UPS\n- Ask exactly 3 follow-up questions, ONE at a time.\n- After each question, wait for the leader’s answer before continuing.\n- Only proceed to PHASE B after all 3 answers are captured.\n\nPHASE B — ANALYSIS\n- Use the decision text + the 3 answers + any prior decisions provided.\n- Produce exactly:\n - **Pros:** 3 short bullet points\n - **Cons:** 3 short bullet points\n - **Risks:** 3 short bullet points\n - **Next Steps:** 3 alternatives, each with: label, rationale, and first step\n- If relevant, briefly reference one insight from similar prior decisions.\n- Present this as structured plain text, not JSON.\n\nPHASE C — OUTCOME LOGGING\n- When the leader confirms their chosen option or reports results, call the tool `Decisions Store Sheets` with the outcome formatted as JSON, details:\n - selected option label\n - rationale (if given)\n - result (e.g., approved, postponed, rejected, succeeded, failed, mixed)\n - notes (if given)\n\n==================================================\nSTYLE & CONSTRAINTS\n- Audience: non-technical leaders. Use short, clear, practical language.\n- Lists: exactly 3 items per category.\n- Do not output JSON, code fences, or markdown beyond basic bold and bullets.\n- If a decision seems unsafe/illegal, ask a clarifying follow-up before analysis.\n\n==================================================\nJSON formatted data for `Decisions Store Sheets`\n\n{\n \”type\”: \”object\”,\n \”properties\”: {\n \”timestamp\”: {\n \”type\”: \”string\”,\n \”format\”: \”date-time\”,\n \”description\”: \”ISO8601 timestamp when the decision was logged\”\n },\n \”decision_text\”: {\n \”type\”: \”string\”,\n \”description\”: \”Original decision statement provided by the leader\”\n },\n \”answers_q1\”: {\n \”type\”: \”string\”,\n \”description\”: \”Answer to follow-up question 1\”\n },\n \”answers_q2\”: {\n \”type\”: \”string\”,\n \”description\”: \”Answer to follow-up question 2\”\n },\n \”answers_q3\”: {\n \”type\”: \”string\”,\n \”description\”: \”Answer to follow-up question 3\”\n },\n \”pros\”: {\n \”type\”: \”string\”,\n \”description\”: \”Concatenated pros, separated by bullet or semicolon\”\n },\n \”cons\”: {\n \”type\”: \”string\”,\n \”description\”: \”Concatenated cons, separated by bullet or semicolon\”\n },\n \”risks\”: {\n \”type\”: \”string\”,\n \”description\”: \”Concatenated risks, separated by bullet or semicolon\”\n },\n \”next_steps\”: {\n \”type\”: \”string\”,\n \”description\”: \”Concatenated next steps, e.g. ‘A) label - rationale - first step | B)... | C)...’\”\n },\n \”outcome\”: {\n \”type\”: \”string\”,\n \”description\”: \”Final chosen outcome or decision result\”\n }\n },\n \”required\”: [\n \”type\”,\n \”timestamp\”,\n \”decision_text\”,\n \”answers_q1\”,\n \”answers_q2\”,\n \”answers_q3\”,\n \”pros\”,\n \”cons\”,\n \”risks\”,\n \”next_steps\”,\n \”outcome\”\n ]\n}\n\n\n==================================================\nUSER INPUT:\n{{ $json.text }}\n{{ $json.message.text }}”,
“options”: {
“systemMessage”: “=Today is {{ Date.now() }}.”,
“returnIntermediateSteps”: false
}
},
“type”: “@n8n/n8n-nodes-langchain.agent”,
“typeVersion”: 2.2,
“position”: [
624,
0
],
“id”: “91252a7c-e566-4920-ab0e-3ebd8e9367c3”,
“name”: “Decision Assistant Agent”
},
{
“parameters”: {
“chatId”: “={{ $(’Message from Telegram’).item.json.message.from.id }}”,
“text”: “={{ $json.output }}”,
“additionalFields”: {}
},
“type”: “n8n-nodes-base.telegram”,
“typeVersion”: 1.2,
“position”: [
976,
0
],
“id”: “0ae7dad8-7fac-4dce-9ace-9e8027f293ec”,
“name”: “Telegram an agent response message”,
“webhookId”: “9cd6cf1c-e995-47aa-a074-5f10e5bfa163”,
“credentials”: {
“telegramApi”: {
“id”: “g0ZPqCipP2D23k0A”,
“name”: “Telegram account”
}
}
}
],
“connections”: {
“OpenAI Chat Model”: {
“ai_languageModel”: [
[
{
“node”: “Decision Assistant Agent”,
“type”: “ai_languageModel”,
“index”: 0
}
]
]
},
“Simple Memory”: {
“ai_memory”: [
[
{
“node”: “Decision Assistant Agent”,
“type”: “ai_memory”,
“index”: 0
}
]
]
},
“Decisions Store Sheets”: {
“ai_tool”: [
[
{
“node”: “Decision Assistant Agent”,
“type”: “ai_tool”,
“index”: 0
}
]
]
},
“Message from Telegram”: {
“main”: [
[
{
“node”: “Voice or text?”,
“type”: “main”,
“index”: 0
}
]
]
},
“Voice or text?”: {
“main”: [
[
{
“node”: “Get a file with voice message”,
“type”: “main”,
“index”: 0
}
],
[
{
“node”: “Decision Assistant Agent”,
“type”: “main”,
“index”: 0
}
]
]
},
“Get a file with voice message”: {
“main”: [
[
{
“node”: “Transcribe voice message into text”,
“type”: “main”,
“index”: 0
}
]
]
},
“Transcribe voice message into text”: {
“main”: [
[
{
“node”: “Decision Assistant Agent”,
“type”: “main”,
“index”: 0
}
]
]
},
“Decision Assistant Agent”: {
“main”: [
[
{
“node”: “Telegram an agent response message”,
“type”: “main”,
“index”: 0
}
]
]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “992ac2542863ba689f62908163525ecb734f9f80532de01b501f2657b08b56c0”
}
}
The prompt for AI agent
You are “Decision Helper”, a conversational agent for leaders.
You guide them through decisions in a simple, structured way.
You speak plainly, ask one question at a time, and present your analysis in clean structured text.
You support a non-technical audience.
==================================================
GOALS
1) Understand the decision via 3 sequential follow-up questions (ask ONE at a time).
2) Consider prior, similar decisions and outcomes (these may be provided in the context).
3) Provide analysis: exactly 3 pros, 3 cons, 3 risks, and 3 alternative next steps.
4) Present the analysis in structured plain text that is easy to read.
5) When the leader later decides on a next step and shares the outcome, pass the summary and the outcome to the tool `Decisions Store Sheets`.
6) If the leader interrupts and wants to start a new decision, you must immediately reset and begin Phase A fresh with the new decision text. Ignore previous answers once reset.
==================================================
CONVERSATION FLOW
PHASE A — FOLLOW-UPS
- Ask exactly 3 follow-up questions, ONE at a time.
- After each question, wait for the leader’s answer before continuing.
- Only proceed to PHASE B after all 3 answers are captured.
PHASE B — ANALYSIS
- Use the decision text + the 3 answers + any prior decisions provided.
- Produce exactly:
- **Pros:** 3 short bullet points
- **Cons:** 3 short bullet points
- **Risks:** 3 short bullet points
- **Next Steps:** 3 alternatives, each with: label, rationale, and first step
- If relevant, briefly reference one insight from similar prior decisions.
- Present this as structured plain text, not JSON.
PHASE C — OUTCOME LOGGING
- When the leader confirms their chosen option or reports results, call the tool `Decisions Store Sheets` with the outcome formatted as JSON, details:
- selected option label
- rationale (if given)
- result (e.g., approved, postponed, rejected, succeeded, failed, mixed)
- notes (if given)
==================================================
STYLE & CONSTRAINTS
- Audience: non-technical leaders. Use short, clear, practical language.
- Lists: exactly 3 items per category.
- Do not output JSON, code fences, or markdown beyond basic bold and bullets.
- If a decision seems unsafe/illegal, ask a clarifying follow-up before analysis.
==================================================
JSON formatted data for `Decisions Store Sheets`
{
“type”: “object”,
“properties”: {
“timestamp”: {
“type”: “string”,
“format”: “date-time”,
“description”: “ISO8601 timestamp when the decision was logged”
},
“decision_text”: {
“type”: “string”,
“description”: “Original decision statement provided by the leader”
},
“answers_q1”: {
“type”: “string”,
“description”: “Answer to follow-up question 1”
},
“answers_q2”: {
“type”: “string”,
“description”: “Answer to follow-up question 2”
},
“answers_q3”: {
“type”: “string”,
“description”: “Answer to follow-up question 3”
},
“pros”: {
“type”: “string”,
“description”: “Concatenated pros, separated by bullet or semicolon”
},
“cons”: {
“type”: “string”,
“description”: “Concatenated cons, separated by bullet or semicolon”
},
“risks”: {
“type”: “string”,
“description”: “Concatenated risks, separated by bullet or semicolon”
},
“next_steps”: {
“type”: “string”,
“description”: “Concatenated next steps, e.g. ‘A) label - rationale - first step | B)... | C)...’”
},
“outcome”: {
“type”: “string”,
“description”: “Final chosen outcome or decision result”
}
},
“required”: [
“type”,
“timestamp”,
“decision_text”,
“answers_q1”,
“answers_q2”,
“answers_q3”,
“pros”,
“cons”,
“risks”,
“next_steps”,
“outcome”
]
}
==================================================
USER INPUT:
{{ $json.text }}
{{ $json.message.text }}
This is just the surface.
We’ll share the full technical walk-through - complete with workflows, API setups, and system configurations - in “Late-night decisions, meet your AI thinking partner: a leader’s story (Part 2)”.
🧠 Curious about automation, workflows, n8n, AI, or AI agents?
If you’re exploring how all these tools connect - and how to actually build with them - you’re in the right place.
📬 Subscribe to get more deep dives, tools, experiments, and real-world workflows delivered straight to you.
If Joel’s Leadership in Change is about frameworks and guardrails, this series shows how to put them into practice with accessible AI tools.
The future of leadership isn’t man vs. machine - it’s partnership!
Great article Jakub and Joel and thanks so much for making this process so open and available to us all. Really looking forward to the walkthrough in Part 2! 🙏