Claude Media
Claude Codeにスクリーンショットをドラッグするとパスが入りEPERMで読めない(macOS)

Claude Codeにスクリーンショットをドラッグするとパスが入りEPERMで読めない(macOS)

macOSのスクリーンショットの浮動サムネイルをClaude Codeへドラッグすると、画像でなく一時ファイルのパスが入りEPERMで読めません。症状の見分け方と、クリップボード経由の回避策をまとめます。

macOSでスクリーンショットを撮ったあと、画面の隅に出る浮動サムネイルをClaude Codeのプロンプトへドラッグすると、画像として添付されずに一時ファイルのパスが文字で入る症状があります。そのパスをClaudeに読ませようとすると、ReadツールもBashもOperation not permitted(EPERM)で失敗します。回避策は、クリップボード経由でCtrl+Vと貼ることです。

この症状はGitHubのissue #105449で報告されている不具合で、issueはopenです。報告ではClaude Code 2.1.295、macOS(Darwin 25.6)で再現しています。

症状: [Image #N]でなくパスが入る

正常に画像が添付されたときは、プロンプトに[Image #N]のチップが入ります。公式ドキュメントも、Ctrl+Vによる貼り付けで[Image #N]のチップがカーソル位置に入ると説明しています。

不具合が出ているときは、チップの代わりに次のような文字列が入ります。

/var/folders/…/T/TemporaryItems/NSIRD_screencaptureui_XXXXXX/Screenshot <日付>.png

NSIRD_screencaptureui_で始まるフォルダ名が見分けの目印です。報告によると、再現手順は次の3つです。

手順

再現の流れ

  1. 1

    スクリーンショットを撮る

    ⌘⇧4で範囲を撮り、画面の隅に浮動サムネイルを出します。

  2. 2

    サムネイルをドラッグする

    サムネイルが消える前に、Claude Codeのプロンプトへドラッグします。

  3. 3

    Claudeに読ませる

    プロンプトにパスが入り、読ませるとReadツールがEPERM: operation not permitted, open '…/NSIRD_screencaptureui_XXXXXX/Screenshot <日付>.png'を返します。

なぜEPERMになるのか

報告者の切り分けでは、ファイルは消えていません。サムネイルを撮った直後のフォルダをlsしてもcpしても、Operation not permittedになります。フォルダの持ち主は自分のユーザーで、権限はdrwx------です。Unixの権限が原因ではなく、macOSがスクリーンショット機能の一時置き場を保護している、というのが報告者の見立てです。

見落としやすいのは、Claude Codeのサンドボックスと無関係な点です。報告ではBashのサンドボックスをオンにしてもオフにしても同じ結果でした。サンドボックス側の失敗との違いは、別記事のsandboxでgit SSHだけ失敗する原因でも扱っています。

要するに、Claudeが読めない場所のパスを、Claude Codeが「読める画像」として扱わずに文字のまま入れてしまう症状です。

過去の報告との違い

同じ操作の不具合は以前にも報告されています。issueの記述によると、3件とも修正されないまま自動でcloseされています。

issue内容報告されたバージョン
#53631内容サムネイルのドラッグで、画像でなく一時パスが文字で入る報告されたバージョンv2.1.119
#80980内容ドラッグした画像が捨てられる。v2.1.104はドロップ時にファイルを読み、v2.1.108以降は読まなくなったとの記述あり報告されたバージョンv2.1.108以降
#48655内容ドロップしたスクリーンショットが[Image #N]でなくパスで表示される報告されたバージョン記載なし

#80980では、一時パスがENOENT(ファイルが無い)になっていました。今回のissueで新しいのは、ファイルが残っているのに読めない(EPERM)という変種です。報告者は、ドロップした時点でファイルを読み込んで埋め込めば、両方の変種が直るはずだと提案しています。端末がmacOSの許可を持っている間に読む、という考え方です。

回避策1: クリップボード経由で貼る

報告者が確認した回避策は、クリップボードに撮ってからCtrl+Vで貼る方法です。

  1. ⌃⇧⌘4(Controlを足した範囲指定)で撮り、画像をクリップボードに入れる
  2. Claude CodeのプロンプトでCtrl+Vを押す

issueの本文は、この方法が正しく添付されると書いています。コメントでも、ほかの条件が何であってもクリップボード経由は成功した、と補足されています。

iTerm2ではCmd+Vでも貼れます。この対応はinteractive modeのドキュメントにある、Ctrl+VまたはCmd+V(iTerm2)の行に載っています。Terminal.appで貼れない場合は、別記事のTerminal.appで画像貼り付けが効かない原因が切り分けの手がかりになります。

回避策2: 保存したファイルをドラッグする、ただし場所に注意

issue本文は、Finderから保存済みファイルをドラッグすれば添付できると書いていました。ところがコメントで訂正が入っています。訂正の内容はこうです。

  • 保存先が~/Desktopのスクリーンショットも、ReadツールとlsがEPERMで失敗した
  • 原因は、端末アプリがシステム設定の「プライバシーとセキュリティ」→「ファイルとフォルダ」でDesktopへのアクセスを持っていなかったこと
  • そのため、Desktop・Documents・Downloadsからの保存済みファイルのドラッグも、許可がなければ同じ壁に当たる

保存してから使うなら、次のどちらかになります。

  • 端末アプリが読める場所(プロジェクトのディレクトリなど)にスクリーンショットを移してからドラッグする
  • 端末アプリに、そのフォルダへのアクセスを許可する

後者の許可は、端末アプリ側の設定です。バックグラウンドセッションの許可とは別物で、手順はOperation not permittedの原因を扱った記事の「端末側のEPERM」の節にまとまっています。

公式ドキュメントの画像の入れ方は3つです。

  • 画像をClaude Codeのウィンドウにドラッグ&ドロップする
  • コピーしてCtrl+Vで貼る
  • 画像のパスをClaudeに伝える

3つ目のパス指定も、そのパスをClaudeが開けるかどうかに左右されます。報告に載っている事実は、クリップボード経由がどの条件でも添付され、ファイルのパスが関わる経路は置き場所しだいで失敗した、という点です。

経路と置き場所の組み合わせで見る

3つの入れ方を、元になるファイルの置き場所と掛け合わせると、失敗する範囲が見えてきます。

入れ方浮動サムネイルの一時フォルダ許可のない保護フォルダ端末アプリが読める場所
ドラッグ浮動サムネイルの一時フォルダEPERM(issue本文)許可のない保護フォルダEPERM(コメント)端末アプリが読める場所添付される(issue本文)
クリップボードから貼る浮動サムネイルの一時フォルダファイルを経由しない許可のない保護フォルダファイルを経由しない端末アプリが読める場所ファイルを経由しない
パスをClaudeに伝える浮動サムネイルの一時フォルダ同じEPERMになる見込み許可のない保護フォルダ同じEPERMになる見込み端末アプリが読める場所開けるなら読める

表の「見込み」は、報告に直接の検証がない欄です。ドキュメントはパス指定を3つ目の方法として挙げるだけで、macOSの保護との関係には触れていません。一方、報告で失敗したのはいずれも、端末アプリがファイルを開こうとした場面でした。

分かれ目は、ドラッグの仕方より、端末アプリがそのファイルを開けるかどうかにあります。クリップボードの経路は、この表の置き場所に左右されません。報告はその理由を述べていませんが、ファイルを開かずに画像を受け取る点が、ほかの経路との違いです。サムネイルのドラッグでは、一時フォルダの保護と端末アプリの許可の有無が、そのまま成否になります。

自分の環境で起きているかを確かめる

症状が出たら、まずプロンプトに入った文字列を見ます。[Image #N]ならこの記事の症状ではありません。パスなら、次の順で切り分けます。

# 一時フォルダの親が見えるかを確認する(パスは入った文字列に置き換える)
ls "/var/folders/…/T/TemporaryItems/NSIRD_screencaptureui_XXXXXX"
 
# 端末アプリが保護フォルダを読めるかを確認する
ls ~/Desktop

1つ目がOperation not permittedなら、今回の症状です。2つ目も失敗するなら、端末アプリのフォルダアクセスが原因の候補になります。どちらもsudoで変わるかどうかは、報告では確認されていません。

同じ症状に出会ったClaudeへの指示を決めておく

パスが入ったままClaudeに依頼すると、Claudeが何度も同じ読み込みを試みてターンを使うことがあります。繰り返し当たる環境では、CLAUDE.mdに再試行を止める一文を置けます。次は例示の書き方です。

# スクリーンショットの扱い
- プロンプトに `NSIRD_screencaptureui_` を含むパスが入っていたら、
  読み込みを試さず、Ctrl+V でクリップボードから貼り直すよう案内する
- `Operation not permitted` は権限の問題なので、sudo や chmod を提案しない

この指示は、パスの文字列を見て読み込みを諦めさせるだけです。画像が添付されるようにはなりません。

別の症状との見分け

画像まわりの失敗は、見た目が似ていても原因が違います。プロンプトに何が入ったかと、エラー文で分けられます。

見えるもの疑う原因読む記事
NSIRD_screencaptureui_のパス+EPERM疑う原因浮動サムネイルのドラッグ(この記事)読む記事この記事
[Image #N]は入るがUnable to resize image疑う原因画像の形式・寸法読む記事画像のリサイズエラー
Refusing to read+symlink resolution changed疑う原因ドラッグしたスクリーンショットのリンク解決の食い違い(v2.1.273で修正)読む記事下の「同じドラッグでもメッセージが違うとき」の節
画像やPDFだけFile does not exist疑う原因PID namespaceと/procの食い違い読む記事File does not existの原因
WindowsでAlt+Vが遅い疑う原因貼り付けの仕組み読む記事Alt+V画像貼り付けが遅い理由

見分けのコツは、チップが出たかどうかです。[Image #N]が出ていれば、Claude Codeは画像を受け取っています。以降の失敗は画像そのものの問題で、今回のようなパスの文字列とは別の話になります。逆にパスの文字列が入っているときは、画像は一度もClaudeに渡っていません。Claudeに「画像が壊れている」と言わせて直そうとせず、貼り直すほうが早く済みます。

同じドラッグでもメッセージが違うとき

macOSでドラッグしたスクリーンショットが読めない症状には、別の原因のものもあります。エラーが次の形なら、一時フォルダの保護とは別の話です。

Refusing to read <path>: its symlink resolution changed after permission was checked (<reason>)

これはClaude Codeが、権限を確認した後でパスの行き先が変わったと判断して読み込みを拒否したときの表示です。エラーリファレンスの「Refusing to read, write, or search a path」の節は、macOSでドラッグしたスクリーンショットのように、何も書き換えていないファイルで出た場合の対処として、v2.1.273以降へのアップグレードを挙げています。変更履歴にも、macOSでドラッグしたスクリーンショットをReadが拒否する問題の修正がv2.1.273にあります。

今回のissueはClaude Code 2.1.295での報告なので、v2.1.273の修正が入った後でも起きる症状です。メッセージがOperation not permitted(EPERM)なら今回の症状、symlink resolution changedならバージョンの更新で解消するほうの症状、と読み分けられます。

修正が入るまでの付き合い方

issueはopenで、修正済みのバージョンも示されていません。同じ操作の過去の報告が自動closeされていることから、直るまでは回避策に頼る前提で見ておくのが現実的です。

使い分けは次の表のとおりです。

やりたいこと向く方法注意
撮ってすぐ聞く向く方法⌃⇧⌘4でクリップボードに撮り、Ctrl+V注意報告ではどの条件でも成功
後から何度も使う向く方法読める場所に保存してドラッグ注意保護フォルダは許可が要る
サムネイルをドラッグしたい向く方法不安定(報告あり)注意[Image #N]にならなければ撤回

操作の癖として、撮ったあとにサムネイルをつかむ代わりに、最初からクリップボードに撮る習慣に切り替えるのが手間の少ない対処です。

まとめ

サムネイルのドラッグで入るパスは、macOSが保護する一時フォルダを指しているため、Claudeには読めません。画像として添付されたかどうかは、プロンプトに[Image #N]が出るかで判断できます。⌃⇧⌘4とCtrl+Vの組み合わせなら、報告されたどの環境でも添付できました。保存したファイルをドラッグするときは、置き場所が端末アプリに許可されているかが分かれ目です。

参照した一次ソース

この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。

  1. github.com/anthropics/claude-code/issues/105449
  2. code.claude.com/docs/en/common-workflows
  3. code.claude.com/docs/en/interactive-mode
  4. code.claude.com/docs/en/errors
  5. code.claude.com/docs/en/changelog
この記事を共有:XはてブLinkedIn