人工智能AI AgentAgent 沙箱后端【免费下载链接】E2BOpen-source, secure environment with real-world tools for enterprise-grade agents.项目地址https://gitcode.com/gh_mirrors/e2/E2B点击查看免费下载导读本文以 E2B 开源仓库根目录的 AGENTS.md 为骨架逐条拆解该仓库面向人类开发者与 AI Agent 的协作约定——包括 Node/Python 依赖管理选型、提交前质量门禁、JS 与 Python SDK 的双实现同步要求、spec/目录的只读与代码生成闭环、changeset 版本管理、PR 流程以及本地凭据存放位置。读完本文你将能理解 E2B 仓库的工程纪律从何而来知道在改动其 SDK 与 CLI 时每一步应执行哪些命令、维护哪些文件并能在自己的多语言仓库中复用这套规范 源码佐证的协作模式。一、这份规范覆盖了什么AGENTS.md 的定位与总体脉络E2B 是一个为 Agent 提供安全云沙箱环境的开源项目仓库描述为 Open-source, secure environment with real-world tools for enterprise-grade agents仓库采用 pnpm workspace 组织多个 npm 包并同时维护 Python 版 SDK。根目录的 AGENTS.md 只有十条规则却精确地规定了项目协作中的高频关键节点依赖安装Node 用 pnpm、Python 用 uv提交前必须通过 format、lint、typecheck修改 SDK 时 JS 与 Python 同步/异步实现必须等价变更spec/下的 API 规范文件禁止手改只能通过固定 commit make codegen同步测试覆盖受影响代码路径并以pnpm run test运行变更 CLI、JS SDK、Python SDK 公共接口时生成 changeset创建 PR 时为面向用户的变更补充 usage examples新建 PR 时用 Linear MCP 关联 issuePR 描述要与变更保持同步默认凭据存放在仓库根.env.local或~/.e2b/config.json。与常见的社区行为准则不同这份文档的每一条都指向仓库中真实存在的脚本、配置与代码路径属于可直接执行的操作约束。下面按主题分组逐一展开并给出仓库内的实现证据。二、依赖管理约定Node 用 pnpmPython 用 uvAGENTS.md 第 1 条规定Use pnpm for node and uv for python to install and update dependencies.仓库的根 package.json 通过packageManager字段把 pnpm 版本固定为pnpm10.34.5同时在engines中声明pnpm: 10.16.0 11保证贡献者与 CI 使用一致的包管理器版本。pnpm-workspace.yaml 声明了packages/*作为 workspace 成员并借助 catalog 机制统一管理typescript、vitest、tsdown等跨包共享依赖的版本。Python 侧的证据同样明确packages/python-sdk、packages/code-interpreter-python、packages/desktop-python、packages/dockerfile-utils-python均带有pyproject.toml与uv.lock依赖锁定文件由 uv 维护。packages/python-sdk/Makefile中的init目标使用uv sync --group codegen安装代码生成工具链测试目标则使用uv run pytest --verbose --numprocesses4与用 uv 安装和更新依赖的规范完全一致。实践要点在仓库根执行pnpm install安装全部 Node 依赖Python 包内如需开发环境使用uv sync并搭配uv run执行命令避免混用 npm/conda 等其他工具导致 lock 文件失配。三、提交前质量门禁format、lint、typecheckAGENTS.md 第 2 条要求提交前依次运行pnpm run format pnpm run lint pnpm run typecheck这三个脚本都定义在根 package.json 中采用pnpm --if-present --recursive run script的形式向下递归到各包执行format根层调用 prettier各包如 packages/cli/package.json、packages/js-sdk/package.json也定义了format: prettier --write src之类的脚本lintTypeScript 包使用 oxlint如packages/cli的lint: oxlint --config ../../.oxlintrc.json srcPython 包则使用 ruffpackages/python-sdk/Makefile中ruff check .与ruff format --check .typecheckJS SDK 先执行pnpm --dir packages/js-sdk build作为前置构建再递归运行各包 typecheckCLI 为tsc --noEmit --skipLibCheckPython 侧对应ty check。实践要点这是提交前的最后一公里自检若任一命令失败应视为未完成。值得注意的是根脚本依赖--if-present因此未定义相应脚本的包会被跳过贡献者仍应确保自己改动的包存在对应的质量脚本新增包时需自行补充。四、SDK 双实现同步JS 与 Python 的 sync/async 四象限AGENTS.md 第 3 条是仓库最具特色的工程约束When modifying the SDK packages, ensure equivalent changes are applied to both JS as well as sync and async Python implementations.仓库中的 SDK 包分为两大族JS SDKpackages/js-sdknpm 包名e2b包含 sandbox、template、volume、envd 等模块Python SDKpackages/python-sdk其目录结构明显按同步/异步拆分为e2b/sandbox_async/与e2b/sandbox_sync/两套实现packages/python-sdk/e2b/sandbox_async/commands/、packages/python-sdk/e2b/sandbox_sync/commands/等CLI 测试中亦可看到对两种模式的覆盖。这意味着一个功能改动往往要落在四个位置JS 实现、Python 同步实现、Python 异步实现以及对应的测试。仓库甚至为此编写了跨语言的 parity 测试packages/python-sdk/tests/shared/git/test_parity.py来校验同步与异步行为的一致性。从源码结构可以推断该约束的目的是确保不同语言与编程范式下 Agent 拿到的 SDK 体验完全等价避免文档与示例因语言而出现行为漂移。实践要点改动packages/js-sdk或packages/python-sdk的公开行为时先在两个语言里找到功能对应的入口Python 侧务必同时检查sandbox_async与sandbox_sync保持参数名、默认值、异常语义一致。五、spec/ 只读原则与代码生成闭环Copybara pin codegenAGENTS.md 第 4 条是整个仓库自动化程度最高的一条规则Never edit the API, envd, or volume-content specs in spec/ by hand; they are synced with Copybara from e2b-dev/runtime and e2b-dev/belt at the commits pinned in spec/runtime-ref and spec/belt-ref. To update the specs, bump the pins and re-runmake codegen, which re-fetches them before generating.结合仓库文件可以还原出完整的同步链路源仓库与 pinspec/runtime-ref 记录e2b-dev/runtime的 commit90ad3bd…spec/belt-ref 记录e2b-dev/belt的 commit13ca196…两个 pin 文件是 spec 同步的锚点。Copybara 配置copy.bara.sky 定义了三个 workflowapi-specspec/openapi.yml、envd-specspec/envd/下的 envd.yaml 与 protobuf、volume-api-specspec/openapi-volumecontent.yml并声明每个 workflow 拥有的目标路径同步成功后只会替换这些路径其余仓库自有文件如spec/mcp-server.json、spec/envd/buf-*.gen.yaml不受影响。抓取脚本scripts/fetch-spec.sh 读取 pin可通过E2B_RUNTIME_REFmain、E2B_BELT_REFmain临时覆盖、自动从GITHUB_TOKEN或gh auth token获取认证belt 是私有仓库必须带 token随后以 Docker 方式运行 Copybara 的migrate命令。生成入口Makefile 中make codegen会先执行fetch-specs抓取三个 spec再用 codegen.Dockerfile 构建内置 buf、protoc 插件、openapi 工具的镜像在容器内执行make generate最终分别触发 JSpackages/js-sdk pnpm generate与 Pythonpackages/python-sdk make generate的代码生成。生成前的过滤redocly.yaml 使用 Redocly CLI 把同步下来的spec/openapi.yml按 tag 过滤JS 保留sandboxes, snapshots, templates, tags, auth, volumes, secretsPython 少一个auth再交由openapi-typescript/openapi-python-client生成客户端类型与代码。spec/README.md 补充了更精细的操作方式只想抓取不生成时可分别执行pnpm fetch:api-spec、pnpm fetch:envd-spec、pnpm fetch:volume-spec抓取失败时make codegen会警告并回退到 spec/ 中已跟踪的副本。另外生成文件的 CI 检查会在跟踪副本与 pin 不一致时失败从而保证 spec 与代码永远严格对应。实践要点永远不要在 spec/ 下手动改 OpenAPI、envd.yaml 或 proto 文件。正确的流程是在上游仓库修复 → bumpspec/runtime-ref或spec/belt-ref中的 commit → 在仓库根执行make codegen如需跳过镜像构建可设置CODEGEN_IMAGE指向预构建镜像→ 提交生成的客户端代码。六、测试覆盖与运行方式AGENTS.md 第 5 条要求Create or update tests covering affected codepaths and run them usingpnpm run test.根 package.json 的测试脚本为test: pnpm --dir packages/js-sdk build pnpm --recursive --if-present run test即先构建 JS SDK因为多数包以 workspace 方式依赖它再递归运行所有声明了 test 脚本的包。各包的测试命令各异CLI 用vitest run测试入口见 packages/cli/tests/setup.ts会先pnpm build再 spawndist/index.jsJS SDK 用vitest run并额外提供 Cloudflare Workers、浏览器、Deno 等运行时测试见packages/js-sdk/package.json的test:cf、test:browser、test:denoPython SDK 则通过uv run pytest --verbose --numprocesses4并行执行。仓库的测试资产相当丰富packages/js-sdk/tests/sandbox/、packages/js-sdk/tests/template/、packages/python-sdk/tests/async/、packages/python-sdk/tests/sync/等目录分别覆盖命令执行、文件系统、Git、模板构建、卷volume等模块。实践要点为改动补充对应层的测试JS 测试 Python sync/async 双份测试并保证pnpm run test全绿后再提交。七、changeset 版本管理什么变更必须生成 changesetAGENTS.md 第 6 条划定了 changeset 的适用范围Generate a changeset withpnpm changesetin the repository root when changing the public surface of packages/cli, packages/js-sdk, or packages/python-sdk; internal scripts, devtools, and tests dont need one.仓库的 changeset 配置位于 .changeset/config.jsonaccess: public、baseBranch: main、updateInternalDependencies: patch并允许私有包参与版本化。根 package.json 提供了changeset: changeset脚本与配套的version、publish脚本pnpm changeset version pnpm run -r postVersion pnpm run -r lock说明整个发布流程由 changeset 驱动。.changeset/README.md 给出了生成方法仓库中已有的 changeset 示例如 .changeset/python-3-11.md展示了标准格式——frontmatter 声明受影响包及 semver 级别minor/patch正文描述变更内容。实践要点只有改动packages/cli、packages/js-sdk、packages/python-sdk的公开接口时才需要 changeset内部脚本、开发工具、测试的变更明确豁免。生成后会在.changeset/下新增一个 markdown 文件随 PR 一起提交。八、PR 流程usage examples、Linear MCP 与描述维护AGENTS.md 第 79 条规范了拉取请求的创建与维护第 7 条创建 PR 时面向用户user-facing的变更必须在 PR 描述中附上 usage examples方便 reviewer 与下游用户快速理解新行为第 8 条新建 PR 时若可用 Linear MCP应链接相关 issue或从 PR 描述创建新 issue——这是仓库将 issue 追踪工具Linear接入 MCP 的体现使 Agent 工作流也能自动建立任务关联第 9 条PR 描述需随变更持续更新避免描述与实际 diff 脱节。需要说明的是仓库根目录的 CONTRIBUTING.md 非常简短仅引导到 Discord 与 GitHub 讨论因此 AGENTS.md 实际上是贡献流程细节的主要载体。实践要点提交 PR 前自检——描述中是否包含示例代码、是否关联了对应 issue、描述是否与最终改动同步。九、凭据存放约定.env.local 与 ~/.e2b/config.jsonAGENTS.md 第 10 条说明默认凭据的两处存放位置仓库根目录的.env.local本地文件不入库或用户主目录下的~/.e2b/config.json。~/.e2b/config.json的读写逻辑集中在 packages/cli/src/user.ts路径常量USER_CONFIG_PATH path.join(os.homedir(), .e2b, config.json)user.ts配置采用version: 2格式包含identityemail、oauthtoken/revoke endpoint 与 client_id、tokensaccess/refresh token、last_refresh以及projectName/projectId/projectApiKeyuser.ts代码中还保留了 v1 配置team*字段的内存迁移逻辑写入时通过writeUserConfig将目录权限设为0o700、文件权限设为0o600user.ts因为文件内含 OAuth 凭据必须限制为仅属主可读写。CLI 的 API 密钥解析顺序见 packages/cli/src/api.tsE2B_API_KEY环境变量优先其次回退到用户配置中的projectApiKeyE2B_PROJECT_ID或旧的E2B_TEAM_ID用于指定项目。auth login浏览器 OAuth 回环登录见 packages/cli/src/commands/auth/login.ts、auth configure选择项目见 configure.ts、auth logout调用 revoke endpoint 撤销 refresh token 并删除配置见 logout.ts等命令都以该文件为读写中心token 到期前 60 秒会自动通过refreshOAuthToken刷新见 packages/cli/src/utils/token-refresh.ts。实践要点不要在代码或 PR 中提交真实凭据。本地开发使用仓库根.env.local设置E2B_API_KEY、E2B_PROJECT_ID交互式开发则用e2b auth login生成~/.e2b/config.jsonCI/CD 环境优先通过E2B_API_KEY环境变量注入。十、提交前自检清单面向贡献者与 Agent将 AGENTS.md 十条规则落成一张可执行的核对表供提交 PR 前逐项勾选#检查项对应命令 / 文件1Node 依赖用 pnpm、Python 依赖用 uv 安装更新pnpm install/uv sync2格式化、Lint、类型检查全部通过pnpm run format pnpm run lint pnpm run typecheck3SDK 改动同步到 JS、Python sync、Python async 三处实现packages/js-sdk与packages/python-sdk/e2b/sandbox_{async,sync}/4未手改spec/如需更新bump pin 后make codegenspec/runtime-ref、spec/belt-ref、Makefile5补充受影响路径的测试并全量运行pnpm run test6CLI/JS SDK/Python SDK 公共接口变更已生成 changesetpnpm changeset7PR 描述包含面向用户变更的 usage examples—8已通过 Linear MCP 关联或创建 issue—9PR 描述与最终改动一致—10未泄露凭据本地凭据仅在.env.local或~/.e2b/config.jsonpackages/cli/src/user.ts小结E2B 仓库的 AGENTS.md 虽然篇幅极短却是一条高度可执行的工程约束它以 pnpm/uv 划定工具边界用 format/lint/typecheck 守住质量门禁用JS Python sync/async四象限约定保证多语言 SDK 行为一致用 Copybara commit pin make codegen的闭环让生成代码永远紧跟上游规范再用 changeset 与 PR 流程串联版本发布与变更沟通。对于想要参与 E2B 开发或借鉴其多语言 monorepo 治理模式的团队来说这份文件本身就是一个优秀的规范与实现一一对应的范例——每一条规则都能在仓库的脚本、配置与源码中找到落点这也是它能够被 AI Agent 直接理解和执行的根本原因。赞分享人工智能AI AgentAgent 沙箱后端【免费下载链接】E2BOpen-source, secure environment with real-world tools for enterprise-grade agents.项目地址https://gitcode.com/gh_mirrors/e2/E2B点击查看免费下载相关推荐E2B 仓库开发协作规范从依赖管理到代码生成的完整工程工作流E2B 仓库开发协作规范从依赖管理到代码生成的完整工程工作流 本篇文章以 E2B 仓库根目录的 CLAUDE.md https://link.gitcode.人工智能AI AgentAgent 沙箱后端三步移除 Windows AI 组件RemoveWindowsAI 完整使用指南三步移除 Windows AI 组件RemoveWindowsAI 完整使用指南 刚升级完 Windows 11你发现任务栏多了一个关不掉的 Copilot隐私合规应用安全Guzzle PSR-7 工程规范全解读懂 AGENTS.md 的代码与工具链约束Guzzle PSR 7 工程规范全解读懂 AGENTS.md 的代码与工具链约束 本文以 guzzlehttp/psr7 PSR 7 HTTP messa后端上一篇gh_mirrors/sh1/sh的代码评审自动化使用Bot进行初步检查下一篇GraphQL Code Generator 与 Apollo Client React 实战client preset 端到端类型安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考