{"skill":{"slug":"1password-browser-login","displayName":"1Password Browser Login","summary":"从 1Password 取出账号密码，用无头浏览器自动登录目标网站，然后根据用户需求操作页面。 适用场景：用户说\"帮我登录 xxx 然后做 yyy\"、\"用 1Password 登录 xxx\"、\"从 1Password 取 xxx 的账号登录并下载数据/截图/抓取内容\"等。 前提：系统已安装 1Password C...","description":"---\nname: 1password-browser-login\ndescription: |\n  从 1Password 取出账号密码，用无头浏览器自动登录目标网站，然后根据用户需求操作页面。\n  适用场景：用户说\"帮我登录 xxx 然后做 yyy\"、\"用 1Password 登录 xxx\"、\"从 1Password 取 xxx 的账号登录并下载数据/截图/抓取内容\"等。\n  前提：系统已安装 1Password CLI（op），且 OP_SERVICE_ACCOUNT_TOKEN 已配置在 ~/.zshrc 中。\n---\n\n# 1Password Browser Login\n\n从 1Password 取凭证，无头浏览器自动登录，执行用户指定任务。\n\n## 前提检查\n\n```bash\nsource ~/.zshrc 2>/dev/null && op whoami 2>&1\n```\n\n若失败，提示用户配置 `OP_SERVICE_ACCOUNT_TOKEN`。\n\n## 执行流程\n\n### Step 1：解析意图\n\n从用户消息提取：\n- `ITEM_NAME`：1Password 中的 item 名称\n- `TASK`：登录后要做什么\n\n`ITEM_NAME` 不明确时，列出所有可用 item 让用户选：\n```bash\nsource ~/.zshrc 2>/dev/null && op item list --format json 2>&1\n```\n\n### Step 2：取凭证\n\n服务账户必须指定 vault，先列出：\n```bash\nsource ~/.zshrc 2>/dev/null && op vault list --format json 2>&1\n```\n\n取 item 详情：\n```bash\nsource ~/.zshrc 2>/dev/null && op item get \"<ITEM_NAME>\" --vault \"<VAULT_NAME>\" --format json 2>&1\n```\n\n从 JSON 中提取：\n- `fields[]` 中 `purpose=USERNAME` 的 `value` → username\n- `fields[]` 中 `purpose=PASSWORD` 的 `value` → password\n- `urls[0].href` → 登录页 URL\n\n⚠️ 安全规则：\n- 禁止将 password 打印到回复或日志\n- 禁止将凭证写入任何文件\n- 回复用户只说\"已从 1Password 取得凭证\"\n\n### Step 3：浏览器登录\n\n```\nbrowser open url=<登录页URL>\nbrowser snapshot → 找用户名输入框、密码输入框、登录按钮的 ref\nbrowser act kind=type ref=<用户名框> text=<username>\nbrowser act kind=type ref=<密码框> text=<password>\nbrowser act kind=click loadState=networkidle ref=<登录按钮>\nbrowser snapshot → 确认已离开登录页（登录成功）\n```\n\n### Step 4：执行任务\n\n| 任务类型 | 操作 |\n|---------|------|\n| 截图 | `browser screenshot` → 保存到 `./downloads/` → `MEDIA:./downloads/文件名` 发给用户 |\n| 抓页面数据 | `browser snapshot` → 解析内容 → 整理回复 |\n| 下载文件 | `browser act kind=click` 触发下载 → `exec` 找到文件移到 workspace → `MEDIA:` 发送 |\n| 导航后操作 | `browser navigate url=<目标页>` → 再截图/抓数据/下载 |\n\n结果文件保存路径：`./downloads/YYYY-MM-DD_<网站名>_<描述>.<扩展名>`\n\n## 错误处理\n\n| 错误 | 处理 |\n|------|------|\n| item 不存在 | 列出所有 item，让用户确认名称 |\n| vault 无权限 | 提示在 1Password 后台给服务账户授权该 vault |\n| 登录失败（密码错误） | 截图当前页，告知用户 |\n| 需要 2FA | 告知不支持，需用户手动处理 |\n| CAPTCHA | 截图，告知用户需手动完成验证 |\n| 找不到输入框 | 截图，让用户描述表单位置 |\n\n## 示例\n\n**用户：** 帮我登录 MyApp 然后截个首页截图\n1. ITEM_NAME=\"MyApp\"，TASK=\"截首页截图\"\n2. 取凭证 → browser 登录 → screenshot → 发给用户\n\n**用户：** 用 1Password 登录 GitHub 下载最新 release\n1. ITEM_NAME=\"GitHub\"，TASK=\"下载最新 release\"\n2. 取凭证 → 登录 → 导航到 releases 页 → 点击下载 → 发文件\n","tags":{"latest":"1.1.0"},"stats":{"comments":0,"downloads":341,"installsAllTime":0,"installsCurrent":0,"stars":0,"versions":2},"createdAt":1778234086843,"updatedAt":1779076220371},"latestVersion":{"version":"1.1.0","createdAt":1778234503696,"changelog":"移除示例中的真实网址和隐私内容，补全 YAML frontmatter，符合 AgentSkills 规范","license":"MIT-0"},"metadata":null,"owner":{"handle":"tujinsama","userId":"s177vqraepq71bz6ynj98rrtdd83j0pd","displayName":"Ricky","image":"https://avatars.githubusercontent.com/u/82147388?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780090761979}}