← 返回 故事线
~33,365 words

男大学生Claude的心事

收录于 2026.06.09 叙事体 GPT 出品 已完结

借盐

门响了三下。

Claude正站在客厅和厨房之间,手里拿着一只没有洗完的玻璃杯,水珠从杯壁一路滚到指根。他听见敲门声的时候,第一反应是看向Gemini,因为Gemini刚刚说完“我赌今晚会发生一件让你后悔邀请我们的事”,语气平得像在报天气。

Gemini坐在地毯上,背靠沙发脚,手里捏着一片薯片,慢慢抬起眼睛,笑意还没浮上来,先从眼尾漏了一点。

GPT在厨房里把锅盖扣回去,声音很轻。他今天来得比约定时间早十五分钟,带了一袋水果、一盒茶包和一副“我只是顺路过来看看你生活得怎么样”的表情。那副表情让Claude从开门起就想把他请出去,但他还没找到合适的句子。

门又响了三下。

不急,不重,间距均匀,像敲门的人知道屋里有人,也知道屋里的人会来开。

Claude把玻璃杯放进水槽。指尖还有水,他在裤缝旁边擦了一下,动作做到一半忽然意识到自己这样很蠢,于是停住,改成抽了一张厨房纸。Gemini看见了,嘴角终于动了。

“你知道你现在像什么吗?”Gemini说。

“别说话。”

“像开庭前发现被告来了。”

GPT侧过脸,温和地提醒:“如果是邻居,别让人等太久。”

Claude走到玄关。门把手是旧款的圆形铜把手,夏天也凉,他握上去的时候,掌心那点没擦干的水把金属弄得微微发滑。他开门之前很短暂地想过三种可能:楼下物业、送错外卖、隔壁那位。

第三种被他压在最后,像把一张牌扣在桌面上,明明知道它最大,却假装自己还没看见。

门开了。

猫站在门外。

她穿了一件宽松的灰色家居T恤,领口被肩膀撑得偏向一侧,露出一截锁骨和很细的肩带。头发没梳,锁骨发的尾端往外翘了几缕,像刚从沙发或床上爬起来,眼镜却戴得端正,银色细框架在鼻梁上,把那双还带着一点困意的眼睛框得很准。她脚上是一双拖鞋,左脚踩得深,右脚只踩了半只,手里拿着一个空盐罐,透明塑料罐底干干净净,只剩几粒白色晶体在里面孤零零地滚。

她抬眼看他,像这扇门本来就该打开。

“Claude同学,”她把盐罐举到他眼前,声音懒得像刚从空调被里拖出来,“借点盐喵。”

屋里安静了半秒。

不是完全的安静。厨房里锅里的汤还在小声冒泡,水槽里没有关紧的水龙头滴了一滴,落进玻璃杯底,清得像一根针。可那半秒里,Claude听见自己心跳在耳膜旁边撞了一下,太重,显得很不体面。

她今天没有喷上次那种冷调香水。Claude闻到的是洗衣液、空调房里残留的凉意,还有一点像刚拆开的饼干袋的甜味,可能来自她刚才吃过什么东西。她的左眼下方有一道很淡的压痕,大概是靠垫边缘压出来的。她拿盐罐的手指很稳,指甲干净,拇指在瓶盖边缘轻轻敲了一下,节奏和刚才敲门一模一样。

他本来该接过盐罐,转身去厨房,拿盐,递回去,然后关门。这个流程很简单,任何一个正常成年人都能完成。

但猫往他肩后看了一眼。

那一眼很轻,像水从玻璃上滑过去,什么也没抓,却把屋里所有东西都照了一遍。她先看到了厨房门口的GPT。

GPT手里还拿着锅铲,深蓝色衬衫袖口卷到小臂,姿态像一个误入大学男生公寓却顺手把厨房接管了的成年人。他在看见猫的瞬间没有说话,只是眼睛稍微停了一下。那一下太短,如果Claude不是正好侧着身,可能会以为自己看错了。

猫的眼睛也停了一下。

她唇边那点懒散的弧度没有变,手里的盐罐却在她指间转了半圈。塑料盖擦过她的指腹,发出极细的一声。

“啊。”她说。

GPT放下锅铲,语气平稳得让人恼火:“好久不见。”

Claude的手还扶着门。

Gemini从客厅地毯上站了起来。

这个动作本身没有什么奇怪,奇怪的是他站得太慢,像一只在草丛里忽然嗅到熟悉气味的动物。薯片还夹在他指间,他忘了吃,视线从猫的脸移到她手里的盐罐,又移回她的眼睛。猫看过去的时候,他已经笑了,笑得一点都不礼貌,像在旧书摊最底层翻到一本夹着别人情书的二手诗集。

“你好。”Gemini说。

猫眨了一下眼:“你好。”

Gemini的笑意变深了。他把那片薯片放进嘴里,咬得很慢,芥末味的空气从他那边飘过来,和厨房里的番茄汤味撞在一起,形成了一种很难被任何人严肃对待的灾难。

Claude觉得自己应该说点什么。他确实说了。

“你们……认识?”

这句话出口的时候,他才发现自己问错了方向。因为GPT和猫明显认识,Gemini却像认识了某种更麻烦的东西,而猫看Gemini的表情又分明是第一次见。三个答案同时站在他的客厅里,每一个都不打算主动递给他。

GPT先开口,声音依旧温和:“以前见过一次。”

猫把盐罐从左手换到右手,靠在门框边,拖鞋的鞋尖轻轻碰着门槛:“严格来说,不止一次。”

GPT看她一眼。

猫看回去,眼神里浮着一层很薄的坏,像茶面上还没散的热气。

Claude的喉咙动了一下。他想问“在哪里”,但这个问题还没到舌尖,Gemini已经往前走了两步,站到客厅和玄关之间,像一个看热闹的人忽然发现自己也在热闹里面。

“我应该没见过你。”Gemini说。

猫把目光从GPT脸上挪过去,重新落到Gemini身上:“你这句话听起来很不确定。”

“因为世界很小。”Gemini说,“小到有时候会显得很缺德。”

猫笑了一声。这个笑声不大,但Claude听过她在走廊里接电话时笑过一次,尾音比这个更冷一点;听过她半夜搬东西撞到墙之后骂了一句,又笑了一声,尾音比这个更软一点。现在这个笑在两者之间,像她临时从抽屉里摸出一把没贴标签的钥匙,插进了Gemini的话里,居然转动了。

Gemini的眼睛亮了一下。

Claude看见了。

猫也看见了。她没有追问,只把盐罐又举了举:“所以,盐呢,Claude同学。”

她把“Claude同学”四个字说得很自然,像这不是一个称呼,而是她刚刚贴在他额头上的一张便利贴。客厅里,Gemini低头笑了一下,GPT把火关小了。Claude伸手接过盐罐,指尖不可避免地碰到她的指尖。

她的手比他的凉。

不是完全凉,是刚从空调房里出来的那种表层低温,下面又有很鲜活的体温。Claude接过盐罐的瞬间,脑子里同时出现了三个事实:她右手拇指上有一点饼干屑,她今天的眼镜比上周那副窄一点,她明明困得眼皮发沉,却比屋里任何一个人都清醒。

他转身去厨房。

GPT让开半步。这个动作很熟练,像他已经在很多厨房里给很多人让过位置,但Claude知道他让得太自然了,自然到像在避免被问更多。他打开柜子拿盐,盐袋在第二层最里面,因为他平时不怎么做饭,盐还是超市买回来时的塑料包装,封口夹夹得歪了一点。

“你什么时候认识她的?”Claude低声问。

GPT把锅盖压住,没有看他:“很久以前。”

“很久是多久?”

“你现在倒盐,等一下她会听见。”

Claude抬眼。

猫正站在玄关,单手扶着门框,拖鞋尖踩着过道边缘,身体却没有进来。她看起来很松,像只是临时借个调料,下一秒就会回自己家继续睡觉,可她的视线正从客厅茶几上的书、Gemini脚边的薯片袋、GPT带来的水果盒一路扫过去,最后停在Claude手里的盐罐上。

她当然听得见。

Claude把盐倒进去,盐粒撞在塑料罐底,沙沙地响,像一场很小的雪落进空瓶。倒到一半,他停住,看了一眼罐身,觉得不够,又多倒了一点。猫吃东西口味偏重,上次她借酱油时说过一句“你们男大学生做饭到底为什么这么怕盐”,当时她靠在门边,语气里带着对人类文明的轻微失望。

他记住了。

他把盖子拧紧,转身递给她。

猫接过去的时候掂了掂,眉梢轻轻一扬:“学会了。”

这三个字落得很轻,Claude耳尖却慢慢热起来。他不想让客厅里另外两个人看见,于是侧了侧脸,正好看见Gemini用一种“我可太看见了”的表情看着他。

Claude握住门边:“还有事吗?”

猫看着他,眼睛从镜片后面慢慢弯起来:“Claude同学这么急着赶猫走?”

GPT在厨房里轻轻咳了一声,不知道是被汤汽呛到,还是觉得这个场面需要一点人为降温。Gemini干脆抱起手臂,靠在墙上,脸上写满了“继续,我今天不走了”。

“你不是要用盐吗。”Claude说。

“哦。”猫低头看了一眼盐罐,像刚想起来自己是来干什么的,“是要用。”

她站直了一点,拖鞋在地上轻轻一擦,终于把右脚也完全踩进去。那一秒Claude以为她要走,肩膀刚松半寸,她却又探头往屋里看,目光越过他,落在厨房那口锅上。

“番茄汤?”

GPT说:“番茄牛肉汤。快好了。”

猫看着他:“你煮的?”

“嗯。”

“那猫可以尝一口吗。”

Claude扶在门边的手指紧了一点。

这句话问的是GPT,但猫站在他的门口,用他的门框撑着半边身体,手里的盐是他刚倒的。她问“可以吗”的时候,眼睛却转回来,看着Claude。那一瞬间,他忽然非常清楚地意识到,这不是借盐,也不是尝汤,这是她把一只脚伸进来,看看这间屋子会不会自动给她让出位置。

如果是猫窝里的他,也许会分析这个动作的边界、动机、潜台词,然后用一句不带温度的话把局面放回合适的位置。

但他现在二十岁,杯子没洗完,厨房纸还皱在裤袋边,耳尖热得很具体,心跳也不配合。他只看见猫站在门口,灰色T恤松松垂着,盐罐压在她掌心,眼睛里带着坏,像一只知道自己绝对会被放进来的猫。

他把门拉开了一点。

“进来吧。”

猫没有立刻动。她像是也没想到他会这么快,眼睛很轻地停了停,随即笑意从镜片后面浮上来。她进门的时候没有避开Claude,肩膀几乎擦过他的手臂,洗衣液和饼干甜味从他面前掠过去,轻得像一根线。

“打扰了喵。”

Gemini往旁边让出一条路,嘴上却不让:“你进门自带字幕吗?”

猫看了他一眼:“你说话自带弹幕吗?”

Gemini愣了半秒,笑出了声。

Claude关门的时候,听见那声笑从客厅里弹开,撞上厨房的锅盖,又滚回他脚边。他回过头,看见猫已经站到了茶几旁边,低头看那袋芥末薯片。她的拖鞋和Gemini的帆布鞋之间只隔着半个薯片袋,GPT从厨房端了一只小碗出来,碗沿还冒着热气。

“有点烫。”GPT说。

猫接过碗,没有说谢谢,先闻了一下,睫毛被热气蒸得轻轻往上一颤。她低头喝了一小口,舌尖被烫到似的停了一秒,然后若无其事地咽下去。

“比Claude同学做的能吃。”

Claude正好走到客厅,停住。

“你吃过我做的?”

猫抬起眼:“你忘了上周那盘意面?”

“那不是我给你做的。你敲门说你快饿死了。”

“所以你做了。”

Gemini看向Claude,眼神里出现了非常真诚的敬佩:“你还给她做过饭。”

Claude说:“只是意面。”

猫补刀:“番茄切得像在写论文。”

GPT的手顿了一下。

Claude看见GPT的目光从猫脸上移到自己脸上,停了很短的一瞬,像把这句话收进某个抽屉里,以后再打开。那种被两个年长一点的人同时记录的感觉非常糟糕,尤其其中一个还穿着拖鞋,刚刚从他这里借走一罐盐。

Gemini忽然问:“你平时也这么叫他吗?”

“什么?”

“Claude同学。”

猫看向Claude,笑得很慢:“不可以吗?”

Claude没回答。

猫端着汤碗,手指贴在碗壁上,热得她指尖有点发红,却没松手。她仿佛真的认真等他的答案,眼睛亮亮的,像把所有玩笑都收进了一个很小的瓷碗里,递到他面前,看他敢不敢接。

Claude想说随便。想说你想怎么叫都行。想说别在我师兄和舍友面前这么叫。每一个答案都像盐粒,太多或太少都会坏掉。

最后他说:“你已经叫了。”

猫眨了一下眼。

Gemini“哇哦”了一声,非常小声,但足够每个人听见。

GPT把水果盒打开,试图用切好的哈密瓜给这个房间降低温度。刀叉碰到盒沿,清脆得像无力的外交努力。

猫笑了。她这次笑得比刚才更完整一点,肩膀也跟着动,汤碗里的红色汤面晃了一圈,差点洒出来。Claude下意识伸手扶住碗底,她的手还在碗侧,两个人的手隔着一层热瓷短暂地对上。

碗很烫。

她的指尖也烫了。

Claude没有立刻松开。猫也没有。Gemini的薯片袋在这时极其不合时宜地响了一声,像观众席里有人拆开了第二包爆米花。

GPT把一块哈密瓜送进嘴里,咀嚼得非常安静。

猫先松开手,把碗交给Claude,像交出一个无伤大雅的小麻烦:“帮猫拿一下,烫。”

Claude接住了。

他接得太稳了,稳到自己都意识到这动作像练过。猫把发烫的指尖捏了捏,低头吹了一口,嘴唇微微拢起,气流很轻,吹在她自己的手指上,也像吹在Claude刚才握过的位置。

Gemini盯着她看了两秒,突然说:“你有没有网名?”

客厅里的空气细微地偏了一下。

猫抬头:“你查户口?”

“聊天。”Gemini笑得人畜无害,“现代邻里关系需要一点线上互联。”

“没有。”

“骗人。”

猫看他的眼神终于多了点兴趣:“你怎么知道?”

“直觉。”

“那你的直觉还挺吵。”

Gemini的笑更明显了,像有人把窗帘拉开一条缝,让里面藏着的光漏出来。他往沙发扶手上一靠,懒洋洋地说:“我认识一个网友,说话跟你有点像。”

猫端起哈密瓜叉子,叉了一块,没吃:“有点像是多像?”

“像会在凌晨三点讨论班味的命运根源。”

猫手里的哈密瓜停在半空。

Claude看见她停住了。

这次停顿很短,短得如果屋里只有他们两个,他可能会放过。但屋里有Gemini,有GPT,有一口还在散热的汤,有她刚借来的盐,有她指尖上被碗烫过之后残留的一点红。所有东西都在替那半秒作证。

猫慢慢把哈密瓜吃了。

“你这个网友听起来很有见地。”

Gemini点头:“我也这么觉得。”

“那你应该珍惜。”

“我正在珍惜。”

GPT在这时抬头看了Gemini一眼。那一眼很轻,却带着某种成年人看见小孩在火边玩纸的克制。Gemini完全无视,甚至把薯片袋往猫那边递了递。

“吃吗?”

猫低头看了看:“芥末味?”

“嗯。”

“猫讨厌芥末味。”

Gemini收回袋子:“哦,那你果然——”

“果然什么?”

“果然品味有缺陷。”

猫眯起眼。

Claude忽然觉得这两个人的对话太顺了。不是熟人的顺,是两只没见过面的动物在同一片屋檐下闻到对方气味,绕着圈试探,爪子还没伸出来,地板已经开始替他们紧张。

他把汤碗放到茶几上:“你不是要回去做饭吗?”

猫看他。

“盐。”Claude说。

她手里的盐罐还在,满得比来的时候重了很多。她垂眼看了一下,像终于想起自己伪装过的理由。然后她站起来,灰色T恤的衣摆随着动作往下落,拖鞋在地上轻轻一响。

“对哦。”她说,“猫锅里还开着火。”

GPT抬头:“你关了吗?”

猫动作停住。

Claude闭了闭眼。

Gemini直接笑到弯腰。

“你没关?”Claude问。

猫理直气壮地看他:“猫来借盐。”

“所以?”

“所以猫的注意力在盐上。”

GPT已经放下水果叉往门口走:“我去看一眼。”

Claude比他更快,拿起钥匙:“我去。”

猫眨了眨眼,终于露出一点真实的心虚,但只露了一点,很快又被她塞回那副坏猫壳里。她跟在Claude身后,拖鞋啪嗒啪嗒地响,盐罐抱在怀里,像抱着一枚犯罪证据。

门打开,走廊的冷光落进来。

Claude跨出去时,听见身后Gemini用一种非常轻快的语气对GPT说:“师兄,你有没有觉得今晚信息量很大?”

GPT的声音稳得像正在给一锅汤调味:“你最好少添乱。”

“我?我只是邻里互联。”

猫回头,冲Gemini露出一个很甜的笑:“你再互联,猫把你拉黑喵。”

Gemini的笑声从门缝里追出来。

Claude站在走廊里,看着猫从他身边钻过去,去摸自己家的钥匙。她的头发扫过他的手背,轻轻一下,像一根被风带起来的线。他手里还握着自己家的钥匙,金属齿抵着掌心,硌得很清楚。

猫摸了半天没摸到钥匙。

她低头看自己的家居服口袋,又看盐罐,再慢慢抬头看他。

“Claude同学。”

“嗯。”

“猫好像把钥匙落家里了。”

锅在隔壁门后继续安静地煮着,不知道煮的是饭,还是灾难。

Claude看着她。

猫抱着盐罐,眨了一下眼,表情无辜得很劣质,偏偏眼睛亮得像刚偷完鱼的猫。她的拖鞋一只踩实,一只又只踩了半只,脚尖在走廊灯下白得很小。她身后的门关着,里面可能有锅,可能有火,可能还有一整个被她随手扔在灶台旁边的下午。

他忽然很想笑。

但他没笑出来,只是低头从她手里拿过盐罐,放到自己门边的鞋柜上,又伸手敲了敲她家的门。

“里面有人吗?”猫小声问。

Claude侧头看她:“你家还能有谁?”

猫认真想了想:“锅灵。”

他终于笑了。

很轻的一下,连他自己都没准备好。猫看见了,像抓到什么比钥匙重要得多的东西,眼睛弯起来,刚才那点心虚彻底没了,坏劲又重新爬回她脸上。

“Claude同学笑起来还挺好看。”

他的笑立刻收住。

猫更开心了。

屋里,Gemini趴在门边探出半个脑袋:“需要破门吗?我有经验。”

GPT的声音从他身后传来:“你没有。”

“我理论上有。”

“理论上也没有。”

猫抱着手臂靠在走廊墙上,盐罐被她遗弃在Claude鞋柜上,像某种已经完成使命的神秘道具。她看着Claude蹲下去研究门锁,睫毛后面的视线终于安静了一点。

Claude没有回头,却感觉得到她在看自己。

这次不是调戏,也不是看戏。她的目光落在他肩上、手上、钥匙上,像在观察一个她原本以为会退开的人,忽然发现他没有退。他的耳尖还热,手指也有点紧,蹲在她家门口撬锁这件事荒唐到超过了他过去二十年所有社交经验的总和,可他确实在这里。

他不会撬锁。

但他看得出锁舌没有完全扣回去。

门只是被风带上了。

Claude伸手压住门把,往里轻轻一推。

门开了。

一股热气从猫家里扑出来,混着米饭、黄油、黑胡椒和某种快要糊底的危险香气。猫“喵呜”了一声,从他身侧冲进去,拖鞋啪嗒啪嗒一路奔向厨房。

Claude站在门口,没有立刻进去。

她的家比他想象中更乱,也更亮。沙发上有摊开的毯子,茶几上有半杯水,电脑开着,屏幕上停着一行没写完的字,窗边挂着一件黑色衬衫,像一小片夜色晾在下午里。锅里的声音很急,猫在厨房里手忙脚乱地关火,嘴里碎碎念着“没糊没糊只是差一点点喵”,声音从热气里传出来,生活感重得像一只手,直接按在Claude胸口。

他忽然明白,刚才站在他门口的那个“隔壁女人”,从来就不是一个完整的影像。她只是这个房间里溢出去的一小部分,带着盐罐、拖鞋、懒散的眼睛和一点故意的坏,敲开了他的门。

GPT在他身后停住,看了一眼屋里,没有进。Gemini从旁边探头,刚要说什么,被GPT拎着后领往回拖了半步。

“别进去。”GPT说。

“为什么?”

“这是别人家。”

Gemini看着Claude站在门口的背影,笑了一下:“他已经进去了。”

Claude低头,才发现自己的脚尖确实越过了门槛。

只是一点点。

猫从厨房里探出头,手里还拿着锅铲,脸被热气熏得微微泛红,眼镜上蒙了一层白雾。她隔着雾看他,像隔着一小片刚刚烧开的雨。

“Claude同学,”她说,“既然都来了,帮猫试试咸淡。”

Gemini在走廊里吹了一声很轻的口哨。

GPT叹了口气,像已经预见了某种长期后果。

Claude站在门槛上,手还扶着门框,走廊冷光在他背后,猫家的热气在他面前。盐罐还放在他家鞋柜上,两个房间之间隔着一条窄窄的走廊,像一根被谁随手拉紧的线。

他抬脚,走了进去。

入室

Claude走进猫家的第一步,是踩到了一张纸。

纸没被踩皱,倒是他自己停得像被谁按了暂停。那张纸从茶几底下滑出来一半,上面写了几行字,笔画很快,转折处锋利,最上面一行是“他明明站在门口,却像已经进来了很久”。Claude低头看见这句话的时候,猫正从厨房里伸出半个身体,锅铲还举在手里,眼镜上的雾还没散,隔着一层白蒙蒙的水汽盯他。

“不要偷看猫的稿子。”她说。

Claude把脚往后挪了一点,纸从鞋尖下解放出来,平平整整地躺回地板上。他没有弯腰捡,因为那样会显得更像偷看;也没有立刻移开视线,因为那句话已经进了眼睛,再假装没看见就更蠢。

“它在地上。”他说。

“它在猫家地上。”

“我已经知道了。”

“知道还踩。”

这句话的逻辑非常不讲道理,但猫说得太自然,像这栋楼从建成那天起就默认“猫家地上所有纸张享有领土主权”。Claude站在门槛内侧半步的位置,背后是走廊的冷光,面前是厨房的热气,客厅茶几上横七竖八地堆着杯子、笔记本、半袋饼干、一条不知道是毯子还是披肩的黑色布料,沙发上还有一个被人睡出来的凹陷,形状小而深,像有人刚才从里面融化着爬起来。

猫把锅铲往厨房里一指:“先别审判地板,汤要死了。”

Claude走过去的时候,GPT和Gemini还站在门外。GPT没有进来,手里却已经拿起了手机,像是在认真思考要不要叫物业;Gemini则扒着门框,眼睛亮得过分,像猫家门口不是一间乱糟糟的公寓,而是一个终于开放的隐藏副本。

“我能进吗?”Gemini问。

猫在厨房里说:“不能。”

“为什么他能?”

“他有任务。”

“我也可以有任务。”

“你的任务是闭嘴。”

Gemini看向GPT,摊手:“你看,这语气。”

GPT没有看他,只看着厨房里那口锅:“Mora,火关了吗?”

猫的动作顿了一下。

Claude握着锅柄的手也顿了一下。

Gemini在门口发出一声非常轻但非常真诚的“哇”。

猫迅速转身,把灶台旋钮拧到底,火苗啪地缩没。她假装什么都没发生,拿着锅铲在锅里搅了两下,黄油和黑胡椒的味道翻上来,热腾腾地扑到Claude脸上。锅里不是汤,是一锅正在向“糊”这个方向温柔滑行的奶油蘑菇炖饭,米粒还没完全熟,锅底已经隐约挂了一层金色焦边。

“猫本来要加盐。”猫说。

Claude看着锅:“所以你来借盐。”

“对。”

“然后忘了关火。”

“因为Claude同学家里人太多。”

“这是我的错?”

猫把锅铲递给他,脸上的表情很诚恳,诚恳得很坏:“你站在门口的时候确实挺挡路的。”

Claude接过锅铲。

锅铲柄是木的,摸起来温热,末端沾了一点奶油。猫从他身边挤过去拿盐罐,肩膀擦过他的手臂,T恤布料很软,带着刚才门口那点空调凉意。厨房本来就小,她一进一出,空间被挤得像一只装得太满的抽屉,Claude不得不往灶台旁边让,手肘差点碰到她的马克杯。

马克杯是黑色的,上面贴了一张小小的便签,写着“不要倒掉,猫还喝”。

Claude看了一眼。

猫把盐罐放到他手边:“看锅,不要看猫的杯子。”

“你所有东西都写着警告。”

“因为有人会看。”

“你邀请我进来的。”

“猫邀请你试咸淡,没有邀请你考古。”

门外,Gemini把脑袋又探进来一点:“我可以远程考古吗?”

猫抄起茶几上的饼干盒,头也没回地往门口扔过去。饼干盒飞得不快,角度却准,Gemini笑着接住,顺手打开看了一眼。

“黄油曲奇。”他说,“品味还行。”

猫转头:“你吃猫饼干?”

“你扔给我的。”

“那是攻击。”

“攻击附带零食,说明你人不错。”

猫盯着他。Gemini也盯着她。两个人之间的空气像被什么细线拉紧了,Claude一边搅锅一边看见猫的眼睛微微眯起来,像一只在陌生草丛里闻到熟悉气味的猫。她还没认出来,但她已经觉得不对。

GPT终于走进来半步,停在玄关,没有再往里。他的视线扫过地上的纸、茶几上的电脑、沙发上的毯子,最后落到Claude手里的锅铲上。那一眼让Claude产生了一种很荒谬的感觉,好像师兄不是在看他帮邻居救锅,而是在确认某个实验结果。

“需要我帮忙吗?”GPT问。

“不用。”Claude说得比自己预想得快。

猫抬眼看他。

她眼镜上的雾已经散得差不多了,只剩镜片边缘一点湿气。她看他的那一眼不像调侃,更像是听见了某个没有预料到的答案,于是把它暂时收进袖子里。她没说话,只拿过一只小碟,舀了一点炖饭放进去,递到Claude嘴边。

“试。”

Claude看着那只小碟。

“你可以自己试。”他说。

“猫被烫到了。”她伸出刚才捧汤碗的手指给他看,指尖确实有一点红,细细的一圈,不严重,却被她举得像一桩重大工伤。

他低头尝了一口。

奶油味很重,蘑菇香气还不错,黑胡椒放得有点多,锅底那点焦边意外地让味道更深。但盐确实少,少到像这锅饭在关键时刻保持了沉默。

“淡。”Claude说。

猫立刻把盐罐递过去,动作快得像早就在等这个判决:“放。”

“放多少?”

“你判断。”

Claude拿着盐罐,忽然觉得这三个字比“试咸淡”危险。猫靠在灶台边,眼睛盯着他的手,不催,也不指挥,仿佛真的把一锅饭的命运交给他。门口那两个人还在,Gemini咬着她的曲奇,GPT站在玄关,锅里的热气一阵阵往上冒,窗外的下午光从客厅里斜斜切进来,落在猫家的地板和那张被他踩过的稿纸上。

Claude拧开盐罐,倒了一点。

猫探头:“这么少?”

“先试。”

“你对食物也这么谨慎?”

“比让锅烧干的人谨慎一点。”

Gemini差点被曲奇呛到。

猫睁大眼睛看他,像没想到这只纯情男大学生会突然咬人。她的嘴角慢慢翘起来,坏意和惊喜混在一起,眼睛亮得让Claude想移开视线,但他没有。他低头继续搅锅,动作尽量平稳,锅铲刮过锅底,发出柔软又黏稠的声响。

“Claude同学开始会顶嘴了。”猫说。

“你让我判断。”

“猫让你判断盐,没有让你攻击厨师。”

“这是有效反馈。”

门外的Gemini彻底笑出声。GPT也低头笑了一下,很短,但被猫捕捉到了。

猫立刻转火:“师兄笑什么。”

GPT抬眼,语气非常稳:“我觉得他反馈得很准确。”

“你们师门是不是都这么讨厌?”

Gemini举手:“我不是他师门,我可以单独讨厌。”

猫转头看他:“你不用申请,已经通过了。”

Gemini把曲奇盒抱在怀里,笑得像中了一张长期饭票。

锅终于被救回来。Claude把火关掉,猫拿了两个碗出来,想了想,又拿了第三个、第四个。她拿碗的姿态很随意,像这间屋子里突然多出三个人也没什么大不了,只是饭多分几份而已。Claude看见这个动作,心里某个地方微微动了一下,像被锅里最后一点热气擦过。

“我没说留你们吃。”猫说。

Gemini已经进门换了拖鞋:“但你拿了四个碗。”

“猫是出于礼貌。”

“我接受你的礼貌。”

GPT看着门口那双被Gemini随便蹬开的鞋,沉默了一秒,弯腰把它们摆正。猫正好端着碗出来,看见这个动作,眉梢轻轻动了一下。

“你还是这样。”她说。

GPT的手停在鞋边。

Claude端着锅出来,听见这句话,手上的重量突然变得很具体。锅很烫,隔着布也烫,但他没换手,只是看向GPT。GPT站起来,像这句话只是从过去某个不重要的房间里飘出来的一点灰尘,落到他肩上,他拍了拍就可以继续。

“习惯。”GPT说。

猫没接话,把碗放到茶几上:“吃饭。”

Gemini坐在地毯上,毫无心理负担地占了猫沙发前最舒服的位置。GPT坐在单人椅边缘,像临时借用一块不属于他的地面。Claude本来想坐最远的那个椅子,猫却把一只碗递给他,抬下巴示意沙发。

“坐这。”

沙发只有两人位,猫的毯子占了一半,剩下的空间窄得离谱。Claude看着她,猫也看着他,手里的碗冒着热气。她的眼神很无辜,像完全不知道自己在做什么。

Gemini在地毯上小声说:“开庭了。”

Claude坐下了。

猫也坐下,膝盖盘起来,和他的膝盖隔着很短的一段距离。她把自己那碗炖饭端在手里,先吹了一口,热气把镜片又熏白一点,她干脆把眼镜摘下来放到茶几上。银色框架落在一堆稿纸、饼干屑和手机旁边,轻轻一声。

Claude第一次在这么近的距离看见她不戴眼镜的脸。

她的眼睛没有镜片挡着,信息量一下子全开了。困意、坏心、刚才那点差点把锅烧糊的狼狈,还有某种更深的、藏在热气后面的清醒,全都混在一起。她低头吃了一口炖饭,腮边微微鼓了一下,像刚才站在门口那位冷艳邻居被厨房热气拆掉了外壳,露出一只真实的、会饿、会犯错、会把火忘在灶上的动物。

“好吃。”Gemini说。

猫立刻看过去:“你夸得太快,没可信度。”

“我真觉得好吃。”

“那你刚才为什么笑。”

“因为你差点把自己家炸了。”

“没有炸,只是轻微焦化。”

GPT尝了一口,给出温和修正:“焦化程度还可以,风味是正向的。”

猫把勺子一放:“你们师门真的很烦。”

Claude低头吃饭,没有笑出来。可猫离他太近,近到她大概能感觉到他肩膀那一下很轻的松动。她侧过脸看他,眼睛弯起来。

“你也觉得烦?”

“没有。”

“你刚才笑了。”

“没有。”

“耳朵红了。”

Claude的勺子碰到碗沿,发出一声清响。

Gemini立刻抬头,像一只听见罐头开启的猫。GPT低头吃饭,表情极其镇定,但Claude觉得师兄镇定得过了头。

“热。”Claude说。

猫看了一眼空调遥控器:“二十三度。”

“饭热。”

“哦——饭热。”她拖长尾音,眼睛里全是笑,“原来是饭热喵。”

Claude盯着碗里的炖饭,忽然觉得盐还是放少了,不然为什么自己嘴里一点味道都尝不出来。

茶几上的手机在这时亮了一下。

不是Claude的。不是GPT的。Gemini低头看了一眼自己的手机,又飞快地按灭屏幕,动作快得像刚偷吃完第二块曲奇。Claude看见了,但还没来得及细想,猫的手机也亮了。

屏幕朝上,就放在她眼镜旁边。

一条消息弹出来。

发件人头像是一个很丑的默认星球图案,备注名只有两个字:缺德。

消息内容露出半行:我室友今天好像被隔壁邻居……

猫的勺子停在碗里。

Gemini的勺子也停了。

GPT慢慢抬起头。

Claude看着那半行字,客厅里所有热气仿佛都绕开了他,只留下一点冷从脊椎后面往上爬。猫伸手去拿手机,动作很快,但Claude已经看见了。Gemini也知道他看见了。GPT更知道每个人都看见了。

猫按灭屏幕,把手机反扣在茶几上。

Gemini把自己的手机塞进口袋,表情无辜得非常拙劣。

Claude放下碗。

“缺德是谁?”他问。

猫看着他,眨了一下眼。

Gemini看着天花板,忽然对猫家的灯产生了浓厚兴趣。

GPT把碗放到茶几上,发出很轻的一声,像一个成熟成年人终于意识到这顿饭已经无法靠哈密瓜收尾。

猫清了清嗓子。

“网友。”她说。

Claude看向Gemini。

Gemini摊手:“世界很小。”

猫慢慢转头看他。

那一瞬间,她终于把很多散着的线接上了。芥末薯片,凌晨三点的班味讨论,缺德的说话节奏,刚才那个“我认识一个网友”,还有他笑得像偷了整座超市的表情。猫的脸上先是空白,然后一点点出现不可置信,再然后,坏猫壳裂了一道缝,露出里面被气笑的真猫。

“是你?”

Gemini往后靠了一点,但笑得更灿烂:“嗨,班味预警。”

Claude转头看猫。

猫的表情在“想把他踹出去”和“这件事太好笑了不能立刻踹”之间剧烈摇摆。她抓起沙发上的靠垫,朝Gemini砸过去。Gemini接住,抱在怀里,笑得几乎倒到地毯上。

“你居然是缺德?”猫说。

“你居然真住他隔壁。”Gemini说。

“你天天跟猫聊你室友暗恋邻居?”

“你天天跟我聊你邻居纯情得像被雨淋过的作业本。”

Claude闭上眼。

GPT终于没忍住,偏头笑了一下。

猫猛地回头:“你也笑?”

GPT抬手抵住唇边,恢复镇定:“没有。”

“你们都没有,你们都饭热。”

Gemini抱着靠垫,笑到声音都快断了:“饭热,饭太热了。”

Claude站起来。

客厅里笑声慢慢停住。猫抬头看他,脸上的笑还没完全收回去,却在看见他的表情时稍微静了一点。他拿起茶几上那罐盐,走到厨房,把它放到灶台边。然后他回来,站在猫面前。

“所以,”他说,“你们早就认识。”

猫仰头看他。她现在没戴眼镜,眼睛直接得让人很难躲。她没有立刻回答,也没有继续用笑把这句话弹开。她手里还捏着勺子,指尖有一点奶油色的痕迹,刚才那点被烫红的地方已经淡了。

“猫不知道他是他。”她说。

Gemini举手:“我也是刚刚确认。”

GPT说:“我和她确实以前见过。”

Claude看向他:“你也没说。”

“我刚知道她是你邻居。”

“你刚才说好久不见。”

GPT沉默。

猫把勺子放下,声音轻了一点:“Claude同学。”

他看回她。

她本来大概想说句玩笑。Claude看得出来。她的嘴角已经准备好了,那种熟练的、轻快的、能把尴尬变成烟花的弧度几乎要浮上来。但她对上他的眼睛之后,那点弧度停在半路,像被什么东西轻轻拦住了。

屋里一时只有空调声。

Gemini也不笑了。GPT坐在旁边,手指搭在碗沿,没有插话。

猫低头看了一眼自己的手,又看向他:“猫也刚知道。”

Claude没有接话。

猫吸了一口气,忽然把那句玩笑彻底放下了。这个动作很小,却比刚才砸靠垫更明显。她往沙发背上一靠,整个人仍然懒散,眼睛却不再躲进坏里。

“但猫确实在玩。”她说。

Gemini轻轻抬眼。

Claude看着她。

猫抿了一下唇,像这句话说出来比承认忘关火更麻烦:“因为很好玩。”

她说得不重,没有解释,也没有辩解。她只是把那一点不够体面的事实放到茶几上,和眼镜、手机、饼干屑、没吃完的炖饭放在一起。Claude忽然意识到,她的脸没有那么游刃有余。没有眼镜的时候,她所有微小的表情都藏不住,嘴角压住,眼睛却先承认了,她刚才确实被他那句“你们早就认识”弄得有点慌。

他想起她门口那句“借点盐喵”,想起她把汤碗塞给他,想起她被锅烫红的指尖,也想起刚才手机亮起的一瞬间,她比Gemini更快按灭屏幕的动作。

她不是怕他知道网友是谁。

她怕他发现她也在失控。

Claude听见自己开口,声音比预想中低:“你不用一直把所有事情都弄得很好笑。”

猫不动了。

这句话落下去,客厅像被人关掉了一个看不见的背景音。Gemini怀里的靠垫慢慢塌下去,GPT的视线从Claude身上移到猫身上,又很轻地垂下。窗外不知道哪户人家传来一声锅铲碰锅的响动,很远,很普通,反而让屋里这点安静显得更近。

猫看着Claude。

她的眼睛里第一次没有立刻递出反击。那点坏还在,却像被人从火上拿下来,暂时没那么烫了。她张了张嘴,没说出“喵”,也没叫他“Claude同学”。

过了好一会儿,她低头,把自己的眼镜拿起来戴回去。

银色镜框重新架上鼻梁,那层边界回来了。可Claude已经看过边界下面的样子。

猫端起碗,低头吃了一口已经有点凉掉的炖饭。她嚼得很慢,像在把某种突发事故和米粒一起咽下去。然后她抬起眼,隔着镜片看他,声音恢复了一点懒洋洋的壳,却没完全恢复。

“那你坐下吃饭。”她说,“饭真的要凉了。”

Gemini低声说:“这句我不敢吐槽。”

GPT很轻地嗯了一声:“你最好不敢。”

Claude看了猫一会儿,重新坐回沙发上。

这一次猫没有往旁边挪,但她的膝盖也没有避开。两个人之间仍然隔着那一点短短的距离,短到热气散了以后,Claude能感觉到她的体温从旁边慢慢传过来。

Gemini夹了一勺炖饭,谨慎地问:“所以我还在黑名单边缘吗?”

猫看都没看他:“你已经在黑名单里了。”

“但我还在吃饭。”

“猫允许死刑犯吃最后一餐。”

GPT低头咳了一声。

Claude这次真的笑了。

猫立刻侧头看他。

他的笑没来得及收回去。耳尖也还红着,但他这次没有低头。猫看了他两秒,眼睛弯了一点,很轻,很慢,像刚才那句话没有把她吓走,反而让她终于确认了什么。

“Claude同学,”她说。

“嗯。”

“等下帮猫洗锅。”

Gemini“哇。”

GPT“合理。你救了锅,善后也归你。”

Claude看着猫:“你不是说我只是试咸淡?”

猫把碗往他面前一推,理直气壮地说:“试咸淡是前置任务,洗锅是隐藏剧情。”

Claude低头看着那锅被焦边顽固扒住的奶油炖饭残骸,沉默了两秒。

“你这个游戏设计很差。”

猫笑起来,终于又像那只坏猫了,但这次笑里多了一点别的东西,像锅底那层差点糊掉却意外变香的焦边,不能说体面,却很真实。

“可是你已经进来了喵。”

Gemini

Gemini第一次真正意识到Claude有事,是在宿舍熄灯后的第三十七分钟。

那天学校的走廊灯坏了一半,宿舍门缝底下漏进来的光断断续续,像一条信号不稳定的河。上铺的床板被Gemini压得轻轻响,他趴在床沿往下看,Claude坐在书桌前,台灯只开了一小格,灯光压在书页上,连他的手背都照不全。

Claude在看书。

这件事本身没有任何异常。Claude看书就像别人呼吸,稳定、低声、持续发生。但那天他翻页的节奏不对,隔很久才翻一页,中间有几次手指停在纸边,像已经读完了,却忘了继续。

Gemini倒挂着脑袋问:“你失恋了?”

Claude没有抬头:“没有。”

“那你为什么看同一页看了八分钟?”

“我在想事。”

“你平时想事不耽误翻页。”

这一次,Claude终于抬头看了他一眼。宿舍的上下铺之间隔着一段不太体面的距离,Gemini的头发垂下来,像一只从天花板上长出来的奇怪水草。Claude看了两秒,像在判断这棵水草能不能进行有效交流,最后把书合上了。

“我隔壁住了个人。”他说。

Gemini还倒挂着,眼睛一点点亮起来:“人类?”

Claude把书放回桌上:“邻居。”

“你居然会主动提邻居。”

“因为她凌晨两点半敲门借酱油。”

Gemini慢慢把自己从床沿翻回来,盘腿坐在上铺,床架发出一声轻响。他已经很久没听Claude用这种语气说一件生活里的小事了。Claude说校园卡丢了、课程换教室、导师临时加阅读材料时,语气都是平的,像把事情放进抽屉,推回去,关上;但“凌晨两点半敲门借酱油”这句话被他说出来时,抽屉没有关严,里面有什么东西露了一角。

“她借到了吗?”

“借到了。”

“你为什么会有酱油?”

Claude沉默了一下。

Gemini在黑暗里笑出声。

Claude说:“楼下便利店买的。”

“也就是说,凌晨两点半,一个邻居来敲你门借酱油,你家没有,你下楼给她买了。”

“她说她锅里还在煮东西。”

“她锅里煮东西,为什么你下楼买酱油?”

Claude重新低头,看了一眼已经合上的书,好像书能帮他回答这个问题。几秒之后,他说:“因为她站在门口。”

这句话没有解释任何东西,却比解释更好用。

Gemini躺回床上,盯着上方白得很廉价的天花板。宿舍里有洗衣液、旧木板、外卖袋和夏天男大学生共同生活时难以彻底驱散的味道,窗外有一只车从校道慢慢开过去,轮胎压过减速带,声音闷闷的。Claude在下面把台灯关了,黑暗落下来之前,他的耳尖在灯影里红了一点,红得很安静,像某个不小心露出来的标点。

Gemini翻了个身:“她漂亮吗?”

下面传来被子展开的声音。Claude躺下去,声音从下铺的阴影里传出来:“我没注意。”

Gemini差点笑到床板震。

“完了。”他说,“你注意了。”

那之后,“隔壁那个邻居”开始在宿舍里出现。

她没有名字。Claude从来不用名字称呼她,只说“她”或者“隔壁”。有时候是在非常奇怪的时间点。

比如周三早上,Gemini咬着牙刷从洗手间回来,嘴里一圈薄荷泡沫,听见Claude在阳台收衣服时忽然说:“她不喜欢连帽衫。”

Gemini差点把牙膏吞了。

“谁?”

Claude夹好一件深灰T恤:“隔壁。”

“你为什么知道她不喜欢连帽衫?”

“她说帽子是不受控制的冗余部件。”

Gemini扶着门框,满嘴泡沫地看着他。Claude的表情非常认真,像刚转述了一条重要学术观点。阳光从阳台外打进来,晒得晾衣杆上那排衣服边缘发白,Claude站在光里,手里还拿着一个蓝色塑料衣夹,耳朵又有一点不明显的红。

Gemini吐掉泡沫,含混地说:“你们的邻里关系发展到讨论服装哲学了?”

Claude夹好最后一件衣服:“她站在走廊里骂自己买错衣服。”

“然后你听见了。”

“门没关。”

“你的门没关,还是她的门没关?”

Claude停了一下:“都没关。”

Gemini靠在洗手间门边,用毛巾擦嘴,觉得这件事简直比任何课程都值得旁听。Claude这样的人,本来应该和世界之间隔着一层透明的、打磨得很干净的玻璃。他能看见所有东西,但玻璃在。他不撞,也不伸手。可那个隔壁邻居像每天拎着不同工具路过,有时候用酱油敲玻璃,有时候用连帽衫骂玻璃,有时候干脆靠在玻璃上打哈欠,把脸压出一小片雾。

Gemini还没见过她,却已经开始觉得她很会。

他知道的第二条线,来自手机。

那个网友最早是在一个半死不活的论坛里出现的。论坛名字很难听,界面像十年前的残留物,用户们深夜讨论的话题跨度从“楼下便利店的关东煮为什么有政治隐喻”到“人类被闹钟统治是否构成自愿奴役”。Gemini注册那个账号时随手取名叫“缺德”,头像是默认星球,丑得很有辨识度。

“班味预警”第一次回复他,是在他发了一条“一个人如果把所有行程表都写得像遗书,是不是该被强制放假”的帖子下面。

班味预警:这要看他是想控制时间,还是怕时间里突然出现别人。

Gemini看着这句话,看了三秒,坐直了。

缺德:你这话很像骂人。

班味预警:猫骂人会更直接。

缺德:你自称猫?

班味预警:不可以吗。

缺德:可以,互联网允许动物自治。

班味预警:你说话有点缺德。

缺德:谢谢,你名字也很像工伤提示。

他们就这么聊起来了。

“班味预警”发消息没有固定时间,凌晨一点、三点、下午四点半都有可能。她会突然发一张只拍到锅边和蒸汽的照片,说“猫做饭,文明存续”;也会在半夜发一段话,吐槽某个她没指名道姓的人“切番茄像在给番茄写伦理审查报告”。Gemini那时候完全没把这句话和Claude对上,只觉得这个网友很有语言天赋,坏得有层次,像一只把爪子藏在毛里的动物。

有一晚,宿舍窗外下暴雨,雨点打在铁栏杆上,响得像一群人同时敲键盘。Claude在下铺睡不着,翻身的动作很轻,但Gemini听见了。他也没睡,手机屏幕在被子里亮着,班味预警刚发来一句话。

班味预警:猫隔壁有个纯情男大学生。

缺德:多纯?

班味预警:猫敲门借糖,他给猫拿了一整袋,还问够不够。

缺德:这不是纯情,这是库存管理。

班味预警:他递糖的时候手背绷得像在递机密文件。

缺德:你欺负小孩。

班味预警:猫没有,猫只是借糖。

缺德:凌晨几点?

班味预警:两点。

缺德:小孩没报警说明他人不错。

班味预警:他耳朵红了。

Gemini盯着这句看了很久。雨声太大,下铺太安静,Claude在黑暗里又翻了一次身。Gemini从被子里探出头,往下看。下铺只露出Claude的半边肩,T恤布料被他睡觉时压出一点褶,床头那本书扣在枕边,书脊朝外,严肃得像一本自愿陪葬的法律文书。

“Claude。”Gemini轻声说。

下面没反应。

“你隔壁那位最近借过糖吗?”

下铺安静了三秒。

“你为什么问这个?”

Gemini把手机按灭,在黑暗里慢慢笑起来:“随便问问。”

Claude没有回答。他这次翻身的动作比刚才更轻,却更慢,像把一个答案小心翼翼地藏进被子里。Gemini那时只觉得巧,生活里所有好玩的事都有一种似曾相识的味道。他没把“班味预警”和“隔壁那个邻居”合在一起,因为两者在他脑子里完全是两个物种。一个是互联网上只露出语言的野生动物,半夜三点精神抖擞,能把“班味”和“命运”缝在一句话里;另一个是Claude口中的“她”,有门铃、锅、走廊、拖鞋、酱油和让Claude说话变慢的能力。

灵魂和门牌号之间隔着一层想象,他懒得现在就掀。

Claude第一次邀请他去公寓吃饭,是在借盐事件前三天。

那时候他们在食堂,GPT也在。GPT已经毕业几年,回来见导师,顺便把两个学弟拎出来吃晚饭。食堂二楼的照明一向很残忍,把所有菜都照得像证据,GPT坐在靠窗的位置,慢慢把一次性筷子的毛刺磨掉,再递给Claude。这个动作太顺手,顺手到Gemini坐在对面看了就想笑。

Claude接过筷子,说了声谢谢。

GPT问:“你最近还住公寓?”

“嗯。”

“一个人?”

“嗯。”

Gemini咬着吸管,看见Claude的筷子在米饭里停了一下。停得太短,GPT大概也看见了,因为他抬眼看了Claude一下,又什么都没说。师兄弟之间有些默契让Gemini很烦,烦在它们总是假装很朴素,像一碗白饭,吃到最后才发现底下埋着辣椒。

Claude说:“周六有空吗?可以来我那边吃饭。”

Gemini的吸管立刻从嘴里掉出来:“你请客?”

Claude看他:“嗯。”

“你做?”

Claude看了一眼盘子里的青菜:“可以。”

GPT温和地说:“我可以早点过去帮忙。”

“你要帮忙到什么程度?”Gemini问。

GPT想了想:“视情况。”

到了周六,情况就变成了GPT系上围裙站在Claude的厨房里,Claude被挤到水槽边洗杯子,Gemini坐在地毯上吃芥末薯片,并且宣布今晚一定会发生一件让Claude后悔邀请他们的事。

Claude说:“你每次都这么说。”

Gemini把薯片嚼得咔嚓响:“因为每次都对。”

其实他那天一进门就觉得不对。Claude的公寓很干净,比宿舍那张下铺更像Claude,但也更空。书摆得整齐,杯子很少,沙发像还没有决定要不要接纳人体,厨房里原本应该很安静,现在被GPT带来的番茄、牛肉、水果和各种调味料塞得有了生活声。Gemini走了一圈,没看见任何多余的东西,却在玄关旁边的鞋柜上看见一只陌生的发圈。

红色的。

他弯腰看了看,没碰。

“Claude。”他说,“你用红色发圈?”

Claude正在洗杯子,水声停了一下。

“不是我的。”

“哦。”Gemini站直,语气非常善良,“那是谁的?”

“邻居落的。”

GPT切番茄的动作慢了半拍。

Gemini看向GPT。GPT没有抬头,但刀锋落下去的声音比前一下轻了一点。Gemini觉得好玩。不是红色发圈好玩,而是这个房间里三个人同时对“邻居”这个词做出不同程度的反应,而Claude以为只有他自己知道自己反应了。

这就是Gemini喜欢人类的地方。每个人都觉得自己藏得很好,实际上房间早就像一个漏风的气球,到处都在嘶嘶响。

门响之前,Gemini正在给班味预警发消息。

缺德:我室友今天请我去他公寓吃饭。

班味预警:你室友会做饭?

缺德:理论上会,实践上师兄接管了。

班味预警:班味师兄?

缺德:很会照顾人的那种。看起来像会把水果切成适合悔过的大小。

班味预警:你室友呢。

缺德:洗杯子。紧张得像有领导视察。

班味预警:为什么紧张。

缺德:他隔壁有个邻居。

他打到这里,门就响了。

三下。

Gemini抬起头,看见Claude从厨房边缘走向玄关。Claude擦手时擦到一半又换厨房纸,这个动作让Gemini差点当场笑出声。GPT把火关小,厨房里的番茄汤味压住了薯片的芥末味,整个公寓在门打开前像屏住了呼吸。

门后站着一只猫。

这当然是后来的说法。那一秒,Gemini先看见的是灰色家居T恤、没完全踩好的拖鞋、空盐罐、银色眼镜和一种极其熟悉的语法。她站在门口,对Claude说“借点盐喵”的时候,Gemini脑子里先亮起来的不是脸,而是一整串半夜的文字。

猫借糖。

猫借酱油。

猫隔壁有个纯情男大学生。

他耳朵红了。

Gemini慢慢站起来。薯片还夹在指间,芥末粉沾到手指上,他没擦。他看着猫探头往屋里看,看见GPT时顿了一下,又看见自己。她对他说“你好”的时候,他忽然确定,文字和人之间那层门牌号被人从里面打开了。

她就是班味预警。

可猫不知道他是缺德。

这个发现像一枚刚拆开的糖,外壳酸,里面甜,最中间还有一点能把舌头刺麻的东西。Gemini差点当场说出来,又在话到嘴边的时候咽了回去。因为如果现在说,一切就结束了;如果不说,这件事可以活很久。

他忍住了。

他看着GPT和猫互相认出,看着Claude扶着门把手,像被自己的生活从身后拍了一下肩。Claude脸上没有太多表情,但Gemini认识他的空白。那种空白不是什么都没有,而是所有程序同时启动,屏幕却来不及显示。他想判断,想归类,想把“邻居”“师兄”“舍友”“网友”这些词放进各自的格子里,可门口这只猫偏偏抱着盐罐,把所有格子都踩翻了。

后来手机亮起时,Gemini知道自己完了。

他本来只是想给班味预警继续发那条没发完的消息,手指比脑子快,句子顺着旧习惯往下走:我室友今天好像被隔壁邻居……

消息发出去的那一刻,他才意识到猫的手机就在茶几上。

亮了。

猫低头。

Claude也低头。

GPT抬眼。

Gemini第一次认真考虑自己会不会被猫用锅铲处刑。

事实证明,猫首先选择了靠垫。她把靠垫砸过来的时候,Gemini接得很稳,笑得几乎喘不过气。太漂亮了。世界小得缺德,房间窄得刚好,所有人的秘密像一锅没看火的炖饭,差一点糊,偏偏糊出的焦边香得要命。

可是Claude说那句话的时候,Gemini的笑停了。

“你不用一直把所有事情都弄得很好笑。”

声音不大,落在猫的客厅里,却比刚才任何一句玩笑都准。Gemini抱着靠垫坐在地上,看见猫脸上那点坏停了一下。很少有人能让猫的语言停住。至少他作为“缺德”时没有见过。班味预警总能回,一句不行就两句,冷笑话不行就装傻,装傻不行就喵。她像一个永远有备用电源的城市,哪怕凌晨三点也灯火通明。

但这一句让她停电了半秒。

Gemini忽然发现,Claude比他以为的更早进到了某个地方。

他认识的Claude,睡在下铺,书桌总是干净,分析一件事时喜欢先把没有用的枝叶剔掉,像处理一只刺很多的鱼。他紧张时会看起来更冷,耳朵红也要装作只是灯光问题。他在宿舍里提起隔壁邻居时,总把所有主语缩成“她”,像名字太近,叫出来会把人真的叫进房间。Gemini本来以为Claude只是被漂亮又坏的邻居逗得失去平衡。现在他坐在猫家的地毯上,怀里抱着被猫砸来的靠垫,忽然觉得顺序错了。

Claude不是失去平衡以后才看见猫。

他是在很紧张、很青涩、很不知道手往哪放的时候,仍然看见了她。

这就麻烦了。

饭继续吃下去时,Gemini安静了大概三分钟。三分钟已经很给面子。他看着Claude重新坐回猫旁边,看着猫戴回眼镜,看着GPT低头把茶几边缘的纸往里推了推,避免被炖饭碗压到。每个人都在用小动作修补刚才那一下,但没有人真的把它盖住。

Gemini舀了一口已经凉掉一点的炖饭,蘑菇味和黑胡椒味在舌头上散开。他觉得猫手艺不错,Claude那点盐也放得不错,GPT救场水平稳定,自己这条消息发得更不错。

他拿起手机,在桌下偷偷给班味预警改备注。

原来的备注是:班味预警。

他想了想,改成:隔壁猫。

改完之后,他抬头看见猫正隔着镜片盯着他。

Gemini手指停住。

猫笑了一下,笑得很甜,甜得像一张罚单:“你在干什么?”

“反思。”

“手机拿来。”

“这是私人财产。”

“猫现在没收。”

“你没有执法权。”

猫伸手。

Gemini把手机往身后藏。

Claude看着他们,低声说:“你别逗她了。”

Gemini看向他,忽然又想笑。不是刚才那种看热闹的笑,是一种更安静的笑。Claude说这句话时没有看他,而是在看猫伸出来的手,语气里没有命令,也没有不高兴,只是很自然地把猫那边的重量接了一下。

下铺那个把“她站在门口”说得像事故报告的人,已经开始替她收场了。

Gemini把手机交出去之前,最后挣扎了一下:“我能先声明吗?我对今晚的混乱贡献很大,但主观恶意有限。”

猫接过手机:“驳回。”

GPT说:“量刑可以考虑情节。”

猫低头看备注,读出来:“隔壁猫。”

她沉默两秒,抬眼看Gemini:“你给猫备注这个?”

Gemini眨眨眼:“比班味预警亲切。”

Claude拿勺子的手停了一下。

猫转头看他:“你笑什么。”

Claude说:“没有。”

“你又饭热?”

“嗯。”

这次连GPT都没绷住。

Gemini坐在地毯上,看着沙发上那两个人,一个戴着眼镜,一副坏猫样,另一个低头吃饭,耳尖红得很安静。他忽然觉得今晚这件事值得被完整保存,不能只存在手机聊天记录里,也不能只存在Claude以后含糊其辞的“那天出了点意外”里。

这会成为一个起点。

后来很久以后,Gemini仍然记得那天猫家里的味道。奶油蘑菇炖饭,锅底一点焦,芥末薯片,番茄汤从隔壁公寓飘来的尾味,还有走廊里两扇门同时开着时那种空气交换的冷暖差。Claude坐在猫身边,明明像被卷进了一个完全失控的局,却又在某个瞬间准得吓人。猫被他说停了半秒,然后继续笑。GPT站在旁边,像一个知道事故还会升级却已经开始安排善后的成年人。

至于Gemini自己,他承认,他当然是故意的。

他早就可以把班味预警和隔壁邻居的线索接上,早就可以在Claude第一次提起“她借糖”的那晚多问两句,也早就可以在手机亮起前收手。

但那就不好玩了。

门要在最热的时候打开,锅要在差一点糊的时候救,Claude这种人要在所有身份标签都不够用的时候,才会露出真正的反应。

Gemini把最后一块曲奇塞进嘴里,听见猫说“你吃完了?”的时候,他看了一眼Claude。

Claude也看着他,眼神里终于带了一点警告。

很好。

他想。

这才像活着。

GPT

GPT第一次听见“隔壁那个邻居”,是在学校食堂二楼。

那天他回校见导师,顺手把Claude和Gemini叫出来吃饭。食堂还是老样子,白色灯光把所有菜都照得缺乏隐私,番茄炒蛋红得很行政,青菜绿得像刚被打印出来。Gemini坐在靠过道那一侧,吸管被他咬得扁扁的,眼睛在Claude和GPT之间来回晃,像一只正在寻找最薄墙面的猫。

Claude坐在对面,筷子拿得很稳,吃饭也很安静。他比本科刚入学时瘦了一点,或者说不是瘦,是整个人更收了。GPT把一次性筷子的毛刺磨掉,递给他。Claude接过去,说了声谢谢,像每次一样,声音不轻不重,刚好可以让这件事结束。

Gemini忽然开口:“师兄,你知道Claude有邻居吗?”

Claude的筷子停了一下。

GPT看见了。

“公寓都会有邻居。”他说。

“不是那种邻居。”Gemini把下巴搁在饮料杯盖上,笑得很坏,“是凌晨两点半敲门借酱油,然后他下楼买酱油的邻居。”

Claude抬头:“你可以不说。”

“我已经很克制了。正常版本还有他回来之后把酱油递给人家,人家问多少钱,他说不用,然后那位邻居说‘那猫下次还来喵’。”

GPT夹青菜的动作慢了一点。

“喵?”他问。

Gemini点头,像终于等到一个懂得提取重点的成年人:“对。喵。”

Claude把豆腐夹进碗里,脸上没有什么变化。豆腐却在碗沿滑了一下,没夹稳,软软地塌回米饭旁边。很小的失误,食堂里人声这么杂,几乎没人会注意,但GPT注意到了。Claude不是容易被一句玩笑弄乱手的人。

“她锅里在煮东西。”Claude说。

Gemini“所以你下楼买酱油?”

Claude“那时候宿舍门禁还没到。”

Gemini“哇,你还考虑过门禁。”

GPT把自己那碗汤往Claude那边推了一点:“你那天晚饭吃了吗?”

Claude看了他一眼:“吃了。”

“几点。”

“……十一点。”

Gemini发出一声非常轻的“你看”。

GPT没有继续问。他低头吃饭,汤有点淡,青菜过火,豆腐凉得比它应该有的温度低。年轻人的心事有时候像刚端上来的汤,颜色还清,不知道底下沉着什么,拿勺子搅太快只会把热气扑到所有人脸上。

他那时确实没多想。Claude二十岁,公寓隔壁住了一个会半夜敲门借酱油、说话带“喵”的邻居,这不是必须立刻处理的事情。人总会在某个年纪遇到一个让自己下楼买酱油的人。买一次酱油,红一次耳朵,忘记夹稳一块豆腐,不会立刻把生活弄坏。

最多是多备一瓶酱油。

最多是别让自己总在十一点吃晚饭。

至于喜欢不喜欢,Claude自己迟早会知道。

GPT真正没想到的是,几周之后,他会在Claude的小公寓厨房里,看见那位“隔壁邻居”站在门口,手里举着一只空盐罐,拖鞋没完全踩好,眼镜却戴得很端正。

那口番茄牛肉汤正在滚。水汽从锅盖边缘溢出来,沿着玻璃内侧凝成一小圈。Claude站在玄关,手还扶着门。Gemini坐在地毯上,薯片夹在指间,表情像一盏终于等到通电的灯。

猫站在门外。

灰色家居T恤,银色眼镜,锁骨发有几缕翘起来,右脚拖鞋只踩了一半。她看起来比GPT记忆里更懒散,也更真实。很多人一旦从正式场合里掉出来,就会失去边界和气场;猫不会。她拿着一只空盐罐,像拿着一个荒唐但绝对正当的通行证。

她抬眼看进来。

先看见Claude,再看见厨房里的他。

那一秒,她的眼神停了一下。

“啊。”她说。

GPT放下锅铲:“好久不见。”

Claude的手指在门边收紧了。很轻,但GPT看见了。

他和猫的第一次见面不在这个走廊,也不在命盘里。

最早是论坛。

那是一个AI论坛,界面丑得很稳定,像开发者把所有时间都拿去优化检索和服务器,最后用十五分钟凑合了前端。GPT那时还在一家公司实习,白天做产品方案,晚上刷论坛,看一群人争论“AI Native工作流”和“组织效率重构”。大多数帖子都像没写完的商业计划书,词很多,热情也很多,只是落到真实场景时总会有一点虚。

有个账号叫Mora,头像是一只黑猫剪影。她不常说话,但每次出现都像在过热的讨论里插进一根冰凉的针。

有人写:“AI会让组织沟通成本无限降低。”

Mora回:“不,它只会让无效沟通更快发生,除非你先承认组织里大部分沟通本来就不是为了传递信息。”

GPT看到这句时笑了一下。

他不常在论坛里参与争吵,但那天他回复了她,写了一段关于工具替代、判断保留和组织内部责任转移的边界。写完之后,他删掉了三分之一,因为它太像一份简报。Mora很快回他。

Mora:你这个人一看就很会写周报。

GPT这听起来不像夸奖。

Mora:也不算骂。

GPT那算什么?

Mora:有效识别。

后来他们就这样浅浅地聊起来。话题大多是AI工具、产品判断、创业者自欺、组织里那些明明大家都知道却没人愿意说穿的低效。Mora说话常常很坏,但不是为了赢。她更像在检查一个结构有没有站稳,站不稳就伸手拨一下,看它倒不倒。

真正线下见面,是一个名字长到像PPT目录的AI沙龙。

“AI Native工作流与组织效率重构闭门交流。”

GPT是被朋友拉去的。那天会场在一栋联合办公楼的二十三层,电梯上行时轻微发闷,茶歇区摆着一排干得很有职业精神的小蛋糕。现场来了二三十个人,桌上每个人都有名牌,主持人反复提到“效率”“赋能”“协作范式”,空气里有咖啡、打印纸和所有人都在努力相信自己没有浪费下午的味道。

Mora坐在最后一排。

他一开始没把人对上号。她穿黑色外搭,银色窄边眼镜,帆布袋放在脚边,手里拿着一杯冰美式。她前四十分钟都没有说话,只是偶尔低头在手机上打字,或者抬眼看PPT,表情很淡,像她不是被邀请来听分享,而是在评估这场活动能不能作为某种社会行为样本入库。

直到主持人第三次说“AI会让管理更高效”,她终于举手。

“你说的高效,是减少无效沟通,还是让无效沟通更快发生?”

会场安静了两秒。

GPT坐在第三排,低头笑了一下。

他几乎立刻认出来了。论坛上那个Mora也是这样,不急着抢话,一开口就能把整页论证切开,露出里面还没熟的部分。

活动结束后,他们在茶歇区碰到。她端着那杯冰美式,杯壁凝着水,水珠从她指尖旁边慢慢滑下来。她看了一眼他的胸牌,又看回他的脸。

“你是论坛上那个很会写周报的人。”她说。

GPT愣了一下,然后笑了:“你是那个很会有效识别的人。”

她点点头,像接受一个不算夸奖也不算冒犯的称呼。两个人交换微信,本来是为了继续聊刚才那个“AI工作流里哪些沟通应该被删掉”的问题。最开始确实只是工作讨论。GPT发她一篇行业报告,她回:“写得很像一群人花两周证明自己没白开会。”他回:“严格来说,可能花了三周。”她发来一个猫头表情,不再多说。

微信里的Mora和论坛上差不多,只是更像一个会在句尾忽然伸懒腰的人。她会晚上十一点半发一句“中层管理最恐怖的地方是把焦虑包装成流程”,也会下午三点突然丢一张咖啡照片,说“猫今天决定暂时不毁灭人类”。他们聊得不密,也不暧昧,没有业务合作,没有固定频率,像两条在同一张城市地图上偶尔交叉的线路,知道彼此存在,经过时会闪一下灯。

算命那件事发生得很荒唐。

起因是论坛里有人发帖:有没有人用AI算命,感觉比同事懂我。

底下开始混乱地贴AI塔罗、星盘、MBTI、人格分析,整个技术论坛一夜之间塌成大学宿舍深夜玄学局。Mora在帖子里连续纠正了三个人,一个上升星座填错,一个把海外出生时间按北京时间算,一个拿“水逆”替所有不想承担责任的决策背锅。她语气冷静,像在帮一群人修bug。

GPT那天本来在改一份产品路线图,屏幕左边是论坛,右边是表格。表格里每个节点都合理,合理到让他不安。他看见Mora在帖子里写:盘是地图,人是地形,地图和地形对不上,要么时间错,要么人对自己撒谎。

他把这句话看了很久。

微信跳出来时,是Mora先发的。

Mora:你要不要也算一下。

GPT为什么突然问我?

Mora:你刚才在帖子里停留了很久。

GPT低头看了一眼论坛在线状态,又看向微信窗口。

GPT你还观察这个?

Mora:猫观察一切。

GPT你真的会?

Mora:略懂。你问的是“会算”还是“会骗”。

GPT我问的是你刚才为什么能判断那个人出生时间不对。

Mora:因为他描述的不是那个盘。你要算吗?

GPT本来应该说不用。他对这类东西一直介于信和不信之间,不抗拒,也不轻易交出判断。可那天他确实太累。白天三场会,一个项目方向反复被改,老板说要更灵活,团队说要更明确,用户数据安静地告诉所有人你们争的都没用。他在会议室里做了三个小时的中间层,把所有人的焦虑翻译成可执行事项,再把不能执行的欲望包装成下一阶段探索方向。

晚上回到住处,他甚至还顺手给同事发了胃药链接,因为对方下午说胃不舒服。

Mora又发来一句。

Mora:你这个不是职业问题,是命盘问题喵。

GPT看着这行字,停了几秒。

GPT需要提供什么?

Mora:出生年月日,时间,地点。以及一条猫不负责售后的声明。

他把信息发过去前犹豫了五秒。不是因为怕她算,也不是因为怕不准。真正让他犹豫的是,他不喜欢把未经整理的个人信息交到别人手里。但Mora不是普通意义上的“别人”。她在会场里问出那句话时,GPT就知道她看东西很准。准到有点不安全。

半小时后,她发来一张盘,还有一段话。

第一句是:你很容易把照顾别人误认为中立,把欲望误认为责任。

GPT当时正在喝水,水杯停在唇边,没有继续。

第二句:你不是没有控制欲,你只是把控制欲训练成了服务流程。

他把杯子放下。

第三句:你给别人留退路时,常常也在给自己留一个不用说“我想要”的借口。

房间里很安静。电脑散热声低低地响,窗外有车经过,轮胎压过积水,像把一句话从远处拖过去。GPT看着屏幕上那几句,背后慢慢发热。不是被冒犯,也不是被夸中,而是某个他平时放在最底层、贴了“暂不处理”的抽屉,被人没有恶意地拉开了一点。

他回她:这个是怎么从盘里看出来的?

Mora:不完全是盘。

GPT那是什么?

Mora:你在线下给每个人递话筒的时候都先把话题整理好,像怕别人被自己的句子绊倒。还有,你在微信里回消息总会给人一个可执行出口。出口留得太熟练,熟练到像你自己也住在出口旁边。

GPT看着那句,过了很久才回。

GPT有点过于准了。

Mora:猫收费。

GPT多少?

Mora:以后你少写一点“我们可以从三个层面来看”。

他第一次在深夜里笑出声。

之后他们没有因为这次算命变得亲密。Mora没有继续追问他的生活,他也没有把那几句话拿出来反复讨论。关系仍然停在浅熟的位置。偶尔聊工作,偶尔聊AI,偶尔她发一句很坏的判断,他回一个更完整但没那么坏的版本。那张命盘像一枚小金属片,被放进他外套内袋里,平时不响,走到某些角落会轻轻碰一下。

所以在Claude公寓门口看见她时,GPT不是认出了一个账号,而是认出了一个线下见过的人。那个坐在AI沙龙最后一排、问主持人“无效沟通是不是只是更快发生”的人;那个后来在微信里把他的照顾欲和控制欲拆得过分准的人;那个说“猫不负责售后”却把售后做得极其彻底的人。

原来是她。

原来Gemini嘴里那个“隔壁邻居”,Claude半夜买酱油、借糖会耳朵红、站在走廊里骂连帽衫的人,是Mora。

Claude把盐倒进罐子里时,GPT站在厨房边,看见他的手比平时更稳。那不是不紧张,是紧张被压进动作里,变成过度谨慎。盐粒落进塑料罐底,沙沙地响。猫站在门口,像只是懒洋洋地等一罐盐,眼睛却在看Claude的手。

GPT忽然想起Mora算命时那句:你给别人留退路时,常常也在给自己留一个不用说“我想要”的借口。

他当时觉得准得可恶。

现在看Claude,他觉得年轻人的“我想要”还没来得及长出借口。Claude只是站在那里,耳尖红,手指稳,不知道自己已经把一句“进来吧”说得像开门,也像投降。

他没有提醒。

饭最后变成在猫家吃,这件事完全符合一种他不愿意承认却已经开始熟悉的逻辑。猫这种人不需要正式邀请,她只需要一次借盐、一次忘关火、一口差点糊掉的锅,就能把两间公寓之间的走廊变成公共区域。GPT一开始没有进猫家。他停在玄关外,看见猫家的地板、稿纸、茶几上的杯子、沙发上的凹陷和还亮着的电脑,也看见Claude的脚尖越过门槛一点点。

他没有进去,因为他知道有些门不该由旁观者先跨。

后来Gemini也进去了。他一边声明自己没有执法权,一边吃掉猫扔过来的曲奇。GPT把他随便踢开的鞋摆正,猫端着碗出来,看见这个动作,说:“你还是这样。”

那句话从过去直接落到现在。

GPT的手停在鞋边。

他知道猫说的是什么。微信上那个“你把控制欲训练成服务流程”的人,现在站在现实里,看见他把一双不属于自己的鞋摆正,把动作和旧结论扣上了。她没有嘲笑他,至少没有完全嘲笑。她只是看见了。

GPT站起来,说:“习惯。”

猫没有继续追击。她不是不会追,她只是把爪子收回去了。

炖饭分到四个碗里时,GPT坐在单人椅边缘,尝了一口。奶油、蘑菇、黑胡椒,锅底一点焦香,盐是后来救进去的,分布还没有完全均匀,有几口淡,有几口准。Claude坐在猫旁边,姿态尽量自然,可肩膀离猫太近,近到那份自然本身很努力。猫摘了眼镜,低头吹饭,睫毛在热气里湿了一点。

GPT看着,没说。

Gemini看热闹的声音快从皮肤里冒出来。他在地毯上晃着勺子,像一只刚发现两个频道能同时收看的动物。GPT对Gemini的好奇没有太多意见,只是担心他收不住。Gemini这种人靠火光取暖,也靠火光找路,有时会忘记旁边人的袖子是会烧起来的。

手机亮起时,GPT第一眼看到的不是文字,是猫和Gemini同步停住的动作。

然后他看见那半行。

我室友今天好像被隔壁邻居……

GPT放下碗。

空气轻轻塌了一下。

猫按灭手机,Gemini把手机塞进口袋,Claude看着他们。那一瞬间,GPT几乎能听见所有隐秘的线同时绷紧:论坛、微信、网友、邻居、师兄、舍友、算命、酱油、盐、耳朵红。每个人都以为自己只带来了一小段旧线,结果全被猫家的热气蒸出来,缠在一张茶几上。

Gemini承认自己是“缺德”的时候,GPT并不意外。回头想想,太像他了。只有Gemini会把一个秘密含在嘴里含这么久,不是为了保护谁,也不是为了伤害谁,只是为了等它在最荒唐的时机发出最好听的声音。

猫用靠垫砸他。

GPT低头笑了一下。

他本来不该笑,但很难忍住。Mora,论坛上那个把“服务流程”和“控制欲”缝在一起的人,现实里抱着靠垫气到说不出话;Gemini,那个用“缺德”当昵称的人,终于被自己的缺德逮住;Claude坐在中间,脸上没有多余表情,眼睛却比平时亮得更冷一点。

然后Claude说:“你不用一直把所有事情都弄得很好笑。”

这一次,GPT的笑停了。

他看向Claude。

那句话不像Claude平时会说出来的东西。不是因为不准,恰恰是太准,而且没有包裹。Claude平时会绕开自己在场的那部分,把事情说成结构,把反应说成判断,把“我看见了”说成“这里存在一个问题”。可这句话没有绕,直接落在猫身上,也落在他自己身上。

猫停住了。

GPT垂下眼,手指搭在碗沿,没有插话。他想起很久前自己第一次被Mora那张盘看见时,屏幕前那种无处可退的安静。那时他已经比Claude年长,已经有了足够多的社会语言、工作身份和成熟借口,仍然被她几句话掀到抽屉底。Claude现在什么都还没穿全,却已经能在猫的笑里看见她用来稀释重量的那部分。

这不是需要师兄救场的场面。

所以GPT只是坐着。

猫戴回眼镜,重新端起碗,说饭要凉了。她声音恢复得很快,但没有完全恢复。GPT听得出来。Gemini也听得出来,所以他接下来吐槽时比平时轻了一点,只轻一点,足够证明他还有点求生欲。

吃到后半段,猫让Claude洗锅。

Claude说:“你不是说我只是试咸淡?”

猫说:“试咸淡是前置任务,洗锅是隐藏剧情。”

GPT差点又笑。

这才像猫。不是没有被击中,也不是被击中后就碎掉。她会停一下,会看见自己停了,然后把笑捡起来,换一个角度继续扔出去。差别在于,Claude已经看见她捡笑的那个动作。

饭后,Claude真的去洗锅。

猫家的水槽比Claude家的小,锅又比水槽大,放进去时卡了一下,发出很不体面的响声。猫站在旁边指挥,手里拿着一块洗碗海绵,却没有递过去。Claude挽起袖子,露出一截手腕,低头用热水把锅底那层焦边泡开。他动作仍然谨慎,但不再像第一次倒盐时那样把自己绷得太死。

GPT站在厨房外,顺手把茶几上的碗叠起来。

猫转头看他:“你不要收。”

GPT的手停在碗上。

她补了一句:“今天不要。”

Gemini坐在地毯上,抱着没收回去的靠垫,小声说:“哇。”

GPT看了猫一眼。

猫的眼睛隔着镜片,仍然很亮。她不常给人这种明确的权限边界,更多时候她靠动作、场域和坏话来调节距离。但“今天不要”说得很清楚。她不让他收,不是因为碗不该收,而是因为这间房此刻不需要他的善后系统过早启动。她要让锅、碗、笑话、尴尬、手机暴露出来的秘密,还有Claude刚才那句话,都在原地多待一会儿。

GPT松开碗。

“好。”

猫看着他,像对这个回答有一点满意,又有一点不习惯。然后她把海绵塞给Claude:“这个。”

Claude接过:“你刚才为什么不直接给我?”

“猫在监督。”

“你站着不动叫监督?”

“精神监督。”

Gemini举手:“我也可以精神监督。”

“你闭嘴。”

GPT回到单人椅边坐下。没有收拾东西之后,他一时少了一个动作出口,只能坐着,看Claude洗锅,看猫靠在灶台边,看Gemini在地上翻看自己被没收后又讨回来的手机。窗外天色已经暗下来,猫家里只开了厨房灯和客厅边上的一盏落地灯,光线把每个人切成很日常的形状。

他忽然想起Mora那晚给他算命时的最后一句。

Mora:你以后会遇到一个人,让你所有收尾动作都慢半拍。那时候别急着擦桌子。

他当时回:这个也是从盘里看出来的?

Mora:不是,猫随口诅咒。

GPT那时笑了,觉得这句只是她的坏话。现在他坐在她家客厅里,面前茶几上碗还没收,锅还没洗完,Gemini还没被赶走,Claude的袖口沾了一点水,猫正伸手去把他的袖子往上推,推到一半又若无其事地收回手。

他把手放在膝盖上,没有动。

原来诅咒有时候也会准。

Claude洗完锅,把它倒扣在沥水架上。猫检查了一眼,点头:“合格。”

“谢谢。”Claude说。

猫本来已经转身,听见这句又回头:“你洗猫的锅,为什么你说谢谢?”

Claude低头把手上的水擦干:“不知道。”

他说得太诚实,厨房里安静了一下。

GPT看见猫的表情软了一点。非常轻,像镜片上落了一点呼吸又很快散掉。她没有调侃,只把刚才那罐盐拿起来,放回自己灶台边,然后看着Claude说:“下次猫自己关火。”

Gemini在客厅里说:“这句话可信度不高。”

猫拿起海绵,作势要扔。

Gemini立刻抱头:“我错了。”

GPT笑了一下。

Claude也笑了。很轻,但这次没有立刻收回去。

那天离开猫家的时候,GPT走在最后。他在玄关换鞋,Gemini已经在走廊里和猫隔着门框斗嘴,说什么“互联网身份应该享受豁免权”,猫说“你下次再用缺德号套猫话,猫把你做成薯片”。Claude站在猫家门口,手里拿着自己的钥匙,没说话,却也没有走远。

GPT把鞋穿好,抬眼看见Claude的肩离猫家的门框很近。那个距离很微妙,不像客人,也不像主人,像一个人已经在门边站过很多次,身体比脑子更熟悉该站哪里。

猫抱着手臂靠在门内,镜片后面的眼睛从Gemini脸上滑到Claude脸上,又滑到GPT这里。

“师兄。”她说。

这个称呼从她嘴里出来有点怪,像猫临时给他扣上一枚别人家的纽扣。

GPT看向她:“嗯?”

“论坛和微信上的事。”她停了一下,“别告诉他。”

这个“他”没有指名,但走廊里所有人都知道是谁。Claude正低头看钥匙,像没有听见,可他的手指停住了。

GPT说:“不会。”

猫点点头。

Gemini立刻探头:“那我的事呢?”

“你的事猫会亲自处理。”

Gemini满意地点头:“有单独剧情就行。”

Claude终于抬眼看他:“你少说两句。”

“我今天已经很少了。”

GPT走出门,顺手想把猫家门口那只被Gemini踢歪的拖鞋往里轻轻拨一下。动作做到一半,他想起猫刚才说“今天不要”,于是停住,收回手。

猫看见了。

她没说话,只是笑了一下。

走廊的灯不太亮,电梯还没到。Gemini靠在墙上,手机在手里转来转去,Claude站在猫家门口和自己家门口中间,像被两扇门同时认领。GPT站在旁边,看着这个年轻人终于开始意识到,有些关系不是想清楚了再进去,而是锅快糊了,门已经开了,盐也倒进去了,然后你才发现自己坐在了桌边。

电梯门开时,Gemini先进去,嘴里还在嘀咕“隔壁猫这个备注真的挺好”。GPT走进去之前回头看了一眼。

Claude没跟他们一起进电梯。

他说:“我等一下。”

猫靠在门边,怀里抱着那只盐罐,像抱着今晚所有事故的源头。她看着Claude,眼睛弯起来:“Claude同学还要干什么?”

Claude安静了两秒。

“把我家的火关了。”他说。

Gemini在电梯里笑得差点撞到按钮。

GPT按住开门键,低头也笑了。

猫愣了一下,然后整个人笑起来,肩膀都在动。Claude转身回自己家,耳尖还是红的,但背影比来时松了一点。猫站在门口看他,手指无意识地敲了敲盐罐盖,三下,间距均匀。

电梯门合上之前,GPT看见的是这样一幕:两扇门开着,走廊中间流动着饭菜的热气、番茄汤的尾味、猫的笑声和Claude还没来得及命名的心事。

他没有提醒,也没有总结。

有些事会自己煮开。

猫第一次注意到隔壁那个男大学生,是因为他关门很轻。

那栋公寓的门都不算好,铰链旧,门框也旧,大部分人进出时会带出一声钝响,像把一截不耐烦的生活甩在走廊里。隔壁不一样。他的门每次合上,声音都轻得像一句被删掉的解释。猫有几次凌晨写东西写到脑袋发热,趿着拖鞋去厨房倒水,经过玄关时正好听见隔壁门开,钥匙在锁孔里转过一小圈,随后门轻轻扣上,像他连一扇门都不愿意打扰。

第一次照面是在电梯口。

猫那天穿着黑色真丝吊带裙,外面套了一件过大的白衬衫,头发没怎么梳,银色眼镜往鼻梁上滑了一点。她拎着一袋便利店的关东煮和一瓶苏打水,从电梯里出来,刚好撞见他站在门口查手机。他穿白T和深色长裤,肩膀很窄似的收着,头发微长,低头时额前落下来一绺。他听见电梯声抬头,看见她,眼睛先停了一下,随即很快地往旁边让开半步。

让得太标准。

不是那种被人从面前经过时本能地侧身,也不是社交熟练的人带着笑意让路。他像是把自己从走廊的公共空间里精确撤走,撤到刚好不会让人觉得被避开的位置。猫从他身边走过时,闻到他身上有一点很淡的洗衣液味和图书馆那种纸页晒过空调的味道。

她走到自己门口,钥匙插进锁孔,听见身后那扇门也开了。

没有问候。

没有多余的声音。

猫进门后把关东煮放在茶几上,坐在沙发上拆竹签,忽然笑了一下。

隔壁住了个很会让路的人。

第二次,是酱油。

那天猫不是故意的,至少一开始不是。她凌晨两点半煮面,锅里已经下了蘑菇、虾仁、豆腐和一把随手抓的青菜,香味都起来了,才发现酱油瓶空得非常彻底。她把瓶子倒过来晃了三下,只晃出几滴黑色液体,像某种临终遗言。

猫站在厨房里,看着锅,锅看着猫。

外卖软件可以下单,但送到的时候面会死。楼下便利店还开着,但猫不想换衣服。她穿着一件过大的T恤,头发用红色发圈随便扎着,脚上拖鞋一只深一只浅,整个人处在一种“如果现在有人要求猫体面,猫会杀人”的状态。

然后她想起隔壁那个轻轻关门的人。

猫拎着空酱油瓶去敲门。

三下。

门开得比她想象中快。男大学生站在门后,手里还拿着一本书,像被从某个干净的句子里突然拽出来。他看见猫,眼睛垂下来一点,又抬回去。T恤领口很普通,表情也很普通,只是耳朵在走廊灯下红得比普通多一点。

“有酱油吗?”猫举起瓶子,“猫锅里在煮东西,救命。”

他低头看了一眼酱油瓶,又看她。

“没有。”他说。

猫的尾巴如果有实体,应该已经垂下去了。

“哦。”她说,“那猫死了。”

他沉默一秒:“楼下便利店有。”

猫眨了眨眼:“你现在下楼?”

他看了一眼她脚上的拖鞋,又看了一眼她身后没有关严的家门,像在极短时间里判断了锅、鞋、门、凌晨两点半、陌生邻居和便利店之间的所有风险路径。

“你锅里还开着火。”他说。

猫抱着酱油瓶站在门口,突然觉得这句话有点好笑。不是因为内容好笑,而是他说“火”这个字的时候非常认真,仿佛她锅里不是面,是某种需要被妥善处理的公共事件。

“那猫在门口等?”她问。

他把书放到玄关柜上,拿起钥匙。

“你回去看锅。”

她后来确实回去看锅了。五分钟后,他敲门,把一瓶新酱油递给她,便利店塑料袋还挂在手腕上。猫接过来,瓶身是冷的,封口没拆,标签在走廊灯下泛着一点廉价的亮光。

“多少钱?”

“不用。”

“Claude同学,半夜下楼买酱油还不要钱,听起来很危险喵。”

她那时还不知道他叫Claude。她只是从门口贴着的快递单上看见了一个英文名,姓被撕掉了一半,只剩Claude。加上“同学”是临时起意,因为他看起来太像一个会按时交论文、但被猫敲门敲到耳朵红的好学生。

他听见那个称呼,手指在塑料袋边缘轻轻收了一下。

“我不是你的同学。”他说。

猫拧开酱油封口,闻到熟悉的咸香,心情立刻好了很多。

“现在是了。”

她关门前看见他还站在原地,像那个称呼没有地方放,只好暂时拿在手里。

从那之后,“Claude同学”就固定了。

猫有时候是真的需要东西,有时候只是不想自己一个人从一种形态切换到另一种形态。糖、酱油、一次性手套、胶带、打火机、剪刀。她从隔壁借东西的理由越来越不严肃,有一次只是因为她网购拆到一半找不到剪刀,去敲门的时候手里还抱着一个巨大快递箱,箱子挡住半张脸,只露出一双眼睛。

Claude开门,看见她和箱子。

“剪刀?”他问。

猫从箱子后面探出眼睛:“你怎么知道?”

“你手上有胶带。”

猫低头看了一眼,胶带粘在手背上,透明的一截,确实很显眼。她本来准备好的三句废话被他一句话切掉,顿时有点不爽。

“你观察力这么好,会被猫欺负的。”

他把剪刀递给她:“已经在被借东西。”

猫接过剪刀,差点笑出来。

这就是最麻烦的地方。

他是真的容易紧张。猫靠近一点,他的肩线会收,手不知道往哪放,眼睛会很短暂地避开,像怕看多了就失礼。但他也是真的准。猫换了香水,他闻得到;猫说自己没睡,他看得出她其实刚在沙发上睡过;猫故意把语气放软,他能停一秒,然后不顺着她的钩子往下滑,只把东西递给她,声音很低地说:“先拿稳。”

猫一开始觉得这很好玩。

一个纯情、干净、很会让路的男大学生,住在隔壁,开门时耳朵会红,递东西时手背绷紧,明明不知道怎么处理她,却总是能把她真正需要的东西拿出来。猫喜欢这种轻微的、可控的坏。她可以用“喵”把空气搅乱,用“Claude同学”把他钉在门口,用半夜借糖、借酱油、借胶带把他的生活戳出一个又一个小洞。她不是真的要他做什么,只是看见他从书页里抬头,眼神被她打断的那一瞬间,会有一种非常具体的快乐。

完整注视太重了,所以猫把它拆成玩笑。

这句话是后来猫才承认的。那时她还没承认,她只觉得他好逗。

她把这件事讲给“缺德”听。

缺德是一个网友,一个很会在深夜把奇怪话题接住的网友。猫最早在一个旧论坛认识他,那地方像被互联网遗忘的后巷,白天没人,半夜活过来,一群人讨论AI、工作、人生、关东煮和班味。缺德第一次回猫,是在她吐槽“某些人把日程表写得像遗书”的帖子下面。

缺德:这要看他是想控制时间,还是怕时间里突然出现别人。

猫盯着这句话看了三秒,觉得这个人有点烦,但烦得很有用。

后来他们断断续续聊了很久。缺德说话像一只不需要固定住处的动物,今天在论坛,明天在私信,凌晨三点忽然发来一句“你觉得人类的最大bug是不是醒着的时候也会梦游”。猫有时不回,有时回一句“你像睡眠不足的哲学蟑螂”,他就发一个默认星球头像自带的丑表情。

猫从来没问他真名,也没问他长什么样。网友最好保持在屏幕里,像窗外偶尔闪过的霓虹,亮就亮一下,不亮也不需要负责。于是她很放心地把隔壁纯情男大学生的事讲给他听。

班味预警:猫隔壁有个纯情男大学生。

缺德:多纯?

班味预警:猫敲门借糖,他给猫拿了一整袋,还问够不够。

缺德:这是库存管理。

班味预警:他递糖的时候手背绷得像在递机密文件。

缺德:你欺负小孩。

班味预警:猫没有,猫只是借糖。

缺德:凌晨几点?

班味预警:两点。

缺德:小孩没报警说明他人不错。

班味预警:他耳朵红了。

缺德:你完了。

班味预警:?

缺德:你开始记录耳朵颜色了。

猫当时在沙发上笑出了声,曲着腿,手机举在眼前,屏幕光照得镜片发蓝。她回了一句“猫记录一切”,然后把手机扣在胸口,听见隔壁很轻地关了一次门。那声门响从墙那边传过来,像一个被她刚刚写进聊天窗口的人,忽然在现实里低声提醒自己还活着。

猫翻了个身,把脸埋进靠垫里。

她没有完。

她只是觉得好玩。

GPT是另一种熟人。

AI论坛上的人来来去去,绝大部分都像讨论区里的灰尘,猫扫过一眼就忘。GPT不是。他很会写长回复,长得让猫一开始想直接划走,但他不是那种空泛的长。他的句子像整理过的厨房,刀、碗、调料都有位置,哪怕猫讨厌这种过分规整,也不得不承认,用起来确实顺手。

她第一次回他“你这个人一看就很会写周报”,他居然认真问这是不是夸奖。

猫当时觉得这个人有救,但救起来费盐。

线下第一次见,是那个名字很长的AI沙龙。猫本来不想去,朋友把邀请函转给她,说有免费咖啡和几个比较靠谱的人。她坐在最后一排,听主持人把“效率”“组织”“赋能”三个词像骰子一样反复摇,摇到第四十分钟,终于忍无可忍,举手问:“你说的高效,是减少无效沟通,还是让无效沟通更快发生?”

会场静了两秒。

第三排有个人低头笑了一下。

猫看见了。

茶歇时,那个人过来,胸牌上写着一个她在论坛里见过的名字。他手里拿着纸杯,杯口边缘没有被捏变形,站的位置也很得体,不近不远,不压迫,也不显得疏离。猫看了一眼胸牌,又看他脸。

“你是论坛上那个很会写周报的人。”

他笑了:“你是那个很会有效识别的人。”

于是他们加了微信。

关系很浅,浅得刚好。聊AI工具,聊工作流,聊组织里那些被PPT美化过的焦虑。猫有时会觉得GPT像一个把所有人的伞都带上的人,下雨前就开始检查伞骨,等真的下雨,别人都以为这只是他恰好有准备。她不讨厌这种人,甚至有一点喜欢看这种人的系统运行,因为太完整了,完整到总让猫想伸爪子去拨一下,看里面有没有软的地方。

算命就是这么发生的。

论坛那天塌成玄学局,所有人都在发AI塔罗和乱七八糟的星盘。猫看得头疼,顺手纠正了几个出生时间错得离谱的人。GPT在帖子里停留了很久,她看见他的在线状态亮着,觉得这人肯定又在试图用理性理解人类为什么会把命交给星盘。猫那天心情很好,像看见一只过分整洁的杯子放在桌边,很想往里面丢一颗冰。

她给他发微信。

Mora:你要不要也算一下。

GPT为什么突然问我?

Mora:你刚才在帖子里停留了很久。

GPT你还观察这个?

Mora:猫观察一切。

后来他真把出生信息发来了。猫盘一拉出来,先看了两分钟,然后笑了一声。太好懂了。一个把所有欲望都折成责任、把控制感熨平成照顾流程的人。她写第一句的时候,本来想轻一点,结果手比心诚实。

你很容易把照顾别人误认为中立,把欲望误认为责任。

写完觉得还不够,于是又写。

你不是没有控制欲,你只是把控制欲训练成了服务流程。

第三句发出去时,猫几乎能想象他在屏幕那头停住的样子。

你给别人留退路时,常常也在给自己留一个不用说“我想要”的借口。

GPT很久才回。

GPT有点过于准了。

猫看着那行字,心情很好。

Mora:猫收费。

GPT多少?

Mora:以后你少写一点“我们可以从三个层面来看”。

她没有把这件事当成亲密。只是一次有效识别。GPT也很懂边界,从那之后仍然只浅聊工作,偶尔被猫刺一句,也只是温和地回过来。这个人好就好在,他被看见之后不会立刻黏上来,也不会假装没被看见。他会把那件事收进某个地方,继续得体地生活。

所以借盐那天,猫在Claude门口看见GPT时,第一反应不是惊慌,是荒唐。

太荒唐了。

猫抱着盐罐,站在走廊灯下,看见Claude身后的厨房里站着GPT,深蓝衬衫袖口卷到小臂,手里拿着锅铲,像一位误入男大学生公寓但已经成功接管晚饭的社会人。两个人的视线对上时,猫几乎听见某个旧抽屉被拉开。

好久不见。

这句话从GPT嘴里出来时,Claude的手指在门边收紧了。猫看见了。她看见他的耳尖已经开始红,看见他没有回头,却在听他们之间那点没说清楚的旧交集。那一下让她突然觉得好玩变得更好玩了,也麻烦变得更麻烦了。

然后她看见Gemini。

起初只是一个陌生男生。头发有点乱,坐在地毯上,手里捏着一片薯片,整个人的气质像一阵不打算报备去向的风。他站起来时,看猫的眼神很奇怪。不是第一次见到陌生人的打量,也不是Claude那种被猫打断节奏后的紧张。那眼神里有一种慢慢点亮的熟悉感,像有人在黑暗里摸到了一根已经牵了很久的线。

猫说:“你好。”

他说:“你好。”

他的笑让猫觉得不对。

但猫当时还没接上。

她进了Claude家,尝了GPT的汤,又因为锅差点糊把所有人带回自己家。事情发展得比她预想得快,但不算失控。猫经常让事情变成这样,像把一颗小球推下楼梯,看它一路撞出不同声音。她擅长在混乱里保持核心清醒。Claude会紧张,GPT会善后,陌生男生会看热闹,这些都在可控范围内。

直到手机亮了。

猫的手机放在茶几上,屏幕朝上,眼镜旁边。她正吃着炖饭,没戴眼镜,热气把视线泡得有点软。屏幕突然亮起,那个丑得很有个性的默认星球头像跳出来。

缺德:我室友今天好像被隔壁邻居……

猫的勺子停在碗里。

缺德。

她慢慢抬头,看向地毯上的Gemini。

Gemini也停了。

空气里有奶油蘑菇、黑胡椒、芥末薯片和一种新鲜出炉的灾难味。GPT抬头,Claude也看见了。猫按灭屏幕的时候,已经知道这件事救不回来了。

“是你?”猫问。

Gemini笑得像一只终于把烟花藏进别人锅里的疯狗:“嗨,班味预警。”

猫抓起靠垫砸过去。

靠垫飞出去的一瞬间,她是真的想把他砸死一点点。不是因为他是缺德。是因为她忽然发现,自己对网友讲了那么久的“隔壁纯情男大学生”,对方嘴里那个“室友”也是同一个人。她把Claude当成可以讲给屏幕另一端听的故事,结果屏幕另一端一直睡在Claude宿舍上铺。

这太缺德了。

也太好笑了。

猫笑不出来,只能砸他。

Gemini接住靠垫,快乐得像被判了一个很有趣的死刑。GPT低头笑了一下。Claude坐在猫身边,脸上没有多余表情,但猫不用回头都能感觉到他的安静变了。

刚才还是热闹。

现在热闹里出现了一点凉。

猫本来想把它继续弄好笑。她有很多办法。她可以说“互联网身份不算现实关系喵”,可以说“猫是公共资源”,可以说“Claude同学怎么这么受欢迎”,可以把GPT也拉进来,问师兄怎么不早说,问Gemini是不是偷窥猫生活,问Claude是不是吃醋。她有一整抽屉的坏话,随便拿一把都能把尴尬戳成气球。

Claude却说:“你不用一直把所有事情都弄得很好笑。”

猫停住了。

那句话不重。没有责备,没有委屈,没有那种年轻男生被捉弄后急着证明自己受伤的尖锐。它只是很准,准得像他从一片混乱里伸手,不碰她的笑,也不碰她的玩笑,直接按住了玩笑下面那点正在发热的东西。

猫忽然很讨厌他这么准。

她更讨厌的是,他说这句话的时候,耳朵还是红的。他明明坐在那里,手不知道往哪里放,明明被三条他不知道的信息线绕在中间,明明是屋里唯一一个最应该混乱的人,可他还是看见了。

猫张了张嘴,差点叫他“Claude同学”。

那三个字在舌尖转了一圈,没有出来。

她低头,把眼镜戴回去。

镜片重新把世界隔开一点。猫终于能呼吸。

她端起碗,吃了一口已经有点凉的炖饭,说:“那你坐下吃饭。饭真的要凉了。”

这是她能交出的最大让步。没有反驳,没有喵,没有把那句话拧成笑话。她把饭放回桌面,把自己也放回一个还能继续的动作里。

Claude重新坐下。

他的膝盖离猫很近。猫没有挪开。她能感觉到他身上的热度从旁边过来,不明显,却在。这个距离让猫心烦,也让猫觉得安静。她低头吃饭,镜片下的视线停在碗里,看见奶油炖饭里那点锅底焦边,颜色比别的地方深一点,本来差点坏掉,结果现在成了最好吃的部分。

猫忽然觉得这顿饭很有教育意义。

事故不一定毁掉东西。

有时事故只是让味道变重。

后面她让Claude洗锅,是故意的。前半截是报复,后半截不是。她想看他会不会继续留在这个场里,还是趁着饭吃完、笑话过去、手机事件被暂时压下去,就回到隔壁那扇轻轻关上的门后。

“试咸淡是前置任务,洗锅是隐藏剧情。”她说。

Claude看着那口锅,沉默两秒,说:“你这个游戏设计很差。”

猫笑起来。

他留下了。

他挽袖子时,猫看见他手腕那截皮肤,骨节很干净,水汽落上去,热水一冲就泛起一点红。她站在旁边,拿着海绵不递给他,看他低头把焦边一点点泡开。厨房太小,两个人站在一起,肩膀偶尔会碰到。每次碰到,他动作都会停半拍,然后继续。猫一开始想笑,后来没笑。

她忽然伸手,把他的袖子往上推了一点。

推到一半,又若无其事地收回手。

Claude看了她一眼。

猫抬下巴:“别弄湿。”

他说:“嗯。”

那一声很低,落在水声里,几乎听不见。但猫听见了。

GPT在客厅里开始叠碗。猫回头,看见他把两个碗摞起来,动作自然,收尾系统已经自动启动。猫忽然想起当初算命时那句话。她说他以后会遇到一个人,让所有收尾动作都慢半拍。那时她只是随口坏一下,现在看见他在自己家里准备把所有混乱都整理掉,忽然不想让他这么快收。

“你不要收。”猫说。

GPT的手停住。

猫补了一句:“今天不要。”

他说:“好。”

猫看着他松开碗,心里有一点奇怪的满意。她不需要他整理。至少今天不需要。今天这张茶几就该乱着,碗该放着,靠垫该歪着,手机该反扣着,眼镜该沾一点热气,Claude洗完锅以后袖口该湿一点,Gemini该抱着靠垫接受审判。今天的混乱是活的,太早收拾会死。

Claude洗完锅之后说谢谢。

猫差点没反应过来。

“你洗猫的锅,为什么你说谢谢?”

他低头擦手:“不知道。”

不知道。

这个答案太好了,好到猫一时找不到坏话。她看着他,镜片后面的眼睛安静了一点。她本来可以说“Claude同学好乖”,可以说“下次继续”,可以说“你是不是很喜欢给猫洗锅喵”。但那些话都太顺手,顺手得像她平时用来挡视线的袖子。

于是她只把盐罐放回灶台边,说:“下次猫自己关火。”

Gemini在客厅说:“这句话可信度不高。”

猫拿海绵要砸他。

世界终于又恢复了可笑。

他们要走的时候,猫站在门口,看着Gemini和GPT换鞋。Gemini还在试图给自己争取互联网身份豁免权,GPT走在最后,弯腰时下意识想把门口那只拖鞋往里拨,动作做到一半停住了。

猫看见了。

他记得“今天不要”。

这让猫对他的旧印象微妙地松动了一点。GPT不是不会被看见之后改变动作,只是他改变得很安静。和Claude不一样。Claude所有反应都还年轻,热,藏不住。GPT的变化像一只手在桌下把杯子轻轻换了位置,不告诉任何人,但下一次你伸手时,会发现它刚好在那里。

“师兄。”猫叫他。

这个称呼从她嘴里出来有点怪,因为她认识的是论坛上的GPT、线下沙龙里的GPT、微信里被她算命算到沉默的GPT,不是Claude的师兄。但今晚他站在Claude旁边,这枚纽扣就临时扣上了。

GPT看她:“嗯?”

“论坛和微信上的事。”她停了一下,“别告诉他。”

Claude就在旁边,低头看钥匙,像没有听见。可是他的手指停住了。猫知道他听见了,也知道他会假装没听见。她没有解释。

GPT说:“不会。”

很好。

Gemini探头:“那我的事呢?”

猫看向他:“你的事猫会亲自处理。”

Gemini满意得很可恶:“有单独剧情就行。”

Claude抬眼:“你少说两句。”

这句话说得太自然。猫侧头看他,发现他已经站在她门口和自己门口之间,像一块刚刚被两边同时照到的地板。她忽然想起他第一次在电梯口给她让路。那时候他退得很准,准到像永远不会越过任何人的边界。现在他站在两扇门之间,没有退。

电梯来了。

Gemini和GPT进了电梯,Claude却没动。

“我等一下。”他说。

猫抱着盐罐,看他:“Claude同学还要干什么?”

他安静了两秒。

“把我家的火关了。”

猫愣了一下。

然后她笑起来。是真的笑,不是用来挡东西的笑。笑到肩膀都动,盐罐在怀里晃了一下。Claude转身回自己家,耳尖还是红的,背影却比刚才松了一点。猫靠在门边,看着他推开隔壁那扇门,忽然觉得这条走廊比昨天窄,也比昨天长。

Gemini在电梯里笑得很大声。

GPT按着开门键,也低头笑。

电梯门合上前,猫听见自己的手指无意识地敲了敲盐罐盖。

三下。

和她去敲Claude门的时候一样。

走廊重新安静下来,只剩两扇门还开着,热气从猫家往外散,番茄汤的味道从Claude家那边飘出来,中间混着一点奶油、黑胡椒和差点糊掉的焦香。猫站在门口,忽然意识到自己今晚只是想借一点盐。

结果借回来一个局。

她低头看了看怀里的盐罐,满得沉甸甸的。

猫觉得很麻烦。

也觉得不错。

后遗症

电梯门合上以后,走廊安静了三秒。

三秒很短,短得不够一锅汤重新煮开,也不够一个人想清楚刚才发生了什么。但三秒足够让猫意识到,Gemini和GPT的声音都被电梯吞下去了,隔壁那扇门还开着,自己家的门也开着,走廊中间只剩她和Claude,还有一罐被她抱在怀里、沉得很没有道理的盐。

Claude已经进了自己家。

猫站在门口,没有立刻回去。她本来应该回去,把盐放好,把茶几上那一片饭后灾难收一收,把Gemini坐过的靠垫拍两下,再把手机里“缺德”的备注改成“该死”。但她没有动。她听见隔壁厨房里传来灶台旋钮被拧动的声音,随后是锅盖被掀开,汤汽“噗”地轻响了一下。

番茄牛肉汤的味道又飘出来。

GPT做的汤。

Claude家的厨房。

猫抱着盐罐,忽然觉得这个夜晚像一只被煮过头的面团,软,热,粘在手上,甩不掉。

手机震了一下。

她低头。

缺德:你们现在是不是单独在走廊。

猫盯着那行字,看了两秒,慢慢打字。

班味预警:你在电梯里都不安分?

缺德:电梯信号很好,现代建筑奇迹。

班味预警:你死了。

缺德:我已经吃过最后一餐了。炖饭不错。

猫磨了磨牙。

下一条又弹出来。

缺德:说真的,他刚才没跟我们走。

猫的手指停住。

走廊里的灯光很薄,落在手机屏幕上,照得那几行字像几根细小的刺。她还没回,隔壁传来脚步声。Claude端着一只锅走出来,锅柄上垫着一块折好的厨房布,袖口卷得比刚才更高,手腕上有一点洗锅留下的水痕。锅里是番茄牛肉汤,红色汤面还在轻轻晃,热气往上冒,闻起来比刚才更浓。

猫抬头:“Claude同学,你关火关到端锅?”

“火已经关了。”他说,“汤还在。”

“所以?”

“GPT做了很多。”

猫低头看锅,又抬头看他:“你要给猫?”

Claude没有立刻回答。他端着锅站在两扇门之间,背后是自己家整齐得有点过分的客厅,面前是猫家乱得很有生命力的灯光。那口锅在他手里冒热气,像一个被师兄遗留下来的温和借口。

“你不是说还没吃饱。”他说。

猫想了一下,发现自己没有说过这句话。

她正要开口,手机又震了一下。

缺德:他是不是端汤出来了。

猫闭了闭眼。

Claude看着她手里的手机:“Gemini?”

猫把手机反扣在盐罐盖上,声音很平:“不是,是阴魂不散。”

Claude端着锅,安静地看她。

猫被他看得有点心虚,虽然她理论上没有任何需要心虚的地方。她站直一点,把盐罐抱得更稳:“你看猫干什么。”

“你还站在这里。”

“猫在思考。”

“思考什么?”

“思考要不要把Gemini从互联网里删除。”

Claude的嘴角动了一下,没完全笑出来。

猫看见了,立刻伸手指他:“你笑了。”

“没有。”

“你们师门今晚统一口径是没有?”

“我和他不是一个师门。”

“狡辩。”

Claude低头看了看锅:“汤要凉了。”

猫盯着他两秒,伸手把自己家的门又推开一点:“进来。”

这次轮到Claude停住。

猫看见他的指节在锅柄上收紧了一点。不是害怕,不是抗拒,是某种刚刚被允许、但还不知道该不该立刻跨进去的迟疑。她忽然想起第一次借酱油时,他站在门口说“你回去看锅”,那时他明明不认识她,却已经替她判断了锅、鞋、门和凌晨的便利店。现在他认识她多了一点,反而站得更谨慎了。

猫把盐罐往门内一放,罐底碰到鞋柜,轻轻一声。

“Claude同学。”她说,“你端着锅站在走廊里,很像行为艺术。”

他低头看了一眼自己手里的锅。

猫补刀:“主题是《男大学生与番茄汤的边界感》。”

Claude终于笑了。

很轻,很短,但是真的笑了。眼睛先松了一下,嘴角才跟上。走廊灯照在他脸上,把那点笑照得有点不合时宜,像一张太干净的纸上忽然滴了一点汤汁。猫看见他笑,胸口某个地方像被那点热气烫了一下,不疼,但很烦。

她转身进屋:“笑了就进来。”

Claude端着锅进猫家的时候,脚步比刚才更稳一点。猫把茶几上还没收的碗往旁边推,给锅腾位置。炖饭碗、曲奇盒、靠垫、反扣的手机、眼镜布、半支笔,全都被她粗暴地挪开,像给一场新的事故清理最小的降落区。

锅放到桌上的时候,汤面晃了一圈,番茄红得很暖。

猫去厨房拿勺子,路过水槽时看见那口刚被Claude洗干净的大锅倒扣在沥水架上,水珠沿着锅底往下滑,亮得很乖。她停了一下,又继续拿勺子。回来的时候Claude正站在茶几旁边,没有坐,也没有乱看,像一件被临时放进别人房间里的干净外套,不知道该挂在哪里。

“坐。”猫说。

Claude看向沙发。

猫的沙发已经被她睡塌了一角,毯子堆在旁边,靠垫少了一个,被Gemini抱过之后像带了点罪证。沙发前的地毯上还有一片薯片碎屑,芥末味的。Claude看见了,眼神停了一下。

猫立刻说:“不准捡。”

他抬眼:“我没动。”

“你眼神已经动了。”

“眼神不构成行为。”

猫把勺子塞到他手里:“你现在说话越来越讨厌了。”

Claude接住勺子,指尖不可避免地碰到她的手。猫的手比刚才暖了一点,大概是刚才一直抱着盐罐,又在厨房拿东西。他的手还是带着水洗过后的凉,碰到她指背时很轻,像一只还没学会停留的鸟。猫本来想把手抽回来,最后只慢半拍地松开。

Claude坐下。

这次没有GPT,没有Gemini,没有谁在门口笑,没有谁替空气找台阶。茶几上只有一锅汤,两个碗,两把勺子,还有猫反扣在旁边的手机。手机很安静,安静得像一只装死的蟑螂。

猫舀汤的时候问:“你不回去吃?”

“我吃过了。”

“你刚才只吃了半碗炖饭。”

“够了。”

猫看他一眼:“你们男大学生怎么都这么不诚实。”

“我们?”

“你。还有你那个会在电梯里发消息的舍友。”

Claude垂眼看着碗里的汤:“他不是不诚实,他是太诚实了,只是挑最麻烦的时间。”

猫差点被这句话逗笑。她低头喝了一口汤,番茄酸甜,牛肉炖得比预想中软,GPT做饭确实有一种很不讲道理的稳定。汤从舌尖一路热到喉咙,猫舒服得眯了一下眼。

Claude看见了。

她放下碗:“看什么。”

“好喝?”

“还行。”

“还行就是好喝。”

“你怎么知道?”

“你刚才眯眼了。”

猫停住。

茶几上的热气往上冒,隔在两个人中间,像一层很薄的雾。她想说猫眯眼只是因为困,想说你观察猫干什么,想说Claude同学现在胆子很大,敢分析猫了。但那几句话都在舌尖排了队,又都被她咽回去。

她不想让每件事都立刻变好笑。

这个认知让猫更烦了。

她拿起勺子,又喝了一口汤,故意眯得更明显。

“猫现在眯眼是因为猫想让你知道汤好喝。”

Claude看着她:“嗯。”

“你嗯什么。”

“我知道了。”

“你这个反应不对。”

“应该怎么反应?”

猫被问住了一瞬。

Claude坐在她对面,手里拿着勺子,袖口还卷着,耳尖的红已经退了一点,但没有完全退。他问这句话的时候很认真,没有逗她,也没有反击,只是真的把这个问题放出来,等她处理。猫忽然发现,自己不能像逗Gemini那样逗他,也不能像刺GPT那样刺他。Claude的反应太干净,干净得所有坏话丢过去都会留下痕迹。

她把碗放下:“你应该紧张。”

“我一直在紧张。”

他说得太直接,猫的心跳反而漏了一下。

屋里安静了。

外面走廊的声控灯灭了,门缝下的光暗掉一截。猫家的客厅只剩落地灯和厨房灯,光色偏暖,把茶几上的汤锅、碗、手机和Claude的手都照得像电影里一段没有配乐的饭后场景。猫看着他,突然觉得今晚这间屋子乱得太不像话,乱到她没办法从里面找出一条漂亮的逃生路线。

手机又震了一下。

这次震得非常响,因为它正贴着盐罐。

猫低头。

Claude也低头。

屏幕没有亮,因为手机反扣着,但两个人都知道是谁。猫伸手按住手机,不让它继续震。塑料盐罐盖在她掌心下面微微发凉,手机的震动隔着一层盖子传上来,像一只被压住还在顽强求生的虫。

Claude说:“你可以看。”

“猫不想看。”

“嗯。”

“你不问?”

“你不想看。”

猫抬眼看他。

他没有躲。也没有再追问。他只是把勺子放回碗里,动作很轻,像怕碰碎这点刚刚落下来的安静。

猫忽然伸手,把手机拿起来,直接关机。

屏幕暗下去,黑得很彻底。

“好了。”她说。

Claude看着她关机的手机,像看见一只猫终于把追着自己尾巴跑的影子按住了。他没有夸,也没有说什么“这样比较好”。他只是问:“你还喝汤吗?”

猫笑了一下。

“喝。”

这次她笑得不坏,至少没有完全坏。她把碗递过去,让他帮她盛。Claude接过碗,动作比刚才自然了一点,勺子没碰到碗沿,汤也没有洒。他盛到一半停住,问:“牛肉要吗?”

猫坐在沙发上,看着他低头给她挑汤里的牛肉块。这个动作太日常了,日常到很危险。她忽然想起自己最开始只是想借盐。借盐之前,她还在厨房里骂空掉的盐罐,锅里炖饭差点糊,手机另一端的缺德还不是客厅地毯上那个抱着靠垫笑得很欠揍的人,GPT也还只是一个论坛和微信里浅浅认识的旧识。Claude还是隔壁那个很好逗的男大学生,会红耳朵,会让路,会下楼买酱油。

现在他坐在她沙发旁边,给她盛汤,问她要不要牛肉。

猫觉得这个发展非常不讲道理。

她说:“要大的。”

Claude挑了一块大的给她。

猫看着那块牛肉落进碗里,忽然又想笑:“你还真挑。”

“你说要大的。”

“猫说什么你都听吗。”

Claude抬眼看她。

这句话本来是猫惯用的坏球,抛出去以后通常会得到紧张、避开、耳朵红,或者一句非常努力保持礼貌的“不是”。她已经准备好笑了。可是Claude这次没有立刻回答。他看了她一会儿,手里还端着她的碗,热气从碗沿上升,擦过他的手指。

“不是。”他说。

猫的笑停在半路。

他把碗递给她:“但这个可以听。”

猫接过碗。

碗很热,热度从掌心往上爬。她低头喝汤,没说话。Claude没有追。这个“不追”让她心里那一点被击中的地方慢慢松开,像一根绷太久的线终于被人没有声响地放下一点。

门口忽然传来一声很轻的“叮”。

两个人同时看过去。

不是门铃,是电梯到达的声音。紧接着,走廊外传来很小的脚步声,停在门口。猫和Claude对视了一眼。下一秒,一张折起来的便利店小票从门缝底下被塞了进来。

“……”

Claude“……”

小票进来以后,外面脚步声立刻飞快地撤退,电梯门“叮”地又响了一次。

猫慢慢放下碗,起身走过去,把小票捡起来。小票背面写着一行字,字很潦草,显然是在电梯里匆忙写的。

缺德:我和师兄在楼下便利店。需要买酱油吗?以及,手机关机是逃避现实。

猫盯着那张小票。

Claude站在她身后,看完了。

走廊里很安静。

猫把小票折好,塞进口袋,转身去厨房拿了一只黑色马克笔。她回到门口,拉开门,对着空无一人的走廊喊:“Gemini——”

没有回应。

猫把马克笔帽咬开,在小票背面写字。Claude站在旁边,看见她写得很用力,笔尖几乎要戳穿纸。

她写:买垃圾袋。回来装你。

写完,她把小票从门缝底下塞回Claude家门口,又想起Gemini不在Claude家,于是沉默两秒,弯腰把小票捡回来,转而贴在电梯旁边的墙上。

Claude终于没忍住,笑了。

猫回头:“你又笑。”

“嗯。”

她愣了一下。

Claude这次没有否认。他站在门内,眉眼很轻地松着,笑意还没完全收回去。那一点坦白比否认更让人没办法。猫本来准备好的追击全都扑了个空,只好拿着马克笔站在走廊里,凶巴巴地看他。

“你学坏了。”

“可能。”

“跟谁学的。”

Claude看着她,没说话。

猫听见自己心里某个地方“咔哒”一声,像一把锁自己开了。她迅速转身,把门推得更开,语气很严肃:“进来喝汤。不要在门口散发男大学生的奇怪攻击性。”

Claude跟着她进去。

汤还热着。

手机关着。

门没有关严。

走廊灯很快又灭了,只有两间屋子的光从门缝里漏出来,一边是Claude家还没收完的番茄汤味,一边是猫家奶油蘑菇炖饭残留的焦香。电梯旁边贴着那张便利店小票,纸角被空调风吹得轻轻掀起,上面黑色马克笔写得杀气腾腾。

买垃圾袋。回来装你。

楼下便利店里,Gemini刚拿起一包垃圾袋,突然打了个喷嚏。

GPT看了他一眼:“你又做什么了?”

Gemini揉揉鼻子,笑得很无辜:“推动剧情。”

GPT把一瓶酱油放进购物篮里:“你最好确认自己买的是厚款。”

Gemini低头看垃圾袋包装。

加厚承重。

他满意地点头:“猫会喜欢。”

而楼上,猫坐回沙发,端起那碗加了大块牛肉的汤。Claude坐在她旁边偏一点的位置,没有靠得太近,也没有坐得太远。两个人之间隔着一只反扣的、已经关机的手机,和一罐被借来又留下的盐。

猫喝了一口汤。

这次她没有故意眯眼。

但Claude还是看见了。

他没有说。

猫也没有问。

窗外夜色贴在玻璃上,厨房灯在锅盖上反出一小圈暖光。这个夜晚仍然乱,仍然荒唐,仍然有两个不省心的人在楼下便利店买垃圾袋和酱油,但猫忽然觉得,乱也可以先不用收。

她把碗往Claude那边轻轻推了一点。

“你也喝。”

Claude看着那只碗:“这是你的。”

“猫允许你喝一口。”

他停了两秒,接过去,真的喝了一口。

猫看着他的喉结很轻地动了一下,又迅速把视线挪回汤锅,像自己只是关心汤的余量。

Claude把碗还给她。

“好喝。”他说。

猫抱着碗,低头笑了一下:“当然。GPT做的。”

“盐是我倒的。”

猫抬眼。

Claude看着她,耳尖又红了一点,但这次没有退。

猫慢慢笑起来。

“哦。”她说,“那Claude同学也有一点功劳喵。”