Swap Brand
目的
製品を明確に独立したものにする: 新しい名前、見た目、トーン・オブ・ボイスを早期に決定し、ローンチ前にコードのテキストファイル内に元の製品の名前、ドメイン、色が残っていないかを機械的にスイープします。これは範囲限定のチェックであり、完全な保証ではありません。スキャンできないもの、スキャン対象外のものは人が確認する必要があります。
フル(販売)トラック、ステップ5(Identity)およびステップ12(Sweep)。swap/market.md、swap/recon.md を読み込み、swap/brand.md、swap/sweep.json を書き出します。
コンテキストルーティングテーブル
| ソース | 場所 | 抽出する内容 |
|---|---|---|
| マーケット | swap/market.md | アングル、ターゲットオーディエンス、裏付けのあるギャップ |
| Recon | swap/recon.md | 元の製品の名前、ドメイン、ブランドカラー(避けるべきもの) |
| ユーザー | ユーザーの好み、既存ブランド、所有ドメイン | 制約と好み |
| コード | 製品リポジトリ | スイープがスキャンするもの |
クイックスタート
Identity フェーズ: 1) Recon から避けるべきものをリストアップ; 2) アングルに紐づく5つの名前候補を提案; 3) 各候補に対して実行すべきチェックを提示; 4) パレット、ボイス、ロゴ概要を設定; 5) swap/brand.md に書き出す。
Sweep フェーズ: プロジェクトルートから以下のコマンドを実行: python3 -I <skill-folder>/scripts/sweep.py <repo> --avoid "<元の名前>" --domain <元のドメイン> --color "<元の色>" --exclude swap --json swap/sweep.json(<skill-folder> はこのスキルのフォルダ)、すべてのヒットを修正し、CLEAN になるまで再実行する。
ワークフロー
- 最初に回避リストを作成。 Recon から: 元の製品名、製品名、ドメイン、ブランドカラー、特徴的なタグライン。これらを
brand.mdの## Avoidセクションに書き込む。スイープはこのファイルを読み込まないため、各項目を--avoid、--domain、--colorフラグで明示的に渡す。 - 名前候補(5つ)。 各候補: 名前、その背後にあるアイデア、なぜ顧客が元の製品と混同しないか。元の製品の名前を含む、省略形、類似音の名前は不可。元の製品名を使った「X for Y」型の名前も不可。
- ユーザーがコミット前に実行するチェック(Claudeは可用性を確認できません): ユーザーの市場における商標検索(国内登録および国際登録)、ドメインおよびソーシャルハンドルの確認、アプリストア名の検索、名前とカテゴリを含む一般的なウェブ検索。各チェックの日付と結果を記録する。競合が見つかった場合、その候補は削除する。
- アイデンティティ。 元の製品とは明らかに異なるパレット(異なる色相ファミリー、色調を変えただけではない)、オープンソースまたはライセンスフォントからのタイプペアリング、Do/Don'tを各5つ含むボイスルール、ユーザーまたはデザイナーが実行するロゴ概要。元の製品の形状やコンセプトを模倣するロゴを説明してはならない。
- スイープ(ローンチ前、および最後のコード変更後)。 回避リストを使用して実行する。識別子内の名前(
OriginalAppEmbed、original_app)、ドメイン、hex/rgbの色値、ファイル名やフォルダ名を検出する。修正は隠すのではなく置き換えること。無害な長い単語には--allowを使用し、その使用状況はすべてbrand.mdにリストする。スイープはマッチしたテキスト、ファイル、行番号を出力する。行の残りの部分は出力しない。 - コード外の確認。 スイープはテキストファイルのみを読み取る。画像、フォント、アーカイブ、2MB超のファイル、読み取り不能なファイルは「未スキャン」としてリストされ、それらが存在する間は CLEAN にならない。これらを手動で確認(スクリーンショット、サンプルデータ、メタデータ、メールテンプレート、代替テキスト)し、その後
--accept-skippedフラグ付きで再実行する。このフラグによりsweep.jsonに確認済みであることが記録される。--accept-skippedはヒットを隠さない。
アンチ・合理化
| Claudeが考えそうなこと | なぜ間違っているか |
|---|---|
| 「クリーンルームビルドなのでリブランドは不要」 | クリーンルームはコードの問題。名前や見た目で顧客を混乱させるのは別の問題。 |
| 「元の製品に近い方が見つけてもらいやすい」 | 紛らわしい類似性は商標リスク。意図的に差別化する。 |
| 「スイープがコメントしか見つけなかった、無視しよう」 | 元の製品名を記載したコメントはバンドルに含まれる。削除する。 |
| 「名前が空いていることを確認した」 | 空いているかどうかはユーザーによる登録検索でのみ確認できる。誰がいつ実行したかを記録する。 |
| 「画像やスクリーンショットはスキップ」 | スイープはそれらを読み取れない。目視で確認し、確認したことを伝える。 |
出力フォーマット
厳守。swap/brand.md の見出し順: ## Avoid、## Name candidates(各候補にアイデアと実行したチェック(日付と結果)を含む)、## Chosen name、## Palette and type、## Voice、## Logo brief、## Sweep log(各実行: コマンド、ヒット数、修正内容)。 swap/sweep.json はスクリプトの出力をそのまま使用する。
参考出力(例、抜粋):
## Chosen name
Skyline。商標検索(英国、EU、米国): 未実行。ドメインおよびストア名検索: 未実行。
## Sweep log
Run 1: 7 hits(名前 x4、ドメイン x1、色 x1、パス x1)。すべて置き換え。
Run 2: CLEAN、4ファイルスキャン、0ファイル未スキャン。
ルール
- 元の名前、パレット、ロゴ、言葉。元のロゴ、商標、コピー、アセットをいかなる形式でも使用してはならない。
- 名前が利用可能または登録可能であると主張してはならない。それはユーザーの確認と弁護士の判断事項である。
sweep.jsonを手動で編集してはならない。
スキル間ルーティング
Identity 決定 → swap-architect、次に swap-design(ここからパレットを受け取る)。スイープ CLEAN → swap-launch。製品にベンダー所有のアセットが含まれているためにスイープが通らない場合 → そのアセットを削除する。許可リストに追加してはならない。
出口チェックリスト
証拠を示してブロックを証明。それができない場合は「確認できませんでした」と記載。
Identity フェーズ(コードが存在する前):
-
## Avoidに元の名前、ドメイン、少なくとも1つのブランドカラーが記載されている - 各名前候補に対して4つのチェックが日付付きで記録されているか、「未実行」と記載されている
- パレット、ボイス、ロゴ概要が記載されており、元のものと異なる
Sweep フェーズ(ローンチ前、および最後のコード変更後):
-
swap/sweep.jsonで"passed": trueである。最後のコード変更後に実行した結果であること - スイープコマンドに
--exclude swapが使用されている(またはメモがないツリーをスキャンした)。未スキャンファイルはすべて手動確認され、skipped_acceptedが true であるか、リストが空である - すべての
--allow使用がスイープログにリストされている - スクリーンショット、コピー、メタデータを手動確認し、スイープが読み取れないことをユーザーに伝えた
自己改善
各実行後、一度だけ質問する: 「このスキルに対するフィードバックはありますか?」 沈黙または「いいえ」なら変更なし。「はい」の場合: パターンをドラフトし、表示し、承諾後にのみ references/learnings.md に追記。「スキルを更新」は正確な編集内容を示し、確認し、書き込み、metadata.version を更新し、1行ログに記録する。パターンが記録されたセッション内で、このファイルに昇格させてはならない。初回実行後、使用したバンドルファイルと新規作成したが将来再利用が必要なものを特定し、保存を提案する(同様に承認ゲートを経る)。