Hermes Agent Wiki 非公式・日本語wiki
この skill をそのまま使う: GitHub で原文を見る

英語原文・frontmatter 込みで、Hermes が読み込む実体そのままです(このページの本文は日本語版)。

1Password

目次

op CLI を用意してサインインし、秘密の値を読み書きします。

skill の情報

提供元 追加の skill です。hermes skills install official/security/1password で入れられます
パス optional-skills/security/1password
バージョン 1.0.0
作者 arceus77-7, enhanced by Hermes Agent
ライセンス MIT
対応プラットフォーム linux, macos, windows
タグ security, secrets, 1password, op, cli

参考: SKILL.md 全文

1Password CLI

環境変数やファイルに秘密の値をそのまま置くのではなく、1Password で管理したいときに、この skill を使います。

必要なもの

  • 1Password のアカウント
  • 1Password の CLI(op)が入っていること
  • 次のいずれか: デスクトップアプリとの連携、サービスアカウントのトークン(OP_SERVICE_ACCOUNT_TOKEN)、Connect サーバー
  • Hermes が端末を呼び出すあいだ、認証済みの状態を保つための tmux(デスクトップアプリと連携する場合のみ)

こんなときに使います

  • 1Password の CLI を入れる、または設定する
  • op signin でサインインする
  • op://Vault/Item/field のような形で秘密の値を読み出す
  • op inject で設定ファイルやひな形に秘密の値を差し込む
  • op run で、秘密の値を環境変数に入れたままコマンドを実行する

認証のやり方

${HERMES_HOME:-~/.hermes}/.envOP_SERVICE_ACCOUNT_TOKEN を設定します(この skill が最初に読み込まれるときに入力を求めます)。 デスクトップアプリは要りません。op readop injectop run が使えます。

export OP_SERVICE_ACCOUNT_TOKEN="your-token-here"
op whoami  # verify — should show Type: SERVICE_ACCOUNT

デスクトップアプリとの連携(対話が要ります)

  1. 1Password のデスクトップアプリで有効にします: 設定 → 開発者 → 1Password CLI と連携する
  2. アプリのロックが解除されていることを確かめます
  3. op signin を実行し、生体認証の確認に応じます

Connect サーバー(自分で立てる場合)

export OP_CONNECT_HOST="http://localhost:8080"
export OP_CONNECT_TOKEN="your-connect-token"

準備

  1. CLI を入れます:
# macOS
brew install 1password-cli

# Linux (official package/install docs)
# See references/get-started.md for distro-specific links.

# Windows (winget)
winget install AgileBits.1Password.CLI
  1. 確かめます:
op --version
  1. 上の認証のやり方から 1 つ選んで設定します。

Hermes での実行のしかた(デスクトップアプリ連携の場合)

Hermes の端末コマンドは既定で対話を挟まないため、呼び出しをまたぐと認証の状態が失われることがあります。 デスクトップアプリ連携で op を安定して使うには、サインインと秘密の値の操作を専用の tmux セッションの中で実行してください。

補足: OP_SERVICE_ACCOUNT_TOKEN を使う場合、これは要りません。トークンは端末の呼び出しをまたいで自動的に保たれます。

SOCKET_DIR="${TMPDIR:-/tmp}/hermes-tmux-sockets"
mkdir -p "$SOCKET_DIR"
SOCKET="$SOCKET_DIR/hermes-op.sock"
SESSION="op-auth-$(date +%Y%m%d-%H%M%S)"

tmux -S "$SOCKET" new -d -s "$SESSION" -n shell

# Sign in (approve in desktop app when prompted)
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- "eval \"\$(op signin --account my.1password.com)\"" Enter

# Verify auth
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- "op whoami" Enter

# Example read
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- "op read 'op://Private/Npmjs/one-time password?attribute=otp'" Enter

# Capture output when needed
tmux -S "$SOCKET" capture-pane -p -J -t "$SESSION":0.0 -S -200

# Cleanup
tmux -S "$SOCKET" kill-session -t "$SESSION"

よく使う操作

秘密の値を読む

op read "op://app-prod/db/password"

ワンタイムパスワードを取り出す

op read "op://app-prod/npm/one-time password?attribute=otp"

ひな形に差し込む

echo "db_password: {{ op://app-prod/db/password }}" | op inject

秘密の値を環境変数に入れてコマンドを実行する

export DB_PASSWORD="op://app-prod/db/password"
op run -- sh -c '[ -n "$DB_PASSWORD" ] && echo "DB_PASSWORD is set" || echo "DB_PASSWORD missing"'

守ること

  • 値そのものをはっきり求められない限り、秘密の値をそのまま利用者に表示しないでください。
  • 秘密の値をファイルに書くのではなく、op run / op inject を使ってください。
  • 「account is not signed in」と出て失敗したら、同じ tmux セッションでもう一度 op signin を実行してください。
  • デスクトップアプリとの連携が使えない環境(画面のない環境や CI)では、サービスアカウントのトークンを使ってください。

CI・画面のない環境について

対話を挟めない場面では、OP_SERVICE_ACCOUNT_TOKEN で認証し、対話式の op signin は避けてください。 サービスアカウントには CLI の v2.18.0 以降が必要です。

参考

  • references/get-started.md
  • references/cli-examples.md
  • https://developer.1password.com/docs/cli/
  • https://developer.1password.com/docs/service-accounts/