Cancelled user input is still delivered to the agent and processed as a valid turn (autopilot mode)
Nobody has claimed this yet.
- Dominant language
- Shell
- Stars
- 11.2k
- Forks
- 1.9k
- Avg merge
- 14h 16m
- Merged PRs (30d)
- 6
Description
Describe the bug
Summary
When I cancel a queued input before it is sent, the cancelled text is not discarded. It reappears later — bundled into a subsequent message block, carrying its original (older) timestamp — and the agent processes it as a normal user turn, with no indication it was ever cancelled. This happened in autopilot mode, in a session that also showed unstable tool availability (see "Possibly related" below).
Possibly related (same session, may share a root cause in turn/tool scheduling):
- The session was running in autopilot mode the whole time.
- The task_complete tool was repeatedly present and then absent across turns. The autopilot reminder text ("You have not yet marked the task as complete using the task_complete tool...") kept firing on turns where task_complete was NOT actually in the available tool list, so the agent could not comply and got stuck re-confirming that it was idle.
- Both symptoms look like state being assembled from stale/mismatched snapshots between turns (a stale queued input on one side, a stale tool list / reminder on the other), so they may be the same underlying issue.
Impact:
- The agent wastes a turn acting on something I explicitly cancelled.
- Cancel doesn't actually cancel, which is confusing and erodes trust.
- Potentially risky in autopilot mode: autopilot acts without waiting for confirmation, so a cancelled input containing a destructive command could be executed.
- The task_complete reminder loop wastes turns and tokens.
Suggested fix:
- Discard cancelled inputs at the delivery/queue layer so they never reach the agent context. If a cancelled input must still be forwarded, tag it explicitly (e.g. [cancelled]) so the agent can safely ignore it.
- Only emit the autopilot "mark the task complete" reminder on turns where the task_complete tool is actually exposed to the model.
Affected version
GitHub Copilot CLI v1.0.77
Steps to reproduce the behavior
- Run the CLI in autopilot mode (/autopilot), inside tmux over SSH.
- Type an input (in my case "captain setup flyte") and cancel it before/while it is being submitted.
- Continue the session with a different, unrelated message some time later.
- The cancelled input is delivered to the agent alongside the new message, and the agent starts acting on it.
Expected behavior
A cancelled input should be dropped at the delivery layer and never enter the conversation history. The agent should never see it.
Additional context
- GitHub Copilot CLI v1.0.77
- Model: Claude Opus 4.8
- Autopilot mode: ON
- OS: Linux, running inside tmux over SSH
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the cancelled-input flow in autopilot mode and trace the queue/delivery path that assembles the subsequent message block. Verify that cancelled input never enters conversation history, and separately check that the task_complete reminder is emitted only when that tool is available.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- shell
- Domain
- cli
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100