swain-keys について
swain-keysは、プロジェクトごとのGit署名・認証用キーを設定するスキルです。GitHubまたはForgejoを検出し、それぞれに応じた署名方式を選び、設定状態の確認と検証も行います。
主な機能
- 01GitHubまたはForgejoの自動検出
- 02GitHub向けSSH署名の設定
- 03Forgejo向けGPG署名の設定
- 04キーとフォージ登録状態の確認
- 05署名機能とキー登録の検証
活用シーン
- 01GitHubプロジェクトのコミット署名設定
- 02ForgejoプロジェクトへのGPG公開鍵の登録
- 03既存のキー設定の確認と検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cristoslc/ swain --skill swain-keysインストール後、Claude Code で/swain-keysを入力して読み込まれたか確認します。
同梱ファイルscripts/swain-keys.shtests/test-swain-keys.sh
詳細
swain-keys
プロジェクトごとの Git 署名と認証用キーのプロビジョニングです。
それぞれに適した署名方式で、2 種類の Forge に対応しています。
- GitHub —
gh ssh-key addによる SSH 署名。 - Forgejo —
fj user gpg uploadによる GPG 署名。
Forge は origin リモート URL から自動検出されます。上書きするには SWAIN_FORGE を設定してください。
呼び出されたとき
スクリプトを特定して実行します。パスはこのスキルのディレクトリを基準とする scripts/swain-keys.sh です。
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
SCRIPT="$REPO_ROOT/.agents/bin/swain-keys.sh"
パスの検索に失敗した場合は、**/swain-keys/scripts/swain-keys.sh をグロブ検索します。
ワークフロー
デフォルト(引数なし、または「set up keys」)
まず --status を実行して現在の状態を表示します。
bash "$SCRIPT" --status
キーがすべてプロビジョニングされていない場合は、プロビジョニングを続行するかユーザーに確認します。
プロビジョニング(「provision keys」、「configure signing」、「set up SSH」)
プロビジョニングの全手順を実行します。
bash "$SCRIPT" --provision
GitHub の場合、スクリプトは次の処理を行います。
- Git リモートまたはディレクトリからプロジェクト名を取得します。
- 存在しない場合は
~/.ssh/<project>_signingを生成します(ed25519、パスフレーズなし)。 - 設定済みの Git メールアドレスを使って
~/.ssh/allowed_signers_<project>を作成します。 - 認証と署名の両方に使用する公開鍵を、
gh ssh-key addで GitHub に追加します。 - グローバル SSH エージェントを経由せず、GitHub SSH を
ssh.github.com:443にルーティングするホストエイリアスを設定した~/.ssh/config.d/<project>.confを作成します。 - Git リモート URL をプロジェクト固有のホストエイリアスを使うように更新します。
- SSH によるコミットとタグの署名用に、ローカル Git 設定を行います。
- SSH 接続と署名機能を検証します。
Forgejo の場合、スクリプトは次の処理を行います。
- Git リモートまたはディレクトリからプロジェクト名を取得します。
- 存在しない場合は、OpenPGP ed25519 鍵を
gpg --batch --generate-keyで生成します(対話なし、%no-protection)。 - GPG 公開鍵を
fj user gpg uploadで Forgejo にアップロードします。 - OpenPGP 署名用にローカル Git を設定し(
gpg.format=openpgp)、グローバル SSH 署名設定を上書きします。 - リモート URL は変更しません(Forgejo の SSH 認証はユーザーの既存の SSH 設定で処理されます)。
- 署名機能と Forgejo の GPG 鍵の状態を検証します。
ステータス(「key status」、「check keys」)
bash "$SCRIPT" --status
Forge の種類、鍵の状態、Git 設定、Forge への登録状態を表示します。該当する場合は「Forgejo に署名鍵として GPG 鍵が登録されています(検証済み:true)」と報告します。
検証(「verify keys」、「test signing」)
bash "$SCRIPT" --verify
署名機能と Forge の鍵登録をテストします。Forgejo の場合、Forge 上で GPG 鍵の Can Sign: true を確認します。
環境変数
SWAIN_FORGE— 自動検出を上書きするには、githubまたはforgejoを設定します。SWAIN_FORGEJO_HOST— Forgejo インスタンスの URL を設定します(例:https://codeberg.org)。origin にlocalhostが含まれる場合のデフォルトはhttp://localhost:3000です。
スコープの更新への対応
GitHub
スコープが不足しているために gh ssh-key add が失敗すると、スクリプトは対応が必要であることを示すメッセージを出力します。その場合は、次の手順を実行します。
- 追加の GitHub スコープを承認する必要があることをユーザーに伝えます。
- 次のコマンドを提示します:
gh auth refresh -s admin:public_key,admin:ssh_signing_key。 - OAuth 用のブラウザーが開きます。操作には人間の介入が必要です。
- ユーザーの確認後、
--provisionを再実行します(冪等性があるため、完了済みの手順はスキップされます)。
Forgejo
fj user gpg upload が失敗した場合は、fj が認証済みか確認します。
fj auth login
その後、--provision を再実行します。
swain-init との連携
swain-init から呼び出された場合は、ステータス確認を先に行うフローを使わず、直接 --provision を実行します。「続行しますか?」の確認は swain-init が行います。
セッションのブックマーク
プロビジョニング後、ブックマークを更新します:bash "$REPO_ROOT/.agents/bin/swain-bookmark.sh" "Provisioned keys for {project}"
エラー処理
- git リポジトリ内にいない場合:明確なメッセージを表示して失敗します。
ghCLI が利用できない場合(GitHub):GitHub の登録手順をスキップし、キーを手動で追加するようユーザーに警告します。fjCLI が利用できない場合(Forgejo):Forgejo の登録をスキップし、GPG キーを手動でアップロードするようユーザーに警告します。gpgがインストールされていない場合(Forgejo):インストール手順を表示して失敗します。- git のメールアドレスが設定されていない場合:早い段階で失敗し、設定手順を表示します。
- すべての手順は冪等です。問題を修正した後に再実行しても安全です。