安全沙箱
SkillFlaw 在涉及代码执行的场景下,会通过沙箱运行时处理任务,而不是让这些逻辑直接在后端主进程中执行。
在本地开发中,和开发者最相关的两条路径是:
- Skill 运行时执行
- MCP stdio 沙箱执行
对这两类能力,都应把沙箱视为本地开发环境的一部分,而不是可选附加项。
为什么要关注沙箱
SkillFlaw 可以运行用户编写的逻辑、解析依赖、创建临时运行工作目录,并和运行时环境交换文件。
因此,本地开发不应假设这些能力会在 SkillFlaw 主进程内部无限制执行,而应显式验证沙箱连接、运行镜像和资源限制是否符合预期。
Skill 沙箱
Skill 执行通过 Skill 沙箱服务运行,当前默认后端为 opensandbox。
本地开发至少应让以下连接配置与后端实际可访问的 OpenSandbox 服务保持一致:
_10SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_DOMAIN=localhost:8080_10SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_PROTOCOL=http_10SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_API_KEY=_10SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY=false_10SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_REQUEST_TIMEOUT_SECONDS=600
如果你还要验证依赖安装、导出文件或长时间运行脚本,也建议把运行限制显式写入 .env:
_10SKILLFLAW_SKILL_SANDBOX_CPUS=1.0_10SKILLFLAW_SKILL_SANDBOX_MEMORY_MB=512_10SKILLFLAW_SKILL_SANDBOX_PIDS_LIMIT=256_10SKILLFLAW_SKILL_SANDBOX_TIMEOUT_SECONDS=60_10SKILLFLAW_SKILL_SANDBOX_NETWORK=none_10SKILLFLAW_SKILL_SANDBOX_READ_ONLY_ROOT=true_10SKILLFLAW_SKILL_SANDBOX_TMPFS_ENABLED=true_10SKILLFLAW_SKILL_SANDBOX_WORKSPACE_ACCESS=rw_10SKILLFLAW_SKILL_SANDBOX_ENV_ALLOWLIST=[]
这些值应和你的本地验证目标一致。例如某个 Skill 在调试时必须访问外部服务,就不要默认假设沙箱已开放网络,而应显式调整沙箱网络模式。
MCP 沙箱
MCP 的 stdio 沙箱执行会复用 Skill 沙箱的 OpenSandbox 连接配置,因此本地后端必须能访问同一个 OpenSandbox 服务。
除此之外,MCP 还需要独立配置自己的沙箱镜像,因为运行镜像会按服务语言选择。
你可以按以下任一方式配置 MCP 沙箱镜像:
- 使用共享镜像:
SKILLFLAW_MCP_SANDBOX_IMAGE - 使用按语言拆分的镜像:
SKILLFLAW_MCP_SANDBOX_PYTHON_IMAGE、SKILLFLAW_MCP_SANDBOX_TYPESCRIPT_IMAGE - 使用镜像 repository/tag 组合:例如
SKILLFLAW_MCP_SANDBOX_PYTHON_IMAGE_REPOSITORY与SKILLFLAW_MCP_SANDBOX_PYTHON_IMAGE_TAG
示例:
_10SKILLFLAW_MCP_SANDBOX_BASE_DIR=~/.skillflaw/mcp-sandboxes_10SKILLFLAW_MCP_SANDBOX_PYTHON_IMAGE=ghcr.io/cwinux/skillflow_mcp_python:v1.0.1_10SKILLFLAW_MCP_SANDBOX_TYPESCRIPT_IMAGE=ghcr.io/cwinux/skillflow_mcp_ts:v1.0.1
MCP 沙箱镜像值必须是 Docker 镜像引用,不能填写 HTTP URL。
沙箱配置要求
在本地测试 Skill 或 MCP 行为前,请至少确认以下事项:
- OpenSandbox 已部署完成,并且 SkillFlaw 后端可以访问。
.env中的 OpenSandbox 域名、协议和 API Key 与真实服务一致。- 沙箱镜像与要验证的运行语言一致。
- CPU、内存、进程数、超时、文件系统和网络限制与验证范围匹配。
- 任何需要传入 Skill 沙箱的环境变量,都应显式写入
SKILLFLAW_SKILL_SANDBOX_ENV_ALLOWLIST。 - 如果你修改了沙箱镜像、镜像 repository/tag 配置,或 OpenSandbox 的
execd_image,都应先重启沙箱服务再重新测试。
建议的本地验证顺序
当开发范围包含沙箱能力时,建议按以下顺序执行:
- 启动或确认 OpenSandbox 服务可用。
- 在执行
make backend前完成.env中的沙箱配置。 - 确认目标语言对应的运行镜像已准备好。
- 确认后端到沙箱连通后,再进行 Skill 或 MCP 联调。
- 每次修改沙箱镜像或运行时配置后重新验证。