跳到主要内容

工作原理

架构

sfork 通过直接操作 Claude Code 的会话文件来工作。

┌─────────────────────────────────────────────────────────────┐
│ 原始会话 │
├─────────────────────────────────────────────────────────────┤
│ [0] 你: "帮我构建一个 REST API" │
│ [1] Claude: "我来帮你创建 REST API..." │
│ [2] 你: "添加认证" │
│ [3] Claude: "让我们添加 JWT 认证..." │
│ [4] 你: "改用 OAuth" ◄── 分叉点 │
│ [5] Claude: "切换到 OAuth..." │
│ [6] 你: "添加限流" │
└─────────────────────────────────────────────────────────────┘

▼ sfork(选择第 4 条)

┌──────────────────┴──────────────────┐
▼ ▼
┌───────────────────┐ ┌───────────────────┐
│ 原窗口 │ │ 新终端 │
│ (继续 OAuth │ │ (分叉的会话) │
│ + 限流) │ │ 从第 4 条开始 │
│ │ │ 尝试不同方法 │
└───────────────────┘ └───────────────────┘

技术细节

会话发现

Claude Code 将会话存储在:

~/.claude/projects/<项目哈希>/<会话ID>.jsonl

项目哈希由你的工作目录路径生成。

会话格式

会话以 JSONL(JSON Lines)格式存储:

{"type":"user","uuid":"abc123","message":{"content":"你好"}}
{"type":"assistant","uuid":"def456","message":{"content":"你好!"}}

分叉过程

  1. 读取 原始会话文件
  2. 复制 分叉点及之前的所有消息
  3. 生成 新的会话 UUID
  4. 写入 新会话文件
  5. 启动 新终端,运行 claude --resume <新会话ID>

终端集成

sfork 使用 AppleScript 控制终端:

  • iTerm2:在当前窗口创建新标签页
  • Terminal.app:打开新窗口

文件位置

文件位置
会话~/.claude/projects/<哈希>/*.jsonl
配置~/.claude/