Why the same model can feel sharper in the chat app than in your editor — and the handful of moves that close the gap.
You pick the same model in VS Code that you use in the Claude app, ask a similar question, and the editor's answer feels thinner. It is a common and frustrating experience — and the usual conclusion ("the IDE version must be a weaker model") is almost always wrong.
The model is identical. What differs is the harness: the invisible layer around the model that decides what it gets told, how much of your code it actually sees, and how it is allowed to work. Think of it like a motor and its inverter. Swap a great inverter for a crude one and the same machine performs worse — not because the magnets changed, but because what reaches the machine changed.
This guide explains the harness in plain terms, lets you play with the three things you actually control, and ends with a checklist you can keep next to your keyboard.
Three things reach the model on every request: a system prompt (background instructions you never see), the context (how much of your project is fed in), and the model tier itself. The Claude app sets all three generously. A bare IDE setup often trims them to save tokens. Toggle between them below and watch what the model receives.
Same model, three harnesses
You can't see the system prompt, but you can influence all three inputs. Drag the sliders to feel how they combine. Context is weighted heaviest because it is where most real-world quality is won or lost.
Tune the levers → estimate the match
The fastest silent downgrade is the default model. In Claude Code, set it on purpose with /model. In GitHub Copilot, pick the model from the chat dropdown — recent Claude flagships are available there, with very large context windows. If your app habit is the top-tier model, match it; don't let a cheaper default decide your output quality.
Also switch on extended thinking for genuinely hard problems. The app leans on it; editor tools often leave it off by default.
This is the big one. A project notes file at your repo root acts like a private, persistent system prompt — your stack, conventions, and rules, loaded every session so you never re-explain them. Claude Code reads CLAUDE.md; Copilot reads .github/copilot-instructions.md.
Two more habits: use file references (type @ in Claude Code, # in Copilot) to hand the model the exact files instead of letting it guess; and add an ignore file to keep large, irrelevant artifacts out of the window.
There's a quieter trap: a long-running conversation. As a thread fills with old back-and-forth, the model spends its attention budget on stale material and reasons worse. Starting fresh is a feature, not a reset. Try it:
Why starting a fresh thread helps
Inline autocomplete reacts to keystrokes. The app-grade experience comes from the agent: it reads the codebase, drafts a plan, edits across files, runs commands, checks output, and loops. For the closest match to the app, use Anthropic's official Claude Code extension (it bundles the full engine, adds a side-by-side diff viewer, editable plan review, and conversation tabs). In Copilot, switch to Agent mode rather than the Ask or Edit modes.
Then extend it the way the app is extended: add tool servers (MCP) for things like browser access, and package repeated workflows as reusable skills so the model doesn't re-explore a path you've already mapped.
/model in Claude Code; the dropdown in Copilot. Match your app habit.CLAUDE.md or .github/copilot-instructions.md. Your stack, conventions, and rules.@ or # instead of letting it search.@ file references for Claude Code in VS Code. sagnikbhattacharya.com/blog/claude-code-vscode