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 内でラップしないでください — デスクトップアプリ統合はユーザーごとのIPCチャネルを使用します。このチャネルはゲートウェイのexec環境用に確立されますが、tmuxサブシェルからは常に確実に到達できるとは限りません。tmuxサブシェルは異なる環境コンテキストで実行されるためです。トランスポートはプラットフォームごとに異なります(macOSでは1Password Browser Helperを介したXPC、LinuxではUnixドメインソケット、Windowsでは名前付きパイプ)。エージェントの実用的なルールは3つすべてのプラットフォームで同じです: 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シェル向けに eval 形式のエクスポート(OP_SESSION_* トークンの設定)を出力します。同じシェル内の後続のコマンドは、この環境変数によって認証されます。ゲートウェイのコマンドごとのシェルは呼び出し間でその状態を失うため、永続的なtmuxペインはセッショントークンを維持します — ただし、POSIXシェルで eval を使ってエクスポートが実際に適用された場合に限ります。op signin をプレーンなコマンドとして送信すると、出力はペインに表示されたままになり、op whoami は失敗します。
tmuxフローは、tmux スキルが利用可能なmacOS/Linuxホストでのみ有効です。この例では、ユーザーの通常のシェルがfishであってもPOSIXの eval "$(op signin ...)" 出力が有効になるように、意図的に /bin/sh を開いています。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 を実行しないでください。アタッチは現在の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
後続の op read / op run コマンドが同じ認証済みシェルを再利用できるように、tmuxセッションは実行したままにしておきます。
このスタンドアロンサインインフローでは、後続のすべてのコマンドに同じ SOCKET と SESSION の値を使用します。-S "$SOCKET" フラグはtmuxサーバーソケットを選択します。ユーザー所有の 0700 ディレクトリに保管し、ユーザー間で共有せず、新しいサインイン試行ごとに新しいセッション名を選択します。
ブラウザサインイン(1Password for Claude)
セッションがChromeのクレデンシャルツール(request_credentials、autofill_credential、enter_verification_code)を公開している場合、Webサイトへのサインインには op よりもこれらを優先します: 1Passwordがページに直接入力し、シークレットがコンテキストに入ることがありません。ルール:
- タスクに必要なすべてのクレデンシャルを、ナビゲーション前に1回の
request_credentials呼び出しで要求します。 - 承認はゲートウェイホスト上の1Passwordプロンプトです。保留中の場合は、再試行する代わりに、どのホストでアンロックする必要があるかをユーザーに伝えます(「1PasswordはこのMacでの承認を待機しています」)。
- パスワードやワンタイムコードをチャット経由で送信するようユーザーに依頼しないでください。コードは
enter_verification_code経由でのみ送信します。 - ブラウザフローが承認を必要とするという理由だけで、Webサイトのパスワードのために
op readにフォールバックしないでください。それは情報漏洩防止の設計理念に反します。コマンドや設定で使用されるシークレットにはopを使用し、ブラウザフローが存在する場合のWebログインには使用しないでください。
ガードレール
- シークレットをログ、チャット、コードに絶対に貼り付けないでください。
- シークレットをディスクに書き込むよりも
op run/op injectを優先してください。 - アプリ統合なしでサインインが必要な場合は、最初に
op account addを使用します。 - コマンドが「アカウントがサインインしていません」を返した場合:
- サービスアカウント:
OP_SERVICE_ACCOUNT_TOKENを再エクスポートします - デスクトップアプリ: アプリが実行中で統合が有効であることを確認します
- スタンドアロン: 同じtmuxセッション内で
op signinを再実行して認証します
- サービスアカウント: