niceeval show 能看到判定、断言、diff 和事件流。大多数问题到这里就够了——完整的排查路线见 Debug 手册。
但有些问题只能进活的环境里看:
- 环境起不来——setup 阶段装依赖失败、agent CLI 启动不了。这时 agent 还没开始跑,事件流是空的,最快的办法是进 Sandbox 手动重跑一遍安装命令。
- 改动落在
git diff之外——全局装了什么包、$HOME下写了什么配置、PATH实际是什么,artifact 里没有。 - 重跑太慢——冷启动加安装要几分钟,想逐条验证猜测时,留着现场比每次重跑快得多。
跑的时候保留现场
--keep-sandbox 是 niceeval exp 的运行参数,两档:failed(缺省值)保留判定为 failed 或 errored 的 Attempt(包括超时打断的);all 连通过的也保留——调 setup Hook、核对通过环境的真实状态时用它,不用故意弄挂一条评估用例。不带这个参数时全部销毁。
运行结束后,摘要里会列出保留了哪些 Sandbox、怎么进去:
niceeval show @1x7f3q9k 看落盘证据)、Sandbox 实例 id、进入现场的命令。保留下来的 Sandbox 不会一直跑着烧资源——Docker 容器停在磁盘上,E2B 微 VM 暂停计费,Vercel 保存文件系统。niceeval sandbox enter 会先唤醒再进入,在 workdir 打开 shell;退出 shell 后现场自动回到休眠(想让它保持运行,加 --leave-running)。进去之后就是这次 Attempt 跑完时的环境,可以手动执行命令、翻文件、复现失败。
查看和清理
保留下来的 Sandbox 逐条记录在.niceeval/sandboxes/ 里,用 niceeval sandbox 管理:
stop 是幂等的:Sandbox 已经不在了(手动删过、云端过期)不算错误,只会把记录移掉并说明。如果 provider 销毁失败,命令会保留记录并返回错误,方便稍后重试,不会把仍活着的资源从列表里藏掉。忘了清也有提醒——下次运行开始时,如果还有上次保留的 Sandbox,会打一行提示。
各 Provider 的差别
- Docker:保留 = 容器停在磁盘上(不占内存,重启 Docker 也还在),进入时自动启动。容器不会自己消失,是唯一需要主动清理的 provider。除了
niceeval sandbox stop,也可以用docker ps -a -f label=niceeval.keep-candidate=true直接核对。 - E2B:保留 = 暂停微 VM——文件和内存整体保存,暂停期间停止计费、无限期保留,进入时自动恢复。
- Vercel Sandbox:保留 = 停止微 VM——文件系统保存、之后可恢复,但内存状态不保留,唤醒后进程要重新启动;超过 provider 的保留期限后
niceeval sandbox list标成expired。 - 自定义 Provider:
defineSandbox产出的 provider 不支持留存,因为事后的sandbox stop不加载用户配置,无法在新进程里安全找回自定义销毁函数。