E2B Skill
E2B 让 AI Agent 在隔离的 Linux microVM 里运行代码、shell 命令和文件操作,几乎完全通过 SDK 使用(Python 用 e2b / e2b-code-interpreter,JS/TS 用 e2b / @e2b/code-interpreter)。最大的坑是新建沙箱默认只有 5 分钟超时,到期后默认动作是直接杀掉而不是暂停,文件系统和内存状态会不可恢复地消失;这份 skill 的每一条陈述目前都还没有用真实 API key 验证过,全部标注为未实测的文档原文,拿到 key 后应先按验证计划复核。
安装
选你用的 Agent,复制命令。
npx -y skills add fxp/skillify --skill e2b --agent claude-code --yes装到项目的 .claude/skills/;加 -g 装到全局。装完需要你手动执行 /reload-plugins,这一步 Agent 代劳不了。
npx -y skills add fxp/skillify --skill e2b --agent codex --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill e2b --agent cursor --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill e2b --agent opencode --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill e2b --agent gemini-cli --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill e2b --agent github-copilot --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill e2b --agent trae --yes装到项目的 .trae/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill e2b --agent windsurf --yes装到项目的 .windsurf/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill e2b --agent qwen-code --yes把 --agent 换成你用的 Agent 标识,可以一次写多个。skills CLI 1.5.25 共支持 79 个,例如 qwen-code、kimi-code-cli、trae-cn、qoder、lingma、cline、roo。
或者让 Agent 自己装
读 https://github.com/fxp/skillify/blob/main/skills/e2b/prompt.md 并照它执行装对了的标志:references/ 下有 5 份文档。
装好后,可以这样问你的 Agent
这份 Skill 覆盖的典型任务。点一下复制。
5 类能力
每类能力对应一份 reference,Agent 按任务只打开需要的那份。
运行代码与命令
run_code/runCode 结构化代码执行、commands.run() shell 命令、流式输出与后台任务跨进程重连
文件系统
sandbox.files 下的读写、批量文件、本地上传下载、预签名 URL、stat 信息与目录监听
生命周期与计费
状态机、超时与 lifecycle 配置、暂停/恢复、快照与 fork、连续运行时长上限、按秒计费公式
网络
getHost(port) 暴露公网 URL、沙箱内 HTTPS 服务、Host header 伪装、访问限制与出站互联网控制
报错与限制
SandboxException/SandboxError 异常体系、HTTP 层报错、限流与套餐限制表、GPU 不支持、常见配置报错排查
当前事实
整理自官方文档(抓取于 2026-09-21),还没有用真实凭证验证。
| 项 | 值 |
|---|---|
| Base URL | https://api.e2b.app,鉴权头 X-API-Key;大多数工作不需要直接碰它,SDK 会处理 |
| 鉴权 | E2B_API_KEY 环境变量(推荐)或构造函数选项 apiKey/api_key,key 以 e2b_ 开头;SDK 不会读取 .env 文件 |
| 最容易选错 | 不存在 @e2b-dev/ 这个 npm scope(那只是 GitHub 组织名);核心沙箱是 pip install e2b / npm install e2b,Code Interpreter 是 pip install e2b-code-interpreter / npm install @e2b/code-interpreter |
| 默认生命周期 | 新建沙箱默认 5 分钟超时(Python timeout 单位秒,JS timeoutMs 单位毫秒),到期动作默认 onTimeout: "kill",不可恢复 |
| 计费 | (vCPU × $0.000014/秒 + RAM_GiB × $0.0000045/秒) × 运行秒数,只在 Running 状态计费,Paused/Killed 都不计费;默认规格 2 vCPU / 512 MiB RAM |
照通用经验写容易错的 6 件事
来自官方文档,还没有用真实凭证验证。
- 超时单位随语言而变,默认动作还是毁灭性的。JS/TS 用
timeoutMs(毫秒),Python 用timeout(秒),不设置时都默认 5 分钟;到期后onTimeout默认是"kill",沙箱和它的文件系统、内存状态会直接消失、无法恢复。 Sandbox.connect()只会延长超时,永远不会缩短它。新到期时间是max(当前到期时间, now + 传入的 timeout);一个还剩 20 分钟的沙箱,用默认值 connect 依然停在 20 分钟不变,需要精确(更短)的超时必须显式调用setTimeout()/set_timeout()。run_code/runCode和commands.run()的状态持久性正好相反。前者跑在一个持久化的 code context 里,变量和 import 跨调用可见;后者每次调用都是全新进程,上一次cd或 export 的环境变量不会带到下一次调用,只有沙箱级别的envs和文件系统跨调用持久化。- 后台命令的 stdout/stderr 流只推给发起它的那个进程。之后要用
Sandbox.connect()+commands.connect(pid)从另一个进程重连收集结果,必须提前把输出重定向到文件(> /home/user/out.log 2>&1);重连后handle.wait()不会补发之前流式推送过的行。 - Paused 状态不计费,但也永远不会被自动清理。暂停的沙箱会被无限期保留、没有 TTL,真正删除必须显式调用
kill();反过来一个被遗忘、仍在Running的沙箱会持续按秒计费并占用并发限额,直到撞上连续运行时长上限或被手动 kill。 - 「最大连续运行时长」和沙箱超时是两个不同的限制,不要搞混。超时(默认 5 分钟)管的是空闲沙箱何时被杀/暂停,可随时用
setTimeout()重置;连续运行时长(Hobby 1 小时、Pro 24 小时)是套餐级别、不可配置的硬上限,即使沙箱一直在活跃工作也无法突破,只有暂停再恢复才会重置这个计时器。