mcpField
O
one-password

one-password

github.com/steipete安全7.4k199 次安装1 周前更新
代码仓库

关于 one-password

指导使用 1Password CLI 处理凭据任务的 skill,涵盖服务账户访问、需获同意的桌面访问,以及发布密钥管理规则。

主要功能

  1. 01服务账户访问流程
  2. 02桌面访问的同意检查
  3. 03凭据查询与字段读取指引
  4. 04发布凭据整理规则
  5. 05共享 tmux 任务流程

适用场景

  1. 01读取 Molty 保管库中的凭据
  2. 02经同意处理 Molty 之外的凭据
  3. 03查找仓库所需的发布密钥

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/steipete/agent-scripts --skill one-password

安装后在 Claude Code 中输入/one-password确认已加载。

附带文件references/cli-examples.mdreferences/get-started.md

详细介绍

1Password CLI

安装(仅使用稳定路径 — 绝不使用 brew)

在 Peter 的所有 Mac 上,op 都位于 ~/bin/op,并有兼容性符号链接 /opt/homebrew/bin/op -> ~/bin/op。不要通过 Homebrew cask 安装或升级:其带版本号的 Caskroom 路径会导致 op 每次升级时都获得新的 macOS TCC 身份,从而再次向 Peter 弹出“App 数据保护”对话框。更新方法:从 https://app-updates.agilebits.com/product_history/CLI2 下载官方签名 pkg,运行 pkgutil --check-signature(AgileBits 2BUA8C4S2C)和 pkgutil --expand-full,然后运行 install -m 755 <payload>/op ~/bin/op。稳定路径可以避免路径/版本身份变化,但无法让 macOS 授权在不同 op 进程间保持有效。

其他事项请遵循官方 CLI 入门步骤。不要猜测安装命令。

参考资料

访问路径(严格按顺序)

1. 服务账号 — 默认方式,不会弹出提示。 OP_SERVICE_ACCOUNT_TOKEN 由 ~/.profile(Codex 管理的代码块)导出,权限范围为 Molty 保管库(读写)。每条服务账号命令都必须设置 OP_LOAD_DESKTOP_APP_SETTINGS=false 和 OP_BIOMETRIC_UNLOCK_ENABLED=false。前者可阻止读取设置文件;后者是 1Password 官方提供的应用集成覆盖选项。

  • 必须使用以下命令形式:OP_LOAD_DESKTOP_APP_SETTINGS=false OP_BIOMETRIC_UNLOCK_ENABLED=false OP_SERVICE_ACCOUNT_TOKEN="$OP_SERVICE_ACCOUNT_TOKEN" op item get "<item>" --vault Molty ...。
  • 必须指定 --vault Molty;即使令牌有效,省略此参数也会失败。
  • 此路径上绝不要运行 op signin,也绝不要使用 --account。这两种方式都会通过桌面应用进行操作,并向 Peter 弹出授权提示。--account + 令牌 = 交互式路径,始终是错误做法。
  • 旧别名 MOLTY_OP_SERVICE_ACCOUNT_TOKEN 仅作备用;可能已过期。
  • 如果令牌缺失/过期或读取项目失败:报告确切错误并询问。不要悄悄回退到桌面应用。

2. 桌面应用 — 仅在明确同意后使用。 用于确实不在 Molty 中的项目(个人 Private 保管库、OpenClaw-Core)。不自动回退。

  • 先暂停并在聊天中询问:项目名称 + 需要它的原因。等待肯定答复。
  • 如果主机不是主设备、是虚拟机或无头主机,请将此流程转到匹配的个人或工作托管环境中的当前实体工作站;参见“远程路由 — 仅限桌面路径”。
  • 获得同意后:在共享的 op-work 会话中使用一个任务窗口(见下文)。在该窗口中,先运行 unset OP_SERVICE_ACCOUNT_TOKEN MOLTY_OP_SERVICE_ACCOUNT_TOKEN;已导出的服务令牌会覆盖 --account my.1password.com,并悄悄将读取范围限制在 Molty。然后运行一次 op signin --account my.1password.com,并尽可能将整个任务的所有交互式读取集中在同一个窗口中,通过一次 op run/op inject 调用完成。复用 TTY 可以减少 1Password 授权提示,但无法让 macOS“App 数据”授权在新的 op 进程间保持有效。
  • 不要预先发送姓名牌/sag 提醒。只有在 Peter 已在聊天中批准解锁,且 1Password 提示随后一直无人响应时,才发出声音提醒(sag)。

已知的 Molty 条目(跳过发现)

标题完全匹配;直接读取服务账户。无需枚举。

用途条目标题字段
OpenAI(OpenClaw/i18n 任务)AI API Key - OpenAI - OPENAI_API_KEY - OpenClawOPENAI_API_KEY
OpenAI(可用访问权限)AI API Key - OpenAI - OPENAI_API_KEY - Serviceable AccessOPENAI_API_KEY
Anthropic(实时测试)AI API Key - Anthropic - ANTHROPIC_API_KEY - OpenClaw Live TestsANTHROPIC_API_KEY
Anthropic(clawdbot)AI API Key - Anthropic - ANTHROPIC_API_KEY - ClawdbotANTHROPIC_API_KEY
GeminiAI API Key - Google Gemini - GEMINI_API_KEY - steipete-m5GEMINI_API_KEY
App Store Connect 发布API Key - App Store Connect - Personal - Releaseprivate_key_p8、key_id、issuer_id
npm 发布自动化npm Registry - steipete - Release Automation参见 $npm
Cloudflare(OpenClaw 服务)OpenClaw Services Cloudflare API Tokencredential
Sparkle 签名Nameplate Sparkle EdDSAprivate key
OctopoolOctopool Proxy Secret、Octopool Admin Token (OpenClaw account)credential
Crabyard 部署Cloudflare OpenClaw Crabyard Deploy Tokencredential
Hetzner(crabyard)API Key - Hetzner Cloud - OpenClaw - crabyard-ssh-gatewaycredential
Anthropic(Peekaboo)Anthropic API Key - Peekaboo Live Testcredential
ClickClack 部署Cloudflare ClickClack deploy token、Cloudflare ClickClack R2 uploadscredential
BarnacleGitHub Token Barnaclecredential
macOS Developer ID 签名(OpenClaw Foundation)Release - macOS Developer ID p12 - OpenClaw Foundationp12_base64、p12_password
macOS Developer ID 签名(个人)Release - macOS Developer ID p12 - Peter Steinberger附加的 DeveloperID-p12 文件、certificate_password
发布标签 SSH 签名密钥Release - Git tag SSH signing key - all reposprivate_key、public_key(指纹 SHA256:WmI9lVtd…)
Homebrew tap 分发令牌Release - Homebrew tap dispatch token - openclaw/homebrew-taptoken
Apple 公证(Apple ID 备用方案)Release - Apple ID app-specific password - notarizationapple_id、team_id、app_specific_password

ClickClack/Barnacle 的 Molty 条目是 Agent 副本;规范条目位于共享的 OpenClaw 保管库中——轮换时需同时更新两处。

发布凭据:用一个标签找到全部凭据

每项签名/公证/tap 凭据都标记为 release-credential,并采用 Release - <what> - <scope> 命名(于 2026-08-09 统一)。不要靠猜标题来查找 ——请列出它们:

op item list --vault Molty --tags release-credential

从 Release - 00 INDEX (read me first) 开始:其备注将每个 GitHub Actions 密钥名称映射到确切的条目和字段,并记录修复步骤。 添加或轮换发布凭据时,请及时更新该索引。

发布凭据:GitHub 密钥是每个仓库独立设置的,不是组织级别的

已于 2026-08-09 验证:openclaw 组织有 21 个组织级密钥,没有一个是发布/签名密钥。MACOS_SIGNING_P12、MACOS_SIGNING_P12_PASSWORD、ASC_KEY_ID、ASC_ISSUER_ID、ASC_PRIVATE_KEY_P8 和 HOMEBREW_TAP_TOKEN 都是按仓库设置的。因此,发布在签名或 Homebrew 交接环节失败时,通常是该仓库缺少密钥或密钥名称不正确,而不是组织密钥出了问题。

已知陷阱:openclaw/gogcli 沿用了旧名称(MACOS_SIGNING_CERT_BASE64、MACOS_SIGNING_CERT_PASSWORD、MACOS_CODESIGN_IDENTITY),而共享的 openclaw/release-workflows 可复用工作流读取的是 MACOS_SIGNING_P12* / ASC_* 这些名称,因此签名器导入时悄然收到了空值。排查其他问题前,先将故障仓库的密钥名称与正常仓库(openclaw/wacrawl)进行比较。

所有这些密钥的值都存储在 Molty 中(见上表),因此可以通过非交互方式修复仓库:读取字段但不打印,然后用 printf '%s' "$value" | gh secret set <NAME> --repo <r> 将其传入。完全省略 --body:只有在没有该标志时,GitHub CLI 才会从标准输入读取内容。

通过下文“精确读取字段”中的 JSON + 精确标签方法读取这些字段,不要使用 --fields label=<f>。2026-08-09 在 Foundation p12 条目上实测:--fields label=p12_base64 返回了 65 个字符,而正确值是 4432 个字符。包含多个隐藏字段的条目会悄然解析出错误的字段,导致截断的密钥被写入 CI。

以下内容按设计不存储在 Molty 中(桌面操作流程,须先征得同意):OpenClaw Developer ID Release Keychain(OpenClaw-Core 保管库)、npm 交互式登录 + OTP(Private/Npmjs)、个人 SSH/签名密钥。Twilio 没有在任何地方存储 API 凭据,只有控制台登录信息(Private);创建 API 凭据需要登录控制台。

远程路由——仅限桌面操作流程

仅适用于路径 2(交互式/桌面)流程;路径 1 服务账户读取始终在本机执行,不进行路由。

  • 首先识别当前主机(hostname; id -un),然后加载与该环境匹配的远程 Mac 技能。个人和工作托管的 Mac 拓扑必须分开处理;切勿根据过时的 IP 地址或笼统的“Mac Studio”名称推断身份。
  • 如果当前主机是 Peter 正在使用的实体工作站,且 1Password GUI 会话可用,则将整个已获同意的桌面操作流程保留在本机。在个人环境中,默认使用的工作站是 steipete-studio-sf;只有 Peter 表示正在使用 steipete-mbp,或实时上下文确认它是当前的审批界面时,才使用该设备。在工作托管环境中,默认使用经验证的 Studio;只有 Peter 指明对应的 MacBook 是当前审批界面,或实时上下文确认这一点时,才使用该设备。
  • 如果当前主机是 VM、无头主机或其他非当前工作站,请检查对应拓扑技能中记录的 Tailscale 命令,并仅从同一环境中选择一台当前可用的 Studio 或 MacBook。将整个交互式流程路由到该工作站自己的共享 op-work tmux 会话之前,先通过 ssh -o ConnectTimeout=5 -o RequestTTY=no -o RemoteCommand=none <workstation-alias> 'hostname; id -un' 验证配置的 SSH 别名。
  • 同意规则不变:仍须先在聊天中询问(说明条目及原因)。路由只改变提示出现的位置,不会改变是否需要询问。
  • 只有所需字段的值会通过 SSH 通道传输;两端均适用同样的“不打印、仅检查格式”规则。任务结束时关闭远程任务窗口。
  • 如果所选工作站处于离线状态或 SSH 超时,只有在 Peter 或实时上下文确认另一台同环境的实体工作站是当前审批界面时,才可改用该设备。本机回退操作需要可用的 GUI 会话,并且必须明确验证当前同环境主机是 Peter 正在使用的工作站;否则,包括在任何 VM/无头主机上,都应报告已尝试的操作并停止。

工作流

  1. 检查操作系统和 shell。
  2. 在 tmux 中确认 CLI 可用:op --version。
  3. 必须:使用共享的 op-work 会话;在其中为整个密钥任务恰好打开一个任务窗口;任务完成后关闭该窗口。
  4. 已知/预期的 Molty 条目 → 直接通过服务账户读取(路径 1)。如果不确定令牌是否有效,请使用 OP_LOAD_DESKTOP_APP_SETTINGS=false OP_BIOMETRIC_UNLOCK_ENABLED=false OP_SERVICE_ACCOUNT_TOKEN="$OP_SERVICE_ACCOUNT_TOKEN" op whoami </dev/null >/dev/null 2>&1; echo op_rc:$? 验证。
  5. 条目未知 → 查看上方的表格 → 在 Molty 中搜索限定于保险库的元数据(使用服务账户,安全)→ 只有之后才请求桌面端授权(路径 2)。
  6. 如果命令失败,通过 tmux send-keys 在同一窗口中重试;不要仅为重试而打开第二个窗口或会话。
  7. 在启动个人交互式流程前,在任务窗口中取消设置 OP_SERVICE_ACCOUNT_TOKEN 和 MOLTY_OP_SERVICE_ACCOUNT_TOKEN。然后默认使用 --account my.1password.com;除非明确要求,否则绝不使用 my.1password.eu/Titan。

共享的 Op Tmux 会话 — 一个会话,每个任务一个窗口

此机器上的所有 op 操作——每项技能、每个 Agent、每个任务——都共享一个 tmux 服务器(clawdbot-op.sock)和一个会话(op-work)。处理密钥时,绝不要创建其他 socket 名称、tmux 服务器或会话:每个额外会话都会向 Peter 触发警报,并在其 shell 环境中保留密钥,最终变成僵尸会话。同级技能($npm、$release-mac-app、临时流程)都使用同一会话,仅窗口名称不同。

每个任务:在 op-work 中创建一个以任务命名的窗口;按窗口 ID 指定目标;任务结束时关闭该窗口。

SOCKET_DIR="${CLAWDBOT_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/clawdbot-tmux-sockets}"
mkdir -p "$SOCKET_DIR"
SOCKET="$SOCKET_DIR/clawdbot-op.sock"
SESSION="op-work"

# 'shell' is a permanent keeper window: never send work to it, never kill it.
tmux -S "$SOCKET" has-session -t "$SESSION" 2>/dev/null ||
  tmux -S "$SOCKET" new -d -s "$SESSION" -n shell
WIN="$(tmux -S "$SOCKET" new-window -d -t "$SESSION" -n "<task-slug>" -P -F '#{window_id}')"
tmux -S "$SOCKET" send-keys -t "$WIN" -- 'OP_LOAD_DESKTOP_APP_SETTINGS=false OP_BIOMETRIC_UNLOCK_ENABLED=false OP_SERVICE_ACCOUNT_TOKEN="$OP_SERVICE_ACCOUNT_TOKEN" op whoami </dev/null >/dev/null 2>&1; echo op_rc:$?' Enter
tmux -S "$SOCKET" capture-pane -p -J -t "$WIN" -S -200

服务账户的 op 有三项必需的防护措施:通过 OP_LOAD_DESKTOP_APP_SETTINGS=false 跳过加载桌面应用设置,通过 OP_BIOMETRIC_UNLOCK_ENABLED=false 强制关闭应用集成,并通过重定向或捕获输出,让标准输入/输出不经过窗格 TTY。仅覆盖生物识别设置不足以应对 op 2.35:其强制策略启动流程仍会读取 1Password 应用的群组容器设置。随后,macOS 会弹出“应用数据保护”对话框(“op 想要访问其他应用中的数据”),并阻塞在 open(),直至用户作出回应。只有经过授权的桌面流程(路径 2)才可以省略这些覆盖设置,并直接在 TTY 上运行 op。签名版 2.35 二进制文件识别 OP_LOAD_DESKTOP_APP_SETTINGS,但公开的环境变量文档中没有记录此变量;更新 op 后,请重新进行无需提示的 whoami 验证,并提供 TCC 日志证明。

macOS 应用数据对话框反复出现

在 macOS 26 和 op 2.35 上观察到:TCC 将 SystemPolicyAppData 批准记录为会话/PID 范围(auth_value=5,并包含批准该请求的 PID)。后续的 op PID 可能会再次提示,即使已经点击“允许”。每个可执行文件路径(~/bin/op、Homebrew Caskroom 中的版本、临时副本)也会被 TCC 视为独立客户端。使用稳定路径可以减少身份数量,但无法解决按 PID 限定的批准问题。

2026-07-16 的实时验证:仅设置 OP_BIOMETRIC_UNLOCK_ENABLED=false 时,使用服务令牌运行 op whoami 仍会弹出提示并卡住;再添加 OP_LOAD_DESKTOP_APP_SETTINGS=false 后则成功返回,且没有新增 SystemPolicyAppData 提示。

反复出现的对话框通常意味着有并发或重试中的 op 命令,或存在过期的 op daemon 进程。停止重试循环;检查 pgrep -x op,并检查共享 socket 的窗格,但不要输出进程参数。使用服务账户执行任务时,重新运行并添加所需的覆盖设置。执行桌面任务时,只使用一个已同意授权的任务窗口,并尽量减少新启动的 op 进程。不要不断点击“允许”并期待永久授权。

  • 对该任务的每条命令、重试和后续操作,都复用 $WIN。如果引号、条目名称或命令有误,就在同一个窗口中发送更正后的命令,绝不要新开窗口或会话。
  • 任务结束时(成功或失败):tmux -S "$SOCKET" kill-window -t "$WIN" — 导出的密钥会随窗口的 shell 一起销毁。保留窗口会让 op-work 继续运行,以供下一个任务使用。
  • 引导过程中不要运行 op signin。登录仅用于已同意授权的桌面流程(路径 2),并且必须在任务窗口内进行。
  • 如果崩溃的 Agent 留下了过期任务窗口,且其窗格显示空闲提示符,可以将其关闭;绝不要关闭正在运行命令的窗口,也绝不要关闭 shell。

特定服务的工作流

  • 将特定服务的身份验证详情保存在对应的技能中。
  • 对于 npm registry/package 相关工作,使用 $npm;其中说明了 Molty 服务账户条目、非交互式身份验证包装器和包预留助手。
  • 本技能仅负责通用的 1Password 规则:只能通过 tmux 使用 op、定向读取、使用带有每任务窗口的共享 op-work 会话、不进行宽泛枚举、不输出机密。

已知可用的机密写入模式

新机密默认通过服务账户写入 Molty 保管库(不会弹出提示)。只有在用户明确要求时才写入个人账户。在共享的 op-work 会话中使用你的任务窗口(见上文引导);将精确的机密任务写入临时脚本,再发送到该窗口;重试时不要新建第二个窗口或会话。

cat > /tmp/op-store-secret.sh <<'SCRIPT'
#!/usr/bin/env bash
set -euo pipefail
set +x
export OP_LOAD_DESKTOP_APP_SETTINGS=false
export OP_BIOMETRIC_UNLOCK_ENABLED=false
exec </dev/null 2>/dev/null
VAULT="Molty"
ITEM_TITLE="Service API Tokens"
FIELD_NAME="api_token"
EXPECTED_PREFIX=""
NOTES="Created via tmux-safe op workflow"
TOKEN="$(pbpaste)"
if [ -n "$EXPECTED_PREFIX" ]; then
  case "$TOKEN" in "$EXPECTED_PREFIX"*) ;; *) echo "clipboard value does not match expected prefix" >&2; exit 2;; esac
fi
OP_SERVICE_ACCOUNT_TOKEN="$OP_SERVICE_ACCOUNT_TOKEN" op item create --vault "$VAULT" --category "API Credential" --title "$ITEM_TITLE" "$FIELD_NAME[password]=$TOKEN" "notesPlain=$NOTES" >/dev/null
OP_SERVICE_ACCOUNT_TOKEN="$OP_SERVICE_ACCOUNT_TOKEN" op item get "$ITEM_TITLE" --vault "$VAULT" --fields "label=$FIELD_NAME" >/dev/null
echo "stored and verified secret field without printing it"
SCRIPT
chmod 700 /tmp/op-store-secret.sh
tmux -S "$SOCKET" send-keys -t "$WIN" -- "bash /tmp/op-store-secret.sh; rm -f /tmp/op-store-secret.sh" C-m

在此 CLI 构建版本中,op 类别字符串区分大小写且供人阅读;应使用 "API Credential",而不是 api_credential。

精确读取字段

对于已知条目,在实际使用前验证字段的形态:长度、预期前缀、换行符数量,绝不要检查值。op --field NAME 和 --fields label=NAME 在条目中存在重复或旧版凭据字段时,可能返回错误的隐藏字段。如果形态不正确,请以 JSON 形式读取已知条目,并提取准确的标签。

cat > /tmp/op-read-field.sh <<'SCRIPT'
#!/usr/bin/env bash
set -euo pipefail
set +x
ITEM_TITLE="Known API Credential Item"
FIELD_LABEL="api_token"
VAULT="Molty"
value="$(
  OP_LOAD_DESKTOP_APP_SETTINGS=false \
    OP_BIOMETRIC_UNLOCK_ENABLED=false \
    OP_SERVICE_ACCOUNT_TOKEN="$OP_SERVICE_ACCOUNT_TOKEN" \
    op item get "$ITEM_TITLE" --vault "$VAULT" --format json </dev/null |
    FIELD_LABEL="$FIELD_LABEL" node -e 'let s=""; process.stdin.on("data",d=>s+=d); process.stdin.on("end",()=>{const item=JSON.parse(s); const f=(item.fields||[]).find(x=>x.label===process.env.FIELD_LABEL); if(!f?.value) process.exit(2); process.stdout.write(f.value);})'
)"
echo "field_len:${#value}"
case "$value" in sk-*) echo "field_prefix:sk" ;; *) echo "field_prefix:other" ;; esac
echo "field_has_newline:$(printf %s "$value" | wc -l | tr -d ' ')"
SCRIPT
chmod 700 /tmp/op-read-field.sh
tmux -S "$SOCKET" send-keys -t "$WIN" -- "bash /tmp/op-read-field.sh; rm -f /tmp/op-read-field.sh" C-m

将 JSON 提取操作限定在已知条目和保管库内。不要枚举保管库/条目来寻找候选项。

明确的条目搜索

仅当用户明确要求搜索、提供了截图/列表,或精确标题猜测失败时,才使用此方法。限定在 Molty 保管库(服务账户)内,并且只查看元数据;输出候选标题/ID/类别/保管库名称,绝不输出字段或值。优先使用截图中的可见原文:保管库名称、条目标题和字段标签。

cat > /tmp/op-find-item.sh <<'SCRIPT'
#!/usr/bin/env bash
set -euo pipefail
set +x
VAULT="Molty"
QUERY="minimax"
OP_LOAD_DESKTOP_APP_SETTINGS=false \
  OP_BIOMETRIC_UNLOCK_ENABLED=false \
  OP_SERVICE_ACCOUNT_TOKEN="$OP_SERVICE_ACCOUNT_TOKEN" \
  op item list --vault "$VAULT" --format json </dev/null |
  QUERY="$QUERY" VAULT="$VAULT" node -e '
let s=""; process.stdin.on("data",d=>s+=d); process.stdin.on("end",()=>{
  const q=process.env.QUERY.toLowerCase();
  const vault=process.env.VAULT;
  const items=JSON.parse(s).filter(x => [
    x.title, x.id, x.category, ...(x.tags || [])
  ].filter(Boolean).join("\n").toLowerCase().includes(q));
  for (const item of items.slice(0, 10)) {
    console.log(`title:${item.title} id:${item.id} category:${item.category || ""} vault:${vault}`);
  }
  console.log(`matches:${items.length}`);
})'
SCRIPT
chmod 700 /tmp/op-find-item.sh
tmux -S "$SOCKET" send-keys -t "$WIN" -- "bash /tmp/op-find-item.sh; rm -f /tmp/op-find-item.sh" C-m

选择候选项后,切回精确条目/字段 JSON 提取,并且只验证形态。如果没有匹配的 Molty 条目 → 请求桌面授权(路径 2),绝不要悄悄读取个人保管库。

脱敏调试

仅用于交互式流程调试(已同意授权的桌面路径)。整个流程都必须在同一个任务窗口内进行。检查状态和输出长度,绝不检查机密值。

cat > /tmp/op-debug.sh <<'SCRIPT'
#!/usr/bin/env bash
set -euo pipefail
set +x
SIGNIN_OUTPUT="$(op signin --account my.1password.com 2>&1 || true)"
echo "signin output bytes: ${#SIGNIN_OUTPUT}"
op account list 2>&1 | sed -E "s/(xox[baprs]-)[A-Za-z0-9-]+/\\1REDACTED/g; s/(xapp-)[A-Za-z0-9-]+/\\1REDACTED/g"
SCRIPT
chmod 700 /tmp/op-debug.sh
tmux -S "$SOCKET" send-keys -t "$WIN" -- "bash /tmp/op-debug.sh; rm -f /tmp/op-debug.sh" C-m

安全准则

  • 切勿将密钥粘贴到日志、聊天或代码中。
  • Path-1 op 命令必须始终设置 OP_LOAD_DESKTOP_APP_SETTINGS=false 和 OP_BIOMETRIC_UNLOCK_ENABLED=false,明确传入服务令牌,并确保标准输入和包含密钥的标准输出不连接到窗格 TTY。
  • 每次运行 op 都可能启动后台 op daemon(在 2.35 中,缓存标志无法阻止此情况)。过时的守护进程可能会再次触发对话框。仅当没有 op 任务在运行时,pkill -f 'op daemon' 才是安全的;切勿大范围终止正在运行的 op 命令。
  • App Data 的 Allow/Don't Allow 选择可能仅对特定 PID 生效,并在下一个 op 进程中再次出现。请停止源命令并修正其调用方式,而不是批准反复弹出的提示。
  • 切勿在 rc 文件中不加防护地运行 eval "$(op completion zsh)";它会在每次启动 shell 时运行 op,是已知的对话框骚扰来源。
  • 优先使用 op run / op inject,而不是将密钥写入磁盘。
  • 仅在聊天中明确征得同意后,才使用桌面应用路径;随后由 1Password 解锁提示完成实际授权——提示出现时无需再通过聊天往返确认。
  • 如需在不集成应用的情况下登录,请使用 op account add。
  • 如果在已征得同意的交互流程中,命令返回“account is not signed in”,请在 tmux 中重新运行 op signin,并由 Peter 在应用中授权。
  • 仅当已征得同意的解锁提示尚未得到响应时,才使用 sag;切勿提前触发。
  • 切勿在 tmux 外运行 op;如果无法使用 tmux,请停止并询问。

评论

支持 Markdown