Files
AgentLab/.env.example
T
ThearchyHelios dd57c12016 沙箱改用系统自带的隔离原语,移除 Docker 依赖
跑一段不可信代码不需要一整套容器运行时。macOS 用 Seatbelt
(sandbox-exec,系统自带),Linux 用 bubblewrap;冷启动从 ~250ms
降到 ~25ms,且不再需要装任何东西。

守住三件事:默认断网、家目录不可读、只有工作区可写。策略由内核
强制且对子进程继承——沙箱内 subprocess 出来的 cat 读家目录同样是
Operation not permitted。解释器改用 sys.base_prefix 下那个干净的
Python,沙箱代码因此 import 不到后端的 FastAPI、SQLAlchemy 和凭据
处理代码。

如实标注能力边界,不给虚假的安全感:
- macOS 不强制 RLIMIT_AS,内存限不住(实测设 256MB 仍可分配 900MB),
  health 接口申报 enforced 字段,界面把限不住的项划掉
- Seatbelt 是访问控制而非虚拟化:进程表共享,以当前用户身份运行
- bubblewrap 侧多隔离 PID/IPC/挂载视图,内存限额真实生效

顺带修两个 bug:
- LocalSandbox 设 RLIMIT_NPROC=64 会误伤——macOS 上它按 uid 全局
  计数,用户已有上千进程时沙箱内任何 fork 都失败,连 bash 都起不来
- 模型所属 provider 被停用时,原先静默换一家继续用原模型名,必然
  404 且报错指不到原因;改为直接说清是哪个 provider 被停用了

写 SBPL 的坑记在注释里:(deny default) 会让 Python 直接 SIGABRT,
改用「默认允许 + 精确拒绝」。

7 个模板全部回归通过。
2026-09-13 18:04:36 +08:00

41 lines
1.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 复制成 .env 后按需修改。所有项都可以留空——留空时用代码里的默认值。
# API Key 也可以不写在这里,启动后在「设置 → 模型接入」页面填,会加密存进本地 SQLite。
# ---- 服务 ----
# AGENTLAB_PORT=8000
# AGENTLAB_WEB_PORT=5273
# ---- 沙箱 ----
# auto(macOS→seatbelt,Linux→bubblewrap,都没有则 local)| seatbelt | bubblewrap | local | off
# AGENTLAB_SANDBOX_BACKEND=auto
# AGENTLAB_SANDBOX_TIMEOUT=30
# 内存限额仅在 Linux 生效,macOS 不强制 RLIMIT_AS
# AGENTLAB_SANDBOX_MEMORY_MB=512
# AGENTLAB_SANDBOX_NETWORK=false
# ---- 执行护栏 ----
# AGENTLAB_MAX_GRAPH_STEPS=200
# AGENTLAB_MAX_AGENT_STEPS=25
# AGENTLAB_MAX_CONCURRENT_RUNS=20
# ---- HTTP 工具 ----
# 逗号分隔的域名白名单;留空表示只拦内网地址,不限制公网域名
# AGENTLAB_HTTP_TOOL_ALLOWLIST=api.github.com,news.ycombinator.com
# ---- 落库加密密钥 ----
# 留空会自动生成并存到 data/.secret_key。换了这个值,之前存的 API Key 会解不开。
# AGENTLAB_SECRET_KEY=
# ---- 模型凭据(可选,首次启动会自动导入成 provider)----
# ANTHROPIC_API_KEY=sk-ant-...
# 用中转网关时填这两个(会以 Authorization: Bearer 发送)
# ANTHROPIC_BASE_URL=https://your-gateway.example.com/api
# ANTHROPIC_AUTH_TOKEN=...
# OPENAI_API_KEY=sk-...
# ---- 可选增强 ----
# 配了就用 Tavily 搜索,否则 web_search 退回 DuckDuckGo
# TAVILY_API_KEY=tvly-...
# 打开后知识库用 OpenAI embedding 代替本地哈希向量(检索质量更好)
# AGENTLAB_USE_OPENAI_EMBEDDINGS=1