凭据金库(Vault)
凭据金库是 Sigil 的核心。所有 Token、密码、私钥都在这里集中托管,明文不出本机。
设计目标
- 明文不进文件系统:写入瞬间就交给 OS 密钥环
- 明文不进 UI:录入后再也看不到原始值
- 明文不进日志:所有日志路径都经过脱敏
- 明文不进网络:除非是你主动调用的能力执行所需
凭据类型
| 类型 | 适用平台 | 必填字段 | 特殊校验 |
|---|---|---|---|
github_token | GitHub | Token | 前缀 ghp_ / github_pat_ |
gitee_token | Gitee | Token | 长度校验 |
gitcode_token | GitCode | Token | 长度校验 |
gitlab_token | GitLab(含自建实例) | Token / 实例地址 | 长度校验 |
http_api | 任意 HTTP 服务 | 基地址 / Header 名 / Key | URL 格式 |
s3_compatible | Cloudflare R2 / MinIO / 腾讯云 COS / 阿里云 OSS / AWS S3 | Endpoint / Access Key / Secret / Region | 字段格式校验 |
maven_central | Sonatype Central Portal | 命名空间 / Portal 账号口令 / GPG 密钥与口令 | 字段完整性 |
code_signing | Windows 与 macOS 签名 | 签名身份 / 证书 / 各类口令 | 字段完整性 |
mqtt_broker | 自建或云 MQTT broker | 主机 / 端口 / TLS / 账号口令 | 连接可达性(可测) |
mail_authcode | 邮箱(授权码登录) | 邮箱 / 授权码 / 服务器 | 收发可达性(可测) |
mail_oauth | 邮箱(OAuth 登录,如 Outlook) | 授权后自动续期 | 授权流程内校验 |
generic_password | 通用密码、许可证、Wi-Fi 口令 | 密码(可带网址 / 备注 / TOTP 种子) | 强度提醒 |
custom | 自定义结构 | JSON | JSON Schema 校验(可选) |
每种类型决定了它能被哪些能力使用。平台还会被自动推断 —— 比如调 git_repo_list 时传一条 gitee_token 凭据,Sigil 就知道该打 Gitee 的接口,你不必再指定平台。
存了什么,AI 才看得到什么
金库里没存某类凭据时,对应的那组工具不会出现在 AI 的工具列表里。 详见 MCP Server · 按凭据渐进披露。
存储结构
┌─────────────────────────────────────────────┐
│ Vault 一条记录 │
├─────────────────────────────────────────────┤
│ id uuid │
│ name "github-personal" │
│ type "github_token" │
│ tags ["dev", "readonly"] │
│ ciphertext_ref "sigil_cred_xxxxx" ─────┐ │
│ created_at 2026-05-29T10:00:00Z │ │
│ updated_at 2026-05-29T10:00:00Z │ │
│ last_used_at 2026-05-29T10:32:11Z │ │
│ expires_at 2026-06-28T10:00:00Z │ │
│ scope_policy {whitelist: [...]} │ │
└──────────────────────────────────────────┼──┘
↓
OS 密钥环(Windows 凭据管理器)
┌─────────────────────────────┐
│ Service: com.agilefr.sigil │
│ Account: sigil_cred_xxxxx │
│ Secret: AES-256-GCM 密文 │
└─────────────────────────────┘SQLite 里只有元数据 + 一个指向密钥环条目的引用。即使 SQLite 文件被人复制走,也得不到明文(密钥环密文 + AES 主密钥都不在文件系统里)。
使用控制(Scope Policy)
每条凭据可以配置"哪些能力可以用我":
全部能力(默认)
最宽松。任何能力调用时都可能命中这条凭据。适合个人开发、信任 AI 客户端的场景。
白名单
只允许指定能力使用。最常用:
github-personal(只读 Token)
├ ✅ git_commits_list 允许:查提交 / 分支 / tag
├ ✅ http_request 允许:调用 GitHub REST API
└ ❌ 其他能力 禁止黑名单
允许大部分能力,禁止个别。典型场景:
github-prod(生产仓库的 GitHub Token)
├ ❌ git_repo_delete 禁止:这条凭据永远不用来删仓库
├ ❌ git_push 禁止:只读侦查,不许改动远端
└ ✅ 其他能力 允许(列仓库、查提交、看 CI 都放行)Scope Policy 在每次能力调用前由 Sigil 强制校验。客户端无法绕过——它根本不知道有没有这道闸门。
标签策略
标签是组织凭据的轻量工具。建议双维度:
- 环境:
prod/staging/dev/local - 身份:
personal/work/client-xxx
搜索框(Vault 列表顶部)支持按"名称 + 标签"模糊匹配。当凭据超过 30 个时,标签的价值开始显现。
生命周期管理
| 事件 | Sigil 行为 |
|---|---|
| 距过期 7 天 | 首页右上角铃铛提醒 |
| 距过期 1 天 | 红色高亮 + 列表置顶 |
| 已过期 | 默认禁用(仍可手动延期) |
| 过期 30 天 | 建议删除提示 |
| 90 天未使用 | 标记为"可能闲置" |
Sigil 不会自动轮换 Token——每家服务商的 Token 生成 API 都不一样,自动化需要单独适配。Sigil 的定位是提醒 + 协助,由你手动到源头重置。
批量导入
设置 → 数据导入 支持从以下来源批量导入:
| 来源 | 说明 |
|---|---|
GitHub CLI (gh auth) | 扫描 ~/.config/gh/hosts.yml |
.env 文件 | 解析 KEY=value 行,预览后用户挑选 |
Sigil 备份文件(.sigil-backup) | 跨机器迁移 |
导入过程:
- 解析候选 Token 列表(不立即落库)
- 用户在 UI 里勾选要导入的项 + 重命名 + 调整标签
- 确认后批量加密落库
源文件(如 .env)不会被 Sigil 修改或删除。
删除是不可逆的
删除一条凭据时:
- 清除 OS 密钥环中对应密文
- 清除 SQLite 元数据
- 不进回收站
如果这条凭据正在被某些能力配置引用(比如自定义 HTTP 模板默认用它),删除时会先提示并要求重新关联。
没有"找回"机制——这是设计。需要的话,用 导出 提前备份。
备份与迁移
导出
设置 → 数据导出:
- 选择凭据范围(全部 / 按标签 / 按类型)
- 输入主密码(用户自定义,不和 OS 密钥环挂钩)
- 生成
.sigil-backup文件(PBKDF2 + AES-256-GCM 包裹)
主密码不在备份文件里,需要你单独记住。
导入
新机器装好 Sigil → 设置 → 数据导入 → 选 .sigil-backup → 输入主密码 → 凭据进金库。
跨平台
备份文件格式是与 OS 无关的——Windows 上导出的文件可以在 macOS 上导入(当 macOS 版本上线后)。
