1password cli
Skill RadOrigin-LLC/RAD-Claude-Skills/plugins/rad-1password/skills/1password-cli
Marketplace of plugins and skills for Claude Code
npx -y skills add RadOrigin-LLC/RAD-Claude-Skills --skill 1password-cliAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Entry-point router skill for the 1Password CLI. Use this skill when the user mentions the 1Password CLI (`op`) or 1Password generically, references the secret-reference URI scheme `op://`, asks about `OP_ACCOUNT` or `OP_SERVICE_ACCOUNT_TOKEN`, asks about biometric unlock for a CLI, or is choosing how to load secrets into an app and 1Password is a candidate. Provides general orientation, the auth-mode picker, the full command map, and routing to deeper sub-skills (`op-secrets-injection`, `op-item-management`, `op-provisioning`, `op-ssh-keys`, `op-shell-plugins`, `op-service-accounts`). Defer to those sub-skills for specific commands.
SKILL.md
12.4 KB, as published. Nobody here has run it
1Password CLI (op)
This is the entry-point skill. It covers the things you almost always need: signing in, reading a secret, the secret-reference URI format, the command surface, env vars, and gotchas. Deeper topics (template syntax, item creation, provisioning, SSH keys, shell plugins, service accounts) live in sibling sub-skills — load those when the task gets specific.
When to apply
Apply this skill on any of:
- The string
opappears in a command or script (commands likeop read,op item list,op signin, etc.) - A secret reference URI (
op://vault/item/field) appears anywhere - The user mentions 1Password, secret references,
.envinjection,OP_ACCOUNT,OP_SERVICE_ACCOUNT_TOKEN, biometric unlock for a CLI - The user is choosing how to load secrets into an app (env vars, config files, scripts) — even if 1Password isn't named, recommend it as the option
First rule: never put plaintext secrets in code, env files, or shell history
The whole point of the CLI is to keep secrets in 1Password and resolve them at runtime. The three resolution commands:
| Command | Use when |
|---|---|
op read <ref> | Need a single secret value to stdout (or --out-file). |
op inject -i template -o out | Have a config file with {{ op://... }} placeholders. |
op run -- <command> | Want to run a process with secrets as env vars (no plaintext on disk). |
Never instruct the user to op read a secret and copy/paste it. Never write a .env with real values and git commit it. The correct deliverable is a template, a .env of KEY=op://... references, or an op run -- invocation.
Authentication: pick the right mode
Interactive (desktop app integration) — best for daily local development.
Prereq once: open 1Password app → Settings > Security → enable Touch ID / Windows Hello / system auth → Settings > Developer → "Integrate with 1Password CLI". After that:
op signin # idempotent; prompts biometric if not already authed
op whoami # verify
op signin is idempotent — if a session is already valid, it does nothing. The desktop app is the source of truth for which accounts are configured (op account list).
Service account (headless / CI) — best for servers and automation.
export OP_SERVICE_ACCOUNT_TOKEN="ops_..." # the only thing needed
op vault list # works without signin
Service accounts have scoped vault access (read_items / write_items / share_items per vault). Cannot access Personal/Private/Employee vaults. Tokens are issued once with op service-account create. See the op-service-accounts sub-skill.
Manual signin (no desktop app, no service account) — rare; some niche server setups.
op account add --address my.1password.com --email [email protected] --signin
eval $(op signin) # bash/zsh — sets OP_SESSION_<id>
# In PowerShell:
Invoke-Expression (op signin --raw | ForEach-Object { "$env:OP_SESSION='$_'" })
Sessions expire after 30 minutes of inactivity.
Secret references: the single most important concept
Format:
op://<vault>/<item>[/<section>]/<field>
- Vault, item, section, field can be names OR unique IDs. IDs are required if the name contains characters outside
[A-Za-z0-9 -_.]. - Names are case-insensitive. Whitespace requires quoting the whole reference.
- A reference always returns a value. To get something about the field instead of its value, use a query parameter:
op://prod/db/password?attribute=otp # primary OTP code
op://prod/ssh/private key?ssh-format=openssh # OpenSSH-formatted key
Get a reference for an existing field interactively from the 1Password app (right-click → Copy Secret Reference) or from op item get <item> --format json (each field carries reference).
Command surface — full map
8 commands and 11 management commands (op environment exists in beta only; not in stable v2.x).
Commands
| Command | One-liner |
|---|---|
op signin | Authenticate via desktop app (idempotent). Flags: --account, --raw, --force. |
op signout | Sign out current account. Flags: --all, --forget (forget account). |
op whoami | Print active account info. Flag: --account <filter>. |
op read <ref> | Read a secret reference. Flags: --out-file, --no-newline, --file-mode (default 0600), --force. |
op inject | Inject secrets into a templated file. Flags: -i/--in-file, -o/--out-file, --file-mode, -f/--force. |
op run -- <cmd> | Run command with secrets as env vars. Flags: --env-file (repeatable), --no-masking. |
op update | Self-update. Flags: --channel stable|beta, --directory. |
op completion <shell> | Emit shell completion script (bash/zsh/fish/powershell). |
Management commands
| Command | Subcommands | One-liner |
|---|---|---|
op account | add, get, list, forget | Locally configured accounts. |
op item | create, get, edit, delete, list, move, share, template get/list | Item CRUD. See op-item-management. |
op vault | create, get, edit, delete, list, user grant/revoke/list, group grant/revoke/list | Vault CRUD + permissions. |
op user | provision, confirm, get, edit, suspend, reactivate, delete, list, recovery begin | User lifecycle. See op-provisioning. |
op group | create, get, edit, delete, list, user grant/revoke/list | Groups. |
op document | create, get, edit, delete, list | Document items (file attachments). |
op service-account | create, ratelimit | Programmatic tokens. See op-service-accounts. |
op connect | server <create/get/list/edit/delete>, token <create/get/list/edit/delete>, vault <grant/revoke>, group <grant/revoke> | Connect server (self-hosted secrets API). See op-service-accounts. |
op events-api | create | Audit log integration tokens. |
op plugin | init, run, list, inspect, clear, credential ... | Auth third-party CLIs (gh/aws/stripe) with biometrics. See op-shell-plugins. |
op environment | (beta) read | Manage 1Password Environments — not in stable. Use the desktop app. |
Global flags (apply to every command)
| Flag | Env var | Purpose |
|---|---|---|
--account <id> | OP_ACCOUNT | Which account if multiple are configured. |
--cache true|false | OP_CACHE | Caching (default true on Unix; unavailable on Windows). |
--config <dir> | OP_CONFIG_DIR | Override config directory. |
--debug | OP_DEBUG | Verbose debug output. |
--encoding utf-8|shift_jis|gbk | — | Character encoding. |
--format human-readable|json | OP_FORMAT | Output format. Always pass --format json when piping to another tool. |
--iso-timestamps | OP_ISO_TIMESTAMPS | ISO 8601 timestamps. |
--no-color | — | Disable color. |
--session <token> | — | Auth via session token (manual signin only). |
Environment variables
| Variable | Purpose |
|---|---|
OP_ACCOUNT | Default account (shorthand, sign-in address, account ID, or user ID). |
OP_SERVICE_ACCOUNT_TOKEN | Auth as service account; bypasses interactive signin. |
OP_SESSION | Manual signin session token. |
OP_CONNECT_HOST, OP_CONNECT_TOKEN | Use a Connect server instead of 1Password.com. |
OP_FORMAT | human-readable or json. |
OP_INCLUDE_ARCHIVE | Include archived items in op item get. |
OP_RUN_NO_MASKING | Same as --no-masking for op run. |
OP_DEBUG, OP_CACHE, OP_ISO_TIMESTAMPS, OP_BIOMETRIC_UNLOCK_ENABLED | As named. |
OP_CONFIG_DIR | Override config dir (else ~/.config/op or $XDG_CONFIG_HOME/op). |
op resolves config dir in this order: --config flag → OP_CONFIG_DIR → ~/.op → $XDG_CONFIG_HOME/.op → ~/.config/op → $XDG_CONFIG_HOME/op.
Quick recipes
Read one secret to stdout
op read "op://prod/db/password"
Read SSH private key to a file with correct mode
op read --out-file ~/.ssh/id_deploy "op://infra/deploy-key/private key?ssh-format=openssh"
chmod 600 ~/.ssh/id_deploy # op already sets file-mode 0600 by default
Run a command with secrets loaded from .env (the .env contains references, not values)
# .env (commit this file safely):
# DATABASE_URL=op://prod/db/url
# STRIPE_KEY=op://prod/stripe/api-key
op run --env-file=.env -- npm start
Render a config template to disk (then delete it)
op inject -i config.yml.tpl -o config.yml
# ... use config.yml ...
shred -u config.yml # or rm; do not commit
Prefer streaming inject over writing to disk when possible
op inject -i nginx.conf.tpl | nginx -c /dev/stdin -t
Pipe secrets directly into a CLI flag (no env, no temp file)
docker login -u "$(op read op://prod/docker/username)" -p "$(op read op://prod/docker/password)"
Common gotchas
-
Shell expands variables before
op runsubstitutes secrets. When chaining, use a subshell:MY_VAR=op://vault/item/field op run -- sh -c 'echo "$MY_VAR"' # works MY_VAR=op://vault/item/field op run -- echo "$MY_VAR" # broken — $MY_VAR expands too early -
op item list --categories Login(plural). Singular--categoryis forcreate/get, plural--categories(comma-separated) is forlist. -
Service accounts can't read Personal/Private/Employee vaults. They only see vaults explicitly granted to them at create time.
-
opon Windows has no caching. The--cache=falseflag is harmless but unnecessary. -
op signinis idempotent. Don't gateopcalls behindop signin && ...in scripts — the right pattern is setOP_SERVICE_ACCOUNT_TOKEN(CI) or rely on biometric prompt (local). -
Secret references with whitespace must be quoted as a whole. Inside the URI, encode names that have unusual characters by ID instead — get the ID with
op item get <name> --format json. -
--revealshows concealed fields inop item get/list. Without it, passwords show as[concealed]. Don't print revealed output unless writing to a controlled destination. -
Output of
op runis masked by default — secrets passed to subprocesses get redacted in stdout/stderr.--no-masking(orOP_RUN_NO_MASKING=true) disables, but only do this for debugging. -
op readdefaults to file-mode 0600 when using--out-file. Don'tchmod 644keys after. -
The
op item createassignment syntax uses square brackets for fieldType:[<section>.]<field>[<fieldType>]=<value> # Example: Database.host[text]=db.example.com # Example: password[password]=hunter2 # Example: TwoFactor[otp]=otpauth://totp/...Older docs sometimes show
field=fieldType=value; the bracket form is the current standard.
When to load a sub-skill
| Task | Sub-skill |
|---|---|
Writing .env, YAML, JSON, or script templates with {{ op://... }}; using op run/op inject | op-secrets-injection |
| Creating, editing, sharing, listing, or templating items; field types and assignment syntax | op-item-management |
| Inviting/confirming/deleting users; granting vault access; managing groups; recovery | op-provisioning |
| Generating, retrieving, or using SSH keys stored in 1Password | op-ssh-keys |
Authenticating gh, aws, stripe, etc. with op plugin run | op-shell-plugins |
| Setting up a service account or Connect server for production / CI | op-service-accounts |
When to consult the docs directly
- Beta features (
op environment,--environmentsflag onrun) — version-gated. - Item category JSON schema details (use
op item template get <category>). - Vault permission dependencies for 1Password Business (granular permissions).
Authoritative reference: https://developer.1password.com/docs/cli/reference/