Communityコーディング&開発github.com

cindulasai/spotify-playlist-curator

音楽のおすすめやSpotifyプレイリストを、気分、アクティビティ、場面、文化、発見のリクエストに合わせて作成します。また、以前の選択の絞り込み、音楽の好みの記憶管理、聴取履歴のインポートも行います。

spotify-playlist-curator とは?

このスキルは、ユーザーのリクエストに基づいて、実際のトラックで構成されたシーケンス(プレイリスト)を作成するAIアシスタント向けのツールです。ユーザーが指定した気分や活動、文化などに合わせた音楽推薦や、音楽の好みの記憶管理、聴取履歴のインポートをサポートします。CodexやClaudeなどのプラットフォームで動作し、利用可能なSpotifyツールの機能に応じて、リテラルな楽曲検索から詳細なキュレーションまで、作業量を選択できます。スキルは、ユーザーの明示的な選択を尊重し、不明な点は正直に伝え、同意なしに学習を行わないというポリシーに従います。プレイリストの作成から検証、配信までのプロセスをステップバイステップでガイドし、厳格な制約を守りながら、ユーザーの意図に沿った結果を提供します。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/cindulasai/spotify-playlist-curator/tree/HEAD

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Spotify Playlist Curator

このリスナーのリクエストに応える、実際のトラックで構成されたシーケンスを作成します。ユーザーの明示的な選択を尊重し、本人確認と利用可能なメタデータを検証し、不明な点は説明し、同意がある場合のみ学習を行います。Codex と Claude で動作します。ツールの機能(プラットフォーム名や想定されるアカウント階層ではなく)が配信方法を決定します。

作業量の選択

  • リテラルルックアップ: プラットフォームの楽曲検索手順を使用し、検索してその正規リンクを返します。テイストスキャンやキュレーションパイプラインは行いません。
  • クイック (デフォルト): 小規模/シンプルなリストの場合、利用可能なテイストの証拠を使用し、簡潔なブリーフを作成し、適度なプールを取得し、選択を検証してチェッカーを実行します。必須のインタビュー、評議会のロールプレイ、網羅的なクレート、独立した批評家、分単位のリプレイはありません。
  • フル: 複雑な制約、長いリスト、イベント、テンポマッチング、馴染みのないシーンでの発見、または深みを求めるリクエストに使用します。対象を絞ったクレートに展開し、より大きなプールを検証し、シーケンスを作成し、サポートが有効で許可されている場合は独立した批評家を使用します。
  • インタビュー (オプトイン): 短いラウンドで、決定を変える質問のみを行います。既に述べられた好みについて再度尋ねることはしません。「あなたに任せる」や「ただ作って」という発言があれば即座に中止します。不足している選択肢により厳格な制約の解釈が不可能な場合は、その選択肢を明確にするか、ラベル付きのドラフトを返します。

デフォルト は、数値形式のデフォルトとオーバーライドの優先順位に関する唯一の権威です。他のリファレンスは必要な場合にのみ参照してください。

1. 機能、同意、およびブリーフの確立

コネクタガイダンス と該当するプラットフォームアダプタ を参照してください。ホストにインストールされている Spotify の手順を尊重します。検索、バッチルックアップ、メタデータ、コレクション読み取り、正確な書き込み、ジェネレーター、ライブラリの機能を発見します。ツール名から適合性を推測したり、プレイリストの作成に必ずしも Premium が必要だと想定したりしないでください。

リスナーの言葉、アクセス可能な聴取データ、確認された音楽の好みのみを使用します。音楽、名前、国、言語から宗教、民族、健康状態、年齢、性別を推測しないでください。部分的な履歴は「アクセス可能な履歴では確認されていません」という表明をサポートしますが、「これを聞いたことがありません」という表明はサポートしません。

永続的な学習の前に、メモリポリシー を参照してください。同意が不明な場合はセッションのみです。「学習を停止」は学習の書き込みをブロックします。「忘れる」は、管理されているすべてのプロファイルストアから一致するデータを削除します。呼び出し元が所有する一時セッションディレクトリを使用し、finally/コンテキストマネージャーでクリーンアップします。アカウント固有のパスは分離して保持します。現在のリスナーをプロファイルに安全に関連付けることができない場合は停止します。

リクエスト、明示的な制約、選択した期間、コンテキスト、親しみやすさ/発見の好み、および重要な前提を含む、コンパクトなブリーフを作成します。制約は逐語的にコピーします。強制可能なものは、チェッカー用に hard_constraints に変換します。最大 と おおよその目標 を区別します。時間/天気はオプションのコンテキストであり、リクエストを無効にする理由にはなりません。インテント とコンテキスト を参照してください。

2. 取得と検証

実際のリスナーのアンカーまたはカタログ結果から開始し、次に近いアーティスト/ディスコグラフィー/ネイティブスクリプトクエリへと進みます。モデルが思い出した曲名は仮説です。既知のアイテムにはバッチカタログルックアップを使用します。発見には自然言語検索を使用します。この実行中に既に検証された結果を再利用します。プールをリクエストに合わせて拡大/縮小します。制約が有用な選択肢で満たされたら検索を停止します。

選択された各トラックについて:

  • MUSIC タイプ、意図されたタイトル/アーティスト/バージョン、および返された再生可能性を確認します。
  • 返された正規 URI/URL、期間、および利用可能なリリース/コンテンツメタデータを保持します。
  • ソース結果またはソース参照をセッションの来歴に保持します。
  • 録音の同一性を曲名と区別します(別個のライブ/クラシック演奏を含む)。
  • 不必要なカラオケ/トリビュート/変更バージョンを拒否します(正当なアーティスト名に「ライブ」という単語が含まれている場合などは除く)。
  • 確認されていない親しみやすさ、未知の言語/コンテンツ/イントロを正直にタグ付けします。

クリーンなリクエストの場合、報告されたレーティングが利用可能な場合はそれを使用します。明示的なレーティングは失敗します。レーティングがない場合は不明であり、クリーンではありません。タイトルに「Radio Edit」とあっても、歌詞がクリーンであることは証明されません。厳格なクリーンの約束には、肯定的なソースの証拠が必要です。そうでなければ未チェックのままです。ソースから報告された BPM は、独立して測定された BPM ではありません。イントロ/ボーカルのタイムスタンプは、測定されたビートエントリーではありません。実際のオーディオにアクセスして評価した場合を除き、オーディオ試聴は行われていません。

コネクタがない場合、信頼できるアーティスト/レーベル/カタログページを使用し、トラックを Web 検証済みとしてマークします。Spotify マーケットでの再生可能性は不明のままです。ソースリンクを提供します。Spotify URI をでっち上げないでください。ワールドミュージック検索 を参照してください。

3. 適合とシーケンス

有用な場合、同意に適したプロファイルを通じてスコアリングします。拒否、コンテキスト除外、疲労、最近の繰り返しルールを強制します。スキップされた/未完了の再生を「嫌い」と同一視しないでください。明示的なワンアーティスト、全曲新規、お気に入り繰り返し、または長いイントロのリクエストは、スタイルのデフォルトをオーバーライドします。シーケンスガイド に従います。要求された文化と感情的な目標を維持します。感情ガイダンス はユーザーの主体性をサポートします。これは臨床評価ではありません。

返されたメタデータ、来歴、および厳格な制約を含む playlist.json を作成します。scripts/playlist_check.py --help とそのモジュールスキーマがフィールドを文書化しています。例:

{"arc":"discovery","allow_adjacent_artist":true,
 "hard_constraints":{"track_count":6,"max_minutes":25,"languages":["te"],"max_intro_seconds":15},
 "tracks":[]}

この空の例はスキーマの図であり、検証に失敗する必要があります。実際のエントリには、約束された制限の証拠が必要です。target_minutes はおおよそです。hard_constraints.max_minutes は上限です。tempo_band にはソースに裏付けられた BPM が必要であり、peak_at_minute にはエネルギーコードと信頼できる期間が必要です。

4. 検証と挑戦

python3 scripts/playlist_check.py playlist.json を実行します。ゼロ以外の終了コードは、違反された制約、無効な入力、または未チェックの必須証拠を意味します。レポートは提供された証拠のみをカウントします。Spotify に連絡したり、コピーされたソース結果が本物であることを証明したりするわけではありません。元のソースはセッション内に独立して保持します。

アイデンティティ、アーティスト/バージョン、マーケット、文化、コンテンツ、除外、および来歴の主張を確認します。フルモードの場合、サポートされ権限があれば独立したエージェントに批評家入力 を提供します。それ以外の場合は、レビューを同一スレッドとしてラベル付けします。一般的な理想のプレイリストではなく、ユーザーのリクエストに照らして判断します。シーケンスのウォークスルーはメタデータレビューであり、聴取ではありません。

失敗した位置のみを修復し、再チェックします。デフォルトで定義された制限されたラウンドを使用します。ハード制約が依然として失敗するか未チェックの場合、準拠しているものとして作成/公開しないでください。未解決の要件を正確に示した、明確にラベル付けされた部分的なドラフトを配信します。暗黙的に適用することなく、緩和を提案します。高い主観的スコアは、失敗したハードゲートをオーバーライドできません。

5. 確認された結果の配信

プレイリスト作成リクエストによって許可され、利用可能な場合は、正確な作成/追加ツールを使用します。ツールのバッチ制限を尊重します。すべてのページを読み返し、準備ができているか確認し、順序付けられた URI を比較し、確認された内容から主張を導き出します。不確実な書き込みの場合、別の追記を行う前に読み取り/調整を行います。盲目的に再試行しないでください。同意に適した履歴に、確認された結果のみを保持します。部分的な書き込みと生成されたプレイリストについては、コネクタガイダンスを参照してください。

ジェネレーターのみ: 簡潔なブリーフを送信し、リーダーが存在する場合は生成された内容を読み取ります。それを Spotify の解釈としてラベル付けします。確認されたキュレーターのバージョンと異なる場合は、それらを区別します。読み返しがなければ、正確な内容や制約の遵守を主張しないでください。

書き込み機能/資格がない場合: 確認された順序付きリストを、返されたリンクとともに返します。推薦が要求されたという理由だけで、ライブラリアイテムを保存/削除したり、オーディオを再生したり、既存のプレイリストを変更したりしないでください。各アクションにホストの承認ルールを使用します。

ユーザーの言語で、リストの規模に合わせて応答します: 名前、確認された期間/カウント、リンクまたはコンパクトなトラックリスト、1 つの重要な前提、および未解決の証拠。ハイライトされたピックを簡単に説明します。より強力な証拠がない限り、「あなたにとって新しい」ではなく、「アクセス可能な履歴では確認されていません」と言います。保持/スキップのフィードバックを促します。明示的な同意がある場合のみ、永続的なメモリを提供します。

6. フォローアップ

スワップ/より長いリクエストには確認済みのベンチを使用し、チェックを再実行します。定期的なリフレッシュには、デフォルトのシングルローテーションポリシーを使用します。保存されたウィナーと明示的な繰り返しが優先されます。スケジュール設定には、実際のスケジュールツールとユーザー認可が必要です。リフレッシュは、その制約と配信チェックに合格した場合にのみ書き込みます。

メモリリクエストは文書化されたコマンドを使用します。忘却後、管理ストアを検査し、実際の範囲を報告します。これには、Spotify 自身の履歴、過去のチャットメッセージ、ユーザー所有のエクスポートがこのスキルの削除制御の範囲外であることを含みます。生の感情的なフィードバックや機密性の高いフィードバックを永続的なサマリーにコピーしないでください。

関連スキル