1Password CLI
공식 CLI 시작 단계를 따르세요. 설치 명령어를 추측하지 마세요.
참고 자료
references/get-started.md(설치 + 앱 통합 + 로그인 흐름)references/cli-examples.md(실제op예제)
워크플로우
- OS + 셸 확인.
- CLI 존재 확인:
op --version. - 사용자가 설정한 인증 모드 감지:
- 서비스 계정:
OP_SERVICE_ACCOUNT_TOKEN이 설정됨 (일반적으로 헤드리스 설정, CI, 게이트웨이). - 데스크톱 앱 통합: 1Password 데스크톱 앱이 실행 중이며 CLI 통합이 활성화됨 (일반적으로 macOS / Windows / Linux 데스크톱).
- 독립형 로그인: 위 항목에 해당하지 않음 —
op signin이 세션마다 계정 비밀번호를 묻습니다.
- 서비스 계정:
- 인증 모드에 따라
op실행 (아래 참조). - 액세스 확인:
op whoami가 비밀 읽기 전에 성공해야 함. - 여러 계정인 경우:
--account또는OP_ACCOUNT사용.
인증 모드별 op 실행
서비스 계정 (헤드리스 / 게이트웨이에 권장)
직접 실행. tmux나 로그인 단계 불필요.
export OP_SERVICE_ACCOUNT_TOKEN="ops_..."
op vault list
op read op://app-prod/db/password
데스크톱 앱 통합
직접 실행. tmux로 감싸지 마세요 — 데스크톱 앱 통합은 게이트웨이의 exec 환경에서 설정되지만 tmux 서브셸에서는 항상 안정적으로 연결되지 않는 사용자별 IPC 채널을 사용합니다. 서브셸은 다른 환경 컨텍스트에서 실행됩니다. 전송 방식은 플랫폼마다 다릅니다 (macOS에서는 XPC via 1Password Browser Helper, Linux에서는 Unix 도메인 소켓, Windows에서는 named pipe). 에이전트의 실용적인 규칙은 세 가지 모두 동일합니다: op를 직접 실행하세요. macOS에서 유용한 증상 지표는 ~/Library/Group Containers/2BUA8C4S2C.com.1password/t/에 있는 1Password 통합 그룹 컨테이너입니다.
op vault list # 첫 호출 시 Touch ID / Windows Hello / 시스템 인증을 트리거할 수 있음
op whoami
호출이 1Password CLI couldn't connect to the 1Password desktop app을 반환하면 tmux로 전환하지 마세요. 데스크톱 앱이 실행 중이고 잠금 해제되었는지 확인한 후 다시 직접 실행하세요.
독립형 로그인 (앱 없음, 대화형 비밀번호)
tmux가 도움이 되는 유일한 모드입니다. op signin은 POSIX 셸을 위한 OP_SESSION_* 토큰을 설정하는 eval-스타일 내보내기를 출력합니다. 동일한 셸의 이후 명령은 해당 환경 변수로 인증됩니다. 게이트웨이의 명령별 셸은 호출 간에 상태를 잃기 때문에 지속적인 tmux 창은 세션 토큰을 유지하지만, POSIX 셸에서 eval로 내보내기가 실제로 적용된 경우에만 가능합니다. op signin을 일반 명령으로 보내면 stdout이 창에 출력되고 op whoami는 실패합니다.
tmux 흐름은 tmux 스킬을 사용할 수 있는 macOS/Linux 호스트에서만 실행 가능합니다. 예제는 의도적으로 /bin/sh를 열어 eval "$(op signin ...)" 출력이 사용자의 일반 셸이 fish인 경우에도 유효하도록 합니다. Windows에서는 데스크톱 앱 통합 또는 서비스 계정 인증을 선호하세요. 사용자가 Windows에서 독립형 대화형 로그인만 가지고 있다면 중단하고 지속적인 PowerShell 세션 메커니즘을 제공하거나 데스크톱 통합/서비스 계정 인증으로 전환하도록 요청하세요. tmux 명령을 직접 번역하지 마세요.
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
로그인 프롬프트가 표시되는 동안 후속 명령을 대기열에 넣지 마세요. capture-pane으로 창을 폴링하여 로그인이 완료되고 셸 프롬프트가 반환되었거나, 사람의 입력을 기다리는 것이 분명해질 때까지 기다리세요. 프롬프트에 비밀번호, MFA 또는 계정 선택이 필요한 경우, 일시 중지하고 사용자에게 자신의 터미널에서 로그인을 완료하도록 요청하세요. 소켓 및 세션 값을 제공하여 로컬에서 연결할 수 있도록 하세요. 에이전트는 exec에서 tmux attach를 실행하지 마세요. attach는 현재 TTY를 사용하고 send-keys / capture-pane 제어를 방해하기 때문입니다.
셸 프롬프트가 반환된 후, 동일한 창으로 확인 명령을 보내 확인하세요:
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
tmux 세션을 계속 실행하여 이후 op read / op run 명령이 동일한 인증된 셸을 재사용할 수 있도록 하세요.
이 독립형 로그인 흐름에서 모든 후속 명령에 동일한 SOCKET 및 SESSION 값을 사용하세요. -S "$SOCKET" 플래그는 tmux 서버 소켓을 선택합니다. 사용자 소유의 0700 권한 디렉토리에 보관하고, 사용자 간에 공유하지 말며, 새로운 로그인 시도마다 새 세션 이름을 선택하세요.
브라우저 로그인 (1Password for Claude)
세션이 Chrome 자격 증명 도구 (request_credentials, autofill_credential, enter_verification_code)에서 Claude를 노출하는 경우, 웹사이트 로그인에는 op보다 이 도구들을 선호하세요: 1Password가 페이지를 직접 채우고 비밀이 컨텍스트에 들어가지 않습니다. 규칙:
- 작업에 필요한 모든 자격 증명을 이동하기 전에 한 번의
request_credentials호출로 요청하세요. - 승인은 게이트웨이 호스트의 1Password 프롬프트입니다. 보류 중인 경우, 재시도하는 대신 사용자에게 잠금을 해제할 호스트를 알리세요 ("1Password가 이 Mac에서 승인을 기다리고 있습니다").
- 사용자에게 채팅을 통해 비밀번호나 일회용 코드를 보내도록 요청하지 마세요. 코드는
enter_verification_code를 통해서만 전송됩니다. - 브라우저 흐름에 승인이 필요하다고 해서 웹사이트 비밀번호를 위해
op read로 대체하지 마세요. 이는 노출 금지 설계를 무효화합니다. 명령 및 구성에서 사용되는 비밀에는op를 사용하고, 브라우저 흐름이 존재하는 웹 로그인에는 사용하지 마세요.
가드레일
- 비밀을 로그, 채팅, 또는 코드에 절대 붙여넣지 마세요.
- 비밀을 디스크에 쓰는 것보다
op run/op inject를 선호하세요. - 앱 통합 없이 로그인이 필요한 경우, 먼저
op account add를 사용하세요. - 명령이 "account is not signed in"을 반환하는 경우:
- 서비스 계정:
OP_SERVICE_ACCOUNT_TOKEN다시 내보내기 - 데스크톱 앱: 앱이 실행 중이고 통합이 활성화되었는지 확인
- 독립형: 동일한 tmux 세션 내에서
op signin을 다시 실행하고 승인
- 서비스 계정: