Go to file
voson 1f7984d798
Some checks failed
Secrets CLI - Build & Release / 质量检查 (fmt / clippy / test) (push) Successful in 57s
Secrets CLI - Build & Release / Build (aarch64-apple-darwin) (push) Successful in 33s
Secrets CLI - Build & Release / 版本 & Release (push) Successful in 2s
Secrets CLI - Build & Release / Build (x86_64-unknown-linux-musl) (push) Successful in 44s
Secrets CLI - Build & Release / 发布草稿 Release (push) Successful in 2s
Secrets CLI - Build & Release / Build (x86_64-pc-windows-msvc) (push) Has been cancelled
feat: AI 优先的 search 增强与结构化输出 (v0.4.0)
- search: 新增 --name、-f/--field、-o/--output、--summary、--limit、--offset、--sort
- search: 非 TTY 自动输出 json-compact,便于 AI 解析
- search: -f secret.* 自动解锁 secrets
- add: 支持 -o json/json-compact 输出
- add: 重构为 AddArgs 结构体
- 全局: 各子命令 after_help 补充典型值示例
- output.rs: OutputMode 枚举 + TTY 检测
- 文档: README/AGENTS 面向 AI 的用法,连接串改为 <host>:<port>

Made-with: Cursor
2026-03-18 17:17:43 +08:00

secrets

跨设备密钥与配置管理 CLI基于 Rust + PostgreSQL 18。

将服务器信息、服务凭据统一存入数据库,供本地工具和 AI 读取上下文。

安装

cargo build --release
# 或从 Release 页面下载预编译二进制

配置数据库连接(首次使用需执行一次,之后在该设备上持久生效):

secrets config set-db "postgres://postgres:<password>@<host>:<port>/secrets"

AI Agent 快速指南

这个 CLI 以 AI 使用优先设计。核心路径只有一条:读取用 search,写入用 add / update

第一步:发现有哪些数据

# 列出所有记录摘要(默认最多 50 条,安全起步)
secrets search --summary --limit 20

# 按 namespace 过滤
secrets search -n refining --summary --limit 20

# 按最近更新排序
secrets search --sort updated --limit 10 --summary

--summary 只返回轻量字段namespace、kind、name、tags、desc、updated_at不含完整 metadata 和 secrets。

第二步:精确读取单条记录

# 精确定位namespace + kind + name 三元组)
secrets search -n refining --kind service --name gitea

# 获取完整记录含 secretsJSON 格式AI 最易解析)
secrets search -n refining --kind service --name gitea -o json --show-secrets

# 直接提取单个字段值(最短路径)
secrets search -n refining --kind service --name gitea -f secret.token
secrets search -n refining --kind service --name gitea -f metadata.url

# 同时提取多个字段
secrets search -n refining --kind service --name gitea \
  -f metadata.url -f metadata.default_org -f secret.token

-f secret.* 会自动解锁 secrets无需额外加 --show-secrets

输出格式

场景 推荐命令
AI 解析 / 管道处理 -o json-o json-compact
写入 .env 文件 -o env --show-secrets
人类查看 默认 textTTY 下自动启用)
非 TTY管道/重定向) 自动 json-compact
# 管道直接 jq 解析(非 TTY 自动 json-compact
secrets search -n refining --kind service | jq '.[].name'
secrets search -n refining --kind service --name gitea --show-secrets | jq '.secrets.token'

# 导出为可 source 的 env 文件(单条记录)
secrets search -n refining --kind service --name gitea -o env --show-secrets \
  > ~/.config/gitea/config.env

完整命令参考

# 查看帮助(包含各子命令 EXAMPLES
secrets --help
secrets search --help
secrets add --help
secrets update --help
secrets delete --help
secrets config --help

# ── search ──────────────────────────────────────────────────────────────────
secrets search --summary --limit 20                        # 发现概览
secrets search -n refining --kind service                  # 按 namespace + kind
secrets search -n refining --kind service --name gitea     # 精确查找
secrets search -q mqtt                                     # 关键词模糊搜索
secrets search --tag hongkong                              # 按 tag 过滤
secrets search -n refining --kind service --name gitea -f secret.token   # 提取字段
secrets search -n refining --kind service --name gitea -o json --show-secrets  # 完整 JSON
secrets search --sort updated --limit 10 --summary         # 最近改动
secrets search -n refining --summary --limit 10 --offset 10  # 翻页

# ── add ──────────────────────────────────────────────────────────────────────
secrets add -n refining --kind server --name my-server \
  --tag aliyun --tag shanghai \
  -m ip=47.117.131.22 -m desc="Aliyun Shanghai ECS" \
  -s username=root -s ssh_key=@./keys/server.pem

secrets add -n refining --kind service --name gitea \
  --tag gitea \
  -m url=https://gitea.refining.dev -m default_org=refining \
  -s token=<token>

# ── update ───────────────────────────────────────────────────────────────────
secrets update -n refining --kind server --name my-server -m ip=10.0.0.1
secrets update -n refining --kind service --name gitea --add-tag production -s token=<new>
secrets update -n refining --kind service --name mqtt --remove-meta old_port --remove-secret old_key

# ── delete ───────────────────────────────────────────────────────────────────
secrets delete -n refining --kind service --name legacy-mqtt

# ── config ───────────────────────────────────────────────────────────────────
secrets config set-db "postgres://postgres:<password>@<host>:<port>/secrets"
secrets config show    # 密码脱敏展示
secrets config path    # 打印配置文件路径

# ── 调试 ──────────────────────────────────────────────────────────────────────
secrets --verbose search -q mqtt
RUST_LOG=secrets=trace secrets search

数据模型

单张 secrets 表,首次连接自动建表;同时自动创建 audit_log 表,记录所有写操作。

字段 说明
namespace 一级隔离,如 refiningricnsmart
kind 记录类型,如 serverservice(可自由扩展)
name 人类可读唯一标识
tags 多维标签,如 ["aliyun","hongkong"]
metadata 明文描述信息ip、desc、domains 等)
encrypted 敏感凭据ssh_key、password、token 等MVP 阶段明文存储,预留加密字段

-m / --meta 写入 metadata-s / --secret 写入 encryptedvalue=@file 从文件读取内容。

审计日志

addupdatedelete 操作成功后自动向 audit_log 表写入一条记录,包含操作类型、操作对象和变更摘要(不含 secret 值)。操作者取自 $USER 环境变量。

-- 查看最近 20 条审计记录
SELECT action, namespace, kind, name, actor, detail, created_at
FROM audit_log
ORDER BY created_at DESC
LIMIT 20;

项目结构

src/
  main.rs          # CLI 入口clap含各子命令 after_help 示例
  output.rs        # OutputMode 枚举 + TTY 检测
  config.rs        # 配置读写(~/.config/secrets/config.toml
  db.rs            # 连接池 + auto-migratesecrets + audit_log
  models.rs        # Secret 结构体
  audit.rs         # 审计日志写入audit_log 表)
  commands/
    add.rs         # upsert支持 -o json
    config.rs      # config set-db/show/path
    search.rs      # 多条件查询,支持 -f/-o/--summary/--limit/--offset/--sort
    delete.rs      # 删除
    update.rs      # 增量更新(合并 tags/metadata/encrypted
scripts/
  seed-data.sh     # 导入 refining / ricnsmart 全量数据

CI/CDGitea Actions

推送 main 分支时自动fmt/clippy 检查 → musl 构建 → 创建 Release 并上传二进制。

首次使用需配置 Actions 变量和 Secrets

# 需有 ~/.config/gitea/config.envGITEA_URL、GITEA_TOKEN、GITEA_WEBHOOK_URL
./scripts/setup-gitea-actions.sh
  • RELEASE_TOKENSecretGitea PAT用于创建 Release 上传二进制
  • WEBHOOK_URLVariable飞书通知可选

详见 AGENTS.md

Description
Secrets management project
Readme 4 MiB
2026-04-10 17:14:37 +08:00
Languages
Rust 66%
HTML 29.5%
Shell 2.1%
Python 2%
JavaScript 0.4%