本页内容

安全与权限

文档首页 · 配置 · 排障 · English

Sigil 的设计目标是让 tool-backed coding 可见、可 review。模型可以提出读取、搜索、编辑、shell 命令、MCP 调用、code-intelligence action 和计划任务步骤;Sigil 决定这些动作能直接执行、需要审批,还是必须拒绝。

最短说明

Permission Modes

Sigil 的 permission layer 常见结果:

Outcome含义
allowtool call 不弹 approval modal,直接运行。
askTUI 展示 approval card。
denytool call 被拒绝,模型收到结构化 denial。

推荐默认配置:

[permission]
mode = "manual"

这让普通仓库检查可以继续,同时保留对修改性或高风险动作的 review。

通常不需要审批的动作

当只读工具留在 workspace 内时,通常可以直接运行:

具体行为仍由 config、tool category、trust class 和 permission rules 决定。

通常需要 review 的动作

这些动作应预期出现 approval card:

如何阅读 Approval Card

允许工具前检查:

  1. Summary:工具即将执行的动作。
  2. Subject:涉及的文件路径、命令、MCP server 或外部资源。
  3. Files:受影响文件。
  4. Diff:新增、删除或修改的行。
  5. Trust context:尤其是 MCP server trust class 和 secret-egress 行为。
  6. Action:只有摘要和 diff 符合你的意图时才 allow。

如果 diff 太大,deny 并要求 Sigil 拆小改动。

Workspace Confinement

文件工具会限制在已解析的 workspace root 内,并拒绝:

常规配置:

[workspace]
root = "."

. 会解析成启动 sigil 时所在目录。

External Directories

External-directory access 默认关闭:

[permission.external_directory]
enabled = false
default_mode = "ask"
rules = []

只在明确需要时启用,并保持 external_directory.default_mode = "ask",除非外部路径低风险且稳定。临时 shell scratch 文件应使用 bashterminal_start 提供的 $SIGIL_SCRATCH_DIR;系统 temp 目录(如 /tmp、macOS /private/tmp、Windows %TEMP%)仍需要 external-directory 权限。

Shell Commands

默认情况下,bash 使用本地执行后端,不提供 OS sandbox。Sigil 保守处理 shell execution:

审批前检查 command、working directory 和预期副作用。

macOS 上可以在 ~/.sigil/sigil.toml 中为非交互命令显式启用 macos_seatbelt backend:

[execution]
strategy = "sandbox"

[execution.sandbox]
backend = "macos_seatbelt"

这个 backend 会通过 /usr/bin/sandbox-exec 运行命令,允许读取文件系统、限制写入到命令工作目录,并且不在 sandbox profile 中开放网络访问。当前本地 handoff 路径可以在所选 backend 支持时,为非交互 shell、PTY、MCP stdio 和受信任 plugin hook command 记录 sandbox coverage。它不会让远端工具、所有容器/daemon 场景或不支持的平台获得等价 sandbox。

如需让非交互命令通过容器执行,可以显式配置 Docker:

[execution]
strategy = "sandbox"

[execution.sandbox]
backend = "docker"
profile = "build_offline"
container_image = "rust:1.94.1"

Sigil 不会隐式选择或拉取容器镜像。选择 Docker backend 但未配置 execution.sandbox.container_image 时,配置解析、启动和 doctor 检查会 fail closed。Docker backend 会 bind mount 命令工作目录,将 offline profile 映射为 --network none,并且只报告它预期能强制的 capability。PTY、MCP、plugin、远端和 daemon-style 路径使用各自的 coverage label;不支持时应 fail closed,而不是静默退回本地执行。

MCP Trust

MCP server 可以暴露 tools、resources、prompts 和 elicitation requests。每个 server 都应显式配置 trust policy:

[mcp_servers.trust]
trust_class = "self_hosted"
approval_default = "ask"
egress_logging = true
allow_secrets = false
pin_version = false

approval_default = "ask"allow_secrets = false 开始。只有确认 server 能读取、写入和发送什么之后,再放宽这些设置。

Web Search 安全

websearch 属于本地 Read 加网络 Read。Configured 与 bundled client route 会经过普通 tool permission 和 query pre-egress disclosure;remote MCP 的每条 HTTP message 还会单独获得 transport disclosure。Provider-hosted search 按 provider request 独立授权,并在该 run 内隐藏 client websearch tool。Configured search binding 一旦被选择就具有权威性:失败时不会静默回退到 bundled Exa。

公网 NetworkEndpoint 与 workspace 外文件路径是不同 subject,不进入 permission.external_directory。网络 Allow 下只读 websearch / webfetch 不逐次确认;网络 Ask 下,Allow session 只放宽同一 tool 的 NetworkEffect::Read,不会覆盖 source trust、网络写入/Unknown、不同 tool 或 Deny。无论是否复用 grant,destination guard、逐消息 disclosure、durable audit 与 budget 都继续执行。

搜索结果必须按不可信输入处理,其中可能包含 prompt injection、恶意 markup、误导性陈述或危险 URL。Sigil 会清洗并限制返回内容,但模型仍应验证重要事实,并且只 fetch 当前 session 已证明的 URL/source capability。搜索摘要已足够时不得默认对多个结果批量 fetch;只有用户明确要求读取页面或缺少一个具体必要事实时才进入 webfetch

Secrets

Provider 凭据优先使用环境变量。先选择 provider,再使用 provider 认证映射中的准确变量;不存在对所有 provider 通用的 API key 环境变量。

通过 Quick Setup 或 /config 保存 API key 会把它以明文写入 sigil.toml。私有本地配置可以这样做,但不要提交真实 secret。

doctor 会报告 credential 来源,不会打印 secret 值。

本机 HTTP/SSE 服务

应把 sigil serve 视为有权限的本机 control surface。V1 只接受 loopback address,并在 bind 前拒绝关闭或缺失 bearer authentication。请把 SIGIL_HTTP_TOKEN 保存在环境变量中,使用高熵 value,只通过 Authorization header 传递;不要把它写进 URL、提交到仓库的 config、日志或截图。Sigil 只打印 token environment-variable name,绝不打印 token value。

只有 GET /health 不要求认证,且不会返回 session data。OpenAPI、disclosure replay、session/run query、command、cancel、approval 和 SSE 都要求 bearer token。服务不使用 cookie 或 wildcard CORS,也不声称支持 remote access 或 multi-user isolation。每个 run 的 approval mode 仍须显式选择:deny 阻止 gated tools;allow_readonly 只自动允许 read-only work;ask 等待 authenticated approval route。

Recovery And Audit

默认 session 和 control records 是 Sigil 用户态 state 目录下的 append-only JSONL。

用户需要知道:

建议默认值

从这里开始:

[permission]
mode = "manual"

[permission.external_directory]
enabled = false
default_mode = "ask"
rules = []

MCP:

[mcp_servers.trust]
approval_default = "ask"
egress_logging = true
allow_secrets = false

然后只调整你确实需要的窄行为。