工作原理
架构
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":"你好!"}}
分叉过程
- 读取 原始会话文件
- 复制 分叉点及之前的所有消息
- 生成 新的会话 UUID
- 写入 新会话文件
- 启动 新终端,运行
claude --resume <新会话ID>
终端集成
sfork 使用 AppleScript 控制终端:
- iTerm2:在当前窗口创建新标签页
- Terminal.app:打开新窗口
文件位置
| 文件 | 位置 |
|---|---|
| 会话 | ~/.claude/projects/<哈希>/*.jsonl |
| 配置 | ~/.claude/ |