Skip to content

Tool approvals sometimes silently lost when copilot CLI is used in parallel sessions #3563

@brycecutt-msft

Description

@brycecutt-msft

Describe the bug

When two or more copilot CLI sessions run simultaneously and each persists a tool approval (the "Always allow" prompt), one session's approval seems to sometimes silently overwrite the other's in ~/.copilot/permissions-config.json. The loss is not limited to the same directory — approvals for other directories in the file can also be dropped, because the entire locations object appears to be replaced rather than merged.

This makes "Always allow" feel unreliable: user repeatedly re-approves the same commands, MCP tools, and extensions after seemingly random sessions.

The same read-modify-write pattern appears to be reused for other config files, so we suspect (but did not isolate repros for) related races affecting:

  • config.jsontrustedFolders (re-prompted to trust folders that were previously trusted)

Filing this against the most reproducible case; if the team confirms a shared root cause, fixing the underlying config store should resolve the others.

Affected version

1.0.55-7

Steps to reproduce the behavior

Seems intermittent but, variations of:

  1. Open two terminals.
  2. In Terminal A: cd <dirA>, run copilot, trigger a tool that prompts for approval (e.g., any shell command), choose Always allow. Leave the session running.
  3. In Terminal B: cd <dirB> (a different directory), run copilot, trigger a tool that prompts for approval, choose Always allow. Exit the session.
  4. Back in Terminal A: trigger another tool that prompts for approval, choose Always allow. Exit the session.
  5. Inspect ~/.copilot/permissions-config.json.

Observed: locations[<dirB>] is missing entirely. Only Terminal A's view of the world survives, because Terminal A's final write replaced the on-disk locations object with its in-memory copy — which never knew about <dirB>.

Expected behavior

locations in permissions-config.json should contain entries for both <dirA> and <dirB>, with the approvals granted in each session preserved. Concurrent sessions should merge their changes, not overwrite each other.

Additional context

Environment

  • OS: Windows 11
  • CPU architecture: x86_64
  • Terminal emulator: Windows Terminal
  • Shell: PowerShell 7
  • Multiple parallel CLI sessions across different cwds (worktrees, separate projects) is the normal workflow that triggers this.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:configurationConfig files, instruction files, settings, and environment variablesarea:permissionsTool approval, security boundaries, sandbox mode, and directory restrictions

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions