Ask mode allowed edit-intent loop (non-productive retries) causing excessive token usage
- Dominant language
- TypeScript
- Stars
- 193k
- Forks
- 42.4k
- PR merge metrics
- PR metrics pending
Description
Type: Bug
Summary
When I requested file edits while in Ask mode, Copilot repeatedly continued analysis/retry behavior instead of immediately stating that edits were blocked by mode. This created a non-productive loop and consumed significant tokens/credits without progressing the task.
Environment
VS Code: current stable build (please auto-fill from VS Code)
Copilot Chat extension: current installed version (auto-fill)
OS: Windows
Workspace type: local Java/Gradle project
Date observed: 2026-09-13
Steps to Reproduce
Copilot Chat in Ask mode, following a lengthy design discussion where we've arrived agreement on 4 (numbered items).
Request a spec update after iterating on design (in a manner in which is established in my environment would result in an update were i in Agent mode as intended):
Actual prompt (including my typos):
1 adn 2 fine.
3 build should fail (we should localize it across all supported locales)
4 fine
response:
Perfect, those choices are solid and consistent:
Out-of-scope boundary note: keep.
Explicit migration SQL snippet: keep.
Localization policy: build should fail if any supported locale is missing required new strings.
Performance note: keep (count queries once per export request).
With that, the DCR is implementation-ready and there are no major unresolved product decisions left.
If you want, next step is I can do one final editorial pass to insert those exact four lines into the doc and tighten wording only.
12:50 PM 1m 5s • GPT-5.3-Codex • 155.0 credit
Assistant spins and looks like it's doing something, but comes back w/a reiteration in the chat window of what we were in agreement on that i'd ask to be updated. (at that point i realize i forgot to switch back from ask mode to agent mode).
Expected Result
Assistant should immediately detect write-tool restrictions in Ask mode.
Assistant should return one clear blocker message and instruct switching to Agent/Edit-capable mode.
No repeated pseudo-progress loops.
Actual Result
Assistant performed repeated non-edit iterations (analysis/retries) without applying changes.
Mode limitation was not surfaced immediately.
Tokens/credits were consumed disproportionately relative to output.
Impact
High token burn for no functional progress.
User confusion/trust hit due to apparent progress without actual edits.
Wasted time before mode mismatch was made explicit.
Suggested Fix
Hard guardrail: when user intent requires file writes and mode cannot write, short-circuit immediately.
Show a prominent one-shot action hint: “Switch to Agent mode to apply edits.”
Optionally require explicit confirmation before any multi-turn retry behavior in non-write modes.
Session/log identifier if helpful: c9254ffa-e67a-4e7f-b7af-b5675eac3581.
VS Code version: Code 1.137.0 (645f29cc3176500b4b5762ba887cf2a7f0ffdf2c, 2026-09-08T13:43:59-07:00)
OS version: Windows_NT x64 10.0.26200
Modes:
System Info
|Item|Value|
|---|---|
|CPUs|12th Gen Intel(R) Core(TM) i5-1235U (12 x 2496)|
|GPU Status|2d_canvas: enabled
GPU0: VENDOR= 0x8086, DEVICE=0x46a8 [Intel(R) Iris(R) Xe Graphics], DRIVER_VENDOR=Intel, DRIVER_VERSION=32.0.101.7082 *ACTIVE*
GPU1: VENDOR= 0x1414, DEVICE=0x008c [Microsoft Basic Render Driver], DRIVER_VERSION=10.0.26100.9278
Machine model name:
Machine model version:
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
multiple_raster_threads: enabled_on
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
skia_graphite: disabled_off
trees_in_viz: disabled_off
video_decode: enabled
video_encode: enabled
webgl: enabled
webgpu: enabled
webnn: disabled_off|
|Load (avg)|undefined|
|Memory (System)|39.73GB (16.63GB free)|
|Process Argv|--crash-reporter-id dc6b0114-f136-4e6d-aef2-a71c9ba3664c|
|Screen Reader|no|
|VM|0%|
Extensions (37)
Name|Identifier|Author|Version
---|---|---|---
HTML / XML / RSS link checker|billdietrich.linkcheckerhtml|BillDietrich|6.3.0
Git History|donjayamanne.githistory|donjayamanne|0.6.20
GitLens — Git supercharged|eamodio.gitlens|eamodio|19.1.0
Prettier - Code formatter|esbenp.prettier-vscode|esbenp|12.4.0
GitHub Pull Requests|github.vscode-pull-request-github|GitHub|0.166.0
Rainbow CSV|mechatroner.rainbow-csv|mechatroner|3.24.1
C# Dev Kit|ms-dotnettools.csdevkit|ms-dotnettools|3.20.207
C#|ms-dotnettools.csharp|ms-dotnettools|2.140.9
.NET Install Tool|ms-dotnettools.vscode-dotnet-runtime|ms-dotnettools|3.1.0
Microsoft Edge Tools for VS Code|ms-edgedevtools.vscode-edge-devtools|ms-edgedevtools|2.1.11
Python Debugger|ms-python.debugpy|ms-python|2026.6.0
isort|ms-python.isort|ms-python|2026.6.0
Python|ms-python.python|ms-python|2026.4.0
Pylance|ms-python.vscode-pylance|ms-python|2026.3.1
Python Environments|ms-python.vscode-python-envs|ms-python|1.36.0
Jupyter|ms-toolsai.jupyter|ms-toolsai|2025.9.1
Jupyter Keymap|ms-toolsai.jupyter-keymap|ms-toolsai|1.1.2
Jupyter Notebook Renderers|ms-toolsai.jupyter-renderers|ms-toolsai|1.3.0
Jupyter Cell Tags|ms-toolsai.vscode-jupyter-cell-tags|ms-toolsai|0.1.9
Jupyter Slide Show|ms-toolsai.vscode-jupyter-slideshow|ms-toolsai|0.1.6
Remote - SSH|ms-vscode-remote.remote-ssh|ms-vscode-remote|0.128.0
Remote - SSH: Editing Configuration Files|ms-vscode-remote.remote-ssh-edit|ms-vscode-remote|0.87.0
CMake Tools|ms-vscode.cmake-tools|ms-vscode|1.24.42
C/C++ DevTools|ms-vscode.cpp-devtools|ms-vscode|0.6.18
C/C++|ms-vscode.cpptools|ms-vscode|1.34.4
C/C++ Extension Pack|ms-vscode.cpptools-extension-pack|ms-vscode|1.5.1
PowerShell|ms-vscode.powershell|ms-vscode|2025.4.0
Remote Explorer|ms-vscode.remote-explorer|ms-vscode|0.5.0
Language Support for Java(TM) by Red Hat|redhat.java|redhat|1.56.0
Live Server|ritwickdey.liveserver|ritwickdey|5.7.10
Run in Powershell|tobysmith568.run-in-powershell|tobysmith568|1.2.0
Gradle for Java|vscjava.vscode-gradle|vscjava|3.18.0
Debugger for Java|vscjava.vscode-java-debug|vscjava|0.59.0
Project Manager for Java|vscjava.vscode-java-dependency|vscjava|0.27.6
Extension Pack for Java|vscjava.vscode-java-pack|vscjava|0.31.1
Test Runner for Java|vscjava.vscode-java-test|vscjava|0.46.0
Maven for Java|vscjava.vscode-maven|vscjava|0.45.3
A/B Experiments
```
vsliv368:30146709
binariesv615:30325510
nativeloc1:31344060
dwcopilot:31170013
dwoutputs:31242946
copilot_t_ci:31333650
e5gg6876:31282496
pythonrdcb7:31342333
6518g693:31463988
aj953862:31281341
envsactivate1:31551504
478i5457:31544283
cloudbuttont:31379625
3efgi100_wstrepl:31403338
ec5jj548:31422691
cp_cls_t_966_ss:31526232
4je02754:31466945
c3h7c220:31478652
ge8j1254_inline_auto_hint_haiku:31490510
cp_cls_c_1081:31454833
conptydll_true:31498968
e9c30283:31461165
c9b86496:31447327
ei9d7968:31496641
chat:31457767
8hig5102:31480529
89g7j272:31518289
i2gc6536:31499202
52612955:31516516
ddid_c:31478207
hmra_i5g22:31518061
ja75b849:31580633
7df3h592:31512476
cp_cls_t_1082:31535311
logging_enabled_new:31498466
db5d2638:31499441
jb_cp_cls_t_632:31543129
56dj4588:31512888
32d76977:31512328
ha629193:31508444
a1ije391_t:31540920
jbcp_cls_pctr_t:31531130
cp_intellij_t_nes:31548657
jf4hg949:31526829
ahp-both-windows:31556933
hjji5903:31534458
7g2b5551:31542111
enable_editor_pane_layout:31569726
allow-none:31555437
ac562147:31564510
c7c27ce7:31554789
1h923230:31564177
1532g621_copy:31554320
treatment-23-1:31555779
unuse_dynamic_mcp:31555281
0d8dfbc3:31570291
a1hcc538:31559322
nemo-v2:31565334
0c1h4866:31566224
vrbsty_fls:31561059
session-archive:31558132
5b8j3302:31564601
mangle-name-treatment:31572634
intellij_nes_preview_t:31580086
multiv2:31574985
2bfb8b39:31576696
outline:31581109
aw-autom-on:31581691
permission_prompt_treatment:1332566
ccr_pr_nudge_auto_review:1319472
vsc_wsm_t:1340632
jidc7660:1370295
1g5a5742:1379227
3aced641:1389836
```
Contributor guide
Assessment
This issue has not been assessed yet.