Hook `ask` decisions show raw JSON instead of diff view
Nobody has claimed this yet.
- Dominant language
- Shell
- Stars
- 11.2k
- Forks
- 1.9k
- Avg merge
- 14h 16m
- Merged PRs (30d)
- 6
Description
Describe the bug
Copilot CLI normally shows a rich diff/content view when asking permission to create or edit a file. However, when the ask decision comes from a PreToolUse hook (i.e. the hook returns {"permissionDecision": "ask", "permissionDecisionReason": "..."}) rather than from the default built-in ask-before-write behavior, that rich diff view does not get triggered.
Instead, the "Hook permission request" dialog renders the permissionDecisionReason correctly as readable yellow text, but shows the proposed change as a single JSON line containing the raw tool input (file path plus the entire file content field), hard-wrapped at the current terminal width. For a file write/edit with non-trivial content this becomes a wall of wrapped JSON (quotes, escaped \n, braces, etc.) that is effectively unreadable, instead of the normal diff view Copilot CLI already has and uses elsewhere.
Affected version
$ copilot --version
GitHub Copilot CLI 1.0.70.
Steps to reproduce the behavior
- Configure a
PreToolUsehook script for Copilot CLI (a hook that reads the tool-call JSON from stdin and can return a permission decision). - Have the hook return an
askdecision for a file create/edit tool call, e.g.:{ "permissionDecision": "ask", "permissionDecisionReason": "Human review requested for this file write." } - Trigger a tool call that creates or edits a file with non-trivial (multi-line) content.
- Observe the "Hook permission request" dialog that Copilot CLI shows: compare it to the normal ask-before-write dialog (without a hook forcing
ask), which renders a proper diff/content view for the same kind of file change.
Expected behavior
- The
permissionDecisionReasonshould display as it currently does (readable yellow text) — this part works correctly. - When the
askdecision is produced by a hook for a file create/edit tool, the dialog should render the proposed change using the same rich diff/content view Copilot CLI already uses for its default ask-before-write flow, instead of falling back to a single wrapped line of raw JSON tool input.
Additional context
- OS: Windows 11
- CPU architecture: x86_64
- Terminal: Windows Terminal
- Shell: PowerShell 7 — note that Copilot CLI runs its own tool calls (including file create/edit) via its internal PowerShell invocation regardless of the interactive shell, so this shouldn't affect reproduction
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the issue through a PreToolUse hook that returns an ask decision for a multiline file create or edit, then compare the Hook permission request dialog with the default ask-before-write flow. Trace the hook permission request entry point and the existing diff/content view; done means the hook path preserves the readable reason and uses that same rich view instead of wrapped raw JSON.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- powershell, shell
- Domain
- cli
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100