github / github/copilot-cli

Cancelled user input is still delivered to the agent and processed as a valid turn (autopilot mode)

Open
#4,336 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

area:agents area:input-keyboard
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
  1. Run the CLI in autopilot mode (/autopilot), inside tmux over SSH.
  2. Type an input (in my case "captain setup flyte") and cancel it before/while it is being submitted.
  3. Continue the session with a different, unrelated message some time later.
  4. 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.