Provider key manager — rotate and sync API keys across multi-agent workspaces
Scanned 9/4/2026
Install to Claude Code
npx -y skills add NeverSight/skills_feed --skill provider-key-manager --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Provider Key Manager?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/neversight-provider-key-manager)More formats (shields.io, HTML) on the badges page.
---
name: provider-key-manager
description: Provider key manager — rotate and sync API keys across multi-agent workspaces
---
# Provider Key Manager
> 一条命令更换供应商 API Key,全员生效,零遗漏。
## 痛点
OpenClaw 多 agent 架构下,每个 agent 都有独立的 `models.json`,更换一个 provider key 需要:
1. 修改 `openclaw.json` 全局配置
2. 修改 13+ 个 agent 的 `models.json`
3. 更新 `pass` 存储
4. 重启 Gateway
5. 逐个验证
**一个 key 要改 15+ 处,漏改一个就报错。**
## 方案:环境变量统一引用
OpenClaw 原生支持 `${ENV_VAR}` 语法引用环境变量:
```json
// openclaw.json
{
"env": {
"vars": {
"ZAI_API_KEY": "actual-key-value-here"
}
},
"models": {
"providers": {
"zai": {
"apiKey": "${ZAI_API_KEY}", // ← 引用环境变量,不硬编码
"baseUrl": "https://open.bigmodel.cn/api/coding/paas/v4"
}
}
}
}
```
**核心原则**:
- API Key 只存在 `env.vars` 中(单一真相源)
- 所有 provider 的 `apiKey` 用 `"${ENV_VAR}"` 引用
- 各 agent 的 `models.json` **删除 apiKey 字段**,继承全局 provider
- 换 key = 改一个 env var + 重启,全员自动生效
## 触发词
`换key`, `更换key`, `provider key`, `API key 更换`, `模型key`, `key管理`, `供应商密钥`
## 命令
### 1. 审计当前配置
```bash
python3 ~/clawd/skills/provider-key-manager/scripts/manager.py audit
```
扫描所有 agent 的 models.json,报告:
- ✅ 使用 `${ENV_VAR}` 引用的 provider
- ❌ 硬编码 apiKey 的 provider
- ⚠️ key 值不一致的 agent
### 2. 迁移到环境变量模式
```bash
python3 ~/clawd/skills/provider-key-manager/scripts/manager.py migrate [--provider zai] [--dry-run]
```
自动执行:
1. 将 `openclaw.json` 中的硬编码 key 移入 `env.vars`
2. 替换 provider apiKey 为 `"${ENV_VAR}"`
3. 从各 agent models.json 中**删除** apiKey 字段(继承全局)
4. 更新 `pass` 存储
5. 生成迁移报告
### 3. 更换 API Key
```bash
python3 ~/clawd/skills/provider-key-manager/scripts/manager.py update <provider> <new-key> [--base-url <url>]
```
一条命令完成:
1. 更新 `env.vars` 中的 key
2. 如有 agent 仍硬编码,同步更新
3. 更新 `pass` 存储
4. 测试 key 可用性
5. 输出重启命令
### 4. 测试 Key 可用性
```bash
python3 ~/clawd/skills/provider-key-manager/scripts/manager.py test <provider>
```
对指定 provider 发送最小请求,验证 key 有效。
### 5. 查看 Provider 总览
```bash
python3 ~/clawd/skills/provider-key-manager/scripts/manager.py status
```
显示所有 provider 的 key 来源、baseUrl、模型列表。
## Provider ↔ 环境变量映射
| Provider | 环境变量 | pass 路径 |
|----------|---------|----------|
| zai | `ZAI_API_KEY` | `api/zai` |
| xingjiabiapi | `XINGJIABIAPI_KEY` | `api/xingjiabiapi` |
| xai | `XAI_API_KEY` | `api/xai` |
| xingsuancode | `XINGSUANCODE_KEY` | `api/xingsuancode` |
| moonshot | `MOONSHOT_API_KEY` | `api/kimi` |
| minimax | `MINIMAX_API_KEY` | `api/minimax` |
| xinyuan | `XINYUAN_API_KEY` | `api/xinyuan` |
| boluobao | `BOLUOBAO_API_KEY` | `api/boluobao` |
| google | `GOOGLE_API_KEY` | `api/google-ai-studio` |
## 架构图
```
┌─────────────────────────────────┐
│ openclaw.json │
│ ┌───────────────────────┐ │
│ │ env.vars │ │
│ │ ZAI_API_KEY: "xxx" │ ← 单一真相源 (Single Source of Truth)
│ │ XAI_API_KEY: "yyy" │ │
│ └───────────┬───────────┘ │
│ │ ${ZAI_API_KEY} │
│ ┌───────────▼───────────┐ │
│ │ models.providers.zai │ │
│ │ apiKey: "${ZAI_API_KEY}" │
│ │ baseUrl: "https://..." │ │
│ └───────────────────────┘ │
└─────────────────────────────────┘
│ 继承
┌─────────┼─────────┐
▼ ▼ ▼
agent/ agent/ agent/
main/ ops/ code/ ...
models.json models.json
(无 apiKey,继承全局)
```
## 注意事项
1. **env.vars 中的 key 是明文** — 但 openclaw.json 已在 .gitignore,不会被 commit
2. **per-agent models.json 仍需保留 provider 结构** — 只是删除 apiKey 字段
3. **迁移后换 key 流程**:`manager.py update zai <new-key>` → Gateway 重启 → 完成
4. **回退方案**:迁移前自动备份所有 models.json 到 `/tmp/provider-key-backup/`
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!