iShell's Blog

懒!

VibeTerminal - 在手机上优雅地使用 Claude Code

最近做了一个 Android App,叫 VibeTerminal,专门用来配合 Claude Code 这类 AI CLI 工具远程使用。

ultimate_vibe_terminal

Vibe Code 时代真的来了

自从 Opus 4 出来之后,Claude Code 的体验有了质的飞跃。以前说 Vibe Coding 多少有点调侃的意思,现在是真的可以 Vibe 起来了。程序员的日常工作正在悄悄发生变化——VS Code 这种传统 IDE 用得越来越少,更多时间花在跟 AI 对话上。

Steve Yegge 的这篇文章说得挺好:

说实话,大多数工程师眼里,五段话就已经算一篇论文了。而用 Claude Code,你要读的不是一点点信息,而是瀑布一样长的信息:生成说明、代码、diff,全都要看。因为一旦你真的把 IDE 放一边,你就必须认真看 diff。

好消息是,当你有了一点经验之后,其实不用逐行读代码,只看 diff 的形状、颜色、长度,你就能判断出很多东西:这是不是需要 code review?是不是方向错了?是不是为了解决一个小问题却改了过多代码?光是 diff 的"形态",就能告诉你很多真相。

这段话点出了一个关键的转变:当"写代码"这件事不再需要你亲自动手的时候,你的核心工作就变成了——跟 AI 对话、正确描述需求、给 AI 做规划、review AI 的产出。

一个 Vibe Coder 的焦虑

对于一个 Vibe Code 上瘾的人来说,能够随时随地查看 Claude Code 的进度是刚需。

我知道有些人即使吃饭也要带着笔记本来使用 AI CLI。我就想,能不能在手机上也用 Claude Code?不一定要在手机上写代码,但至少能看看进度、瞄一眼它改了什么、必要的时候敲几个 y 给个权限,这总可以吧?

畅想一下未来的终极形态:你对着手机说一句"帮我实现刚才想到的那个点子",AI 就自己去写代码了,写完了给你看结果,全程你只需要动动嘴。这事儿迟早会发生。

但回到现实,现阶段我更关心的是:AI 实现了什么功能?修了什么 bug?git commit 了多少次?有没有跑偏?

带着这个目的,我做了 VibeTerminal。核心思路是:把终端和 AI 对话结合在一起,用户理解为主,终端操作为辅。通过解析 Claude Code 的 jsonl 对话文件,让你清清楚楚地看到项目进度;通过解析 roadmap 文件,让你像用 Todo 软件一样来管理 Claude Code 的任务。

先聊聊我的工作流

在介绍 App 之前,先说说我日常是怎么用 Claude Code 的。如果你用 OpenCode 或者 Codex,也是类似的玩法。

为什么是终端而不是 IDE?

在程序员的世界里,效率是第一位的。这可能也是 Claude Code 这类 CLI 工具能火起来的原因——终端就是比 IDE 快。

Linux 生态围绕终端的工作流也越来越成熟了。DHH 搞了 omakub 和 omarchy 这两个项目,把终端环境配置得开箱即用。再加上 AI 加持,写 shell 脚本的心智负担大大降低,这个生态只会越来越繁荣。

我目前的工作流是:zellij + Tailscale + Claude Code。简单说就是:zellij 管理终端窗口,Tailscale 负责远程连接,Claude Code 负责干活。

zellij 是什么?

zellij 是一个类似 tmux 的终端复用器,但比 tmux 好用太多了。界面开箱即用,底部有快捷键提示,不用背一堆命令。

它最重要的能力是持久化:即使你断开连接、掉线、甚至重启电脑,重新连上去的时候,之前的终端状态都还在。这对远程开发太重要了。

一般开一个项目,我会这样安排窗口: - 一个窗口跑 Claude Code - 一个备用窗口执行测试、git 之类的命令 - 如果想看看 AI 改了哪些文件,再开一个窗口跑 NeoVim + lazygit

zellij

我的习惯是用 zellij 的 session 来管理项目,一个项目对应一个 session。在 session 里面我基本不用 tab,而是用多个 panel 来管理不同的任务。

创建新项目的时候,我一般用这个命令:

1
zellij a new_project -c

这样就创建了一个叫 new_project 的 session,以后这个项目的所有操作都在这里面进行。

为什么要做 VibeTerminal?

Android 上已经有 Termius 这样的终端 App 了,为什么还要自己做一个?

原因很简单:

  1. 现在 AI 这么强,不做一个好像说不过去。 这个 App 其实也是 Claude Code 写的。我就是把需求告诉它,然后在手机上反复测试,来来回回大概一周时间就做出来了。
  2. 找了一圈,没有一个能解析 Claude Code 对话的。 现有的终端 App 都只是单纯的终端,不理解 AI 对话的内容。

可能在手机上用 Claude Code 是个伪需求吧。 但至少对我来说,它解决了我的痛点。

另外,这个 App 对 zellij 做了深度适配,用起来会很顺手。

App 怎么用?

第一步:连接 SSH

首先你要连上 Tailscale 之类的 VPN,确保手机能访问到你的开发机器。然后在 App 里添加 SSH 连接。

第二步:新建项目

点击新建项目,选择 SSH 连接后,App 会自动获取开发机器上 zellij 的所有 session。

默认情况下: - session 的名字会作为项目名称 - 第一个 panel 里的文件夹会作为项目目录 - App 会自动解析这个项目的 Claude Code / OpenCode / Codex 对话记录

当然你也可以手动填写这些信息。

new_project

第三步:查看项目进度

进入项目后,界面分三个区域:

  1. 顶部:项目基本信息,点击可以预览文件
  2. 中间:你输入过的所有对话历史(这是用户视角的对话,不是 AI 输出的那些)
  3. 底部:三个 Tab
    • 按对话线程查看:根据 parent_id 解析,能看到一个完整的对话链条
    • 按时间线查看:按时间顺序展示所有对话
    • Todo 列表:如果项目里有 roadmap.md 或 claude.md 文件,会自动解析成 Todo list
conversation roadmap

第四步:操作终端

点击右下角的三角图标,就能连接到开发机器上的 zellij 窗口了。

我专门为 zellij 定制了一套键盘,常用的快捷键都在上面,用起来比通用键盘方便多了。

panel

通知功能

用 Claude Code 的时候,经常会遇到需要你输入 y 确认或者给权限的情况。人不在电脑前的时候,怎么知道 AI 在等你?

别担心,App 内置了一键配置功能,配好之后就能收到 Claude Code 的通知了。

webhook notify

最后

这个 App 的对话解析功能还比较粗糙,如果你有什么好的方法,请多交流。当然如果你觉得反馈太慢了,你可以 fork 一份来燃烧你的 token 来改进这个项目。

Comments