Копировать изображение в Windows и вставить его в Claude Code в WSL через Windows Terminal не получается — и на это есть три отдельные причины.
Первая: встроенный в WSLg механизм синхронизации буфера обмена передаёт изображения из Windows в Linux только в одном формате — старом BMP с редкой цветовой схемой BI_BITFIELDS. Claude Code не умеет его читать. Библиотека sharp в WASM-сборке не поддерживает BMP вообще — ни одного варианта. Поэтому команда chat:imagePaste молча проваливается.
Вторая проблема тоньше. Если написать скрипт, который сам достаёт картинку из Windows, конвертирует её в PNG и заливает в Linux-буфер через wl-copy, всё работает пару секунд. Потом WSLg замечает изменение в Linux-буфере, синхронизирует его обратно в Windows, а затем — по триггеру изменения Windows-буфера — затирает ваш PNG обратно тем же битым BMP. Причём происходит это напрямую, минуя Windows-буфер, так что ваш наблюдатель на стороне Windows ничего не видит.
Третья: Windows Terminal перехватывает Ctrl+V раньше, чем его получает Claude Code. Ctrl+V занят самой консолью для вставки текста. Клавиша не доходит до приложения.
Автор собрал обходной путь wsl-clip-bridge. Он состоит из трёх частей: Windows-программа clip-listener.exe, которая кодирует изображения в настоящий PNG через GDI+ (обходит проблему #1); скрипт в WSL, который через wl-copy заливает PNG в Linux-буфер и через полсекунды перезаписывает его ещё раз — на случай, если WSLg успел подменить картинку обратно на BMP (#2); и привязка Alt+V к chat:imagePaste в ~/.claude/keybindings.json — это обходит захват Ctrl+V терминалом (#3). Код лежит на github.com/rajveerb/wsl-clip-bridge.
Из четырёх составляющих проблемы: за формат BMP и перезапись буфера отвечает Microsoft (WSLg), за нечитаемый BMP отвечает Claude Code (можно исправить одним PR), за перехват Ctrl+V — Microsoft (Windows Terminal). Решение перестанет быть нужным, когда WSLg начнёт передавать PNG, Claude Code научится читать BMP, а Windows Terminal перестанет красть комбинацию вставки.