Claude Code

实时会话视图

时间线面板实际上展示什么 — 消息、工具调用、任务和提示,以事件而不是 CLI 滚动条的方式呈现。

当一个标签在跑 Claude Code 时,purplemux 把原始终端视图替换成结构化的时间线。同一个会话、同一份 JSONL 转录 — 只是布局成可扫读、可滚动、可链接的离散事件。

为什么时间线优于滚动条

Claude CLI 是交互式的。要在终端里看 15 分钟前它做了什么,需要滚过此后所有东西、读折行、还要猜一个工具调用从哪结束、下一个从哪开始。

时间线保留同样的数据并加上结构:

  • 每条消息、工具调用、任务或提示一行
  • 工具的输入和输出归到一起
  • 永久锚点 — 缓冲区填满时事件不会从顶部滑走
  • 当前步骤始终钉在底部,带上耗时计数

你随时可以通过顶栏的模式切换回终端。时间线只是同一个会话的另一种视图,不是另一个会话。

你会看到什么

时间线的每一行对应 Claude Code JSONL 转录中的一条记录:

类型 显示
用户消息 你的提示,以聊天气泡呈现。
Assistant 消息 Claude 的回复,以 Markdown 渲染。
工具调用 工具名、关键参数和响应 — readeditbash 等。
工具组 连续的工具调用折叠成一张卡片。
任务 / 计划 多步计划带勾选进度。
子代理 子代理调用与其各自进度归在一起。
权限提示 拦截的提示,与 Claude 提供的选项一致。
压缩中 Claude 自动压缩上下文时的细微指示。

较长的 assistant 消息折叠为片段并提供展开按钮;较长的工具输出会被截断并有 "显示更多" 切换。

它如何保持实时

时间线由 /api/timeline 上的 WebSocket 喂数据。服务端对活跃 JSONL 文件运行 fs.watch,解析新追加的条目,实时推到浏览器。没有轮询、没有完整重取 — 初始 payload 发送已有条目,之后全是增量。

当 Claude 处于 busy 时,你还会看到:

  • 当前步骤实时耗时的旋转图标
  • 当前的工具调用(例如 "Reading src/lib/auth.ts")
  • 最近 assistant 文本的简短片段

这些来自 JSONL 监视器的元数据通道,不改变会话状态。

滚动、锚点和历史

当你已经在底部时时间线会自动滚动,你滚上去阅读时它停在原地。一旦你比最新条目高一屏以上,就会出现一个浮动的 滚到底部 按钮。

对于长会话,旧条目会按需在向上滚动时加载。Claude 会话 ID 在 resume 时保留,所以接续昨天的会话时仍会落在你离开的地方。

跳到输入框
在时间线任何位置按 ⌘I 即可聚焦底部的输入栏。Esc 向运行中的 Claude 进程发送 interrupt。

内联权限提示

当 Claude 请求运行工具或修改文件时,提示直接在时间线里以行内方式出现,而不是模态。你可以点选项、按对应数字键,或忽略它然后从手机上通过 Web Push 回答。完整流程见 权限提示

同一标签上的多种模式

顶栏可以让你切换右侧面板对同一会话展示什么:

  • Claude — 时间线(默认)
  • Terminal — 原始 xterm.js 视图
  • Diff — 工作目录的 Git 改动

切换模式不会重启任何东西。会话仍在 tmux 的背后运行,三个视图共用一个。

快捷键:⌘⇧C · ⌘⇧T · ⌘⇧F

下一步