Skip to content

能力体系(Capabilities)

**能力(Capability)**是 Sigil 暴露给 AI 客户端的"动作单元"。每个能力背后是一段 Rust 代码或一个 HTTP 模板,它知道如何使用某种凭据完成某类操作。

心智模型

AI 客户端           Sigil                  目标服务
   │                  │                      │
   │ 我要 git push    │                      │
   ├─────────────────►│                      │
   │                  │ 查找 git_mutate 能力 │
   │                  │ 查找 github_token    │
   │                  │ 注入 Authorization   │
   │                  ├─────────────────────►│
   │                  │                      │ 执行 push
   │                  │◄─────────────────────│
   │                  │ 脱敏响应             │
   │◄─────────────────│                      │
   │ push 成功        │                      │

能力是"凭据 + 操作"的桥。AI 知道"有哪些操作可以请求",但不知道具体哪条凭据被用、不知道凭据明文。

内置能力清单

读类(无副作用)

能力用途用到的凭据类型
git_query查询分支 / 提交 / taggithub_token / gitee_token / gitcode_token
db_query执行 SELECT / WITHdb_conn
ssh_query远程只读命令(system info / ps / df)ssh_key
http_requestGET / HEAD(按目标 host 自动选 http_apihttp_api / Git Token
health_check快速诊断凭据有效性(不返回数据)任意
sys_info本机系统信息(不需凭据)
capability_list列出当前已注册的能力

写类(有副作用)

能力用途默认行为
git_mutatepush / pull / merge / branch / tag需调用方在请求里声明意图
db_executeINSERT / UPDATE / DELETE / DDL需调用方在请求里声明意图
ssh_exec远程任意命令黑名单(rm -rf / 等永久拦截)
http_request (POST/PUT/DELETE/PATCH)改动型 HTTP客户端需明确指定方法
password_generate强密码 / 助记词 / TOTP 生成不需凭据

管理类(不直接执行业务)

能力用途
__temp_grant__临时授权一条凭据(参见 临时授权
__temp_revoke__撤销已签发的临时授权
audit_query查询审计日志

__ 前缀的是内部管理能力,默认对所有客户端隐藏;需要在客户端 Token 范围里显式勾选才暴露。

自定义 HTTP 模板

Sigil 内置能力覆盖了 80% 通用场景,剩下 20% 通常是"调用我们公司内部 API"——为此提供 HTTP 模板机制,无需写一行 Rust

一个例子

公司内部对账系统有个接口 POST https://billing.acme.internal/api/refund,需要 X-Service-Token 头鉴权。

在 Sigil → 能力 → 新增 HTTP 模板:

名称:    refund-acme
方法:    POST
URL:     https://billing.acme.internal/api/refund
Headers:
  X-Service-Token: ${cred:acme-internal-svc.value}
  Content-Type: application/json
Body:
  {
    "order_id": "${input:order_id}",
    "reason":   "${input:reason}",
    "operator": "${meta:caller}"
  }
默认凭据:acme-internal-svc
范围:    白名单客户端

占位符语法:

占位符含义
${cred:<name>.<field>}引用金库里某条凭据的某字段
${input:<name>}调用方传入的参数
${meta:caller}当前调用方的 Token 名(用于审计追溯)
${meta:now}当前 ISO 时间戳

保存后,这条 HTTP 模板就出现在 Claude / Cursor 的工具列表里,叫做 refund-acme。AI 可以像调内置能力一样调它,全程不知道 acme-internal-svc 的明文 Token。

占位符替换时机

  • 客户端发起请求
  • Sigil 校验白名单 + Scope Policy
  • 解密 acme-internal-svc → 拿到明文 Token
  • 替换所有 ${cred:...} 占位符
  • 真的发起 HTTP 请求
  • 响应回来后,把所有可能的凭据明文用 [REDACTED:xxx] 占位
  • 返回给客户端

明文只在第 4-5 步之间出现在内存里(< 1 ms),用完立刻清零。

能力的两层确认

写类能力(git_mutate / db_execute / ssh_exec 等)默认走两层确认:

  1. 协议层声明:调用方必须在请求里明确写出 mode: "mutate"——AI 想"顺手"执行修改是不行的,必须明确
  2. 客户端确认:Claude Code 等 MCP 客户端会在 UI 里弹"是否同意执行 X"——这是客户端层面的安全网

如果你信任某个客户端做了完整确认,可以在 Sigil → 设置 → 信任策略中把这个客户端标为"免二次确认"。

能力注解(readOnlyHint / destructiveHint)

每个能力在 tools/list 里都带 MCP 行为注解,供客户端做分级审批:

注解含义客户端典型行为
readOnlyHint: true只读、无副作用(各 *_list / *_query / 自省类)可免二次确认、失败可安全重试
destructiveHint: true破坏性(删除 / 覆盖 / 不可逆,如删分支、force-push、取消 run、改 GITHUB_TOKEN 权限)强确认

注解是给客户端的 UX 提示,不是安全保证——真正的拦截靠 require_confirm + Scope Policy + 危险命令黑名单。

危险命令拦截

ssh_exec 内置一个永久黑名单

rm -rf /
rm -rf /*
:(){:|:&};:
mkfs.*
dd if=/dev/zero of=/dev/sd*
chmod -R 000 /

这些命令在任何上下文都不可能是合理的——直接在 Sigil 内拒绝,客户端层面再怎么确认也过不去。

类似地,db_execute 拒绝:

  • 不带 WHEREDELETE / UPDATE
  • DROP DATABASE / TRUNCATE(除非显式 mode: "destructive"

AI Kill Switch

Sigil 状态栏右下角有一个红色拨杆——禁用所有 AI 能力执行

启用后:

  • MCP Server 仍在监听,但所有能力调用立即返回 kill_switch_active
  • 金库 UI 仍可正常使用(人能看、能管理)
  • 审计日志记录"Kill Switch 期间被拦截 N 次"

适用场景:

  • 上线敏感时段(不希望任何代理执行)
  • 应急响应(怀疑某个 Token 泄漏,先全停再排查)
  • 合规审查窗口

下一步

让 AI 帮你干活,但永远拿不到你的密钥