{"course":{"slug":"choosing-your-tools","title":"Choosing and Using the Tools","url":"https://addaly.com/learn/choosing-your-tools","level":"beginner","track":"work"},"lesson":{"slug":"coding-routes","title":"Where a coding assistant lives","url":"https://addaly.com/learn/choosing-your-tools/coding-routes","position":25,"of":76,"minutes":9,"answer":"Coding assistants differ mainly by what they can see and do (a file, a project, your terminal, or a cloud clone) so keep every change small, keep version control between you and any agent.","keyIdea":"Coding assistants differ mainly by what they can see and do (a file, a project, your terminal, or a cloud clone) so keep every change small, keep version control between you and any agent, and review each line before it lands."},"body":{"format":"markdown","text":"## Four shapes, and what each can see\n\nCoding assistance is the largest paid category in this field, and the products differ far more by *where they run* than by which model they use. What the tool can see decides what it can do.\n\n**Autocomplete in the editor.** Suggests the next few lines as you type. Sees the current file and usually a few related ones. Fast, cheap, and it saves real time on boilerplate. It cannot reason about your architecture because it cannot see it.\n\n**Chat in the editor.** A panel beside your code. Sees whatever you attach plus, in better implementations, an index of the whole project. Good for \"explain this\", \"write a test for this\", \"why is this failing\".\n\n**A terminal agent.** Runs as a command, reads and writes files across the project, runs your tests, and iterates. This is the shape that changes how the work feels, because it closes the loop: it makes a change, runs the test, reads the failure, tries again. It is also the shape that can do the most damage, since it edits your files.\n\n**A hosted agent.** You describe a task on a website, it works in a cloud copy of your repository, and it opens a pull request. Good for well-defined, self-contained changes; poor at anything needing judgement about your codebase's conventions.\n\n## Free paths, all usable\n\nYou do not need a subscription to have any of this.\n\n- **Continue**: an open-source extension for VS Code and JetBrains that provides autocomplete and chat against any model, including a local one.\n- **Aider**: an open-source terminal agent that works with git, makes commits per change, and runs against any API or local model.\n- **Cline** and similar open extensions: agentic editing inside VS Code.\n- **Local models for code.** Qwen's coder models and several others run on a 16 GB laptop and handle everyday completion and small edits well.\n\nThe combination of Continue plus a local coding model is a complete, free, offline setup. It is meaningfully worse than a paid frontier assistant on hard problems and entirely adequate for the routine two thirds.\n\n## The rule that matters more than the tool\n\n**Review every line before it lands.** Not because these tools are bad (they are extremely good) but because the failure mode is code that looks right and passes the test you were shown. A subtly wrong function that compiles is more expensive than one that does not.\n\nTwo habits protect you, and they cost nothing:\n\n1. **Work in small commits.** A change you can read in two minutes is a change you can judge. An agent that rewrote forty files in one go is unreviewable, and people accept those because reviewing them is unpleasant.\n2. **Keep version control between you and the agent.** Commit before letting an agent loose. Then `git diff` is your review tool and `git checkout .` is your undo. Without that, an agent that goes wrong halfway through is a genuine problem.\n\n## Permissions, which is where people get hurt\n\nA terminal agent that can run commands can run any command. Most ask before executing, and most offer a mode that stops asking. That mode is convenient and it is how somebody's test database gets dropped.\n\nSensible defaults: let it read freely, ask before writing, always ask before running anything that touches a network or a database. If a tool offers an allow-list of safe commands, spend ten minutes on it once. And be careful with an agent that reads issues, pull request comments or web pages, because text it reads can contain instructions aimed at it, and it has your permissions.\n\n## Choosing, briefly\n\n- Working in one file at a time, mostly writing new code: **autocomplete** covers it.\n- Understanding an unfamiliar codebase: **editor chat** with project indexing.\n- Repetitive changes across many files, or test-fix loops: **a terminal agent**.\n- Small, well-specified tasks you want done while you do something else: **a hosted agent**.\n- No budget, or code that cannot leave your machine: **Continue or Aider with a local model**.\n\nThe model matters less than which of these you are in. A middling model in a terminal agent that can run your tests will outperform an excellent model in a chat window that cannot see your project."},"check":{"question":"A terminal agent rewrites forty files in a single run and the tests pass. Why is this a worse outcome than the same work in eight small commits?","options":[{"text":"Because larger changes are more likely to contain conflicts when merged with other people's work.","correct":false,"tempting":"Names a real inconvenience of large changes but not the reason this one is risky, since merge conflicts surface loudly rather than silently."},{"text":"Because agents produce lower-quality code when asked to change many files at once than when asked for one change at a time.","correct":false,"tempting":"Assumes quality degrades with breadth; the problem is your ability to review the result, not the model's ability to produce it."},{"text":"Because passing tests do not establish correctness, and a diff too large to read comfortably is one nobody reviews properly.","correct":true},{"text":"Because a single commit cannot be reverted without losing every change it contains, whereas small commits can be undone individually.","correct":false,"tempting":"States a true property of commits as the main harm, when the deeper issue is that the change was never examined."}]},"prev":{"slug":"routers-and-aggregators","title":"Routers: one key, many models","url":"https://addaly.com/learn/choosing-your-tools/routers-and-aggregators"},"next":{"slug":"extensions-and-wrappers","title":"Extensions, wrappers and the permission dialog","url":"https://addaly.com/learn/choosing-your-tools/extensions-and-wrappers"},"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) 'Where a coding assistant lives', in Choosing and Using the Tools. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/choosing-your-tools/coding-routes (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Where a coding assistant lives","courseTitle":"Choosing and Using the Tools","module":{"index":3,"slug":"the-routes-in","title":"The routes in"},"answer":null,"keyIdea":"Coding assistants differ mainly by what they can see and do (a file, a project, your terminal, or a cloud clone) so keep every change small, keep version control between you and any agent, and review each line before it lands.","hero":{"kind":"plate","image":null,"alt":null,"caption":null},"blocks":[{"t":"h2","id":"four-shapes-and-what-each-can-see","runs":[{"text":"Four shapes, and what each can see"}]},{"t":"p","runs":[{"text":"Coding assistance is the largest paid category in this field, and the products differ far more by "},{"text":"where they run","i":true},{"text":" than by which model they use. What the tool can see decides what it can do."}]},{"t":"p","runs":[{"text":"Autocomplete in the editor.","b":true},{"text":" Suggests the next few lines as you type. Sees the current file and usually a few related ones. Fast, cheap, and it saves real time on boilerplate. It cannot reason about your architecture because it cannot see it."}]},{"t":"p","runs":[{"text":"Chat in the editor.","b":true},{"text":" A panel beside your code. Sees whatever you attach plus, in better implementations, an index of the whole project. Good for “explain this”, “write a test for this”, “why is this failing”."}]},{"t":"p","runs":[{"text":"A terminal agent.","b":true},{"text":" Runs as a command, reads and writes files across the project, runs your tests, and iterates. This is the shape that changes how the work feels, because it closes the loop: it makes a change, runs the test, reads the failure, tries again. It is also the shape that can do the most damage, since it edits your files."}]},{"t":"p","runs":[{"text":"A hosted agent.","b":true},{"text":" You describe a task on a website, it works in a cloud copy of your repository, and it opens a pull request. Good for well-defined, self-contained changes; poor at anything needing judgement about your codebase’s conventions."}]},{"t":"h2","id":"free-paths-all-usable","runs":[{"text":"Free paths, all usable"}]},{"t":"p","runs":[{"text":"You do not need a subscription to have any of this."}]},{"t":"ul","items":[[{"text":"Continue","b":true},{"text":": an open-source extension for VS Code and JetBrains that provides autocomplete and chat against any model, including a local one."}],[{"text":"Aider","b":true},{"text":": an open-source terminal agent that works with git, makes commits per change, and runs against any API or local model."}],[{"text":"Cline","b":true},{"text":" and similar open extensions: agentic editing inside VS Code."}],[{"text":"Local models for code.","b":true},{"text":" Qwen’s coder models and several others run on a 16 GB laptop and handle everyday completion and small edits well."}]]},{"t":"p","runs":[{"text":"The combination of Continue plus a local coding model is a complete, free, offline setup. It is meaningfully worse than a paid frontier assistant on hard problems and entirely adequate for the routine two thirds."}]},{"t":"h2","id":"the-rule-that-matters-more-than-the-tool","runs":[{"text":"The rule that matters more than the tool"}]},{"t":"p","runs":[{"text":"Review every line before it lands.","b":true},{"text":" Not because these tools are bad (they are extremely good) but because the failure mode is code that looks right and passes the test you were shown. A subtly wrong function that compiles is more expensive than one that does not."}]},{"t":"p","runs":[{"text":"Two habits protect you, and they cost nothing:"}]},{"t":"ol","start":1,"items":[[{"text":"Work in small commits.","b":true},{"text":" A change you can read in two minutes is a change you can judge. An agent that rewrote forty files in one go is unreviewable, and people accept those because reviewing them is unpleasant."}],[{"text":"Keep version control between you and the agent.","b":true},{"text":" Commit before letting an agent loose. Then "},{"text":"git diff","code":true},{"text":" is your review tool and "},{"text":"git checkout .","code":true},{"text":" is your undo. Without that, an agent that goes wrong halfway through is a genuine problem."}]]},{"t":"h2","id":"permissions-which-is-where-people-get-hurt","runs":[{"text":"Permissions, which is where people get hurt"}]},{"t":"p","runs":[{"text":"A terminal agent that can run commands can run any command. Most ask before executing, and most offer a mode that stops asking. That mode is convenient and it is how somebody’s test database gets dropped."}]},{"t":"p","runs":[{"text":"Sensible defaults: let it read freely, ask before writing, always ask before running anything that touches a network or a database. If a tool offers an allow-list of safe commands, spend ten minutes on it once. And be careful with an agent that reads issues, pull request comments or web pages, because text it reads can contain instructions aimed at it, and it has your permissions."}]},{"t":"h2","id":"choosing-briefly","runs":[{"text":"Choosing, briefly"}]},{"t":"ul","items":[[{"text":"Working in one file at a time, mostly writing new code: "},{"text":"autocomplete","b":true},{"text":" covers it."}],[{"text":"Understanding an unfamiliar codebase: "},{"text":"editor chat","b":true},{"text":" with project indexing."}],[{"text":"Repetitive changes across many files, or test-fix loops: "},{"text":"a terminal agent","b":true},{"text":"."}],[{"text":"Small, well-specified tasks you want done while you do something else: "},{"text":"a hosted agent","b":true},{"text":"."}],[{"text":"No budget, or code that cannot leave your machine: "},{"text":"Continue or Aider with a local model","b":true},{"text":"."}]]},{"t":"p","runs":[{"text":"The model matters less than which of these you are in. A middling model in a terminal agent that can run your tests will outperform an excellent model in a chat window that cannot see your project."}]}],"check":{"question":[{"text":"A terminal agent rewrites forty files in a single run and the tests pass. Why is this a worse outcome than the same work in eight small commits?"}],"options":[{"text":[{"text":"Because larger changes are more likely to contain conflicts when merged with other people’s work."}],"correct":false,"tempting":[{"text":"Names a real inconvenience of large changes but not the reason this one is risky, since merge conflicts surface loudly rather than silently."}]},{"text":[{"text":"Because agents produce lower-quality code when asked to change many files at once than when asked for one change at a time."}],"correct":false,"tempting":[{"text":"Assumes quality degrades with breadth; the problem is your ability to review the result, not the model’s ability to produce it."}]},{"text":[{"text":"Because passing tests do not establish correctness, and a diff too large to read comfortably is one nobody reviews properly."}],"correct":true,"tempting":null},{"text":[{"text":"Because a single commit cannot be reverted without losing every change it contains, whereas small commits can be undone individually."}],"correct":false,"tempting":[{"text":"States a true property of commits as the main harm, when the deeper issue is that the change was never examined."}]}],"order":[0,1,2,3],"why":null},"prev":{"slug":"routers-and-aggregators","title":"Routers: one key, many models","minutes":8},"next":{"slug":"extensions-and-wrappers","title":"Extensions, wrappers and the permission dialog","minutes":8}}}