名称: confidant
描述: 为 AI 代理提供安全的密钥交接与凭证设置向导。当您需要从用户处获取敏感信息(API 密钥、密码、令牌)或需要将凭证保存到配置文件时使用。切勿通过聊天询问密钥——请使用 Confidant。
主页: https://github.com/aiconnect-cloud/confidant
user-invocable: true
disable-model-invocation: false
元数据:
{
'openclaw':
{
'emoji': '🔐',
'requires': { 'bins': ['curl', 'jq', 'npm'] },
'files': ['scripts/*']
}
}
安全地从人类接收密钥——无聊天暴露、无复制粘贴、无历史泄露。
这是一个需要人工介入的流程。您无法自行检索密钥。
❌ 请勿自行 curl/fetch 密钥 URL — 它是供人类使用的网页表单
❌ 请勿跳过分享 URL — 用户必须在聊天中收到它
❌ 请勿轮询 API 来检查密钥是否到达 — 脚本会处理此事
❌ 未经确认收到密钥,请勿继续操作
✅ 分享 URL → 等待 → 确认成功 → 静默使用密钥
运行一次以下命令以全局安装 CLI(避免缓慢的 npx 调用):
bash {skill}/scripts/setup.sh
{skill}是包含此SKILL.md文件的目录的绝对路径。代理可以在运行时解析它:```bash
SKILL_DIR=$(find "$HOME" -name "SKILL.md" -path "/confidant/skill" -exec dirname {} \; 2>/dev/null | head -1)然后使用:bash "$SKILL_DIR/scripts/setup.sh"
```
您需要用户的 API 密钥?只需一条命令:
bash {skill}/scripts/request-secret.sh --label "OpenAI API Key" --service openai
脚本处理所有事情:
~/.config/openai/api_key(权限设为 600)并退出如果用户是远程的(不在同一网络),请添加 --tunnel:
bash {skill}/scripts/request-secret.sh --label "OpenAI API Key" --service openai --tunnel
这将自动启动一个 localtunnel(无需账户)并返回一个公共 URL。
输出示例:
🔐 安全链接已创建!
URL: https://gentle-pig-42.loca.lt/requests/abc123
(隧道: localtunnel | 本地: http://localhost:3000/requests/abc123)
保存至: ~/.config/openai/api_key
请将上方 URL 分享给用户。密钥将在提交后或 24 小时后过期。
分享 URL → 用户打开 → 提交密钥 → 脚本保存到磁盘 → 完成。
如果没有指定 --service 或 --save,脚本仍会轮询并将密钥打印到标准输出(适用于管道传输或手动检查)。
request-secret.sh — 请求、接收并保存密钥(推荐)# 保存到 ~/.config/<service>/api_key(约定)
bash {skill}/scripts/request-secret.sh --label "SerpAPI Key" --service serpapi
# 保存到显式路径
bash {skill}/scripts/request-secret.sh --label "Token" --save ~/.credentials/token.txt
# 保存 + 设置环境变量
bash {skill}/scripts/request-secret.sh --label "API Key" --service openai --env OPENAI_API_KEY
# 仅接收(不自动保存)
bash {skill}/scripts/request-secret.sh --label "Password"
# 远程用户 — 自动启动隧道
bash {skill}/scripts/request-secret.sh --label "Key" --service myapp --tunnel
# JSON 输出(用于自动化)
bash {skill}/scripts/request-secret.sh --label "Key" --service myapp --json
| 标志 | 描述 |
|---|---|
--label <text> |
网页表单上显示的描述 (必填) |
--service <name> |
自动保存到 ~/.config/<name>/api_key |
--save <path> |
自动保存到显式文件路径 |
--env <varname> |
设置环境变量(需要 --service 或 --save) |
--tunnel |
如果未检测到隧道则启动 localtunnel(适用于远程用户) |
--port <number> |
服务器端口(默认:3000) |
--timeout <secs> |
启动最大等待时间(默认:30 秒) |
--json |
输出 JSON 而非人类可读文本 |
check-server.sh — 服务器诊断(无副作用)bash {skill}/scripts/check-server.sh
bash {skill}/scripts/check-server.sh --json
报告服务器状态、端口、PID 和隧道状态(ngrok 或 localtunnel)。
request-secret.sh 脚本会阻塞直到密钥被提交(它会持续轮询)。大多数代理运行时(包括 OpenClaw 的 exec 工具)都会强制执行超时,这将在用户有时间提交之前杀死进程。
请始终在 tmux 会话内运行 Confidant:
# 1. 在 tmux 中启动服务器
tmux new-session -d -s confidant
tmux send-keys -t confidant "confidant serve --port 3000" Enter
# 2. 在第二个 tmux 窗口中创建请求
tmux new-window -t confidant -n request
tmux send-keys -t confidant:request "confidant request --label 'API Key' --service openai" Enter
# 3. 与用户分享 URL(从 tmux 输出中读取)
tmux capture-pane -p -t confidant:request -S -30
# 4. 用户提交后,检查结果
tmux capture-pane -p -t confidant:request -S -10
为什么不使用
exec? 代理运行时通常会在 30-60 秒后杀死进程。由于脚本等待人工输入(可能需要几分钟),它会在完成前收到 SIGKILL 信号。tmux 使进程独立保持活动状态。
如果您的代理平台支持无超时的长时间运行后台进程,则使用 exec 运行 request-secret.sh 是可行的。但如有疑问,请使用 tmux。
curl Confidant API — 使用脚本--tunnel--tunnel--service — 这是最简洁的约定代理可以根据退出代码进行程序化错误处理:
| 代码 | 常量 | 含义 |
|---|---|---|
0 |
— | 成功 — 密钥已接收(已保存到磁盘或打印到标准输出) |
1 |
MISSING_LABEL |
未提供 --label 标志 |
2 |
MISSING_DEPENDENCY |
curl、jq、npm 或 confidant 未安装 |
3 |
SERVER_TIMEOUT / SERVER_CRASH |
服务器启动失败或在启动期间崩溃 |
4 |
REQUEST_FAILED |
API 返回空 URL — 请求未创建 |
≠0 |
(来自 CLI) | confidant request --poll 失败(过期、未找到等) |
使用 --json 时,所有错误都包含一个 "code" 字段,便于程序化分支:
{ "error": "...", "code": "MISSING_DEPENDENCY", "hint": "..." }
交互过程应如下所示:
用户:你能设置我的 OpenAI 密钥吗?
代理:我将为您创建一个安全链接,以便您安全地提交 API 密钥。
[运行:request-secret.sh --label "OpenAI API Key" --service openai --tunnel]
代理:这是您的安全链接 — 请在浏览器中打开并粘贴您的密钥:
🔐 https://gentle-pig-42.loca.lt/requests/abc123
该链接将在您提交后或 24 小时后过期。
用户:好了,我已经提交了。
代理:✅ 已接收并保存到 ~/.config/openai/api_key。一切就绪!
⚠️ 注意:代理发送 URL 并等待。它不会尝试自行访问该 URL。
confidant request --poll,该命令会阻塞直到密钥被提交--service 或 --save 时:密钥保存到磁盘(chmod 600),然后在服务器上销毁--service/--save 时:密钥打印到标准输出,然后在服务器上销毁| 提供商 | 需要账户 | 如何操作 |
|---|---|---|
| localtunnel (默认) | 否 | --tunnel 标志或 npx localtunnel --port 3000 |
| ngrok | 是(免费版) | 如果在同一端口上运行则自动检测 |
脚本会自动检测两者。如果两者都未运行且传入了 --tunnel,则启动 localtunnel。
适用于脚本未涵盖的边缘情况:
# 仅启动服务器
confidant serve --port 3000 &
# 启动服务器 + 创建请求 + 轮询(单条命令)
confidant serve-request --label "Key" --service myapp
# 在运行的服务器上创建请求
confidant request --label "Key" --service myapp
# 提交密钥(代理到代理)
confidant fill "<url>" --secret "<value>"
# 检查特定请求的状态
confidant get-request <id>
# 检索已交付的密钥(通过密钥 ID,而非请求 ID)
confidant get <secret-id>
如果
confidant未全局安装,请先运行bash {skill}/scripts/setup.sh,或使用npx @aiconnect/confidant作为前缀。
⚠️ 仅当脚本无法满足您的需求时,才使用直接 CLI。