Summary
Add a Allowed Tools section to the Settings page that lets users view and manage which tools Copilot CLI can use without prompting.
Background
Copilot CLI stores tool permission decisions in ~/.copilot/permissions-config.json, organised by project location. When a user approves a tool (e.g. shell(rm), write, or an MCP server tool), the CLI records it so they are not prompted again in that project.
Reference: https://docs.github.com/en/copilot/how-tos/copilot-cli/set-up-copilot-cli/configure-copilot-cli#setting-allowed-tools
Tool specification format
- Shell commands:
shell(COMMAND) e.g. shell(rm), shell(git push)
- Write tools:
write
- MCP server tools:
MCP_SERVER_NAME(tool_name) or just MCP_SERVER_NAME for all tools
Proposal
Settings page section
Add a Allowed Tools panel in the Settings page that:
Session page integration
In the Sessions page where toolsUsed are already displayed:
IPC surface
tools:get-permissions — reads permissions-config.json, returns structured permissions per project
tools:allow-tool(projectPath, toolSpec) — adds a tool to the allowed list for a project
tools:remove-tool(projectPath, toolSpec) — removes a tool from the allowed list
tools:is-allowed(projectPath, toolSpec) — checks if a specific tool is allowed (for badge colouring)
Security considerations
- Validate tool specification format before writing
- Warn users clearly that allowing
shell without arguments permits ANY shell command
- Prototype pollution guards on project path keys
- Path traversal protection on project paths
UX considerations
- Tool badges in sessions should have a clear visual distinction between "used" and "used + allowed"
- The confirmation dialog should explain: "This will allow Copilot to use this tool in future sessions without asking. Are you sure?"
- Consider an "undo" mechanism (toast notification with undo button after allowing)
Investigation needed
Summary
Add a Allowed Tools section to the Settings page that lets users view and manage which tools Copilot CLI can use without prompting.
Background
Copilot CLI stores tool permission decisions in
~/.copilot/permissions-config.json, organised by project location. When a user approves a tool (e.g.shell(rm),write, or an MCP server tool), the CLI records it so they are not prompted again in that project.Reference: https://docs.github.com/en/copilot/how-tos/copilot-cli/set-up-copilot-cli/configure-copilot-cli#setting-allowed-tools
Tool specification format
shell(COMMAND)e.g.shell(rm),shell(git push)writeMCP_SERVER_NAME(tool_name)or justMCP_SERVER_NAMEfor all toolsProposal
Settings page section
Add a Allowed Tools panel in the Settings page that:
~/.copilot/permissions-config.jsonand displays allowed/denied tools per projectSession page integration
In the Sessions page where
toolsUsedare already displayed:IPC surface
tools:get-permissions— readspermissions-config.json, returns structured permissions per projecttools:allow-tool(projectPath, toolSpec)— adds a tool to the allowed list for a projecttools:remove-tool(projectPath, toolSpec)— removes a tool from the allowed listtools:is-allowed(projectPath, toolSpec)— checks if a specific tool is allowed (for badge colouring)Security considerations
shellwithout arguments permits ANY shell commandUX considerations
Investigation needed
permissions-config.json(approve a tool in CLI to generate the file)