--- name: mnote-vault description: > MNote AI 密码本(多 agent 唯一策略)。读密与 login/session:mnote-vault CLI + capability token(不依赖 mnote-web)。 禁扫 .mnote/vault 文件。 --- # MNote 密码箱 / AI 密码本 **SSOT**:`/home/lix/.agent-infra/vault-policy.md` **设计**:`design/12-vault/process/12-2-vaultd-local-token-agent-read-path-v1.md` ## 读密稳态(P0 · 不依赖 mnote-web) 二进制:`rust/target/debug/mnote-vault`(或 `cargo run -p mnote-vault --`)。 ```bash # 一次(人 / 安装):签发 token cargo run -q -p mnote-vault --manifest-path rust/Cargo.toml -- issue-token --agent paseo --ttl 90d # Agent 每次(已知 id) export MNOTE_VAULT_TOKEN_FILE="${MNOTE_VAULT_TOKEN_FILE:-$HOME/.config/mnote/vault-tokens/default.token}" mnote-vault list mnote-vault resolve --id --field password # 管道只要明文: mnote-vault resolve --id --field password --raw ``` | 命令 | 用途 | |------|------| | `doctor` | workspace / token / hmac 状态(无明文) | | `issue-token` | 签发 capability token(**不是** master key) | | `whoami` | 当前 token claims | | `list` / `get` | L0 选型;无密码明文 | | `resolve` | **唯一取密**;审计无 value | | `login` | 复用未过期 session,或 api_first 出站登录并写回 session | | `session` | 浏览器/人机验证后回写 Cookie(不启 3000) | | `serve` | 可选 UDS vaultd;CLI 默认 sock→内嵌 fallback | **禁止**:为读密 / login / session 去 `auth-e2e` / 起 3000 / 用 cookie 调 `/api/vault/ai/*`。 `scripts/mnote-vault-cli.js` 的 web 路径仅调试 UI。 ## 登录稳态(P1d · 同样不依赖 mnote-web) 需要外站 cookie 时: ```bash # 优先复用已有 session(无 HTTP 出站) mnote-vault login --id # human_required / CF:chrome-bridge 登录后回写 mnote-vault session --id --cookie-header 'name=value; …' --source human_bridge # 强制重新 api_first 登录(忽略未过期 session) mnote-vault login --id --force-refresh ``` - `resolve` / `session` 写盘:本地 `.mnote/vault/**`(core)。 - `login` 的 `api_first` 仅对目标站出站 HTTP;**不**经 mnote-web。 - Cloudflare / captcha → `mode=human_required` + `humanInstructions.cli`,完成后 `session` 回写。 ## 硬规则 1. 禁 file 扫 `.mnote/vault/**` 2. 聊天不贴 password / cookie / token 3. Token `0600`;故障先 `issue-token`,不要默认起 3000