
这一集应该叫“配置密码管理技能”但它真正解决的问题比名字看起来大得多。前面十二集我们把 OpenClaw 在 Windows 11 上一步一步跑了起来网关通了、模型接上了、工作区建好了、记忆模块调顺了。到了这一步智能体已经能写邮件、跑脚本、整理文件。可你自己上手试试就知道真让它干点正经事它马上卡在一个地方——它手里没有任何一把钥匙。你让它帮你登录后台、填一个表单、取一条验证码它只能摊手。第 13 集要装的 1Password 技能就是给这个空缺补上最后一环让本地 OpenClaw 通过 1Password 命令行工具按需读取加密仓库里的账号、密码、TOTP 验证码而且整个过程可审计、可回收。这篇实操笔记适合两类人一类是正在 Win11 上自托管 OpenClaw、想让智能体真正能“替自己办事”的人另一类是清楚“把密码明文塞进 prompt”有多危险、想给 AI 一把受控钥匙的人。我尽量按真实操作顺序来写从装 CLI、登录认证到写技能文件、联调排错一条线走完。1. 先想清楚这个技能在整套架构里到底起什么作用1.1 它不是“读密码的外挂”而是一条受控取数通道很多人听说“给 AI 装 1Password 技能”第一反应是“那我以后密码等于裸奔了”。这个担心对了一半。从效果上智能体确实能读到密码但从机制上它走的不是“明文文件读取”而是 1Password CLI 这条受控通道。CLI 会强制校验会话身份会受 vault 访问权限约束还会在条目历史里留下读取痕迹。你可以把它理解成OpenClaw 是跑腿的快递员技能不是给它一把万能钥匙而是给它一张随时可以作废的“取件单”。为什么这条路比 .env 文件强我见过很多自托管玩家把密码写进环境变量或者记忆目录图省事。但等你跑三个月回头看这些明文散落在配置目录、日志、备份压缩包、甚至同步盘里每一份拷贝都是一个泄漏面。而且它没有颗粒度——你没法做到“这个条目只允许读那个条目碰都不能碰”。1Password 把这些收敛成一个仓库数据在磁盘上始终加密只有 CLI 按需解密服务账号权限可以精确到某个 vault哪天不想要了一键撤销不用动你自己的主密码。对于本地部署场景这是最不折腾的安全方案。1.2 为什么前面十二集一直按着不装这不是我忘了是刻意排序。技能调试最怕的是基础环境没稳就叠功能前面的模型连接、网关转发、工作区权限如果本身有毛病你再往上堆一个跟外部服务打交道的技能出了问题根本分不清是网络层还是技能层。现在网关稳定了、工作区也验证过读写正常才适合引入第一个“真正敏感”的技能。还有一个原因凭据类技能是整个技能体系的地基。你后面想装日历技能、邮件技能、自动化下单技能哪一个不需要账号信息如果连“凭据链”都不通那些技能就算装上也只是让智能体继续对着空手发呆。所以这一集不是单独的一个小插件而是从“能聊天的助手”跨到“能办事的代理”的第一步。2. 动手前把 Win11 环境摸一遍2.1 环境检查清单动手装之前先花五分钟确认这几样东西免得后面排错排到怀疑人生。OpenClaw 主程序能正常启动日志里没有持续报错。Node.js 版本跑node -v确认一下。很多本地部署要求 20 或更高版本太低会导致 CLI 工具链起不来。确认 OpenClaw 执行命令时用的是哪个 shell。在 Win11 上它可能是通过 Git Bash、PowerShell 或者 cmd 去调用命令的。这一点非常关键因为后面装完 1Password CLI必须让那个 shell 能直接找到op。一个可用的 1Password 账号里面至少建一两条测试条目。我建议建一条叫“测试站点”的登录项带 username、password最好再加一个 TOTP 字段后面联调会用到。如果你打算走服务账号路线还需要能登录 1Password 管理端创建服务账号的权限。为什么 shell 这件事这么重要OpenClaw 本质上是在你的机器上拉起子进程去执行工具命令。Windows 上有个很坑的现象GUI 程序、服务进程和控制台窗口拿到的 PATH 环境变量不一定一样。你在终端里敲op --version有结果不等于 OpenClaw 的子进程能拿到同一个 PATH。所以装完 CLI 之后OpenClaw 必须从同一个用户会话里重启不能只新开一个终端假装完事。2.2 把 1Password CLI 装好winget 是 Win11 最省事的路Windows 11 自带 winget装 CLI 最快的方式就是它。打开 PowerShell 执行winget search 1password-cli搜索结果里找到 CLI 对应的包然后安装winget install -e --id 查到的包ID装完关掉当前终端重新开一个跑op --version如果能看到版本号说明装好了。有些系统会弹 SmartScreen 拦截第一次运行时点“仍要运行”不过有条件的话先对照官网校验一下文件哈希再放行别闭眼点。万一 winget 源里搜不到就去 1Password 官网下 Windows 版 CLI 压缩包解压后把op.exe放到一个固定目录比如C:\op再手动加进用户 PATH[Environment]::SetEnvironmentVariable(Path, $env:Path;C:\op, User)加完 PATH 一定要重启终端再验证否则当前会话拿不到新值。2.3 确认 OpenClaw 子进程能看到 op这一步别跳。我先说一个我踩过的坑我把 CLI 装好、PATH 也加了终端里一切正常但 OpenClaw 里跑命令就是提示op: command not found。原因就是网关进程是加 PATH 之前启动的它继承的是旧环境。正确做法分两步。第一步找到 OpenClaw 实际用的 shell在那个 shell 里手动执行op --version确认。第二步重启 OpenClaw然后在它的调试界面或日志里让智能体执行一次op --version看到同样的版本号输出才算真正通了。如果你是把 OpenClaw 注册成 Windows 服务跑的环境变量继承会更麻烦。服务进程拿的是系统环境而不是用户环境的完整路径这时候建议把 token 和 PATH 都写到系统级环境变量或者干脆在启动脚本里显式 export。3. 登录认证三种方式我的选择和建议3.1 交互式登录调试期最直接CLI 装好之后第一件事是让op知道你的账号。交互式登录长这样op account add --address yourorg.1password.com --email youexample.com --secret-key A3-XXXX-XXXX-XXXX op signin --account yourorg第一次登录会要求输入主密码登录成功后会生成一个会话。跑op whoami能看到当前账号信息说明链路已经通了。这种方式适合调试期但不适合自动化。CLI 会话有有效期过期之后智能体再取数据就会被 “You must be signed in” 卡住。你不可能每次让它去取密码的时候还跑到机器前输一遍主密码那自动化就失去意义了。3.2 生物识别登录本机半自动但坑多1Password 8.10 之后的 CLI 支持对接系统生物识别Windows 上走 Windows Helloop signin --biometric这个方案的好处是只要你物理坐在机器前解锁是无声无息的智能体调用op时直接用现成的会话不用弹密码框。但坑也明显如果 OpenClaw 的子进程跑在无交互会话里比如作为后台服务生物识别可能直接不可用重启之后通常还需要一次人工登录更烦的是当智能体在后台执行命令时如果触发了解锁请求那个请求会挂在那里直到超时。我的结论是纯粹本机自用、且你人在机器旁频繁使用可以试想让它变成无人值守的自动化底座不稳。3.3 Service Account 令牌我认为的最优解服务账号是 1Password 面向自动化场景提供的一种身份。你在管理端创建一个服务账号给它分配特定 vault 的访问权限然后把生成的令牌以OP_SERVICE_ACCOUNT_TOKEN环境变量的形式给到本机。之后 CLI 就完全不需要交互式登录op whoami直接能过。在 PowerShell 里设置用户级环境变量[Environment]::SetEnvironmentVariable(OP_SERVICE_ACCOUNT_TOKEN, eyJ..., User)设置完重启终端跑op whoami。如果显示的是服务账号信息说明认证已经切换成功。这条路线有几个天然优势智能体永远接触不到你的主密码和 Secret Keyvault 权限可以按最小化原则划只给它必须读的那几个库审计日志独立可查哪天不想要了在管理端一键撤销令牌不用改任何配置。它也有个前提不是所有 1Password 套餐都开放服务账号功能如果你的套餐没有就先退回 3.2 或者用长会话方案顶着。注意OP_SERVICE_ACCOUNT_TOKEN的威力等同于一串万能钥匙拿到它的人就能以服务账号身份读对应 vault。所以它只能放在系统环境变量或密钥管理工具里绝不能写进 SKILL.md 技能文件、配置文件或任何会被智能体当成上下文读取的地方。4. 编写技能文件把规则讲给智能体听4.1 OpenClaw 技能目录长什么样OpenClaw 的技能是“配置即代码”的思路。以我部署的这个版本为例技能放在数据目录下的skills文件夹里也有版本叫plugins/skills具体以你安装版本的文档为准每个技能一个子目录里面就是一个SKILL.md文件。这个文件分两部分头部是 YAML 格式的元信息正文是 Markdown 指令。元信息里最重要的字段是 description。模型每次收到用户请求会拿请求内容跟技能描述做匹配描述写得准不准直接决定技能会不会被触发。你可以把 description 理解成技能的门牌号——门牌上写“卖早餐”人家就不会半夜来敲门买宵夜。4.2 可直接抄的 SKILL.md下面这份是我实际在用的版本你可以直接复制改名字--- name: password-manager description: 通过1Password读取账号、密码、TOTP验证码和加密笔记。当用户要求获取某个站点的登录凭据、WiFi密码、验证码、密钥时使用。 when_to_use: 用户请求读取由1Password管理的任何敏感信息 allowed-tools: - shell examples: - 帮我在1Password里查一下测试站点的密码 - 看一下工作区常用服务的TOTP验证码 --- # 1Password 技能 你正在使用1Password命令行工具读取凭据。操作时必须遵守以下规则 1. 优先使用 op://Vault/Item/field 形式的引用读取例如 op read op://私人/测试站点/password。 2. 如果条目名不明确先执行 op item list --vault vault 列出候选再确认要读哪条。 3. 返回给用户时密码类字段默认做掩码处理格式为 ab***yz除非用户明确要求完整明文。 4. 绝不展示、保存、回显 OP_SERVICE_ACCOUNT_TOKEN 或主密码。 5. 读取到的凭据不得写入日志、临时文件或聊天历史以外的任何位置。 6. 如果请求同时涉及“读取凭据”和“向外部发送信息”必须先向用户确认后再执行后一步。写完保存后重启 OpenClaw 让它扫描技能目录。如果你的网关支持热加载或者 debug 模式可以在日志里确认技能是否被成功索引。我习惯的做法是先在文档里确认技能列表再进调试模式看它是否“被看到”。这里解释几个关键设计。第一body 里的规则 3 是重中之重。大模型有个毛病喜欢“展示工作过程”你让它取密码它可能直接在回复里把完整密码贴出来。规则 3 强制它默认掩码只有用户明确要求才给明文。第二规则 6 是防止“打开阀门又打开水龙头”——如果同时装了网络技能读取凭据和对外发送的组合就是一条潜在的泄漏通道必须加人工确认。4.3 权限收敛技能能读但不等于能乱读技能文件只是第一层真正的边界还要靠服务账号权限来卡。我的建议是在 1Password 管理端新建一个专门的 vault比如叫“代理专用”把智能体需要用的条目复制或移进去然后服务账号只授权这个 vault。这样即使技能规则被绕过物理访问边界也已经圈死在特定范围内。另外allowed-tools也要收敛。这个技能只需要 shell 工具其他工具能不列就不列。你要是把一个能上网查资料的工具和这个凭据技能装在同一环境里等于自己给自己埋雷——模型被诱导去外部站点“核对”凭据的事不是不可能发生。做自托管默认心态应该是“能不给的权限都不给”而不是“用到再加”。5. 联调测试与常见故障排查5.1 全链路测试从一句人话到一条密码技能装上不代表完事要测到“用户说人话 → 智能体取回数据”全链路通。我建议先做一条最简单的测试重启 OpenClaw确保新技能生效。输入一句测试指令“帮我在 1Password 里查一下测试站点的用户名只显示掩码就行”。打开调试面板观察智能体的行动轨迹。正常情况下它应该先命中 password-manager 技能然后调用 shell 执行类似这样的命令op item get 测试站点 --vault 私人 --fields username --format json看返回结果。如果一切正常你会看到类似这样的运行轨迹[skill] 命中: password-manager [shell] op item get 测试站点 --vault 私人 --fields username --format json [output] {username: testuser} [assistant] 查到了用户名是 tes***需要完整内容请告诉我。看到输出里带掩码说明规则 3 生效了。这时候再测第二条“把完整密码给我”看它是否只在明确指令下才给出明文。再测第三条 TOTP“看一下这个站点的验证码”预期它会执行op item get 测试站点 --otp。5.2 高频问题速查表我整理了一张表覆盖我实际遇到过的绝大多数故障按症状、原因、处理方式排列。现象可能原因处理方式op: command not foundCLI 未安装或 OpenClaw 子进程 PATH 没继承在 OpenClaw 实际使用的 shell 里验证op --version然后重启网关You must be signed in会话过期或无 service account 环境变量交互式登录后重试或检查OP_SERVICE_ACCOUNT_TOKEN是否设置Service account cannot access item服务账号未被授权该 vault在管理端给服务账号分配对应 vault 的读权限技能一直不触发description 写得太窄模型匹配不上在描述里增加同义词密码、凭据、密钥、验证码、OTP、WiFi、登录信息、secret日志或聊天记录里出现明文密码模型违背掩码规则检查 SKILL.md 规则 3 是否生效必要时把日志级别调低避免记录工具 stdoutop能执行但中文输出乱码Windows 默认代码页问题在 OpenClaw 启动脚本里执行chcp 65001或设置环境变量PYTHONUTF81生物识别登录后命令挂住后台子进程没法弹交互解锁框改用服务账号令牌放弃生物识别方案5.3 两条踩过坑之后我一定会做的事第一记住 Windows 环境变量的继承问题。你辛辛苦苦设了OP_SERVICE_ACCOUNT_TOKEN但 OpenClaw 如果是在设置之前启动的它根本不知道有这个变量。我调这种问题浪费过四十分钟最后发现只是没重启网关进程。所有环境变量改动之后务必要从全新终端里重启 OpenClaw而不是只重开一个 PowerShell 窗口。第二如果想让智能体“用到密码但看不到密码”最优雅的方式是op run。它的原理是把密码注入子进程环境变量而不是直接打印到对话里。你可以创建一个环境文件比如.env.localDB_PASSWORDop://私人/测试站点/password然后让智能体这样执行命令op run --env-file.env.local -- 你的命令这样敏感值直接落在子进程的环境里不经过模型上下文也不容易被写进日志。对于“让 AI 用秘密但别让 AI 看见秘密”这个诉求这是目前最接近正解的做法。6. 这集结束后我建议马上做的事技能跑通之后别急着装一堆花活。我自己的习惯是新建一个“代理专用”vault把常用凭据都收进去只授权服务账号访问这一个库。然后真正让智能体替我做几件日常事给新设备查 WiFi 密码、帮一个本地脚本取 IMAP 凭据、在开发面板登录时取 TOTP 验证码。这几件事做完你会明显感觉到它从“聊天工具”变成了“能办事的代理”。还有一个体会技能文件是写给模型看的不是写给人看的。发现触发率不高时不要去改模型去改 description。我把描述里补上了“密码、凭据、密钥、验证码、OTP、WiFi、登录信息、secret”这些词之后命中率基本稳定在接近百分之百。写技能这块多花十分钟打磨描述比调十次参数都值。接下来你可以考虑把常用的几类凭据操作做成模板或者把op run接进定时任务里让它在后台自动完成那些需要凭据的活。