{"course":{"slug":"agents-and-automation","title":"Agents and Automation","url":"https://addaly.com/learn/agents-and-automation","level":"intermediate","track":"build"},"lesson":{"slug":"chatbot-workflow-agent","title":"Three machines, one word","url":"https://addaly.com/learn/agents-and-automation/chatbot-workflow-agent","position":1,"of":72,"minutes":6,"answer":"An agent is a program where the model, not the author, decides what happens next.","keyIdea":"An agent is a program where the model, not the author, decides what happens next."},"body":{"format":"markdown","text":"## The question that separates them\n\nThree different machines get called \"an agent.\" One question tells them apart: **who decides what happens next?**\n\n**A chatbot: you decide.** You type, it answers, you type again. Every step forward comes from a human, and it never touches anything outside the conversation. A model with no tools connected is a chatbot. That is useful, and it is not an agent.\n\n**A workflow: the author decided, before it ever ran.** Somebody drew a graph (trigger, step, branch, step) and the graph is the same every time. A Zapier Zap, an n8n flow, a Make scenario, a cron job running a Python script. The path is fixed at build time.\n\nHere is the part that trips people up: **a workflow with a model in it is still a workflow.** Take this n8n flow, running at a coaching centre in Bengaluru:\n\n```\nnew WhatsApp message\n  → model step: enquiry, fee question, or other?\n  → if enquiry:  send brochure, add row to sheet\n  → if fee:      send fee schedule, notify office\n  → else:        forward to a human\n```\n\nThere is a language model in the middle making a judgement call. It is still not an agent. Every path that flow can ever take was drawn by a person in advance. The model is filling in one blank on a form somebody else designed.\n\n**An agent: the model decides, at run time, in a loop.** You give it a goal, some tools, and no fixed path. It picks a tool, sees the result, picks again. The tell is this: **you do not know how many steps it will take before it runs.** Same goal, different input, different number of steps.\n\nThe agent version of the same coaching centre: \"Here is the WhatsApp inbox, the fee structure, the batch timetable, and the ability to book seats. Handle enquiries.\" Now the work depends on what the parent asks. A simple question might take one step. A parent negotiating a transfer between batches, checking two timetables and a refund rule, might take nine.\n\n## It is a dial, not a switch\n\nMost real systems sit somewhere in between, and it helps to say where.\n\n- **Fixed graph, no model.** A cron job. Fully predictable.\n- **Fixed graph, model in one box.** Classification, extraction, drafting. Predictable structure, uncertain content.\n- **Router.** The model picks branch A, B or C; each branch is fixed. One decision point.\n- **Bounded agent.** A loop over a small tool set with a hard step limit.\n- **Open agent.** Many tools, long horizon, the model decides when it is finished.\n\nMove down that list and you gain flexibility. You also lose, in this order: predictable cost, predictable latency, testability, and your ability to explain to a customer why it did what it did.\n\n> Figure: The dial, from a cron job to an open agent. Layers, top to bottom: Fixed graph, no model (A cron job. The path, the cost and the latency are all known before it runs.); Fixed graph, model in one box (Classification, extraction, drafting. Predictable structure, uncertain content.); Router (The model picks branch A, B or C. One decision point; each branch is fixed.); Bounded agent (A loop over a small tool set with a hard step limit.); Open agent (Many tools, long horizon, and the model decides when it is finished.). Going down the list you gain flexibility and lose, in this order: predictable cost, predictable latency, testability, and your ability to explain to a customer why it did what it did.\n\n## Why the vocabulary is worth getting right\n\nAlmost everything currently sold as \"an AI agent\" sits in the middle of that dial. That is usually good news rather than a criticism. Workflows cost roughly the same every run, you can test them, and when one breaks you can point at the box that broke.\n\nThe mistake that costs people months is reaching for the bottom of the dial first. Someone builds an open agent for a task that was always going to take the same seven steps. It works in the demo, costs forty times what the workflow would have cost, fails in a new way each week, and nobody can debug it because \"it decided to.\"\n\nSo when a task lands on your desk, ask the question first: **does the sequence of steps actually change from run to run?** If it does not, you want a workflow, possibly with a model inside one of its boxes. If it does, if the shape of the work depends on what you find partway through, then you want an agent, and the rest of this course is about what that costs you."},"check":{"question":"An n8n flow receives a support email, uses a model to sort it into billing, technical or other, routes it into one of three fixed sub-flows, has a model draft a reply, and sends it. No human touches it. Is this an agent?","options":[{"text":"No: every path it can take was drawn before it ran; the model only picks between branches somebody else authored.","correct":true},{"text":"Yes: a language model is making the decisions, and decision-making is what makes something an agent.","correct":false,"tempting":"Treats any model-made choice as agency, missing that the full set of possible paths was fixed at build time."},{"text":"Yes: it takes real actions in the world and sends email without a human approving anything.","correct":false,"tempting":"Equates autonomy from humans with agency; by that test an unattended cron job would also be an agent."},{"text":"No: it uses the model for classification and drafting rather than through a tool-calling API.","correct":false,"tempting":"Believes the function-calling interface is what makes an agent, rather than who controls the loop."}]},"prev":null,"next":{"slug":"automation-before-agents","title":"The boring stack that already does this","url":"https://addaly.com/learn/agents-and-automation/automation-before-agents"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'Three machines, one word', in Agents and Automation. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/agents-and-automation/chatbot-workflow-agent (Accessed: 31 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Three machines, one word","courseTitle":"Agents and Automation","module":{"index":1,"slug":"deciding-what-to-build","title":"Before you build: script, workflow, or agent"},"answer":null,"keyIdea":"An agent is a program where the model, not the author, decides what happens next.","hero":{"kind":"figure","figure":{"t":"figure","label":"Figure 1.1","figure":{"type":"stack","title":"The dial, from a cron job to an open agent","layers":[{"label":"Fixed graph, no model","detail":"A cron job. The path, the cost and the latency are all known before it runs."},{"label":"Fixed graph, model in one box","detail":"Classification, extraction, drafting. Predictable structure, uncertain content."},{"label":"Router","detail":"The model picks branch A, B or C. One decision point; each branch is fixed."},{"label":"Bounded agent","detail":"A loop over a small tool set with a hard step limit."},{"label":"Open agent","detail":"Many tools, long horizon, and the model decides when it is finished."}],"caption":"Going down the list you gain flexibility and lose, in this order: predictable cost, predictable latency, testability, and your ability to explain to a customer why it did what it did."},"alt":"Figure: The dial, from a cron job to an open agent. Layers, top to bottom: Fixed graph, no model (A cron job. The path, the cost and the latency are all known before it runs.); Fixed graph, model in one box (Classification, extraction, drafting. Predictable structure, uncertain content.); Router (The model picks branch A, B or C. One decision point; each branch is fixed.); Bounded agent (A loop over a small tool set with a hard step limit.); Open agent (Many tools, long horizon, and the model decides when it is finished.). Going down the list you gain flexibility and lose, in this order: predictable cost, predictable latency, testability, and your ability to explain to a customer why it did what it did."}},"blocks":[{"t":"h2","id":"the-question-that-separates-them","runs":[{"text":"The question that separates them"}]},{"t":"p","runs":[{"text":"Three different machines get called “an agent.” One question tells them apart: "},{"text":"who decides what happens next?","b":true}]},{"t":"p","runs":[{"text":"A chatbot: you decide.","b":true},{"text":" You type, it answers, you type again. Every step forward comes from a human, and it never touches anything outside the conversation. A model with no tools connected is a chatbot. That is useful, and it is not an agent."}]},{"t":"p","runs":[{"text":"A workflow: the author decided, before it ever ran.","b":true},{"text":" Somebody drew a graph (trigger, step, branch, step) and the graph is the same every time. A Zapier Zap, an n8n flow, a Make scenario, a cron job running a Python script. The path is fixed at build time."}]},{"t":"p","runs":[{"text":"Here is the part that trips people up: "},{"text":"a workflow with a model in it is still a workflow.","b":true},{"text":" Take this n8n flow, running at a coaching centre in Bengaluru:"}]},{"t":"code","lang":"","label":"Text","text":"new WhatsApp message\n  → model step: enquiry, fee question, or other?\n  → if enquiry:  send brochure, add row to sheet\n  → if fee:      send fee schedule, notify office\n  → else:        forward to a human"},{"t":"p","runs":[{"text":"There is a language model in the middle making a judgement call. It is still not an agent. Every path that flow can ever take was drawn by a person in advance. The model is filling in one blank on a form somebody else designed."}]},{"t":"p","runs":[{"text":"An agent: the model decides, at run time, in a loop.","b":true},{"text":" You give it a goal, some tools, and no fixed path. It picks a tool, sees the result, picks again. The tell is this: "},{"text":"you do not know how many steps it will take before it runs.","b":true},{"text":" Same goal, different input, different number of steps."}]},{"t":"p","runs":[{"text":"The agent version of the same coaching centre: “Here is the WhatsApp inbox, the fee structure, the batch timetable, and the ability to book seats. Handle enquiries.” Now the work depends on what the parent asks. A simple question might take one step. A parent negotiating a transfer between batches, checking two timetables and a refund rule, might take nine."}]},{"t":"h2","id":"it-is-a-dial-not-a-switch","runs":[{"text":"It is a dial, not a switch"}]},{"t":"p","runs":[{"text":"Most real systems sit somewhere in between, and it helps to say where."}]},{"t":"ul","items":[[{"text":"Fixed graph, no model.","b":true},{"text":" A cron job. Fully predictable."}],[{"text":"Fixed graph, model in one box.","b":true},{"text":" Classification, extraction, drafting. Predictable structure, uncertain content."}],[{"text":"Router.","b":true},{"text":" The model picks branch A, B or C; each branch is fixed. One decision point."}],[{"text":"Bounded agent.","b":true},{"text":" A loop over a small tool set with a hard step limit."}],[{"text":"Open agent.","b":true},{"text":" Many tools, long horizon, the model decides when it is finished."}]]},{"t":"p","runs":[{"text":"Move down that list and you gain flexibility. You also lose, in this order: predictable cost, predictable latency, testability, and your ability to explain to a customer why it did what it did."}]},{"t":"h2","id":"why-the-vocabulary-is-worth-getting-right","runs":[{"text":"Why the vocabulary is worth getting right"}]},{"t":"p","runs":[{"text":"Almost everything currently sold as “an AI agent” sits in the middle of that dial. That is usually good news rather than a criticism. Workflows cost roughly the same every run, you can test them, and when one breaks you can point at the box that broke."}]},{"t":"p","runs":[{"text":"The mistake that costs people months is reaching for the bottom of the dial first. Someone builds an open agent for a task that was always going to take the same seven steps. It works in the demo, costs forty times what the workflow would have cost, fails in a new way each week, and nobody can debug it because “it decided to.”"}]},{"t":"p","runs":[{"text":"So when a task lands on your desk, ask the question first: "},{"text":"does the sequence of steps actually change from run to run?","b":true},{"text":" If it does not, you want a workflow, possibly with a model inside one of its boxes. If it does, if the shape of the work depends on what you find partway through, then you want an agent, and the rest of this course is about what that costs you."}]}],"check":{"question":[{"text":"An n8n flow receives a support email, uses a model to sort it into billing, technical or other, routes it into one of three fixed sub-flows, has a model draft a reply, and sends it. No human touches it. Is this an agent?"}],"options":[{"text":[{"text":"No: every path it can take was drawn before it ran; the model only picks between branches somebody else authored."}],"correct":true,"tempting":null},{"text":[{"text":"Yes: a language model is making the decisions, and decision-making is what makes something an agent."}],"correct":false,"tempting":[{"text":"Treats any model-made choice as agency, missing that the full set of possible paths was fixed at build time."}]},{"text":[{"text":"Yes: it takes real actions in the world and sends email without a human approving anything."}],"correct":false,"tempting":[{"text":"Equates autonomy from humans with agency; by that test an unattended cron job would also be an agent."}]},{"text":[{"text":"No: it uses the model for classification and drafting rather than through a tool-calling API."}],"correct":false,"tempting":[{"text":"Believes the function-calling interface is what makes an agent, rather than who controls the loop."}]}],"order":[3,1,0,2],"why":null},"prev":null,"next":{"slug":"automation-before-agents","title":"The boring stack that already does this","minutes":8}}}