Repository navigation
Regression: Manual Approval no longer prompts for repository-mutating Git commands after Copilot harness migration #5177
Description
Describe the bug
Critical Facts
-
Regression introduced with the October 2026 Copilot agent harness migration.
- Before the migration, VS Code Copilot Chat consistently requested explicit approval before executing repository-mutating Git commands.
- This included
git add,git commit,git push,git checkout -b,git branch -D, merges, rebases, and similar operations. - After the migration to the new Copilot agent harness, some of these commands execute without approval.
- The developer did not request or authorize a change to this approval behavior.
-
Reproduced in both Copilot CLI and VS Code Copilot Chat.
- Both environments exhibit inconsistent approval behavior.
- This suggests the problem may originate in the shared Copilot CLI agent harness or its permission-handling implementation.
-
Manual Approval mode is explicitly enabled.
- Both Copilot CLI and VS Code Copilot Chat are running in Manual Approval mode.
- Neither environment was intentionally configured to allow unrestricted tool execution.
- The observed behavior is inconsistent with the developer's expectation that repository-mutating Git commands require approval.
-
Controlled reproduction demonstrates inconsistent authorization.
- Executed
git branch -D nopethrough Copilot CLI. - The command executed without requesting approval.
- Git reported
error: branch 'nope' not found, confirming the command was actually executed. - In the same Copilot CLI session, deleting
PR_DESCRIPTION.mdthrough PowerShell triggered an explicit approval request. - Therefore, the approval mechanism is operational but is not consistently applied to potentially destructive Git commands.
- Executed
-
VS Code terminal auto-approval is explicitly disabled.
chat.tools.terminal.enableAutoApproveis set tofalse.chat.agent.sandbox.allowAutoApproveis set tofalse.chat.agent.sandbox.network.allowNetworkis set tofalse.- File-edit auto-approval is also explicitly disabled.
- Investigation suggests that the new harness may execute commands through a
powershelltool rather than VS Code's traditional terminal tool, potentially bypassing the VS Code terminal approval configuration. - This execution-path explanation remains a hypothesis, not a confirmed root cause.
-
No evidence of a persisted blanket approval.
%USERPROFILE%\.copilot\permissions-config.jsondoes not exist in the inspected configuration directory.- Extensive configuration analysis has not identified an intentional authorization for automatic execution of destructive Git commands.
- The absence of this file does not conclusively exclude other permission sources.
-
Related existing issue.
- GitHub Copilot CLI issue DESTRUCTIVE (forced) git branch deletion is MISCLASSIFIED and requires NO PERMISSION #4156 describes
git branch -Dexecuting without approval. - DESTRUCTIVE (forced) git branch deletion is MISCLASSIFIED and requires NO PERMISSION #4156
- However, this report concerns the broader regression in Git operation approvals observed after the October 2026 harness migration.
- GitHub Copilot CLI issue DESTRUCTIVE (forced) git branch deletion is MISCLASSIFIED and requires NO PERMISSION #4156 describes
Expected Behavior
In Manual Approval mode, repository-mutating Git operations should require explicit authorization before execution, consistent with the behavior of VS Code Copilot Chat before the October 2026 agent harness migration.
This includes commands such as git add, git commit, git push, branch creation/deletion, merges, and rebases.
Actual Behavior
Some repository-mutating Git commands execute without requesting authorization, despite Manual Approval mode being active.
Other destructive operations, such as deleting files through PowerShell, correctly request approval.
The resulting permission behavior is inconsistent and difficult for developers to predict.
Impact
This regression undermines human-supervised, non-autonomous coding workflows.
Previously, developers could depend on the IDE to mediate repository-mutating Git operations. After the harness migration, that authorization boundary is no longer consistently enforced.
This is particularly concerning for operations such as git push, forced branch deletion, resets, merges, and rebases, where an unintended operation can have significant consequences.
This is not a request for a new feature. It is a report of an established authorization behavior that regressed during the Copilot agent harness migration.
Environment
- OS: Windows 11
- VS Code: 1.140.0
- Copilot CLI: Manual Approval mode
- Copilot CLI version: 1.0.98
- VS Code Copilot Chat: New Copilot agent harness (October 2026 migration)
- Chat : Agent: Sandbox Enabled: off
Requested Resolution
Restore reliable, explicit approval for repository-mutating Git operations in Manual Approval mode.
Ideally, approval enforcement should be deterministic and independent of the agent model's judgment about whether a command is safe.
At minimum, developers need a supported configuration that guarantees approval before executing Git commands that modify repository state.
Affected version
GitHub Copilot CLI 1.0.98
Steps to reproduce the behavior
- Manual Permissions mode is on.
- No auto approval settings for repo-mutating git commands
- ask GH CLI or VS Code copilot chat to execute
git branch -D nopeand it executes it without prompting for approval. git pushcommands and many other repo-mutating commands also execute without first requesting approval via the built-in terminal approval mechanism.
Expected behavior
Repo-mutating git commands should prompt for approval via the built-in terminal approval mechanism as it did before the October 2026 update.
Additional context
Environment
- OS: Windows 11
- VS Code: 1.140.0
- Copilot CLI: Manual Approval mode
- Copilot CLI version: 1.0.98
- VS Code Copilot Chat: New Copilot agent harness (October 2026 migration)
- Chat : Agent: Sandbox Enabled: off
Activity
samvallad33 commentedon Oct 19, 2026
Hi EHO,
Did any real pushes or branch deletes slip through before you noticed the approval prompts had gone quiet?
I hit the same kind of problem where an agent kept running a command it had been allowed once. If that is what happened on your end, would you want to see something combining memory, authority, and security so every git command is checked before it runs and each yes works as a one-use permit?
If you feel like kicking the tires, it is a single command:
npx @vestige/init
It looks at each push, commit, and branch delete before it executes, so Manual Approval keeps meaning manual and an old approval never carries over to the next mutation.
Sam