<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[iShell's Blog]]></title>
  <link href="http://ishell.github.io/atom.xml" rel="self"/>
  <link href="http://ishell.github.io/"/>
  <updated>2026-01-16T22:21:15+08:00</updated>
  <id>http://ishell.github.io/</id>
  <author>
    <name><![CDATA[ishell]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[VibeTerminal - 在手机上优雅地使用 Claude Code]]></title>
    <link href="http://ishell.github.io/blog/2026/01/16/vibeterminal/"/>
    <updated>2026-01-16T09:31:27+08:00</updated>
    <id>http://ishell.github.io/blog/2026/01/16/vibeterminal</id>
    <content type="html"><![CDATA[<p>最近做了一个 Android App，叫 VibeTerminal，专门用来配合 Claude Code 这类 AI CLI 工具远程使用。</p>

<p><a href="https://x.com/shiri_shh/status/2009973702314864680"><img src="http://ishell.github.io/images/vibe_terminal/ultimate_vibe_terminal.jpeg" alt="ultimate_vibe_terminal" /></a></p>

<!-- more -->


<h2>Vibe Code 时代真的来了</h2>

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

<p><a href="https://mp.weixin.qq.com/s/k147AyWj01W-V7IpkV0g2A">Steve Yegge 的这篇文章</a>说得挺好：</p>

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

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

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

<h2>一个 Vibe Coder 的焦虑</h2>

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

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

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

<p>但回到现实，现阶段我更关心的是：AI 实现了什么功能？修了什么 bug？git commit 了多少次？有没有跑偏？</p>

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

<h2>先聊聊我的工作流</h2>

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

<h3>为什么是终端而不是 IDE？</h3>

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

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

<p>我目前的工作流是：<strong>zellij + Tailscale + Claude Code</strong>。简单说就是：zellij 管理终端窗口，Tailscale 负责远程连接，Claude Code 负责干活。</p>

<h3>zellij 是什么？</h3>

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

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

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

<p><img src="http://ishell.github.io/images/vibe_terminal/zellij.png" alt="zellij" /></p>

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

<p>创建新项目的时候，我一般用这个命令：</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>zellij a new_project -c</span></code></pre></td></tr></table></div></figure>


<p>这样就创建了一个叫 <code>new_project</code> 的 session，以后这个项目的所有操作都在这里面进行。</p>

<h2>为什么要做 VibeTerminal？</h2>

<p>Android 上已经有 Termius 这样的终端 App 了，为什么还要自己做一个？</p>

<p>原因很简单：</p>

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


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

<p>另外，这个 App 对 zellij 做了深度适配，用起来会很顺手。</p>

<h2>App 怎么用？</h2>

<h3>第一步：连接 SSH</h3>

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

<h3>第二步：新建项目</h3>

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

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

<p>当然你也可以手动填写这些信息。</p>

<p><img src="http://ishell.github.io/images/vibe_terminal/new_project.jpg" alt="new_project" /></p>

<h3>第三步：查看项目进度</h3>

<p>进入项目后，界面分三个区域：</p>

<ol>
<li><strong>顶部</strong>：项目基本信息，点击可以预览文件</li>
<li><strong>中间</strong>：你输入过的所有对话历史（这是用户视角的对话，不是 AI 输出的那些）</li>
<li><strong>底部</strong>：三个 Tab

<ul>
<li><strong>按对话线程查看</strong>：根据 parent_id 解析，能看到一个完整的对话链条</li>
<li><strong>按时间线查看</strong>：按时间顺序展示所有对话</li>
<li><strong>Todo 列表</strong>：如果项目里有 roadmap.md 或 claude.md 文件，会自动解析成 Todo list</li>
</ul>
</li>
</ol>


<div style="display: flex; gap: 10px;">
  <img src="http://ishell.github.io/images/vibe_terminal/conversation.jpg" alt="conversation" style="width: 50%;">
  <img src="http://ishell.github.io/images/vibe_terminal/roadmap.jpg" alt="roadmap" style="width: 50%;">
</div>


<h3>第四步：操作终端</h3>

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

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

<p><img src="http://ishell.github.io/images/vibe_terminal/panel.jpg" alt="panel" /></p>

<h3>通知功能</h3>

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

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

<div style="display: flex; gap: 10px;">
  <img src="http://ishell.github.io/images/vibe_terminal/webhook.jpg" alt="webhook" style="width: 50%;">
  <img src="http://ishell.github.io/images/vibe_terminal/notify.jpg" alt="notify" style="width: 50%;">
</div>


<h2>最后</h2>

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