From rad-1password
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.
How this skill is triggered — by the user, by Claude, or both
Slash command
/rad-1password:1password-cliThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
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.
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.
Apply this skill on any of:
op appears in a command or script (commands like op read, op item list, op signin, etc.)op://vault/item/field) appears anywhere.env injection, OP_ACCOUNT, OP_SERVICE_ACCOUNT_TOKEN, biometric unlock for a CLIThe 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.
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.
Format:
op://<vault>/<item>[/<section>]/<field>
[A-Za-z0-9 -_.].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).
8 commands and 11 management commands (op environment exists in beta only; not in stable v2.x).
| 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). |
| 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. |
| 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). |
| 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.
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)"
Shell expands variables before op run substitutes 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 --category is for create/get, plural --categories (comma-separated) is for list.
Service accounts can't read Personal/Private/Employee vaults. They only see vaults explicitly granted to them at create time.
op on Windows has no caching. The --cache=false flag is harmless but unnecessary.
op signin is idempotent. Don't gate op calls behind op signin && ... in scripts — the right pattern is set OP_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.
--reveal shows concealed fields in op item get/list. Without it, passwords show as [concealed]. Don't print revealed output unless writing to a controlled destination.
Output of op run is masked by default — secrets passed to subprocesses get redacted in stdout/stderr. --no-masking (or OP_RUN_NO_MASKING=true) disables, but only do this for debugging.
op read defaults to file-mode 0600 when using --out-file. Don't chmod 644 keys after.
The op item create assignment 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.
| 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 |
op environment, --environments flag on run) — version-gated.op item template get <category>).Authoritative reference: https://developer.1password.com/docs/cli/reference/
npx claudepluginhub radorigin-llc/rad-claude-skills --plugin rad-1passwordProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.