Image paste (Ctrl+V) stopped working in Windows Terminal
Open 💬 25 comments Opened Mar 10, 2026 by Haotiandtc
Description
The ability to paste images directly using Ctrl+V in Claude Code CLI has stopped working. This feature was working normally about a month ago but has since stopped functioning.
Environment
- Claude Code Version: 2.1.12
- Terminal: Windows Terminal 1.24.10621.0
- OS: Windows
- Shell: PowerShell
Expected Behavior
When taking a screenshot and pressing Ctrl+V in the Claude Code conversation window, the image should be pasted and sent to Claude for analysis.
Actual Behavior
Pressing Ctrl+V does nothing. The image is not pasted or sent.
Steps to Reproduce
- Open Claude Code in Windows Terminal (PowerShell)
- Take a screenshot using any screenshot tool (e.g., Windows + Shift + S)
- Try to paste the image using Ctrl+V in the Claude Code conversation
- Nothing happens - image is not pasted
Additional Context
- The feature was working approximately one month ago
- Configuration file shows
"image-paste": 22in.claude.json, indicating the feature should be available - Windows Terminal's Ctrl+V keybinding is correctly configured for paste operations
- Multiple users have reported similar issues online
Configuration Evidence
From .claude.json:
"image-paste": 22
Windows Terminal keybinding is properly set:
{
"id": "Terminal.PasteFromClipboard",
"keys": "ctrl+v"
}
Impact
This significantly reduces workflow efficiency as users need to save screenshots to disk and manually provide file paths instead of directly pasting from clipboard.
25 Comments
same problem in v2.1.76
Still occurring in v2.1.84 with a slightly different behavior.
Environment:
Behavior:
Alt+V keybinding triggers correctly, but Claude Code responds with:
> "No image found in clipboard. Use alt+v to paste images."
Steps to reproduce:
Confirmed: The image IS in the clipboard — PowerShell can read it:
```powershell
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Clipboard]::GetImage() -ne $null
# Returns: True
Same here
Claude Code v2.1.86
Same here. v2.1.86
Same for v2.1.89
same v2.1.89 - it's been months now
Same in v2.1.91
2.1.104
Same issue, Windows terminal Alt + v or Ctrl + v both are not working
Same issue here, "No image found in clipboard. Use alt+v to paste images."
Ctrl+V, Alt+V are not working
The solution is to delete Claude code and its folders completely from your system users/name/appdata and all folders and install native using PowerShell or a terminal command, not using npm from the official docs now is working with Alt + V i m on Windows 11
Same issue, Windows terminal Alt + v or Ctrl + v both are not working
Still reproducing on Windows 10 Home (10.0.19045) / Claude Code 2.1.113 / VS Code 1.116.0 integrated terminal. Ctrl+V image paste silently fails every time. Same configuration works on Linux (same account). No in-terminal workaround — only option is saving the image to disk and referencing the file path.
Working workaround for Windows: AutoHotkey + PowerShell bridge (single Ctrl+V press)
Tested on Claude Code 2.1.123, Windows 11 26200, PowerShell 7.6.1, Windows Terminal 1.24.10921. After
hitting this bug, I built a clipboard bridge that intercepts Ctrl+V in any terminal window, saves the
raw clipboard bitmap to a temp PNG, swaps the clipboard for the file as a FileDropList, then sends
Alt+V (the shortcut Claude Code accepts for file paste on Windows). Net result: Win+Shift+S then
Ctrl+V works in one press, exactly like on macOS.
Two small files, no admin required, no changes to Claude Code itself. Disabling it later is just
deleting the startup shortcut.
winget install --id AutoHotkey.AutoHotkey --silent
Heads-up: many AVs (Avast / AVG) flag AutoHotkey64.exe as IDP.Generic because it hooks the keyboard.
It is a long-known false positive for a legitimate open-source tool from autohotkey.com. Whitelist the
executable and the scripts folder, otherwise PowerShell calls from the script will be delayed by
minutes during heuristic scans.
Path: %USERPROFILE%\.claude\scripts\claude-paste-helper.ps1
param(
[Parameter(Mandatory=$true)][string]$OutPath
)
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$img = [System.Windows.Forms.Clipboard]::GetImage()
if ($null -eq $img) { exit 1 }
$dir = Split-Path -Parent $OutPath
if (-not (Test-Path $dir)) {
New-Item -ItemType Directory -Path $dir -Force | Out-Null
}
$img.Save($OutPath, [System.Drawing.Imaging.ImageFormat]::Png)
$img.Dispose()
$col = New-Object System.Collections.Specialized.StringCollection
[void]$col.Add($OutPath)
[System.Windows.Forms.Clipboard]::SetFileDropList($col)
exit 0
Path: %USERPROFILE%\.claude\scripts\claude-paste.ahk
#Requires AutoHotkey v2.0
#SingleInstance Force
global LogPath := EnvGet("USERPROFILE") . "\.claude\scripts\claude-paste.log"
Log("=== AHK started ===")
CleanupOldFiles()
#HotIf IsClaudeWindow()
~$^v::ClaudePaste()
#HotIf
IsClaudeWindow() {
try {
proc := WinGetProcessName("A")
terminals := ["claude.exe", "WindowsTerminal.exe", "wt.exe", "pwsh.exe", "powershell.exe",
"cmd.exe", "conhost.exe", "OpenConsole.exe", "alacritty.exe", "wezterm-gui.exe", "Hyper.exe",
"Tabby.exe", "mintty.exe", "Code.exe", "Cursor.exe"]
for term in terminals {
if (proc = term)
return true
}
title := WinGetTitle("A")
return InStr(title, "claude") > 0
} catch {
return false
}
}
ClaudePaste() {
hasImage := DllCall("IsClipboardFormatAvailable", "UInt", 8) ||
DllCall("IsClipboardFormatAvailable", "UInt", 2) || DllCall("IsClipboardFormatAvailable", "UInt", 17)
if !hasImage {
Log("Ctrl+V without image, pass-through")
return
}
tempDir := A_Temp . "\claude_paste"
if !DirExist(tempDir)
DirCreate(tempDir)
filePath := tempDir . "\img_" . FormatTime(, "yyyyMMdd_HHmmss") . "_" . A_TickCount . ".png"
helperPath := EnvGet("USERPROFILE") . "\.claude\scripts\claude-paste-helper.ps1"
cmd := 'powershell.exe -Sta -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "' .
helperPath . '" -OutPath "' . filePath . '"'
exitCode := RunWait(cmd, , "Hide")
if (exitCode != 0 || !FileExist(filePath)) {
Log("Save failed (exit " . exitCode . ")")
Tip("Claude paste: save failed")
return
}
Log("Image saved: " . filePath)
Sleep 80
; Force-release Ctrl (user might still hold it), then send a clean Alt+V
SendInput "{LCtrl up}{RCtrl up}"
Sleep 30
SendInput "!v"
}
Tip(msg) {
ToolTip msg
SetTimer () => ToolTip(), -2500
}
Log(msg) {
try {
ts := FormatTime(, "yyyy-MM-dd HH:mm:ss")
FileAppend(ts . " | " . msg . "`n", LogPath)
}
}
CleanupOldFiles() {
tempDir := A_Temp . "\claude_paste"
if !DirExist(tempDir)
return
cutoff := DateAdd(A_Now, -7, "Days")
Loop Files, tempDir . "\*.png" {
if (A_LoopFileTimeModified < cutoff) {
try FileDelete A_LoopFileFullPath
}
}
}
$ahkExe = "$env:LOCALAPPDATA\Programs\AutoHotkey\v2\AutoHotkey64.exe"
$script = "$env:USERPROFILE\.claude\scripts\claude-paste.ahk"
$startup = [Environment]::GetFolderPath('Startup')
$lnkPath = Join-Path $startup 'ClaudePasteBridge.lnk'
$wsh = New-Object -ComObject WScript.Shell
$lnk = $wsh.CreateShortcut($lnkPath)
$lnk.TargetPath = $ahkExe
$lnk.Arguments = "
"$script""$lnk.WorkingDirectory = Split-Path $script
$lnk.Save()
Start-Process -FilePath $ahkExe -ArgumentList "
"$script""Why this specific combination works
dropped the keystroke in Windows Terminal); $ prevents the SendInput !v from re-triggering the hotkey.
Windows.
when AHK fires, and Claude sees Ctrl+Alt+V instead of plain Alt+V, which silently does nothing. Adding
the explicit Ctrl release made the workaround single-press instead of double-press.
Uninstall (when Anthropic ships a real fix)
Get-Process AutoHotkey64 -ErrorAction SilentlyContinue | Stop-Process -Force
Remove-Item "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\ClaudePasteBridge.lnk"
Remove-Item "$env:USERPROFILE\.claude\scripts\claude-paste.ahk"
Remove-Item "$env:USERPROFILE\.claude\scripts\claude-paste-helper.ps1"
# Optional: winget uninstall AutoHotkey.AutoHotkey
Hope this saves time for others until the upstream fix lands.
On Windows 10, updating PowerShell to the latest version (v7) resolved the issue for me just a couple days ago. I installed it directly from the Microsoft Store, and since then, the clipboard error is gone, copying and pasting images now works without any problems.
works on PS 5 and PS 7 to use shortcut ALT + V + Q
better but still not as convenient if we just had CTRL + V
On native Windows Claude Code, Alt+V image paste showed:
"No image found in clipboard. Use alt+v to paste images"
even though Win+Shift+S had copied an image.
Root cause:
powershell.exewas not in PATH. My default shell was PowerShell 7 (pwsh.exe), but Claude Code seems to rely onWindows PowerShell 5.1 for reading image data from the clipboard.
Fix:
Add this to PATH:
C:\Windows\System32\WindowsPowerShell\v1.0
Then restart the terminal. After
where powershellresolved correctly, Alt+V image paste worked.Suggestion: Claude Code should either call
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exedirectly, or fall backto
pwsh.exe. The current error message is misleading because the clipboard does contain an image.Not working here.
Version v2.1.138 works - Version v.2.1.141 does not.
same for me :-(
Version v.2.1.143 does not work , neither ctrl+v or alt+v could paste image
Confirmed this is broken on v2.1.133, v2.1.138, and v2.1.143 when using claude code cli in windows terminal. How has this issue existed for so long without a fix?
Additional diagnostics — fault isolated to Claude Code's paste handler, not the OS clipboard
Hitting this on Windows 11. I ran a full diagnostic pass to isolate the layer that fails. Summary up front: the Windows clipboard and the exact PowerShell commands Claude Code uses are provably fine — the failure is entirely inside
claude.exe's paste handler.Environment
%USERPROFILE%\.local\bin\claude.exe)System32\WindowsPowerShell\v1.0\powershell.exe); PowerShell 7 /pwshnot installedNo image found in clipboard, mostly with Snipping Tool (Win+Shift+S) snipsWhat Claude Code 2.1.143 actually runs (extracted from the binary)
The image-paste path spawns:
and a separate spawn for the save:
A non-zero exit from either produces
No image found in clipboard. There is no retry.Tests run
ContainsImage: True,GetImage()returnsOK 1839x1341/1011x945from STA PowerShell. The OS clipboard holds a valid bitmap.powershell -NoProfile -NonInteractive -Sta -Command "..."for both CHECK and SAVE: exit 0, valid PNG written, whenever an image is on the clipboard.ContainsImage: True/GetImage: OK 1368x652for the entire 40 s, no decay.powershellspawns of the CHECK command: 155–171 ms, median 159 ms. No timeout-race window.Hypotheses eliminated by measurement
-Stais passed;pwshnot installed)-Sta/-NonInteractiveflags — ruled out (verbatim call succeeds)Conclusion
Every layer outside
claude.exeis clean: the OS clipboard reliably holds the image, and Claude Code's own extracted PowerShell commands succeed 100 % when run directly. The failure occurs only when the paste is driven through Claude Code's TUI handler. The bug is in Claude Code's paste code path itself — likely how/when it spawns or sequences the check relative to the keypress — and there is no client-side or OS-side configuration that fixes it.Happy to provide the diagnostic scripts or run further instrumented tests if a maintainer wants specific data.
Same on Antigravity IDE (Google's VS Code fork) integrated terminal, Windows 11 Pro 22621, Claude Code 2.1.143.
After an Antigravity auto-update wiped the previous IDE config and recreated a fresh one,
Ctrl+V(andAlt+V) for image paste silently fail — same symptom @nthetrack documented above. The OS clipboard is fine:[System.Windows.Forms.Clipboard]::ContainsImage()returnsTrueandGetImage()saves a valid PNG. Restoringterminal.integrated.defaultProfile.windows = "PowerShell"(Windows PowerShell 5.1) in settings.json did not help.Workaround that fully unblocks the flow (PowerShell, no AutoHotkey / no admin):
Append to
$PROFILE, then the flow is:Win+Shift+S→cpimg→Ctrl+V(pastes the@<path>string, which Claude Code consumes as an attached image via the@pathsyntax). Two extra keystrokes vs native Ctrl+V, works in any terminal (Git Bash, PowerShell, integrated VS Code/Antigravity), and doesn't depend on whichever code path insideclaude.exeis regressed.Reposting here in case anyone else lands on Antigravity (or any other VS Code fork) and finds that the usual "switch to PowerShell 5.1" answer doesn't move the needle.
Still broken in v2.1.146
Two follow-up notes since the diagnostic above
The format-detection hypothesis doesn't survive the verbatim test.
@jshaofa-ui's diagnosis in #59661 (cross-posted in #58923) — that the handler was narrowed to
CF_BITMAP/image/pngand missesCF_DIBV5from Win+Shift+S — would predict that Claude Code's own extracted PowerShell would fail to detect Snipping Tool snips. It doesn't. Test #2 above runs the literal[System.Windows.Forms.Clipboard]::ContainsImage()/GetImage()calls Claude Code spawns, and they returnTrue+ a valid PNG specifically for Win+Shift+S snips — which is what every failed paste in this thread is reproducing on.WinForms.ClipboardcoversCF_DIBV5via the underlying OLE reader. The format gap isn't where the bug lives — the regression has to sit downstream of the PowerShell call (exit-code interpretation, stdout parsing between CHECK and SAVE, or spawn-vs-keystroke sequencing).On the "first press fails, second succeeds" symptom in #59161.
Anecdotally my failures aren't uniformly random — the first Alt+V after a fresh snip never works, but a second or third press a moment later sometimes does, with the clipboard contents untouched. Same pattern #59161 was opened for. Combined with the cold-spawn latency in test #4 (155–171 ms), that's more consistent with a spawn-vs-keystroke race than with a content-detection bug. Happy to instrument the press-side specifically (log each Alt+V, spawn timestamps, exit codes, and whether Claude accepted it; vary the inter-press delay) if it would help a maintainer narrow the window.
Still exists on Claude Code v2.1.159 on Windows 11 in Command Prompt. Used to work fine on older versions. (last month)