The tool landscape

Five categories, one spectrum

AI coding tools differ mainly in how much you watch and approve as they work, and how much of your codebase they can see at once. Each category below builds on the autonomy of the last. Specific products change quickly — focus on the category, then map whatever tool you're handed onto it.

01

Copy-paste chat assistants

Manual back-and-forth in a browser tab, separate from your editor

You open a general chat assistant in a browser tab, describe a problem or paste in code and error messages, and manually copy whatever you decide to keep back into your project. The assistant has no access to your codebase beyond what you paste — you control its context completely, and you control what actually gets applied.

ChatGPT Claude.ai Google Gemini
Example promptI'm getting "IndexError: list index out of range" on this line: total += prices[i] Here's the loop above it: for i in range(len(prices) + 1): total += prices[i] Explain what's causing it and what to check first — don't give me the fixed code yet.
💡
Easiest to use well, easiest to misuse Because you control exactly what's pasted in, this category is well suited to learning — ask for an explanation instead of a fix. It's also the easiest to misuse: pasting in an entire assignment and copying back a full solution.
02

Inline autocomplete

Ghost-text suggestions that appear in the editor as you type

Suggestions appear directly in the editor as grey "ghost text" while you type, based on the current file and often nearby open files. Press Tab to accept, or keep typing to ignore it. There's no separate chat window — the tool is simply predicting the next few tokens of the file you're already writing.

GitHub Copilot Tabnine Windsurf / Codeium Autocomplete JetBrains AI inline completion
What triggers a good suggestiondef parse_iso_date(s: str) -> datetime: """Parse an ISO-8601 date string into a datetime, raising ValueError with a clear message if the format is invalid.""" # ← a descriptive signature + docstring like this gives the # autocomplete enough to suggest a body worth reading carefully
⚠️
One keystroke to accept — read it first This is the easiest category to accept blindly, since accepting takes a single Tab press. In an intro course, typing the logic yourself is often the actual point of the exercise — treat a suggestion as something to read and judge, not a shortcut to take by reflex.
03

In-IDE chat & contextual assistants

Chat that can see your codebase and proposes reviewable diffs

Lives inside the editor and can be pointed at specific files, symbols, or the whole repository. Instead of freeform text you copy by hand, it proposes multi-file changes as a diff that you review, edit, and approve before anything touches your files.

GitHub Copilot Chat Cursor Chat JetBrains AI Assistant Continue
Example promptAdd input validation to register_user() in auth.py: email must contain "@", password must be at least 8 characters. Return a list of error strings instead of raising. Update the existing tests in test_auth.py to cover both cases.
⚠️
Read the whole diff, not just the part you asked about These tools sound equally confident whether they're right or wrong. A plausible multi-file change can hide a subtle bug in the one file you didn't check carefully — review every changed file, not just the one you expected to change.
04

Agentic CLI / local agents

An agent loop in your terminal: plans, edits, runs commands, iterates — while you watch

You give a higher-level task; the agent plans steps, edits multiple files, runs build and test commands, reads the output, and iterates on its own — but synchronously, in your terminal, with you watching and free to interrupt or redirect at any point. This is a step up in autonomy from category 3: you're approving a plan and a process, not a single diff.

Claude Code Aider OpenAI Codex CLI Cursor Agent mode
Example promptImplement the feature described in issue #142: add pagination to the /api/orders endpoint, default page size 20, max 100. Update the OpenAPI spec and add tests. Run the test suite when you're done and fix any failures.
⚠️
"The agent says it's done" is not the same as done You're still responsible for the result. Review the final diff and run the tests yourself — don't take a successful-sounding summary as verification.
05

Asynchronous / background agents

Hand off a task, come back later to a pull request

You assign a task — often by tagging an agent on a GitHub issue or starting a cloud session — and it works in its own isolated sandbox or branch without you watching. It returns with a pull request, a summary of what it tried, and test results, for you to review on your own schedule, like a colleague's PR.

Claude Code background sessions GitHub Copilot coding agent OpenAI Codex cloud agent Google Jules
Example task brief (no back-and-forth, so be complete)Task: migrate utils/date_helpers.py off the deprecated datetime.utcnow() calls to timezone-aware datetime.now(timezone.utc). Update all call sites and tests across the repo. Open a PR with a summary of every file changed.
⚠️
Write the brief like you're onboarding a new teammate There's no mid-task clarification. The less specific your brief, the more likely the agent guesses wrong in a direction you won't notice until review — so spell out scope, constraints, and what "done" means up front.