gb-setup について
gb-setupは、GrowthBook Agent SkillsをGrowthBook Cloudまたはセルフホスト環境に接続するためのセットアップスキルです。認証情報とアプリのオリジンを検証し、制限付き権限で設定を保存します。
主な機能
- 01既存設定の検出とシークレットのマスキング
- 02APIキーとHTTPSオリジンの検証
- 03認証情報とアプリオリジンの確認
- 04権限を制限した設定ファイルの書き込み
- 05環境変数によるファイル値の上書き
活用シーン
- 01GrowthBook Agent Skillsの初回設定
- 02セルフホストGrowthBookのAPIとUIのオリジン設定
- 03認証情報を検証してから設定を保存
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ growthbook/ skills --skill gb-setupインストール後、Claude Code で/gb-setupを入力して読み込まれたか確認します。
詳細
gb-setup
GrowthBook Agent Skills のセットアップを、1 つのスキルで行います。GB_API_KEY に加え、セルフホストの場合は GB_API_URL と GB_APP_URL の設定をユーザーに案内します。認証情報と信頼できるアプリのオリジンを検証し、chmod 600 を指定して ~/.config/growthbook/.env に書き込みます。
API キーは GrowthBook ユーザーに紐づく Personal Access Token(PAT)です。そのため、書き込みスキルが作成するフラグや実験はすべて、API によって自動的にそのユーザーの作成物として記録されます。別途、所有者識別子を設定する必要はありません。
対応する環境変数が設定されていない場合、gb-call はこのファイルを読み込みます。そのため、ユーザーはシェルの rc ファイルを編集する必要がなく、一度だけ設定すれば済みます。環境変数がファイルより常に優先されるため、CI や一時的な上書きに便利です。
使用する前に、現在のクライアントに応じて同梱ヘルパーのパスを解決してください。Claude Code プラグインでは ${CLAUDE_PLUGIN_ROOT}/scripts/gb-call、スタンドアロンの Agent Skills インストールでは、このスキルディレクトリを基準とした scripts/gb-call です。以下では、解決したコマンドを <gb-call> に置き換えてください。
ワークフロー
-
現在の状態を確認します。 すでに設定されている内容を確認します。ユーザーが値を変更したい場合を除き、すでに設定されている値を尋ねないでください。
test -f ~/.config/growthbook/.env && echo "exists" || echo "missing"ファイルが存在する場合は、Read ツールで読み込み、
KEY=valueの各行を解析して、マスクした概要を提示します。I see existing config at ~/.config/growthbook/.env: GB_API_KEY = gb_pat_****wxyz (last 4 shown) GB_API_URL = (not set — defaults to https://api.growthbook.io) GB_APP_URL = (not set — defaults to https://app.growthbook.io because the API URL uses GrowthBook Cloud) Want to keep these, update one, or start fresh?GB_APP_URLが未設定の場合は、有効な API オリジンに基づいて説明します。API オリジンが GrowthBook Cloud の場合はhttps://app.growthbook.ioがデフォルトになりますが、カスタムのセルフホストGB_API_URLが設定されている場合は必須です。process.envの設定内容も知らせます。ユーザーがシェルで環境変数をエクスポートしている場合、それらはファイルの値より優先されます。そのことを伝えてください(「シェル環境でGB_API_KEYも設定されています。シェル変数の設定を解除しない限り、ファイルの値は使用されません。」)。 -
GB_API_KEYを収集します(必須)。既存の値をそのまま使う場合はスキップします。それ以外の場合は、ユーザーが情報に基づいて選択できるよう、まず会話内容への露出に関する注意を伝えてください。キーを貼り付ける前にご確認ください。このチャットに入力した内容はエージェントクライアントに保存され、会話の一部として設定済みのモデルプロバイダーに送信される場合があります。このスキルは返信内でキーをマスクしますが、貼り付けた値を後からマスクすることはできません。気になる場合は、クライアントの保存と保持に関する設定を確認してください。
おすすめ:個人用の管理者トークンを使い回すのではなく、このプラグイン専用の新しい PAT を生成してください。そうすれば、問題が発生した場合でも、他の API アクセスに影響を与えずに個別に取り消せます。
次に、以下のように尋ねてください。
Personal Access Token(PAT)または Secret Key を貼り付けてください。以下から取得できます。
- Cloud:https://app.growthbook.io/account/personal-access-tokens
- セルフホスト:
https://<your-host>/account/personal-access-tokens
PAT は
gb_pat_、Secret Key はsecret_で始まります。どちらも使用できます。取得後は、以降のどの手順でも値をそのまま表示しないでください。末尾 4 文字以外をすべてマスクしてください。
-
セルフホストかどうかを尋ねます(
GB_API_URLとGB_APP_URLは任意です)。GrowthBook Cloud(api.growthbook.io)とセルフホストのどちらを使用していますか?
- Cloud → スキップし、両方の URL を未設定のままにします(
gb-callは API 呼び出しにhttps://api.growthbook.io、UI リンクにhttps://app.growthbook.ioをデフォルトで使用します)。 - セルフホスト → 以下を個別に尋ねます。
GB_API_URLに保存する API オリジン(例:https://api.acme-internal.com)。GB_APP_URLに保存する、ユーザー向け GrowthBook UI のオリジン(例:https://growthbook.acme-internal.com)。
一方のオリジンから他方を推測しないでください。セルフホストのデプロイでは、互いに無関係なホスト名が使われる場合も、API と UI が同じオリジンで提供される場合もあります。
受け入れる前に、各 URL の形式を検証してください。
- URL として解析できる必要があります(つまり、
new URL(value)が例外をスローしないこと)。 - スキームは
https://である必要があります(http://は拒否してください。平文通信での認証ヘッダーは認証情報が漏えいするためです。また、file://、data://なども拒否してください)。 - ホスト名は空であってはなりません。
- ユーザー名やパスワードを含めてはなりません。
- パス、クエリ、ハッシュを含めてはなりません —
new URL(value).pathnameは/または空で、searchとhashは空である必要があります。https://api.acme.com/v1のような値は、リクエストやリンクの送信先を気付かれないまま誤らせる可能性があります。オリジンのみを指定するよう求めるメッセージを表示して拒否してください。 - 保存する前に、末尾のスラッシュを1つ取り除きます。
これらのチェックに失敗した URL は拒否し、再入力を求めてください。黙って修正してはいけません。黙った修正は、値がシステムでは直せない形で間違っていることがあるにもかかわらず、システムが「何でもうまくやってくれる」とユーザーに思わせてしまいます。
- Cloud → スキップし、両方の URL を未設定のままにします(
-
実際の API で検証します。 収集した値を一時的な環境変数として設定し、軽量な認証済みエンドポイントを呼び出します。
GB_API_KEY='<value>' \ GB_API_URL='<cloud default or self-hosted API origin>' \ GB_APP_URL='<cloud default or self-hosted app origin>' \ <gb-call> GET /api/v1/projects結果を次のように解釈します。
- 2xx → 認証情報は機能しています。次に進みます。
- 401 / 403 → 「認証に失敗しました。API キーが無効、期限切れ、または取り消されています。
<url-from-step-2>で新しいキーを生成して、もう一度お試しください。」ステップ2に戻ります。 growthbook.ioホストでの 404 → 「api.growthbook.ioから 404 が返されました。セルフホスト環境をお使いの場合は、GB_API_URLを API のベース URL に設定してください。」ステップ3に戻ります。- ネットワークエラー/DNS エラー → 「
<host>に接続できませんでした。URL とネットワークを確認してください。」生のエラーを表示します。
検証が完了するまで先に進まないでください。ユーザーが行き詰まった場合は、停止してデバッグできるようにしてください。壊れた設定を書き込んではいけません。
次に、信頼できるアプリのオリジンが期待どおりに解決されることを確認します。
GB_API_URL='<cloud default or self-hosted API origin>' \ GB_APP_URL='<cloud default or self-hosted app origin>' \ <gb-call> app-origin出力は末尾のスラッシュなしで、期待される UI オリジンと完全に一致する必要があります。一致しない場合はステップ3に戻ります。
-
~/.config/growthbook/.envに書き込みます — セキュリティのため、順序が重要です。ディレクトリを作成し、まずアクセスを制限します。
mkdir -p ~/.config/growthbook chmod 700 ~/.config/growthbookディレクトリの
0700(所有者のみ)権限によって、次の手順の実行中に他のシステムユーザーがファイルを読み取れないよう保護されます。先にファイルを書き込んでから chmod を実行すると、ファイルはユーザーの umask(通常は0022→ モード0644、全ユーザーから読み取り可能)を引き継ぐため、その間に読み取り可能な状態が生じます。ディレクトリのアクセスを制限すれば、その状態を防げます。0700のディレクトリ内のファイルは、ファイルのモードにかかわらず、他のユーザーからアクセスできません。次に、クライアントのファイル書き込みツールでファイルを書き込みます。形式は、1行に
KEY=valueを1つです。引用符は付けません(値にスペース、=、改行が含まれることはありません)。GB_API_KEY=<value> GB_API_URL=<value or omit line> GB_APP_URL=<value or omit line>その後、念のためファイルのモードを設定します。
chmod 600 ~/.config/growthbook/.env0600は、所有者のみが読み書きできることを意味します。ディレクトリを0700、ファイルを0600にすれば、他のシステムユーザーはこのシークレットにアクセスできません。 -
報告します。 ユーザーに次の内容を伝えてください。
- ファイルの場所(
~/.config/growthbook/.env)。 - ファイルの内容(API キーはマスクし、末尾4文字のみ表示)。
gb-call app-originが返す、信頼できる UI オリジン。- 環境変数はファイルより優先されること(CI や一時的な上書きは引き続き機能します)。
- gb-setup スキルを再実行するとファイルが更新されること。
- 次に役立つと思われるもの:フラグを確認するための feature-flags スキル(
flag-searchワークフロー)、または過去の結果を確認するための experiments スキル(experiment-brainstormワークフロー)。
- ファイルの場所(
ガードレール
- API キーを平文で絶対にそのまま返さないでください。 必ず末尾の 4 文字以外をマスクしてください。スキルの出力は、ユーザーのターミナルとトランスクリプトに残ります。
- ユーザーがキーを貼り付ける前に、トランスクリプトに露出するリスクを伝えてください。 チャットに入力された値はエージェントクライアントに保存される場合があり、設定済みのモデルプロバイダーに送信されます。スキルから後でその値を削除することはできません。管理者トークンの再利用ではなく、新たにスコープを限定した PAT を使うよう、必ず推奨してください。これは過剰な警戒ではありません。ユーザーが会話型インターフェースにシークレットを貼り付ける必要があるワークフローでは、適切な対応です。
- 失効に関する案内は、脚注ではなく実際の解決策です。 キーが一度でも露出した場合、効果的な対処方法は
<GB_APP_URL>/account/personal-access-tokens(またはクラウド環境のデフォルト)で失効させ、ローテーションすることだけです。ユーザーが古いキーや共有キーについて懸念を示した場合は、必ずこの方法を案内してください。 - ファイルを書き込む前にディレクトリを
0700にし、書き込み後にファイルを0600にしてください。 順序が重要です。Write ツールはユーザーの umask を引き継ぐため、ほとんどのシステムではファイルがモード0644(全ユーザーから読み取り可能)で作成されます。先にディレクトリのアクセスを制限しておけば、Write と chmod の間の短い時間も、他のユーザーからアクセスできません。その後、多層防御としてファイルにも chmod を適用します。どちらも必須です。片方でも省略すると PAT が漏えいします。 - 各環境変数は、ファイルよりも環境変数の値が優先されます。
process.envに値が設定されている場合、gb-callはその変数のファイル内の値を無視します。両方が設定されている場合は、実際にどちらの値が有効なのかユーザーが理解できるよう、必ず伝えてください。 - 形式だけでなく、実際のエンドポイントで検証してください。 「正しそうに見える」だけで動作しないトークンは、トークンがないよりも悪い状態です。ユーザーは設定が完了したと思ってしまいます。
GET /api/v1/projectsは軽量で、認証が必要であり、すべてのプランで利用できます。 - オーナー識別子は収集しません。 PAT は GrowthBook ユーザーに紐づいているため、書き込みを行うスキル(
flag-create、experiment-launch)では、API がトークンのユーザーに新しいフラグと実験を自動的に関連付けます。セットアップ時にメールアドレスや userId を尋ねないでください。 - 行の値の先頭にある空白は削除せず、末尾の空白は削除してください。 PAT に空白は含まれないはずです。クリップボードから末尾の改行が付いた状態で貼り付けられた場合は、それを削除してください。先頭の空白は珍しいため、黙って修正するよりユーザーに知らせる方が安全です。
- 不完全なファイルを書き込まないでください。 検証に失敗した場合は、
~/.config/growthbook/.envに手を加えずに停止してください。ユーザーがセットアップをやり直します。動作する設定を、壊れた設定で上書きしてはいけません。 - 両方の URL から末尾のスラッシュを削除してください。
gb-callはGB_APP_URLも正規化しますが、保存するオリジンを整えておけば、出力の不整合やスラッシュの重複による不具合を避けられます。 GB_API_URLからGB_APP_URLを推測しないでください。api.をapp.に置き換える慣例は、セルフホスト環境では保証されません。アプリのオリジンは明示的に尋ねてください。- 実際には使用しない環境変数を提案しないでください。 使用するのは
GB_API_KEY、GB_API_URL、GB_APP_URLだけです。それ以外はスコープの逸脱となり、今後のコントリビューターを混乱させます。
ファイル形式のリファレンス
~/.config/growthbook/.env:
GB_API_KEY=gb_pat_abc123def456
GB_API_URL=https://api.your-self-hosted.com
GB_APP_URL=https://growthbook.your-self-hosted.com
# で始まる行はコメントです。空行は無視されます。引用符は使わず、値は最初の = から行末までをそのまま読み取ります。
使用するエンドポイント
GET /api/v1/projects— 検証専用です。軽量で、認証が必要であり、すべてのプランで利用できます。
引き継ぎ先
- feature-flags スキル(
flag-searchワークフロー)— セットアップ完了後の最初の呼び出し先として最適です(必須入力はなく、新しい設定を確認できます)。 - experiments スキル(
experiment-brainstormワークフロー)— 組織に停止済みの実験がすでにある場合は、すぐに表示します。 - 設定に関するエラーを出すスキルは、すべてここを参照してください。