用命令行 AI 编程助手的开发者,大多遇到过同一个麻烦:对话记录堆了几十上百条,全是没有标题的文件,想找回上周那次调试过程,只能凭记忆一个个翻。开发者 pradipta 把自己的解法开源了出来,项目名叫 wallfacer——名字取自刘慈欣《黑暗森林》中的「面壁者」,作者在项目说明里写道,这个词指的是那些被托付了宏大到旁人无法追踪的计划的人。

问题出在各家自己存自己的
wallfacer 的项目文档里,把这个痛点讲得很直白。
Claude Code 把每一次对话都存成 ~/.claude/projects/ 目录下一个没有标题的 JSONL 文件,用户当时所在的目录就是唯一的索引依据。Kiro CLI 的做法类似,所有会话平铺在 ~/.kiro/sessions/cli/ 一个文件夹里。Cursor CLI 则把每段对话埋进 ~/.cursor/chats/ 下面以哈希值命名的目录。Codex 又是另一套,按日期把运行记录归档在 ~/.codex/sessions/ 中。
几周下来,四款工具留下几十份彼此难以分辨的记录,而且没有任何办法把需要的那一份找出来。
wallfacer 的定位是把这些记录统一索引起来。项目文档中特别注明,索引过程是只读的,绝不改动各家智能体自己的文件;用户添加的标题、标签和项目分组,全部存放在 wallfacer 自己的本地 SQLite 数据库里,路径为 ~/.local/share/wallfacer/。删掉这个数据库,丢失的只是这层附加信息,对话本身不受影响。
一个程序,两副面孔
wallfacer 是单个二进制程序,但提供两种使用方式,区别只在于有没有跟子命令。
直接输入 wallfacer,进入的是全屏交互式会话浏览器;输入 wallfacer <子命令>,则是一次性执行的命令行模式,适合写进脚本。项目文档强调,这两者并非彼此独立的工具,也不存在切换的概念——它们读写的是同一份 SQLite 索引,在浏览器里打的标签,立刻就能被 wallfacer list --tag 检索到,反之亦然。浏览器能做的事,子命令同样能做。
浏览器模式下的操作是典型的终端界面风格:上下方向键或 j、k 移动;斜杠键触发模糊筛选,检索范围覆盖标题、项目、目录、标签和智能体名称;P、T、A 三个键分别循环切换项目、标签和智能体筛选条件,x 键一次性清空;回车键恢复会话,终端交给智能体接管,退出后自动返回浏览器;n 键新建会话,r、t、p 分别用于重命名、编辑标签和设置项目;d 键删除。当终端宽度低于约 100 列时,详情面板会自动让位,列表占满整个宽度。
命令行模式提供的子命令包括新建(new)、恢复(resume)、列表(list)、搜索(search)、查看详情(show)、重命名(rename)、标签增删(tag add/rm)、项目分组(project set/clear)、删除(rm)和重新扫描(sync)。其中 sync 会在每条命令执行前自动运行一次,无需手动触发。
引用某个会话时,既可以用编号前缀,比如 resume 5f2,也可以用完整标题,比如 resume "smoke test"。如果引用存在歧义,程序会列出所有候选项,而不是自行猜测。在 wallfacer 之外启动的会话会被自动识别,不需要任何导入步骤。
删除这件事,做得比较细
删除逻辑上,wallfacer 做了两层设计。rm 命令只是把会话移入自带的回收站,只有加上 --purge 参数才会永久删除。
更细的一处考虑在于多文件会话。Kiro CLI 一次会话会写出一份对话记录、一个元数据附属文件、提示词历史和一个临时目录;Cursor CLI 则把一段对话拆成两半,一部分在自己的目录下,另一部分归档到项目名下。wallfacer 在删除时会把这一整组文件一起处理,避免出现「已经删了,却还留在智能体自己的会话列表里」的情况。
索引采用增量同步,项目文档称,即使积累了数百个会话,速度依然能保持。
更新检查也考虑了管道场景
一个容易被忽略但设计得比较克制的细节是版本更新提示。浏览器每天向 GitHub 查询一次是否有新版本,如果有,只在页脚提示一次;子命令则直接复述这个缓存结果,且输出到标准错误流,因此不会污染 --json 的输出内容,也不会混进管道。整个查询过程不会阻塞任何操作,命令行侧读取的是缓存文件而非发起网络请求。设置环境变量 WALLFACER_NO_UPDATE_CHECK=1 可以彻底关闭这项功能。
安装与后续规划
安装方式有两种。在 macOS 或 Linux 上可通过 Homebrew 安装,也可以用 Go 直接安装,要求 Go 1.22 及以上版本。项目同时在发布页提供了预编译的可执行文件。项目文档提到,Homebrew 配置文件放在本仓库内而非单独的 tap 仓库,这也是安装时需要写全地址的原因,配置完成后升级命令照常使用。
路线图方面,目前已支持 Claude Code、Cursor CLI、Kiro CLI 和 Codex 四款智能体的适配器,opencode 的适配器在计划中。后续还打算加入默认智能体设置、基于 SQLite FTS5 的会话全文搜索、命令行侧的回收站恢复功能、把会话记录导出为 Markdown、统计功能(按项目或周统计会话数与磁盘占用),以及一个桌面客户端——侧边栏列会话、内嵌终端、支持多标签页,底层复用同一套 Go 代码。
项目采用 MIT 许可证,用 Go 语言编写,其他智能体可通过一个小型适配器接口接入。作者在文档中表示,欢迎贡献,尤其欢迎新的智能体适配器。截至本文整理时,该仓库在 GitHub 上有 14 个星标和 2 次复刻,提交次数为 34 次。
来源:GitHub / pradipta(wallfacer 项目页)、Hacker News



