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.