AI 记住的从来不是你的项目,是你的路径
What the AI remembers is never your project — it is your path
前阵子整理硬盘,我把一个写了三个月的项目,从 D:\dev_code 挪进了一个新建的归档文件夹。
就这么一个动作。鼠标拖一下。
然后我重新用 Claude Code 打开它。它看着我,像看一个陌生人。
没有历史会话,没有那些我让它记下的项目约定,待办清空,连我之前精心配好的 git worktree 也全断了。三个月里它一点点摸熟的这个项目——它写过的每一个决定、踩过的每一个坑、我骂过它的每一句——一行代码都没变,它却不认识了。
那天我盯着屏幕坐了很久。然后我意识到一件挺扎心的事。
✵
带我入坑 AI 编程的一个朋友,听我抱怨完,只回了一句:
“你以为它记住的是你的项目。它记住的从来不是项目,是路径。”
这话像一根针。
我们这些天天和 AI 协作的人,心里都默认了一件事:用得越久,它越懂我的项目。我们管这个叫“积累”,叫“默契”,甚至有点引以为豪。
但你有没有想过,这份“懂”,到底挂在什么东西上?
答案很冷:挂在一个绝对路径的字符串上。
✵
这里有个很老的哲学问题,叫忒修斯之船。
一艘船,木板一块块换掉,全换完了,它还是原来那艘船吗?哲学家们吵了两千年。
而 AI 给这个问题的答案,简单粗暴到离谱——
它根本不看船。它只看船停在哪个码头。
Claude Code 把每个项目的状态,存在 ~/.claude/projects/ 下面一个文件夹里,文件夹的名字,是你项目绝对路径编码出来的。会话记录里,每一行还硬写着当时的 cwd。~/.claude.json 里,索引的键也是那个绝对路径。如果你用了 git worktree,每个 worktree 还有自己那一套。
你没换任何一块木板。你只是把船从一个码头,挪到了另一个码头。
它就不认识你了。
✵
你可能会说:那有什么,删了重来呗,代码又没丢。
正好相反。
代码从来不是最值钱的东西——代码在 git 里,跑不掉。
值钱的是那层看不见的东西:三个月的会话上下文、你一条条喂给它的项目规矩、它自己记下的避坑笔记、那套调好的 worktree 接线。这些是你和这个 AI 之间,真正花时间磨出来的资产。
它不在 git 里。它绑在一个字符串上。
你手一抖,它就没了。而且没有任何报错,没有任何提示——它只是平静地,把你当成一个新朋友。
这才是真正吓人的地方:最值钱的那部分积累,恰恰是最脆弱、最没人备份的那部分。
✵
我去翻了一圈,想找个官方的迁移命令。
没有。Anthropic 到今天(2026 年 4 月)都没出。
社区里倒是有几个小工具。我一个个试过去:有的只补两层,挪完照样失忆;有的在 Windows 上直接歇菜——盘符、反斜杠、和 .claude.json 里强行存的正斜杠对不上;几乎没有一个管 git worktree;没有一个能回滚。
最离谱的是有个工具,在 Windows 上用 shutil.move,遇到文件锁会偷偷降级成“先复制再删源”。复制完了,删源删一半锁住了——
恭喜,你现在有两个半残的项目,原来那个还被删了一半。
我盯着那个场景,心想:这事不该是这样的。
于是我自己写了一个。claude-repath。
✵
它干的事,一句话说清:你挪文件夹之前跑一下,它把那 6 层散落的状态,一次性、带备份地,全给你接回去。
# 先体检,零改动,看看到底哪些层断了
uvx --from claude-repath claude-repath doctor D:\dev_code\my-project
# 预览迁移计划(永远先 dry-run)
claude-repath move D:\dev_code\my-project D:\archive\my-project --dry-run
# 真正执行,自动先备份,出事一条命令回滚
claude-repath move D:\dev_code\my-project D:\archive\my-project
它现在能接的:
~/.claude/projects/<编码路径>/文件夹改名- 每个
.jsonl会话文件里硬写的cwd ~/.claude.json的projects索引键- git worktree 衍生的子项目(自动发现,不用你手动列)
~/.claude/git-worktrees.json- 每一步都进
~/.claude/.repath-backups/,rollback一键复原
听起来很简单。但这一年从 v0.1 到 v1.0,每一个版本号背后,都是一次真实的事故。
那个“半迁移把源目录删一半”的坑,逼出了 v0.4.1——物理移动改成原子的 os.rename,宁可大声失败,也绝不让你的源目录少一根毫毛。.venv 和 node_modules 里焊死的绝对路径,逼出了 v0.4.2 的预检警告。一个 Esc 键要等一秒才响应,我顺着 prompt_toolkit 挖下去,发现它有两个藏在不同地方的转义计时器……
每一个我焊死在里面的细节,都是我替你先踩过的一个坑。
✵
回到我朋友那句话。
我们以为我们在“积累”。其实很多时候,我们只是在一个绝对路径上,越堆越高。堆得越高,那天手一抖,摔得越狠。
工具这种东西,是不需要吆喝的。
真正撞过一次这个坑的人,会自己骂一句脏话,然后打开搜索框,然后找到它。claude-repath 在 PyPI 上,在 GitHub 上(xPeiPeix/claude-repath),MIT,免费,uvx 一行就能跑,不用装。
我没指望它火。我只指望,下一个半夜整理硬盘、手一抖的人,不用再像我那天那样,盯着屏幕坐很久。
✵
也想和你聊聊——
你最引以为豪的那些“积累”:和 AI 磨了几个月的默契、那些只有它懂的上下文、那套你舍不得重配的环境……
有多少,其实只是绑在一个绝对路径上的、一个随时会断的字符串?
哪天你手一抖,把文件夹挪了,它还认得你吗?