T3 Code 源码拆解
从一次 Agent 请求出发,理解 T3 Code 0.0.33 的完整系统设计。
T3 Code 不是另一个模型,也不是把某个 CLI 套进网页。它把已经安装在开发者机器上的 Codex、Claude Code、Cursor、Grok Build 与 OpenCode 统一成一个可以从 Web、桌面和手机控制的 Agent harness control surface。真正有价值的工程问题因此不在“怎样画一个聊天框”,而在:
- 多个语义并不相同的 Provider,怎样被压进稳定的会话协议;
- 流式输出、审批、工具调用、计划和错误,怎样在断线后仍可恢复;
- Web、Electron、React Native 怎样共享状态语义,却保留各自的平台能力;
- 本机 Agent 怎样被安全地暴露给远端设备,而不把长期密钥塞进 WebSocket URL;
- Git 工作区怎样做可回退检查点,又不污染用户正在使用的 index。
这套文档以本地 t3code-main 源码快照为依据。快照中的核心包版本为 0.0.33,共有
95 个 RPC 定义、40 轮数据库迁移、5 类内置 Provider,TypeScript/TSX 源文件约 2,300 个;
统计用于建立量级感,不把生成文件、依赖镜像和测试夹具当作架构结论。
源码基线说明
分析输入是一个不含 .git 元数据的本地源码快照,因此无法给出精确 commit SHA。
文中的 GitHub 链接指向 pingdotgg/t3code 主分支,便于继续阅读,但上游代码可能随时间变化。
一张图先看懂
图里最关键的一刀,是把系统分成两侧:
- 执行侧在开发者机器上。Server 持有 Agent 子进程、仓库、终端、Git 凭据和本地文件权限。
- 控制侧可以在任意设备上。客户端只通过有权限范围的 RPC 读取投影、发送命令和订阅事件。
这个边界让“手机控制本机 Agent”成为网络与状态同步问题,而不是把完整开发环境搬进云端。
你会学到什么
核心请求链路
从 send message 到 provider delta,再到 UI 重放。
事件溯源内核
单写入队列、decider、projector、事务提交和幂等回执。
五种 Provider
统一接口背后的 JSON-RPC、SDK、ACP 与多账号隔离。
断线恢复
为什么只有 supervisor 能重试,以及离线为何不消耗退避次数。
安全远程访问
Bearer、DPoP、WS ticket、Relay、SSH 与 Tailscale。
Git 检查点
用临时 index 创建隐藏 commit,不触碰用户暂存区。
本书的约定
每一章都沿用相同的拆解顺序:
| 层次 | 要回答的问题 |
|---|---|
| 是什么 | 组件在整个系统中的职责与边界是什么? |
| 怎么做 | 入口文件、核心类型、状态转移和数据路径是什么? |
| 为什么 | 这个设计解决了哪个约束,付出了什么代价? |
| 失败时 | 断线、重复命令、进程崩溃、乱序事件时发生什么? |
| 可迁移经验 | 哪些模式能用于其他本地优先、实时或多 Provider 产品? |
推荐先读阅读地图,再按你的目标选择路线。
原始资料
本文档是独立的源码研究笔记,不是 T3 Tools 官方文档;产品名和源码版权归各自权利人所有。