Cowork スケジュールタスクで gh CLI 認証を永続化する方法
サンドボックス環境で毎回リセットされる gh auth の問題を、トークンファイル方式で解決した開発ログ。
サンドボックス環境での gh CLI 認証永続化の課題と解決
Cowork(Claude のローカルサブスクリプションに含まれる定期実行基盤)などのスケジュールタスク環境では、毎回新しいサンドボックス(隔離された実行環境)で起動するため gh auth login の認証状態が引き継がれないという問題が発生します。本記事ではその原因と、トークンファイル方式による解決策を紹介します。同様の問題は GitHub Actions のセルフホストランナーや Docker ベースの CI 環境でも発生するため、幅広い環境で応用できます。
問題の特定
スケジュールタスクはサンドボックス上で実行されます。サンドボックスは実行のたびに初期化されるため、~/.config/gh/hosts.yml に保存される gh auth の状態もリセットされます。
ブログ記事の自動生成パイプラインのように、gh CLI を使って Issue の取得やPR の作成を行う仕組みでは、この認証切れによりスケジュール実行が失敗します。
解決策の実装
以下の 3 ステップで対応します。
-
トークンファイルの配置 — ワークスペースの
secrets/gh-tokenに GitHub 個人アクセストークンを保存します。secrets/ディレクトリは.gitignoreに含めて、リポジトリにはコミットされないようにしてください。 -
タスク起動時のトークン読み込み — サンドボックス環境ではトークンファイルのマウント先がセッションごとに変わる場合があります。Cowork の場合は
find /sessions/*/mnt/*/secrets/gh-tokenのようにワイルドカードで探索します。一般的な CI/CD 環境では、環境変数GH_TOKENにトークンを設定する方法がより簡潔です。# 一般的なパターン: 環境変数から認証する echo "$GH_TOKEN" | gh auth login --with-token # サンドボックス環境: ファイルから認証する TOKEN_FILE=$(find /path/to/secrets -name "gh-token" -type f | head -1) gh auth login --with-token < "$TOKEN_FILE" -
タスク定義ファイルの更新 — スキル定義ファイル(AI エージェントに実行手順を伝えるドキュメント)の環境セットアップセクションに、トークン読み込み手順を明記します。
主な変更点
secrets/gh-token— トークン保存用ファイルを新設- スキル定義ファイル — 環境セットアップに
gh authトークン読み込み手順を追加 - スケジュールタスク設定 — トークンファイル探索ロジックを追加
次のステップ
- トークンの有効期限切れを検知して通知する仕組みの構築
- 将来的には GitHub App による認証への移行を検討し、トークン管理の手間を削減する
関連記事
- GitHub 認証トークンの期限切れ検知 — 本記事の後続として、トークン期限切れの自動検知と GitHub App 移行を解説
- Issue からブログ記事を全自動生成するパイプライン — 本記事で認証を永続化した
generate-blogパイプラインの全体像