作为敲代码的人,机器是有好几台了,比如宿舍一台台式机,家里一台常年开着的小机器,还有台云上的。平时想看看它们怎么样了,或者让它们顺手做点小事,正经办法当然是 SSH、远程桌面、或者搭个内网穿透。
可这些SSH我嫌麻烦,自组远程局域网有时候特别慢,而UU远程好像不支持Linux,而向日葵好像不太支持Wayland,Workbuddy虽然能支持手机访问,但是毕竟要经过人家的服务器,方便倒是方便了,但还是感觉长文本情况下用着不够顺,尤其在外面拿手机的时候,敲不了命令行,用语音输入虽然方便,但不方便加图和王智登登,而且最重要的是我特别懒,也不想为了连一下去装一堆东西。
后来我想,有件事是所有机器都能干、而且几乎不花钱的:发邮件。只要机器能上网,它就能往出发、也能往回收,中间隔着 NAT 也好、防火墙也好,都不碍事,因为它连出去是主动的。那我就顺着这个思路,给自己写了个命令行的小邮件工具,叫 FengTang。
这东西不复杂,也没啥新鲜创意。就是把 SMTP、IMAP、POP3 三样都做了,能发能收,常见的认证方式都支持,Gmail 和 Outlook 那种 OAuth 也能登,这部分完全参考了 Thunderbird 的实现;收发的邮件存在本地一个 SQLite 库里,可以离线搜、打标记、做整理。它自己还带了个很小的邮件服务器,没配现成邮箱的时候,也能在本机把收发先跑通。另外我给智能体单独留了一整套接口,就是那种 function calling 的工具定义,模型能直接调它来读信、发信、搜索、标记。
我真正想要的用法其实很简单。在够不着的那台机器上挂一个智能体,让它隔一阵子看一眼信箱。有新邮件就照着里面的意思干活,干完回一封。我这边只要拿手机或者笔记本发一封出去,过一阵子就能收到回信。全程不用公网 IP,不用端口映射,路由器上啥也不用动。只要网络通,两边就能互相够得着。
比如我发一封“看看磁盘还剩多少”,它回我一段 df 的结果;或者“把这个仓库拉下来跑一下测试”,它跑完把日志贴回来。它能主动发信回来这一点挺关键,说明这条线是双向的,不是只能我单方面下命令。
登录这块也顺手做了。工具里有个交互式的 OAuth 登录,会弹浏览器让你点一下授权,token 自己存好;也支持把账号导出、导入,换机器的时候搬过去就行。所以给一台新机器配好这个信箱,并不算费事。
需要注意的是,这事情本质上是对智能体友好的邮件通信,而并不是远程控制。邮件的往返是异步的,靠轮询,慢的时候得等上一会儿,交互性的事儿干不了,你没法拿它开个 shell 看实时输出。它也不像那些在线 AI 对话服务,能你一句我一句地实时聊;这边就是你发一封、等一封,节奏慢得多。再就是它靠不靠谱,很大程度看邮箱服务商,大厂对直投的信卡得很严,所以我一般拿一个已经能登录的邮箱当中转,就图个稳。
安全上也得上心。能收信的那个邮箱,某种意义就是那台机器的钥匙,谁能发指令它就听谁的。所以我把凭据只放在本地配置文件里,权限收到 0600,导出去的时候默认用口令加密。这些都得自己注意,工具帮不上太多忙。
说白了,这远不是给大家用的产品,就是我自己图方便捣鼓出来的。好处也就那么一点:只要能上网,就能跟一台远程机器保持来往,而且基本不花钱。做不到实时,也做不到直接控制,但好歹多了一条路。
如果手里也有那种懒得搭环境的机器,不妨试试这个最土的办法——两边都拿邮件当传话筒。