github / github/copilot-cli

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

未關閉
#3,563 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
area:configuration area:permissions
主要語言
Shell
星號
11.2k
分支
1.9k
平均合併
14 小時 16 分鐘
30 天內合併 PR
6

描述

### 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.json` → `trustedFolders` (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 `, 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 ` (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[]` 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 ``.

### Expected behavior

`locations` in `permissions-config.json` should contain entries for both `` and ``, 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.

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。