返回列表

博客

我的日常 Tactic Remote 工作流:会话、通知与移动审查循环

我如何同时运行三个 Claude Code 智能体、在它们完成时收到推送通知、用 iPhone 审查一切——实际的日常流程,不是理论。

发布于 标签: workflow / guide / productivity / practical
博客

继续查看该栏目下的产品与工程更新。

浏览此分类

我同时在三个项目上运行 Claude Code。每个处理不同的任务——前端、后端、测试。任何一个完成或需要我审批时,我的手机会收到推送通知。点击、审查、批准,然后走开。

这是我用 Tactic Remote 的实际日常工作流。没有理论,只有我每天在做的事。

TL;DR: 三个 tmux 会话,每个对应一个项目或任务。Mac 伴侣应用自动配置的 hooks 发送推送通知。用 iPhone 审查,一键批准,继续走路。

会话布局

我按项目而非工具来组织 tmux 会话。每个项目有自己的会话和工作目录:

┌─────────────────────────────────────────────────┐
│                  Your Mac                        │
│                                                  │
│  tmux session: webapp      (~/code/webapp)       │
│    └─ Claude: "Refactoring auth to use JWT..."   │
│                                                  │
│  tmux session: api         (~/code/api)          │
│    └─ Claude: "Adding rate limiting..."          │
│                                                  │
│  tmux session: mobile      (~/code/mobile-app)   │
│    └─ Claude: "Fixing navigation crash..."       │
│                                                  │
└─────────────────────────────────────────────────┘
                      │
                      │  push notification:
                      │  "Claude Task Completed — webapp"
                      ▼
              ┌──────────────┐
              │   iPhone     │
              │  Claude      │
              │  Remote      │
              └──────────────┘

为什么用会话而不是窗口?因为每个 Claude Code 实例需要自己的工作目录和 50,000 行滚动缓冲区。会话提供了干净的隔离——切换项目就是切换会话,不用记住哪个窗口编号对应哪个任务。

从手机创建会话

在 Tactic Remote 应用中:

  1. 点击会话选择器(屏幕顶部)
  2. 点击"创建会话"
  3. 命名(例如 webapp)
  4. 使用路径选择器浏览到项目目录
  5. 点击"启动 Claude"

后台执行的操作:

tmux new-session -d -s webapp -c ~/code/webapp
tmux set-option -t webapp history-limit 50000
tmux send-keys -t webapp -l 'claude'
tmux send-keys -t webapp C-m

然后对 api 和 mobile 重复同样的操作。三个会话,三个独立的 Claude Code 实例,各自指向正确的项目。

通知管线

这是让整个工作流切实可行的关键部分。没有通知,你就得不断查看手机确认 Claude 是否完成了。有了通知,你可以真正地走开。

配置方式

Mac 伴侣应用在服务器启动时自动配置 Claude Code hooks,无需手动设置。它在 ~/.claude/hooks/ 写入三个 shell 脚本:

#!/bin/bash
# claude-remote-stop.sh (auto-generated)
 
PORT="${CLAUDE_REMOTE_PORT:-8765}"
HOOK_SERVER_URL="http://localhost:${PORT}/hook"
 
TMUX_SESSION=""
if [ -n "$TMUX" ]; then
    TMUX_SESSION=$(tmux display-message -p '#S')
fi
 
PROJECT="$(basename "$PWD")"
TIMESTAMP=$(date +%s)
 
curl -s -X POST "$HOOK_SERVER_URL" \
    -H "Content-Type: application/json" \
    -d "{\"event\":\"Stop\",\"project\":\"$PROJECT\",\"tmux_session\":\"$TMUX_SESSION\",\"timestamp\":$TIMESTAMP}" \
    > /dev/null 2>&1 &
exit 0

然后在 ~/.claude/settings.json 中注册这些脚本,使 Claude Code 在生命周期事件时调用它们:

{
  "hooks": {
    "Stop": [
      {
        "matcher": "*",
        "hooks": [{ "type": "command", "command": "~/.claude/hooks/claude-remote-stop.sh" }]
      }
    ],
    "Notification": [
      {
        "matcher": "*",
        "hooks": [{ "type": "command", "command": "~/.claude/hooks/claude-remote-notification.sh" }]
      }
    ]
  }
}

事件流程

Claude 完成任务
    │
    ▼
Claude Code hook 触发: claude-remote-stop.sh
    │
    ▼
curl POST http://localhost:8765/hook
  {"event": "Stop", "project": "webapp", "tmux_session": "webapp"}
    │
    ▼
Node.js 服务器接收 hook → 广播给所有 WebSocket 客户端
    │
    ├─► 如果 iPhone 在前台:
    │     终端显示: 📢 [Claude] Project completed
    │
    └─► 如果 iPhone 在后台:
          系统推送通知出现
          点击 → 直接打开对应会话

去重

Claude 有时会快速连续触发多个 hook 事件——例如连续完成多个子任务时。iOS 应用使用 3 秒窗口进行去重。如果相同事件(相同项目、相同会话、相同时间戳)在 3 秒内到达两次,重复的会被静默丢弃。没有通知轰炸。

审查循环

典型的审查周期是这样的:

步骤 1:收到通知

手机震动:"Claude Task Completed — webapp"

我在咖啡店、沙发上,或者走在去吃午饭的路上。无所谓。

步骤 2:审查输出

点击通知。Tactic Remote 直接打开 webapp 会话。我看到 Claude 的完整输出——它改了什么、在问什么、测试结果如何。

终端视图保留了 Claude Code 的所有格式:语法高亮、diff 颜色、UI 边框字符。不是精简摘要——是真实的终端输出,在手机上用 ANSI 颜色渲染。

如果输出很长,向上滚动。50,000 行的 tmux 滚动缓冲区意味着什么都不会丢失,即使我不在时 Claude 产生了大量输出。应用可以通过"加载更多"获取多达 5,000 行。

步骤 3:批准或调整

三种常见场景:

Claude 等待运行命令的权限:

Claude 显示类似这样的内容:

> Need permission to run: npm install bcrypt
> [y/n]

我点击键盘工具栏上的 Y 按钮。一次点击。Claude 继续工作。

Claude 完成并在提示符等待:

我输入新指令:"现在为 auth 模块编写测试。"点击发送。Claude 开始处理下一个任务。我放下手机。

Claude 遇到错误需要指导:

我阅读错误信息,输入应该如何调整的回复,然后发送。Claude 调整它的方案。

步骤 4:走开

批准或调整后,我切换到下一个会话(点击会话选择器,点击 api)查看另一个任务。如果还在运行,我就走开等下一个通知。

循环是:通知 → 审查 → 操作 → 走开。每次循环需要 30 秒到 2 分钟,取决于 Claude 产出了什么。

并行任务策略

并行运行多个 Claude 实例很强大,但需要一定的纪律。以下是我的经验:

给每个任务清晰完整的说明

不要发送模糊的指令,比如"处理前端"。发送具体的:

Refactor the authentication module in src/auth/ to use JWT tokens
instead of session cookies. Update all route handlers that check
auth. Write tests. Run the existing test suite to make sure nothing
breaks.

你的提示越具体,Claude 能自主工作的时间就越长。模糊的提示意味着更多的中断。

错开启动时间

不要同时启动全部三个会话。启动一个,等它开始工作(大约 5 秒后你会看到初始输出),再启动下一个。这样可以避免三个同时触发权限提示,导致三个通知同时到达。

先检查运行最久的

审查时,从运行时间最长的会话开始——它最可能已经完成或卡住。最近启动的会话可能还在工作。

使用有意义的会话名称

当你收到推送通知"Claude Task Completed — webapp"时,你需要不用思考就知道它是什么意思。不要把会话命名为 session1、session2、session3。用项目或任务来命名。

常用快捷操作

聊天视图底部的键盘工具栏有专为 Claude Code 交互设计的特殊按键:

按钮功能使用场景
Y发送 y 键批准权限提示
N发送 n 键拒绝权限提示
Enter发送回车确认选择
Esc发送 Escape取消或关闭
Tab发送 Tab自动补全或循环选项
Ctrl+C发送中断停止失控进程

Y 和 N 按钮的存在是因为 Claude Code 的权限提示是最常见的交互。能够一键批准——而不是在手机键盘上打"y"——让移动端工作流切实可行。

我的 .tmux.conf

很简单,没有花哨的东西:

# Big scrollback — Claude produces a LOT of output
set -g history-limit 50000
 
# Mouse scrolling (not used much from the phone, but helpful at the desk)
set -g mouse on
 
# Start window numbering at 1
set -g base-index 1

Tactic Remote 在创建会话时会将滚动缓冲区设为 50,000,所以 .tmux.conf 的设置是你手动创建会话时的兜底。

实际场景

典型的一个早上:

8:00 AM — 坐到 Mac 前。三个项目需要处理。从 Mac 伴侣应用创建三个会话(或者从 iPhone 创建——都可以)。

8:05 AM — 在每个会话中给 Claude 发送详细任务。走去厨房。

8:20 AM — 第一个通知:api 会话完成。在 iPhone 上审查。Claude 添加了速率限制,测试通过。发送下一个任务:"现在把速率限制 headers 添加到 API 文档中。"

8:35 AM — 第二个通知:webapp 会话需要批准。打开它。Claude 想安装一个新依赖。检查看起来没问题。点击 Y。走到桌前。

8:50 AM — 第三个通知:mobile 会话完成。审查。没问题。开始新任务。

9:00 AM — 坐到 Mac 前。三个项目都有了显著进展。在 git 中审查 diff,commit,push。

一小时,三个项目,大部分时间在泡咖啡和吃早餐。手机审查循环意味着 Claude 从不因为我不在桌前而被阻塞。

建议

立即启用通知。 hooks 由 Mac 伴侣应用自动配置,但你需要在 iPhone 提示时授予通知权限。首次启动时就做——整个工作流依赖于此。

把 Tactic Remote 放在 dock 里。 在活跃开发期间你一天会打开它 20-30 次。一键可达很重要。

信任滚动缓冲区。 当你重新连接到会话时,所有输出都在那里。你不需要问 Claude"你做了什么?"——直接向上滚动阅读终端输出。

不要微管理。 这个工作流的要点是给 Claude 实质性的任务然后走开。如果你每 2 分钟就检查一次,那就用错了。给它一个 15 分钟的任务,等通知,然后审查。


关于服务器、tmux 和通知底层运作的技术细节,请参阅从手机远程运行 Claude Code。初始设置请参阅快速开始。

立即体验 Tactic Remote

用手机远程控制编程 Agent

连接 Mac、Windows 或 Linux 电脑上的 Claude Code、Codex 等 Agent,在 iPhone 或 iPad 上查看进展并发送下一条要求。