{"course":{"slug":"building-apps-with-ai","title":"Building Apps with AI","url":"https://addaly.com/learn/building-apps-with-ai","level":"beginner","track":"build"},"lesson":{"slug":"what-these-tools-actually-do","title":"What these tools actually do","url":"https://addaly.com/learn/building-apps-with-ai/what-these-tools-actually-do","position":1,"of":87,"minutes":8,"answer":"These tools generate plausible code quickly; deciding whether it is correct is still entirely your job.","keyIdea":"These tools generate plausible code quickly; deciding whether it is correct is still entirely your job."},"body":{"format":"markdown","text":"## Three different tools wearing one label\n\n\"AI coding tool\" covers three families that behave very differently.\n\n**Inline completion**: GitHub Copilot, Cursor's tab suggestions. It finishes the line or block you started. You stay in control. It saves typing.\n\n**Agents in your editor or terminal**: Cursor's agent mode, Claude Code, Windsurf, Codex. You describe a change in ordinary words. The tool reads files, edits several of them, runs commands, reads the output, and tries again. You keep the codebase, the history, the deployment. Nothing is hidden from you.\n\n**Prompt-to-app platforms**: Lovable, Bolt, Replit, v0. You describe an app and get a running app, with hosting, a database and a public URL. The platform owns the environment. That is why they feel remarkable on day one and awkward on day thirty, when you want something the platform did not anticipate.\n\nMost beginners start in the third family and move to the second. That path is fine. Just know which one you are standing in, because the ways they fail are different.\n\n## What the model is actually doing\n\nIt is predicting code that fits. It was trained on an enormous amount of public code, so it is strong at anything that resembles what many people have already written: a signup form, a sortable table, a payment checkout, a dark mode toggle, a CSV export.\n\n> Figure: Day one against day thirty. Prompt-to-app platform: One sentence produces a running app with hosting, a database and a public URL; The platform chooses the stack, the folder layout and the deployment; Its version history lives in its account, in its format; Awkward on day thirty, when the thing you want is not on offer. Agent in your editor: You start with an empty folder and a longer first hour; You choose the stack and write it down where the tool reads it; Your git history, your repository, your host; Nothing is hidden, which is why nothing has to be exported later. Both families generate the same kind of code. What differs is who owns the environment when you want something the platform did not anticipate.\n\nIt is much weaker at the part only you know. That a booking cannot overlap another booking for the same stylist. That your invoice numbers restart each April. That in your country the phone number is ten digits and the postal code is six.\n\nSo the working rule: the more your feature looks like everyone else's, the better the first attempt will be. The more it encodes your specific rules, the more carefully you have to check it.\n\n## Four things they do not do\n\n**They do not run your app and judge it.** An agent can execute a command and read the output, which is real and useful. But nothing in that loop checks that the feature does what you meant. \"The code looks correct\" is the entire standard.\n\n**They do not know when they are wrong.** There is no reliable signal for uncertainty. The tone is identical whether the model wrote something solid or invented a function that does not exist in that library. Fluency is not evidence.\n\n**They do not remember your project.** Your codebase is not inside the model. Files are pulled into the conversation as needed. On a large project or a long session, the model is working from fragments, and it will confidently edit a file whose other half it never read.\n\n**They do not carry the consequences.** When a stranger's data leaks, your name is on it.\n\n## The gap that catches everyone\n\nThe first hour is astonishing. You describe an app and an app appears. The gap opens later, and it is always the same gap: the demo works and the product does not.\n\nA demo is you, on your laptop, clicking in the order you expect, with data you created. A product is a stranger on a three-year-old phone, on a slow connection, logged out, clicking in the wrong order, typing an apostrophe into a name field.\n\nEvery lesson after this one is about closing that gap. None of it requires you to become a professional programmer. It requires you to stop treating \"the model said it works\" as though someone checked.\n\n## Start the habit now\n\nAfter every change the model makes, do three things before you ask for the next one:\n\n1. Open the app and use the feature yourself. Not the code, the app.\n2. Try the wrong thing once. Empty field. Wrong password. Back button.\n3. Look at what actually changed on disk, even if you only skim it.\n\nThirty seconds. It is the difference between building software and accumulating it."},"check":{"question":"You ask the agent to add a discount code feature. It writes the code and tells you the feature is working. Why is that statement weak evidence?","options":[{"text":"The model was trained before your project existed, so it cannot reason about your code.","correct":false,"tempting":"Treats the training cutoff as the limitation, when the model can read your current files perfectly well: the problem is that reading is not running."},{"text":"The model can only see the file currently open in your editor, so its claim covers a fraction of the app.","correct":false,"tempting":"Assumes the failure is a context problem fixable by pasting more code, rather than a category difference between prediction and observation."},{"text":"The model is describing what the code looks like it should do, not reporting the result of using the feature.","correct":true},{"text":"The model is built to agree with the user, so it will say a feature works whenever you sound like you want it to.","correct":false,"tempting":"Blames agreeableness, which does exist, and so implies a neutrally-phrased question would produce a trustworthy answer."}]},"prev":null,"next":{"slug":"what-a-web-app-is-made-of","title":"What a web app is actually made of","url":"https://addaly.com/learn/building-apps-with-ai/what-a-web-app-is-made-of"},"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) 'What these tools actually do', in Building Apps with AI. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/building-apps-with-ai/what-these-tools-actually-do (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":"What these tools actually do","courseTitle":"Building Apps with AI","module":{"index":1,"slug":"the-machine-and-the-model","title":"The machine, and what the model can see of it"},"answer":null,"keyIdea":"These tools generate plausible code quickly; deciding whether it is correct is still entirely your job.","hero":{"kind":"figure","figure":{"t":"figure","label":"Figure 1.1","figure":{"left":{"title":"Prompt-to-app platform","items":["One sentence produces a running app with hosting, a database and a public URL","The platform chooses the stack, the folder layout and the deployment","Its version history lives in its account, in its format","Awkward on day thirty, when the thing you want is not on offer"]},"type":"compare","right":{"title":"Agent in your editor","items":["You start with an empty folder and a longer first hour","You choose the stack and write it down where the tool reads it","Your git history, your repository, your host","Nothing is hidden, which is why nothing has to be exported later"]},"title":"Day one against day thirty","caption":"Both families generate the same kind of code. What differs is who owns the environment when you want something the platform did not anticipate."},"alt":"Figure: Day one against day thirty. Prompt-to-app platform: One sentence produces a running app with hosting, a database and a public URL; The platform chooses the stack, the folder layout and the deployment; Its version history lives in its account, in its format; Awkward on day thirty, when the thing you want is not on offer. Agent in your editor: You start with an empty folder and a longer first hour; You choose the stack and write it down where the tool reads it; Your git history, your repository, your host; Nothing is hidden, which is why nothing has to be exported later. Both families generate the same kind of code. What differs is who owns the environment when you want something the platform did not anticipate."}},"blocks":[{"t":"h2","id":"three-different-tools-wearing-one-label","runs":[{"text":"Three different tools wearing one label"}]},{"t":"p","runs":[{"text":"“AI coding tool” covers three families that behave very differently."}]},{"t":"p","runs":[{"text":"Inline completion","b":true},{"text":": GitHub Copilot, Cursor’s tab suggestions. It finishes the line or block you started. You stay in control. It saves typing."}]},{"t":"p","runs":[{"text":"Agents in your editor or terminal","b":true},{"text":": Cursor’s agent mode, Claude Code, Windsurf, Codex. You describe a change in ordinary words. The tool reads files, edits several of them, runs commands, reads the output, and tries again. You keep the codebase, the history, the deployment. Nothing is hidden from you."}]},{"t":"p","runs":[{"text":"Prompt-to-app platforms","b":true},{"text":": Lovable, Bolt, Replit, v0. You describe an app and get a running app, with hosting, a database and a public URL. The platform owns the environment. That is why they feel remarkable on day one and awkward on day thirty, when you want something the platform did not anticipate."}]},{"t":"p","runs":[{"text":"Most beginners start in the third family and move to the second. That path is fine. Just know which one you are standing in, because the ways they fail are different."}]},{"t":"h2","id":"what-the-model-is-actually-doing","runs":[{"text":"What the model is actually doing"}]},{"t":"p","runs":[{"text":"It is predicting code that fits. It was trained on an enormous amount of public code, so it is strong at anything that resembles what many people have already written: a signup form, a sortable table, a payment checkout, a dark mode toggle, a CSV export."}]},{"t":"p","runs":[{"text":"It is much weaker at the part only you know. That a booking cannot overlap another booking for the same stylist. That your invoice numbers restart each April. That in your country the phone number is ten digits and the postal code is six."}]},{"t":"p","runs":[{"text":"So the working rule: the more your feature looks like everyone else’s, the better the first attempt will be. The more it encodes your specific rules, the more carefully you have to check it."}]},{"t":"h2","id":"four-things-they-do-not-do","runs":[{"text":"Four things they do not do"}]},{"t":"p","runs":[{"text":"They do not run your app and judge it.","b":true},{"text":" An agent can execute a command and read the output, which is real and useful. But nothing in that loop checks that the feature does what you meant. “The code looks correct” is the entire standard."}]},{"t":"p","runs":[{"text":"They do not know when they are wrong.","b":true},{"text":" There is no reliable signal for uncertainty. The tone is identical whether the model wrote something solid or invented a function that does not exist in that library. Fluency is not evidence."}]},{"t":"p","runs":[{"text":"They do not remember your project.","b":true},{"text":" Your codebase is not inside the model. Files are pulled into the conversation as needed. On a large project or a long session, the model is working from fragments, and it will confidently edit a file whose other half it never read."}]},{"t":"p","runs":[{"text":"They do not carry the consequences.","b":true},{"text":" When a stranger’s data leaks, your name is on it."}]},{"t":"h2","id":"the-gap-that-catches-everyone","runs":[{"text":"The gap that catches everyone"}]},{"t":"p","runs":[{"text":"The first hour is astonishing. You describe an app and an app appears. The gap opens later, and it is always the same gap: the demo works and the product does not."}]},{"t":"p","runs":[{"text":"A demo is you, on your laptop, clicking in the order you expect, with data you created. A product is a stranger on a three-year-old phone, on a slow connection, logged out, clicking in the wrong order, typing an apostrophe into a name field."}]},{"t":"p","runs":[{"text":"Every lesson after this one is about closing that gap. None of it requires you to become a professional programmer. It requires you to stop treating “the model said it works” as though someone checked."}]},{"t":"h2","id":"start-the-habit-now","runs":[{"text":"Start the habit now"}]},{"t":"p","runs":[{"text":"After every change the model makes, do three things before you ask for the next one:"}]},{"t":"ol","start":1,"items":[[{"text":"Open the app and use the feature yourself. Not the code, the app."}],[{"text":"Try the wrong thing once. Empty field. Wrong password. Back button."}],[{"text":"Look at what actually changed on disk, even if you only skim it."}]]},{"t":"p","runs":[{"text":"Thirty seconds. It is the difference between building software and accumulating it."}]}],"check":{"question":[{"text":"You ask the agent to add a discount code feature. It writes the code and tells you the feature is working. Why is that statement weak evidence?"}],"options":[{"text":[{"text":"The model was trained before your project existed, so it cannot reason about your code."}],"correct":false,"tempting":[{"text":"Treats the training cutoff as the limitation, when the model can read your current files perfectly well: the problem is that reading is not running."}]},{"text":[{"text":"The model can only see the file currently open in your editor, so its claim covers a fraction of the app."}],"correct":false,"tempting":[{"text":"Assumes the failure is a context problem fixable by pasting more code, rather than a category difference between prediction and observation."}]},{"text":[{"text":"The model is describing what the code looks like it should do, not reporting the result of using the feature."}],"correct":true,"tempting":null},{"text":[{"text":"The model is built to agree with the user, so it will say a feature works whenever you sound like you want it to."}],"correct":false,"tempting":[{"text":"Blames agreeableness, which does exist, and so implies a neutrally-phrased question would produce a trustworthy answer."}]}],"order":[3,1,2,0],"why":null},"prev":null,"next":{"slug":"what-a-web-app-is-made-of","title":"What a web app is actually made of","minutes":9}}}