PaPoo
cover

String to replace not found が出るときに、まず確認したいこと

この症状クラスタでは、見えている失敗が 2 つあります。ひとつは、EditWrite が「置換対象の文字列が見つからない」と扱われる系の失敗。もうひとつは、YAML の前提が崩れたときに、別の内容まで巻き込んで壊れるケースです。手元で確認できた情報だけでいうと、少なくとも #76868 では、Markdown ファイルの frontmatter が YAML として解釈できないときに、内容をそのまま残すのではなく空の stub に差し替えてしまう、という報告がありました。なお #87643 は open で、isolation:"worktree" の subagent が親セッション側の worktree に書き込んでしまう、という別系統の報告です。

最初に切り分けたいのは、「自分が遭遇しているのが、文字列置換の失敗なのか」「それとも別の場所への書き込みや frontmatter の破壊なのか」です。もし String to replace not found が出た直後に、ファイルの中身が想定外に変わっているなら、単純な置換失敗ではなく、ツール側の書き込み挙動も疑ったほうがよさそうです。逆に、何も書き換わらずに失敗だけ返るなら、置換対象の取り違えや、並行した編集で内容がずれた可能性を先に見るのが自然です。ここまでは、Issue の報告内容から言える範囲に限っています。

#76868 の報告では、auto-memory 配下の Markdown を Write / Edit で更新するとき、YAML frontmatter の parse に失敗すると、descriptiontype など既存の項目が消え、次のような最小 stub に置き換わるとされています。

---
name: ""
metadata: 
  node_type: memory
  originSessionId: <current session id>
---

この issue の本文には、body は保たれるが frontmatter は壊れる、とあります。つまり「置換に失敗しただけ」でなく、「失敗時の退避が安全ではない」可能性があります。少なくとも、書き込み対象が memory 系の Markdown で、しかも frontmatter に不正な YAML が混じっている場合は、String to replace not found のような見かけの失敗と一緒に、実体の破壊が起きていないか確認したほうがよさそうです。

一方で、コメント側にある再現手順では、Writedescription: "contains a left double quotation mark “ (U+201C)" を含む内容を作らせたところ、description が残り provenance が付く、という観測が載っています。ここから分かるのは、少なくとも一部の不正っぽい入力では、即座に壊れるわけではないことです。ただし、これは再現した環境と issue 本文の条件が一致しているとは限らず、こちらの手元では実測できていません。

手元の環境では、Claude Code は 2.1.207 でした。claude doctor では次のように出ています。

Claude Code doctor

Running: native (2.1.207)
Commit: bc512d563325
Platform: darwin-arm64
Path: ~/.local/share/claude/versions/2.1.207
Config install method: native
Search: OK (bundled)
Auto-updates: enabled
Auto-update channel: latest
Last update attempt: none recorded

Multiple installations found
- npm-global at /usr/local/bin/claude
- native at ~/.local/bin/claude

Remote Control
Control this session from claude.ai/code or the Claude mobile app

1 warning found
- Leftover npm global installation at /usr/local/bin/claude
  Fix: Run: npm -g uninstall @anthropic-ai/claude-code

多重インストールも見つかっています。

$ /usr/bin/which -a claude
~/.local/bin/claude
/usr/local/bin/claude
/usr/local/bin/claude

なので、もし同じ症状を追うなら、まずはどの claude が動いているかを確認したほうが安全です。複数インストールがある状態だと、再現の有無がすれ違うことがあります。これは推測ではありますが、少なくとも手元の claude doctor は「Multiple installations found」と警告しています。

現時点で、こちらが言えるのはここまでです。String to replace not found 自体の単独原因を、今回の一次情報だけから特定することはできません。ですが、Write / Edit の対象が frontmatter を持つ Markdown で、しかも YAML が怪しいなら、[#76868](https://github.com/anthropics/claude-code/issues/76868) のような破壊挙動と結びついていないかを先に疑う価値があります。isolation:"worktree" を使っているなら、[#87643](https://github.com/anthropics/claude-code/issues/87643) のような別の worktree 誤書き込みも頭に置いておくべきです。ただし、どちらも自分の環境で再現確認できていないため、断定はできません。


検証環境

claude --version : 2.1.207 (Claude Code)
OS          : Darwin 25.3.0 (arm64)
Python      : 3.14.2
検証日時    : 2026-08-19T02:01:09+09:00

参照した Issue(anthropics/claude-code): #87643, #76868

同じ著者の記事