
dcode 如何启用远程沙箱隔离执行不受信任仓库中的代码【免费下载链接】deepagentsThe batteries-included agent harness.项目地址: https://gitcode.com/GitHub_Trending/de/deepagentsdeepagents-codedcode默认信任它运行所在的目录项目里的AGENTS.md、skills、.env、MCP 定义、hooks 和扩展都会在审批面板出现之前被读取并可能影响执行而 human-in-the-loop 审批只是拦截模型请求的工具调用并不隔离代码本身。仓库文档给出的结论很直接——不要在不受信任的目录里不带沙箱运行dcode对不受信任的仓库应使用远程沙箱让执行与你的机器隔离。本文说明如何用--sandbox把dcode的 shell 执行切换到远程沙箱提供商以及如何判断沙箱确实接管了执行。先明确隔离来自提供商而不是协议安全文档 对边界做了两层限定Deep Agents SDK 本身不提供 OS 级进程隔离对不受信任的工作负载沙箱后端BaseSandbox或容器/VM 隔离才是遏制边界。SandboxBackendProtocol只是 shell 执行能力契约不是隔离认证。dcode 把支持的沙箱服务视为受信任的第三方要求显式--sandbox才启用并建议单独评估每个提供商的租户隔离、身份、网络、数据保留和事故响应控制。也就是说启用--sandbox之后隔离到什么程度、能看到哪些文件和网络、凭证如何流转由提供商配置决定这一点文档明确要求你自己核实而不是由 dcode 或该协议保证。安装 dcode 与选择提供商安装来自 dcode 的 READMEcurl -LsSf https://langch.in/dcode | bash安装器默认包含 OpenAI、Anthropic、Gemini 模型提供商其他模型可通过DEEPAGENTS_CODE_EXTRAS指定。内置的沙箱提供商集合是agentcore、daytona、langsmith、modal、runloop、vercel。其中 LangSmith 随安装包自带agentcore、modal、daytona、runloop、vercel需要额外下载 extras来源ui.py 中的--sandbox帮助文本。各提供商的生命周期差异在 Sandbox and Partner Integrations 中有说明提供商关键行为来自文档Daytona不能按 ID 附加dcode 创建沙箱后反复探测echo ready若启动超时前未就绪则删除该沙箱Modal可创建或附加新沙箱工作目录为/workspace若工作区只提供了MODAL_TOKEN_ID或MODAL_TOKEN_SECRET其中一个dcode 会 fail closed不回退到更宽的服务端身份Runloop生命周期委托给伙伴包RunloopProvider请求的 ID 不存在时在 dcode 边界报SandboxNotFoundError集成测试要求RUNLOOP_API_KEYVercel创建python3.13沙箱30 分钟生命周期或按 ID 取回既有实例然后等待running进入终态或等待超时即启动失败就绪失败时 dcode 会停掉新建的沙箱AgentCore不支持按 ID 附加会在工作区上校验 AWS 凭证组合避免静默替换为服务端凭证LangSmith与 Runloop 一样对外声明 snapshot 支持提供商的解析顺序是config entry point built-in除内置集合外[sandboxes.providers]用户配置段和deepagents_code.sandbox_providersentry-point 组都可以声明提供商。注意class_path会在导入时于用户账户下执行 Python 顶层代码因此配置属于受信任的本地管理边界。启用远程沙箱不带--sandbox意味着本地执行。Run a dcode Session 对四个参数给出了定义# 交互式 TUI指定提供商 dcode --sandbox modal # 不带值的 --sandbox 使用用户配置中 [sandboxes].default dcode --sandbox # 附加到已存在的沙箱取决于提供商支持 dcode --sandbox runloop --sandbox-id 已有 devbox ID # snapshotlangsmith或 blueprintrunloop名称 dcode --sandbox runloop --sandbox-snapshot-name 名称 # 沙箱创建后执行的 setup 脚本 dcode --sandbox modal --sandbox-setup ./setup.sh这些选项的适用条件裸--sandbox要求用户配置里已设置[sandboxes].default否则解析失败直接用提供商名--sandbox daytona则不依赖该配置。--sandbox-id与--sandbox-snapshot-name都必须先有--sandbox提供商--sandbox-id在 Daytona、AgentCore 这类不支持按 ID 附加的提供商上会被直接拒绝。--sandbox-snapshot-name只对声明 snapshot 支持的提供商有效目前为 LangSmith 和 Runloop且不能与已有--sandbox-id组合冲突时启动报错例如提示Remove the --sandbox-id option.。--sandbox-setup在沙箱就绪后才执行脚本内容中${VAR}从活跃工作区环境而非服务器进程环境展开然后作为bash -c运行退出码非零会抛RuntimeError并中止启动。headlessCI/脚本用法同理在任务命令上追加--sandboxdcode -n run the focused tests --max-turns 8 --timeout 600 --sandbox modalheadless 模式有两条与沙箱场景相关的限制没有 shell allow-list 时 shell 访问被禁用受限列表才会启用 shellall表示无限制Auto 审批模式在沙箱后端会话中不可用。判断沙箱是否真正接管了执行文档给出的是失败即中止fail closed式的验证信号而不是运行后的某个成功日志依赖缺失会在启动阶段被拦截。verify_sandbox_deps()对元数据声明的后端模块做find_spec预检extras 未装时dcode 给出补救路径应用内/install或 CLIdcode install。启动阶段走到这一步说明对应提供商的伙伴包已就位。就绪探测失败会终止启动不会静默回退到宿主执行。Daytona 在超时前未通过echo ready探测会删掉沙箱Vercel 等待running终态或超时即启动失败Modal 凭证不完整直接 fail closed。因此命令没有报就绪错误并进入会话就是文档范围内可核对的接管信号。执行面收敛到沙箱后端。只有配置的后端实现了SandboxBackendProtocol时execute工具才可用否则直接报错ls、read、grep、glob都是生成 shell 命令或python3程序在环境内执行并解析输出。你可以在会话里让 agent 执行一条命令观察其输出经由该后端返回。沙箱是进程级的。一个 dcode 服务器进程内配置好的沙箱只能被第一个需要它的工作区占用第二个工作区会被拒绝而不是共享环境文档给出的做法是为另一个沙箱化工作区启动单独的服务器。清理语义可核对。上下文退出时只删除没有--sandbox-id创建出来的沙箱通过--sandbox-id附加的环境会被保留。如果你附加了既有实例会话结束后它仍在运行需要自行处理。限制与边界审批不等于隔离。HITL 仍然拦截execute、write_file、edit_file、task等副作用工具双向 Unicode/可疑 URL 警告只是审查辅助不是净化或防注入手段沙箱解决的是执行位置不解决提示注入。提供商是信任边界。文档明确 dcode 把支持的沙箱服务当作受信任第三方租户隔离、身份、网络、数据保留和凭证处理要按提供商单独评估仓库中的威胁模型文档属于实验性材料需要对部署版本自行验证。不要把协议当隔离证明。SandboxBackendProtocol的execute()接受完整 shell 命令文件删除只做了 shell 引号处理不限制可遍历路径真正收紧可访问文件与网络的是提供商侧配置。如果你的目标是 CI 里跑固定任务可参考 run-dcode-session 中 headless 的输出、轮次与超时控制涉及凭证与信任边界的操作检查项见 Security Boundaries and Runbook 的 operator checklist提供商适配器Daytona/Modal/Runloop/Vercel/QuickJS的完整行为矩阵在 Sandbox and Partner Integrations。【免费下载链接】deepagentsThe batteries-included agent harness.项目地址: https://gitcode.com/GitHub_Trending/de/deepagents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考