# 安全与隔离

4torm 本地运行,但仍有几道隔离与防护,防止 Agent 越权、并发污染、或密钥泄漏入库。

## 沙箱级别

Agent 文件操作受沙箱限制,按级别约束可访问路径:

| 级别 | 约束 |
|------|------|
| `strict` | 最严,仅限自身工作区 |
| `relaxed` | 默认,放宽到约定的可访问范围 |
| `unrestricted` | 不限制路径 |

在 Agent 配置中按需选择。执行器拿到的 `ctx`(`workspaceDir` / `projectDir` / `dataDir`)配合沙箱级别决定文件操作的合法范围。

## 危险工具约束

写 / 改 / 删文件、执行命令在注册表里标记为危险工具(`dangerous: true`)。它们的约束来自:

- **沙箱级别** —— 决定可访问的路径范围(见上)
- **气旋 `plan` 房间** —— 只放行只读工具,自动滤掉危险工具
- `run_command` 内置危险命令黑名单(`rm -rf`、`shutdown`、`mkfs` 等)+ 超时上限

> 早期「逐 Agent always / ask / never」弹窗权限机制已移除,危险工具不再有单独的二次确认弹窗。

## 敏感数据隔离

`data/` 下绝大多数运行时数据都在 `.gitignore` 中、不入仓库,含密钥的尤其敏感:

- `data/providers.json` —— LLM 提供商 API key
- `data/mcp/servers.json` —— MCP 配置(可能含密钥)
- `data/agents/`、`data/cyclone/`、`data/convection/sessions/`、`data/tradewind/`、`data/tide/` —— Agent 注册表与各模式的会话、工作区、运行记录

> 完整清单见[数据目录](./data-layout)页。

## Agent 并发控制

防止同一 Agent 被多处同时驱动导致状态(工作区 / 记忆)污染,有两层:

- **按-Agent 串行队列** —— 季风 / 对流 / 气旋等交互入口经一个按 Agent 的 FIFO 队列,同一 Agent 被多个区块同时驱动时**静默排队、依次执行**(而非报错),带重入检测避免自我死锁
- **busy 短锁** —— Agent 实际产出期间上锁,防止重入
- **潮汐**任务遇 Agent 被占用时按"最新覆盖"方式排队,空出后投递

> 这是"真有人这么用"时的兜底:不推荐把同一 Agent 同时挂多个区块,但即便如此也会顺序跑完、不丢状态。

## LLM 并发限制

全局最大 **3 路** 并发 LLM 调用(信号量队列),避免对提供商瞬时打满或被限流。超出的调用排队等待。

## MCP 工具名净化

注入 LLM 前,将 `mcp:服务:工具` 等含非法字符的函数名**可逆净化**(兼容 OpenAI 函数命名),LLM 返回工具调用时再还原为原名。既满足函数命名约束,又避免越权 / 串到别的服务器。详见 [MCP 接入](../extend/mcp)。
