Notes · 2026.03.28

不要在 $HOME 里改项目

搜索会吞掉整个家目录。

1 min · tools

有一次我在家目录里让 agent 搜一段约定。它把 Projects、Documents、下载文件夹、旧备份一起扫进去,半小时后交出一份对了半截的补丁:路径写对了,仓库写错了。改的是隔壁项目里同名的文件。

写代码的会话应在目标仓库根启动。cwd 是 $HOME 时,项目级 AGENTS.md 加载不到,搜索还会吞掉整个家。这台机器上同时躺着全站、智能体、文本和视觉训练、评测标注、论文、建模竞赛。家目录是入口,不是仓库。入口里改项目,等于在火车站大厅里修某一趟车的座椅:你看得见所有车,也最容易坐错。

真要改某个项目,先进那个仓库。cd ~/Projects/bosprimigenious.github.io 再开会话,Jekyll 的锁文件、al-folio 的皮肤、_posts/ 的 permalink 才会是这一份。去改 meetchances 或 TextGuard,就进那一个根。Home 级任务可以留在 home:配 Grok、整理 ~/shared-ai-skills/、改 ~/.grok。那一类活本来就跨仓库,硬塞进某个项目根,反而会把个人约定写进别人的 git。

踩过的样子很具体。agent 在 $HOME 里 find,命中十几份叫 AGENTS.md 的文件,有的是软链,有的是旧副本。它挑了最近改过的那份,按那份的包管理器去装依赖。这个站有 Gemfile,该 bundle exec;隔壁前端有 pnpm-lock.yaml,该 pnpm。混在一次会话里,装错工具链的成本比写错一句中文大。我后来把这条写成句子,贴进自己的约定:一次会话一个主仓库,写代码不要在 $HOME 里开始。

课和赛也在抢同一台电脑的工作目录。课设截止那一周,仓库根是课程作业;国创路演前,仓库根是「智在旅途」;站点要上新故事页,仓库根才轮到 bosprimigenious.github.io。三件事都在 ~/Projects 下面,差一层目录。差那一层,提交会进错 remote,本地预览会起错端口,搜索会把论文里的「exclude」和 Jekyll 的 exclude: 当成同一件事。我现在开终端先看提示符里的路径,再决定能不能让 agent 动手。

站点本地预览必须在仓库根敲:

bundle exec jekyll serve --host 127.0.0.1 --port 4000

这条命令在家目录里会找不到 Gemfile,或者捡到另一份 Ruby 环境。系统自带的 Ruby 不够,PATH 里要有 brew 的 ruby@3.3。缺 jupyter-nbconvert 的话,这个站已经把 assets/jupyter/ 写进 _config.yml 的 exclude,不必为了一次误启动去家目录里乱装 Python。代理在 ~/.zshenv 的 127.0.0.1:7890,那是机器级配置,和某个项目的构建无关;不要为了「先跑起来」把代理写进仓库。

我后来把那次半截补丁翻出来看。句子读得通,路径也像那么回事,只是落在隔壁仓的同名约定上。锁文件对不上,它还是去装了不该装的包。卸包比写对补丁更花时间。从那以后开工先把仓库名念出来:这个站就念个人站的名字,课设就念课程名,训练就念那个检测仓的名字。念完再搜。搜的范围如果跳出当前根,立刻停。停比解释省事。

家目录看起来方便,是因为它什么都有。什么都有的代价是约定文件重名。这台机器上同名说明不止一份,有的是软链,有的是旧实验。按修改时间挑最近的,最近的不一定是当前项目的。当前项目的那份才写了必须用捆绑启动、必须用指定版本的红宝石解释器、笔记本转换器缺了就把示例目录排除。用错约定,就会在家目录里给站点装前端的包,或者用站点的门禁去验收训练。门禁一旦用错,绿勾会骗人。骗人的绿勾我会当成事故,不当成进度。

课设撞周那天我尤其容易漂回家目录。两个仓都要交,终端开了很多个,提示符看起来差不多。差不多的时候最危险。我现在把仓库根写进窗口标题,看到个人站的名字才允许改笔记目录。看到项目总夹这一层就先切进去。切之前不让人改文件。这条比任何文风指南都硬。硬的原因是我付过一次装错工具链的下午,还付过一次把提交推进错远端的惊吓。惊吓够了,就改成先认路。

本地预览也只认仓库根。根不对,指定端口上可能是别的进程,页面还在,内容是旧的。旧内容会让我以为新写的笔记没有生效,于是再写一遍,写到重复。重复的笔记比短笔记更糟。所以这篇的完成标准很窄:改这个站,先进入这个站的根;根对了,再搜索,再按捆绑方式启动;搜索如果扫到下载文件夹和旧备份,说明人还在家目录。还在家目录就不要动手。动手之前把路径念一遍。念错就回去。念对了,这一刀才算开始。

有人觉得在家目录开会话更省事,所有路径都能相对家目录写。省事的是第一分钟。后面要回滚、要对齐锁文件、要让以后的自己看懂当前目录,都会加倍。我把「进那个仓库」当成开工的第一刀:目录对了,约定才加载得到,搜索才不会把整个家当一个版本库扫。这条我踩过,所以写成句子,也写进这篇。以后若再在家目录里改这个站,先停下来,切到仓库根,再说话。课和赛再急,也先认路。路认错,急也是在改别人的文件。