沙箱调研过程复盘:遇到的问题与解决方式
针对
sandbox-landscape.md的深度解读和问题调研工作记录。
一、工具层面的问题
1. gh CLI 只在 CubeSandbox 可用,其他项目全部失败
现象:切换到各项目目录执行 gh issue list,Firecracker、Daytona、gVisor、E2B、Kata 全部返回空输出。
原因:本地克隆的仓库没有配置 GitHub remote 的 gh 认证(本地镜像只有代码,没有 gh 的 repo 授权上下文)。CubeSandbox 因为 recently active 且可能有特定的 auth 缓存而可用。
解决方式:
- 改用
gh search issues --repo <owner>/<repo>直接搜索上游仓库 - 部分搜索仍然失败(并行调用时被 cancel),改为串行逐个执行
- 最终成功获取了 Firecracker、Daytona、gVisor、Kata、E2B 的 issue 列表
- 对于需要详情的问题,混合使用
gh issue view(CubeSandbox 本地)和WebFetch(GitHub 线上)
2. WebFetch 对 GitHub issue 页面返回 404
现象:gh issue view 不支持非当前目录的 issue,WebFetch 抓取 GitHub issue 详情页时部分 URL 返回 404。
原因:GitHub 对未认证的 issue 详情页有限流,部分 issue 需要登录才能查看。
解决方式:
- 用 gh CLI 的
gh issue view <num>在本地已克隆的项目目录下查看 - 对上游项目改用
gh search issues获取列表 +gh issue view <num> --repo <owner>/<repo>获取详情 - WebFetch 主要用于抓取 issue 列表页(不需要认证)
3. 并行 Bash 调用被 cancel
现象:6 个项目的 gh search issues 并行执行时,部分调用返回 “Cancelled: parallel tool call errored”。
原因:系统对并行 Bash 调用有错误传播机制——一个失败会 cancel 同批次的其余调用。
解决方式:改为串行执行,每个调用独立。虽然慢一些,但更稳定。
4. Read 工具对已读文件返回 “Wasted call”
现象:尝试用 Read 重新读取 sandbox-landscape.md 时,返回 “Wasted call — file unchanged since your last Read”。
原因:Read 工具有缓存机制,同一文件在未修改的情况下不会重复返回内容。
解决方式:用 sed / wc -l 等 Bash 命令处理文件,不依赖 Read 的缓存。
二、调研策略层面的问题
5. 项目列表与本地路径不完全匹配
现象:sandbox-landscape.md 列出了 6 个项目,但 projects/ 目录下有 30+ 个项目(包含所有赛道的)。
原因:projects/ 是所有犀牛鸟赛道的汇总目录,sandbox 只是其中之一。
解决方式:通过项目名称精确匹配路径(CubeSandbox / daytona / E2B / firecracker / gvisor / kata-containers),忽略其他赛道的项目。
6. 部分项目本地只有 README,没有完整代码
现象:E2B 的本地仓库只有 README.md / CONTRIBUTING.md / DEV.md 等文档,核心 SDK 和基础设施代码不在本地。
原因:E2B 的核心代码在 e2b-dev/infra(Terraform 部署)和 npm/PyPI 发布的 SDK 中,本地克隆的是 SDK 的说明仓库。
解决方式:在解读中明确标注”本地只有文档,核心代码在外部”,不强行解读不存在的代码结构。
三、输出层面的问题
7. 一次性输出太长导致信息过载
现象:第一轮输出将所有 6 个项目的解读放在一次回复中,内容过长。
解决方式:用户要求”沉淀为文档”后,拆分为 7 个文件(1 个总览 + 6 个单项目),每个文件独立可读。
8. 深度解读需要超出文档范围的信息
现象:sandbox-landscape.md 的对比表只覆盖了表面数据(启动时间、内存、语言),不包含设计哲学和竞争分析。
解决方式:
- 补充读取各项目的 README 获取真实定位
- 查阅 GitHub issue 获取社区在解决什么实际问题
- 用类比(汽车工业)帮助理解项目间关系
四、待解决的问题
| # | 问题 | 状态 | 解决方向 |
|---|---|---|---|
| 1 | gh CLI 对其他项目不可用 | 部分解决 | 需要配置 gh 认证或使用 API token |
| 2 | 部分 GitHub issue 详情页需登录 | 未解决 | 可以用 gh CLI with token 解决 |
| 3 | E2B 核心代码不在本地 | 信息缺口 | 需要单独 clone e2b-dev/infra |
| 4 | Daytona 的完整架构图没有本地文档 | 信息缺口 | 需要读取 apps/ 子目录的代码 |
| 5 | 各项目的 CLAUDE.md / AGENTS.md 可能包含内部指引 | 未读取 | 按需读取 |
五、关键经验总结
调研工具优先级
- WebFetch:适合抓取 GitHub 列表页、README 等公开页面
- gh CLI(本地目录):最稳定,适合已克隆的项目
- gh search issues:适合搜索上游项目,但要注意串行执行
- WebFetch(issue 详情):不稳定,部分页面 404,需要备选方案
- Read / Bash sed:处理本地文件的主力工具
调研方法论
- 先看对比表,再看 README,再看 issue:从宏观到微观
- 用类比建立心智模型:汽车工业类比帮助理解项目间关系
- issue 是真相来源:文档说”高性能”,issue 说”I/O 慢 10 倍”——信 issue
- 代码结构要实际看:README 里的架构图可能过时,
find目录结构是最可靠的