onepassword · v1.0.0 · 2026-09-19 · sha256 3b07a3e2c5303386
onepassword v1.0.0A
Immutable. This exact content is served forever at /api/v1/blob/3b07a3e2c5303386.
--- name: onepassword description: "Operate 1Password CLI (`op`) for desktop-app or service-account auth, vault/item discovery, secret references (`op://…`), `op read` / `op run` / `op inject`, TOTP, and shell-plugin auth - without printing secrets into chat. Use when the user mentions 1Password, `op`, secret references, `op://`, biometric CLI unlock, or loading env/config from 1Password. Prefer `vd:gopass` only for the local gopass store." license: MIT argument-hint: "[whoami | read <ref> | run -- <cmd> | inject | item | vault | signin]" metadata: author: vanducng version: "1.0.0" upstream: "https://developer.1password.com/docs/cli/" --- # 1Password CLI (`op`) Provision secrets from 1Password at runtime via the official CLI. Prefer **secret references** and subprocess injection over copying plaintext into the shell or chat. Authoritative docs: [Get started](https://developer.1password.com/docs/cli/get-started/), [Secret references](https://developer.1password.com/docs/cli/secret-references/), [CLI reference](https://developer.1password.com/docs/cli/reference/). ## Scope | Need | Owner | | --- | --- | | 1Password vaults / `op://` references / `op run` | `vd:onepassword` | | Local gopass + GPG store | `vd:gopass` | | Generic "get me a secret" with no store named | Ask which store; default to whichever the user already uses in this repo | ## Prerequisites 1. `op` on `PATH` (`brew install 1password-cli` on macOS; see official get-started for Windows/Linux). 2. Auth mode (detect in order): - **Service account:** `OP_SERVICE_ACCOUNT_TOKEN` is set (CI / headless). - **Desktop app integration:** 1Password app unlocked with Developer → Integrate with 1Password CLI (Touch ID / Windows Hello / system auth). - **Interactive `op signin`:** only when neither of the above works; session tokens are shell-local. Verify before any secret read: ```bash op --version op whoami ``` If `whoami` fails with desktop-app connection errors: unlock the app, confirm CLI integration, retry. Do not invent install flags - follow the get-started page for this OS. Multiple accounts: `--account <shorthand|url|id>` or `OP_ACCOUNT`. ## Secret references ```text op://<vault>/<item>/[section/]<field> ``` Resolve with `op read`, `op run`, or `op inject` - never paste the plaintext into repo files. Discover a reference without printing the secret value itself when possible: ```bash op item get "<item>" --format json --fields password | jq -r .reference op item get "<item>" --format json | jq -r '.fields[]? | select(.reference) | "\(.label): \(.reference)"' ``` ## Core workflows ### Find and read ```bash op vault list op item list --vault "<vault>" op item get "<item>" --vault "<vault>" # metadata; avoid dumping all fields in chat op read "op://<vault>/<item>/password" # stdout - do not restate in chat op read -n "op://<vault>/<item>/password" # no trailing newline (for pipes) op read "op://<vault>/<item>/one-time password?attribute=otp" ``` Capture into a consumer without echoing: ```bash export API_KEY="$(op read -n "op://Work/My App/credential")" ``` ### Run a process with secrets (`op run`) Preferred for apps and scripts. Put references in the environment or an env file, then wrap the command: ```bash export DB_USER="op://app-dev/db/username" export DB_PASSWORD="op://app-dev/db/password" op run -- <command> op run --env-file="./.env" -- <command> ``` Stdout/stderr that would print secrets is masked by default. Use `--no-masking` only when the user explicitly needs the raw value on screen. Shell expansion hazard: `$VAR` expands before `op run` unless the expanding command runs in a subshell after substitution: ```bash MY_VAR=op://vault/item/field op run --no-masking -- sh -c 'echo "$MY_VAR"' ``` ### Inject into config templates (`op inject`) Templates with `op://` refs can live in git. Resolve at runtime: ```bash op inject -i config.yml.tpl -o config.yml ``` Delete or gitignore resolved output files that contain plaintext. ### Write / rotate (explicit user ask only) ```bash op item create --category=login --title="<title>" --vault="<vault>" \ --url="<url>" "username=<user>" "password=<prompt interactively>" op item edit "<item>" "password[password]=<new>" # prefer interactive / generated flows op item delete "<item>" ``` Do not pass secrets as argv in chat-visible command lines when an interactive or file-based flow exists. ## Shell plugins `op plugin` can authenticate third-party CLIs via 1Password. Follow [shell plugins](https://developer.1password.com/docs/cli/shell-plugins/) when the user asks to wire a specific CLI; do not enable plugins globally without confirmation. ## Safety rules - **Never** paste decrypted secrets into chat, commits, tickets, or logs. Confirm by vault/item/field or reference URI only. - Prefer `op run` / `op inject` over writing plaintext `.env` files. If the user requires a resolved file, confirm it is gitignored first. - Prefer service accounts with least-privilege vault access for automation. - Do not wrap desktop-app-integrated `op` in nested multiplexers that break the app IPC (common failure: isolated sessions that cannot reach the desktop helper). - Never commit `OP_SERVICE_ACCOUNT_TOKEN` or session tokens. ## Failure modes | Symptom | Fix | | --- | --- | | `not currently signed in` / no session token | Unlock app + CLI integration, or `op signin`, or set `OP_SERVICE_ACCOUNT_TOKEN` | | `couldn't connect to the 1Password desktop app` | Start/unlock app; Developer → Integrate with 1Password CLI; retry in the same user session | | `op://` resolve errors | Check vault/item/field names; `op item get` + `jq .reference` | | Secret printed as `<concealed by 1Password>` | Expected under `op run`; add `--no-masking` only if the user needs raw output | | Wrong account | `op account list`; pass `--account` or `OP_ACCOUNT` | ## References - https://developer.1password.com/docs/cli/get-started/ - https://developer.1password.com/docs/cli/secret-references/ - https://developer.1password.com/docs/cli/secret-reference-syntax/ - https://developer.1password.com/docs/cli/reference/commands/read/ - https://developer.1password.com/docs/cli/reference/commands/run/ - https://developer.1password.com/docs/cli/reference/commands/inject/