# Chris 筆記｜看到別人用 Codex DJ Spotify，我讓 Claude 做了一個 Apple Music 版

> 讀書筆記 · 2026-08-21 · Chris Hsu
> 原文連結：https://x.com/nickbaumann_/status/2090551906657517876
> 本頁 HTML：https://chrisincite.github.io/notes/20260821-apple-music-dj.html
> 短連結：https://os.housearch.net/n/9

看到那則推文的時候，我想到的是能不能用 Claude 在 macOS 上也做類似的開發，但是我是 Apple Music。所以就安排 Claude 來做這個專案了。

過程中最意外的是，本來沒有設想到可以用 AppleScript 來做，但沒想到做起來是蠻順利的，讓我見證了 Opus 5 的強大。

這個工具很好用，我應該會經常地使用，然後也把它上傳到 GitHub，並且公開分享。程式與安裝檔都放在 [chrisincite/apple-music-dj](https://github.com/chrisincite/apple-music-dj)，有興趣的人可以直接拿去用。

![Chris 筆記｜看到別人用 Codex DJ Spotify，我讓 Claude 做了一個 Apple Music 版](img/20260821-apple-music-dj-cover.png)

## 摘要 / Summary

這是一支常駐在螢幕角落的 macOS 小程式。你在它的輸入框打一句話描述現在想聽什麼氣氛，它就持續幫你的 Apple Music 排歌——維持一份十二首的佇列，播到剩不到八首自動補上，你按讚或按不喜歡它會跟著調整。

原推文裡，Nick 讓 Codex 用 computer use 操控 Spotify，靠心跳維持佇列，旁邊一支小 app 給回饋。Apple Music 版沒辦法照抄，因為 Spotify 有佇列 API 而 Apple Music 沒有。最後走的是 AppleScript：佇列的實體就是「音樂」App 裡一個叫「🎧 DJ」的播放清單，程式只往末端追加、不動已經播過的部分，所以接歌是系統原生的無縫播放，而不是逐首點播。換氛圍的時候也只清掉正在播那首之後的部分，當下這首會完整播完。

選曲完全靠規則，不呼叫任何模型、不連網、不需要 API key。每首歌的分數來自六層：氛圍詞典把「專注／深夜／早晨／放鬆／振奮／失戀／懷舊／古典／爵士／雷鬼／抒情」這類關鍵字對應到曲風加減分；拿你打的那句話去比對你自己既有的播放清單名稱；認得「不要有人聲」「放鬆但不要古典」這種否定說法；讀古典曲名裡的速度標記，快板與進行曲在要安靜的時候扣分、慢板與夜曲加分；按讚按不喜歡累積成藝人與曲風的權重；最後是重複與時節的過濾，近六小時播過的降權，聖誕與賀歲曲平常不會冒出來。

其中最有效的其實是第二層。「失戀時聽的周杰倫」這種自己取的播放清單名稱，本身就是最準的語意標籤，比任何曲風分類都貼近你當下想聽的東西。

第一版做成浮動小窗加 Python 常駐程式加 launchd 四塊分離的架構，後來為了能打包成 DMG 分享出去，把選曲與心跳整個改寫進 app 本體，變成單一一支不依賴 Python、不需要安裝腳本的程式。

## 重點 / Keypoint

**安裝**：到 repo 的 Releases 下載 `AppleMusicDJ-*.dmg`，把 app 拖進「應用程式」。第一次開啟會被 macOS 擋下來說「無法驗證開發者」，因為這支 app 沒有經過 Apple 公證——在「應用程式」裡對它按右鍵選「打開」，再按一次「打開」就好，只需要做這一次。啟動後它會問「Apple Music DJ 想要控制『音樂』」，必須允許，不然沒辦法排歌。

**需求**：macOS 13 以上的 Apple Silicon 機器、Apple Music 訂閱，而且「同步資料庫」要開啟（音樂 App → 設定 → 一般 → 同步資料庫）。它只從你已經加入資料庫的歌裡挑，不會去 Apple Music 的目錄挖新歌。

**用法**：點小窗右上角的 `⌄` 展開，在輸入框打一句氛圍就好，像是「深夜寫程式，安靜不要有人聲」「早晨咖啡」「夏天海邊」「放鬆但不要古典」「想聽聖誕鋼琴」。四顆按鈕分別是：👍 之後多排這種、👎 封鎖這首並少排這類（同時跳過）、＋ 存進「🎧 DJ 精選」播放清單、⏭ 跳過。展開區還有「接下來」與「剛剛播過」兩個分頁。

**命令列**：repo 裡的 `cli/dj` 是同一套狀態的遙控器，適合從終端機或腳本控制。把它連到 `~/.local/bin/dj` 之後，可以用 `dj on "深夜寫程式"` 設氛圍並開啟小窗、`dj vibe "早晨咖啡"` 換氛圍、`dj now` 看現在播什麼與接下來十首、`dj history` 看剛剛播過的歌，以及 `dj up`／`down`／`keep`／`skip` 這四個跟按鈕等效的指令。
