CLI de 1Password
Sigue los pasos oficiales de inicio rápido de la CLI. No adivines comandos de instalación.
Referencias
references/get-started.md(instalación + integración con la aplicación + flujo de inicio de sesión)references/cli-examples.md(ejemplos reales deop)
Flujo de trabajo
- Verifica el sistema operativo y el shell.
- Comprueba que la CLI esté presente:
op --version. - Detecta el modo de autenticación que el usuario ha configurado:
- Cuenta de servicio: la variable
OP_SERVICE_ACCOUNT_TOKENestá definida (típico en entornos headless, CI, gateways). - Integración con la aplicación de escritorio: la aplicación de escritorio de 1Password está ejecutándose con la integración de CLI habilitada (típico en macOS / Windows / Linux).
- Inicio de sesión independiente: ninguno de los anteriores —
op signinsolicitará una contraseña de cuenta en cada sesión.
- Cuenta de servicio: la variable
- Ejecuta
opsegún el modo de autenticación (ver más abajo). - Verifica el acceso:
op whoamidebe tener éxito antes de leer cualquier secreto. - Si hay varias cuentas: usa
--accountoOP_ACCOUNT.
Ejecutar op según el modo de autenticación
Cuenta de servicio (preferida para uso headless / gateway)
Ejecución directa. Sin tmux, sin paso de inicio de sesión.
export OP_SERVICE_ACCOUNT_TOKEN="ops_..."
op vault list
op read op://app-prod/db/password
Integración con la aplicación de escritorio
Ejecución directa. No lo envuelvas en tmux — la integración con la aplicación de escritorio usa un canal IPC por usuario que se establece para el entorno de ejecución del gateway pero no siempre es accesible de forma confiable desde sub-shells de tmux, que se ejecutan con un contexto de entorno diferente. El transporte varía según la plataforma (XPC a través del Ayudante del Navegador de 1Password en macOS, un socket de dominio Unix en Linux, una tubería con nombre en Windows); la regla práctica para un agente es la misma en las tres: ejecuta op directamente. En macOS, un indicador útil de síntoma es el contenedor del grupo de integración de 1Password en ~/Library/Group Containers/2BUA8C4S2C.com.1password/t/.
op vault list # puede solicitar Touch ID / Windows Hello / autenticación del sistema en la primera llamada
op whoami
Si una llamada devuelve 1Password CLI couldn't connect to the 1Password desktop app, no cambies a tmux. Confirma que la aplicación de escritorio esté ejecutándose y desbloqueada, luego reintenta la ejecución directa.
Inicio de sesión independiente (sin aplicación, contraseña interactiva)
Este es el único modo donde tmux ayuda. op signin imprime una exportación de estilo eval que establece un token OP_SESSION_* para shells POSIX; los comandos posteriores en el mismo shell se autentican con esa variable de entorno. Los shells por comando del gateway pierden ese estado entre llamadas, por lo que un panel persistente de tmux mantiene vivo el token de sesión, pero solo si la exportación se aplica realmente con eval en un shell POSIX. Enviar op signin como un comando simple deja stdout impreso en el panel y op whoami fallará.
El flujo de tmux solo es viable en hosts macOS/Linux donde la habilidad tmux esté disponible. El ejemplo abre intencionalmente /bin/sh para que la salida de eval "$(op signin ...)" sea válida incluso cuando el shell normal del usuario es fish. En Windows, prefiere la integración con la aplicación de escritorio o la autenticación con cuenta de servicio. Si el usuario solo tiene inicio de sesión independiente interactivo en Windows, detente y pídele que proporcione un mecanismo de sesión persistente de PowerShell o que cambie a integración de escritorio/autenticación con cuenta de servicio; no traduzcas los comandos de tmux directamente.
SOCKET_DIR="${OPENCLAW_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/openclaw-tmux-sockets}"
mkdir -p "$SOCKET_DIR"
chmod 700 "$SOCKET_DIR"
SOCKET="$SOCKET_DIR/openclaw-op.sock"
SESSION="op-auth-$(date +%Y%m%d-%H%M%S)"
tmux -S "$SOCKET" new -d -s "$SESSION" -n shell /bin/sh
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- 'eval "$(op signin --account my.1password.com)"' Enter
tmux -S "$SOCKET" capture-pane -t "$SESSION":0.0 -p -S - | tail -40
No encoles comandos de seguimiento mientras signin está solicitando entrada. Consulta el panel con capture-pane hasta que signin haya completado y el prompt del shell haya regresado, o esté claramente esperando entrada humana. Si el prompt requiere una contraseña, MFA o selección de cuenta, haz una pausa y pide al usuario que complete el inicio de sesión en su propia terminal; proporciónales los valores del socket y la sesión para que puedan conectarse localmente. El agente no debe ejecutar tmux attach desde exec porque attach consume la TTY actual e impide el control mediante send-keys / capture-pane.
Después de que el prompt del shell regrese, verifica enviando las comprobaciones al mismo panel:
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- 'op whoami' Enter
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- 'op vault list' Enter
tmux -S "$SOCKET" capture-pane -t "$SESSION":0.0 -p -S - | tail -80
Mantén la sesión de tmux en ejecución para que los comandos posteriores de op read / op run reutilicen el mismo shell autenticado.
Usa los mismos valores de SOCKET y SESSION para cada comando de seguimiento en este flujo de inicio de sesión independiente. La bandera -S "$SOCKET" selecciona el socket del servidor tmux; mantenlo en un directorio de propiedad del usuario con permisos 0700, no lo compartas entre usuarios, y elige un nuevo nombre de sesión para cada nuevo intento de inicio de sesión.
Inicio de sesión en el navegador (1Password para Claude)
Si la sesión expone a Claude en las herramientas de credenciales de Chrome (request_credentials, autofill_credential, enter_verification_code), prefiérelas sobre op para iniciar sesión en sitios web: 1Password llena la página directamente y el secreto nunca entra en el contexto. Reglas:
- Solicita cada credencial que la tarea necesite en una sola llamada
request_credentialsantes de navegar. - La aprobación es un mensaje de 1Password en el host del gateway. Si permanece pendiente, dile al usuario en qué host desbloquear ("1Password está esperando aprobación en este Mac") en lugar de reintentar.
- Nunca le pidas al usuario que envíe contraseñas o códigos de un solo uso a través del chat; los códigos se envían solo a través de
enter_verification_code. - No recurras a
op readpara una contraseña de sitio web solo porque el flujo del navegador necesita aprobación; eso va en contra del diseño de no exposición. Usaoppara secretos consumidos por comandos y configuraciones, no para inicios de sesión web cuando existe el flujo del navegador.
Barreras de protección
- Nunca pegues secretos en registros, chat o código.
- Prefiere
op run/op injectsobre escribir secretos en disco. - Si se necesita iniciar sesión sin integración de la aplicación, usa
op account addprimero. - Si un comando devuelve "account is not signed in":
- cuenta de servicio: vuelve a exportar
OP_SERVICE_ACCOUNT_TOKEN - aplicación de escritorio: confirma que la aplicación se esté ejecutando y la integración esté habilitada
- independiente: vuelve a ejecutar
op signindentro de la misma sesión de tmux y autoriza
- cuenta de servicio: vuelve a exportar