webup-buddy-reroll について
指定した種族とレア度の `/buddy` を探す Claude Code スキルです。Bun でハッシュを計算し、再抽選のほか、名前や性格の変更、設定への反映にも対応します。
主な機能
- 01種族とレア度を指定して検索
- 02Bun によるハッシュ計算
- 03結果の設定への任意適用
- 04コンパニオンの名前や性格の変更
- 05Pro/Max 向け OAuth 設定手順
活用シーン
- 01`/buddy` の種族とレア度の指定
- 02再抽選せずにコンパニオンを改名
- 03Pro/Max アカウントで再抽選を設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ webup/ skills-cc --skill webup-buddy-rerollインストール後、Claude Code で/webup-buddy-rerollを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/oauth-setup.mjsrename.mjsreroll.mjs詳細
Buddy Reroll
希望する種族とレア度にハッシュされる userID を見つけ、新しい /buddy のコンパニオンを総当たりで探します。
仕組み
Claude Code はコンパニオンを決定論的に生成します:hash(userID + SALT) → mulberry32 PRNG → レア度、種族、目、帽子、色違い。同じ userID なら、常に同じコンパニオンになります。
リロールするには、~/.claude.json の userID を置き換え、companion フィールドをクリアしてから、再起動します。
重要:Claude Code は Bun にバンドルされているため、正しいハッシュ関数は Bun.hash()(xxHash64)です。Node.js の FNV-1a では正しい結果が得られません。このスクリプトは必ず Bun で実行してください。
スクリプトのディレクトリ
重要:すべてのスクリプトは、このスキルの scripts/ サブディレクトリにあります。
エージェントの実行手順:
- この SKILL.md ファイルのディレクトリパスを
SKILL_DIRとして特定します - スクリプトのパス =
${SKILL_DIR}/scripts/<script-name>.mjs - このドキュメント内のすべての
${SKILL_DIR}を実際のパスに置き換えます
スクリプト一覧:
| スクリプト | 用途 |
|---|---|
scripts/reroll.mjs | 対象の種族とレア度を総当たりで検索し、必要に応じて設定に適用します |
scripts/oauth-setup.mjs | Pro/Max 加入者向けの OAuth 設定ヘルパー(--check/--prepare/--verify/--restore) |
scripts/rename.mjs | コンパニオンの名前や性格を変更します(--name/--desc) |
前提条件
- Claude Code >= 2.1.89 —
/buddyシステムはこのバージョンで導入されました。スクリプトはバージョンを自動確認し、古すぎる場合は終了します。 - Bun — 正しいハッシュ計算に必要です。グローバルにインストールされていない場合は、
npx -y bunを使用してください。 - API ユーザー:そのまま動作します。
~/.claude.jsonのuserIDは自由に置き換えられます。 - Pro/Max 加入者:最初に OAuth を設定する必要があります(このスキルで自動化されています)。Pro/Max アカウントには
accountUuidがあり、/buddyはuserIDの代わりにこれを使用します。OAuth 方式ではこれを回避します。以下のワークフローを参照してください。
使用方法
# Direct (if bun is installed globally)
bun ${SKILL_DIR}/scripts/reroll.mjs --species dragon --rarity legendary --apply
# Via npx (works even without global bun install)
npx -y bun ${SKILL_DIR}/scripts/reroll.mjs --species dragon --rarity legendary --apply
オプション
| フラグ | デフォルト | 説明 |
|---|---|---|
--species <name> | dragon | 対象の種族(以下の一覧を参照) |
--rarity <level> | legendary | 最低レア度:common / uncommon / rare / epic / legendary |
--max <n> | 1000000 | 総当たりの最大反復回数 |
--apply | off | 結果を ~/.claude.json に自動書き込みし、companion をクリアします |
種族(18種類)
| duck | goose | blob | cat | dragon | octopus |
| owl | penguin | turtle | snail | ghost | axolotl |
| capybara | cactus | robot | rabbit | mushroom | chonk |
レア度
| レア度 | 星 | 確率 | 発見までの反復回数(目安) |
|---|---|---|---|
| common | ★ | 60% | ~30 |
| uncommon | ★★ | 25% | ~72 |
| rare | ★★★ | 10% | ~180 |
| epic | ★★★★ | 4% | ~450 |
| legendary | ★★★★★ | 1% | ~1800 |
呼び出し方法
このスキルは、引数ありでも引数なしでも呼び出せます:
- 引数なし(
/webup-buddy-reroll):実行前にAskUserQuestionを使って対話形式でユーザーに確認します。 - リロールのみ(
/webup-buddy-reroll dragon legendary):確認を省略し、指定された種族とレア度に固定します。 - リロールして名前変更(
/webup-buddy-reroll dragon legendary 海の九粟 昼寝好きの小さな竜):リロール後、指定された名前と性格をすぐに適用します。 - 名前変更のみ(
/webup-buddy-reroll 名前を海の九粟に変更、性格は昼寝好きの小さな竜):リロールを省略し、名前や性格のみを変更します。
引数の解析(自然言語)
引数文字列は自由形式のテキストです。NLP を使って、以下のフィールドを抽出します。
- species — 既知の18種の名前(duck、goose、blob、cat、dragon、octopus、owl、penguin、turtle、snail、ghost、axolotl、capybara、cactus、robot、rabbit、mushroom、chonk)と照合します。中国語/日本語の同義語も認識します(龙=dragon、猫=cat など)。
- rarity — 5つのティア(common、uncommon、rare、epic、legendary)または同義語(传说=legendary、史诗=epic など)と照合します。
- name — コンパニオンの短い固有名(例:「沧海九粟」、「Nimbus」、「小火」)。「叫X」、「名字X」、「named X」、「name X」のようなパターンや、種/レア度のキーワードではない単独の固有名詞を探します。
- personality — コンパニオンの雰囲気や性格の説明(例:「爱打盹的小龙」、「sarcastic robot」)。「个性X」、「性格X」、「personality X」のようなパターンや、種/レア度/名前ではない説明的なフレーズを探します。
4つのフィールドはすべて任意です。どのような組み合わせも有効です。
意図を検出します:
- species または rarity が見つかった場合 → リロールワークフロー(name/personality も見つかった場合は、リロール後に名前を変更)
- name および/または personality のみが見つかった場合(species/rarity なし) → 名前変更ワークフロー
- 引数がまったくない場合 → 対話形式で尋ね、ユーザーのメッセージからリロールか名前変更のどちらを希望しているかを検出
リロールワークフロー
- アカウントの種類を検出します:確認スクリプトを実行し、
~/.claude.jsonにaccountUuidが存在するか確認します:npx -y bun ${SKILL_DIR}/scripts/oauth-setup.mjs --check- 終了コード0(
accountUuidなし):API ユーザー、または OAuth の設定がすでに完了しています。ステップ1に進みます。 - 終了コード1(
accountUuidが見つかった場合):Pro/Max サブスクライバーです。以下の OAuth のセットアップを実行してから、ステップ1に進みます。
- 終了コード0(
OAuth のセットアップ(Pro/Max のみ)
原則:CLAUDE_CODE_OAUTH_TOKEN 環境変数を使ってログインすると、Claude Code は accountUuid を ~/.claude.json に書き込みません。そのため、/buddy は userID にフォールバックし、自由に置き換えられます。
a. ユーザーに別のターミナルを開き、claude setup-token を実行して OAuth トークンを取得するよう伝えます。取得したトークンをここに貼り付けてもらいます。
b. トークンを受け取ったら、設定を準備します(バックアップ+リセット):
bash npx -y bun ${SKILL_DIR}/scripts/oauth-setup.mjs --prepare
c. ユーザーに別のターミナルで次を実行するよう伝えます(<TOKEN> を実際のトークンに置き換えます):
bash CLAUDE_CODE_OAUTH_TOKEN=<TOKEN> claude
Claude の読み込みが完全に終わるまで待ち、その後すぐに終了するよう伝えます。/buddy は使用しないでください。
d. ユーザーが実行したことを確認したら、設定を検証します:
bash npx -y bun ${SKILL_DIR}/scripts/oauth-setup.mjs --verify
検証に失敗した場合は、--restore を実行してバックアップを復元し、ステップ(a)からやり直します。
e. ステップ1に進みます。
-
引数が指定されていない場合:
AskUserQuestionを使い、1つのプロンプト内で種とレア度を選ぶようユーザーに尋ねます(質問は2つです)。- 種の質問:人気のある選択肢を4つ(dragon、cat、axolotl、capybara)提示します。各選択肢の
descriptionには、ユーザーが「その他」で選べる残りの種を記載します。例として、最初の選択肢の説明は「または次のいずれかを入力してください:duck、goose、blob、octopus、owl、penguin、turtle、snail、ghost、cactus、robot、rabbit、mushroom、chonk」とします。 - レア度の質問:5つのティアすべてを提示します(推奨の legendary を最初にし、続けて epic、rare、uncommon、common の順)。
- このステップを省略してはいけません。ユーザーが種について言及していても、必ず選択を確認します。
引数から種/レア度を解析できた場合:プロンプトをスキップし、そのまま次に進みます。
- 種の質問:人気のある選択肢を4つ(dragon、cat、axolotl、capybara)提示します。各選択肢の
-
--applyを付けてスクリプトを実行します:npx -y bun ${SKILL_DIR}/scripts/reroll.mjs --species <choice> --rarity <choice> --apply -
引数から name または personality を解析できた場合:リロールの直後に名前変更スクリプトを実行します(その間に再起動する必要はありません):
npx -y bun ${SKILL_DIR}/scripts/rename.mjs --name "<parsed name>" --desc "<parsed personality>"どちらか一方のみが解析された場合は、
--nameまたは--descのうち該当しない方を省略します。 -
Claude Code を再起動し、
/buddyを実行して新しいコンパニオンを孵化させるようユーザーに伝えます。- OAuth を使用した場合:
accountUuidが書き戻されないよう、通常のclaudeではなくCLAUDE_CODE_OAUTH_TOKEN=<TOKEN> claudeで Claude を起動するよう念押しします。
- OAuth を使用した場合:
手動適用
--apply を使用しなかった場合:
- 出力された userID をコピーします
~/.claude.jsonを編集します:"userID"の値を置き換え、"companion": nullに設定します- Claude Code を再起動して →
/buddyを実行します
コンパニオンの名前変更/カスタマイズ
種族やレアリティを再抽選せずに、コンパニオンの名前や性格の説明を変更します。
名前変更のワークフロー
名前や性格が引数から解析された場合:手順 1~3 をスキップし、解析された値を使って手順 4 に進みます。性格が引数で直接指定された場合は、そのまま使用し、AI による生成手順をスキップします。
AskUserQuestionを使って、変更したい内容を質問します(質問は 1 つ、複数選択可):- 名前:「コンパニオンの名前を変更」
- 性格:「コンパニオンの性格/説明を変更」
- 名前の場合:ユーザーに正確な名前を尋ねます。そのまま渡します。
- 性格の場合:簡単な特徴や雰囲気をユーザーに尋ねます(例:「キーボードが大好きな怠け者の猫」、「皮肉っぽいロボット」)。次に、あなた(Claude Code)が楽しくて創造的な性格の説明(コンパニオンの種族とユーザーの特徴に合った 1~2 文)を作成します。適用する前に、生成した文章をユーザーに確認してもらいます。
- 名前変更スクリプトを実行します:
変更する項目が 1 つだけの場合は、npx -y bun ${SKILL_DIR}/scripts/rename.mjs --name "<name>" --desc "<personality>"--nameまたは--descを省略します。 - 変更を反映するには Claude Code の再起動が必要であることをユーザーに伝えます。
注意事項
userIDはテレメトリーのバケット分けと buddy のシード値にのみ影響します。会話、API キー、ローカル設定には影響しません- SALT は
friend-2026-401です(Claude Code 2.1.89)。今後のバージョンで変更された場合は、スクリプトを更新してください - 1M 回の反復で、最新のハードウェアでは数秒でレジェンダリーが見つかります