** CURRENTLY DEPRECATED - Will update with compatible version soon **
Spotify plugin for Sero — browse playlists, play tracks, and let the Sero Agent build mixes for you.
- Spotify Web Playback SDK — in-app playback (requires Widevine DRM)
- Playlist browsing — sync your Spotify library, browse tracks
- Agent tools — create playlists, search tracks, get recommendations via the
spotifytool - OAuth PKCE — secure, client-only Spotify auth flow
Install in Sero → Admin → Plugins with:
git:https://github.com/monobyte/sero-spotify-plugin.git
Sero clones the source repo, installs its dependencies locally, builds the UI, and then hot-loads the plugin into the sidebar.
Install as a Pi package:
pi install git:https://github.com/monobyte/sero-spotify-plugin.gitThe agent gains a spotify tool with actions for playback control, playlist
management, and track search.
The Spotify Web Playback SDK requires Widevine DRM for audio decryption. Sero uses the castlabs Electron fork which bundles Widevine CDM support. On macOS, the Electron binary must also be VMP-signed with production credentials or Spotify's license server will reject playback requests.
One-time setup:
# 1. Install the signing tool
pipx install castlabs-evs
# 2. Create a free castlabs EVS account
evs-account signup
# 3. Sign the Electron binary (from the Sero desktop app directory)
cd apps/desktop && bash scripts/sign-vmp.shRe-run scripts/sign-vmp.sh after any npm install that re-downloads the
Electron binary (the signature is on the binary, not in source).
- Create a Spotify app at https://developer.spotify.com/dashboard.
- Copy your Client ID.
- Add this redirect URI in Spotify app settings:
http://127.0.0.1:5185/spotify-auth-callback.html(dev)
- Build the plugin:
npm install
npm run build- Sign the Electron binary for DRM (see Prerequisites above).
- Start Sero and open Spotify in the sidebar.
- Paste your Client ID, connect, and authorize.
npm run dev # Start Vite dev server on port 5185
npm run build # Production build → dist/ui/
npm run typecheck # Type-check the UI codeIf Spotify redirects to 127.0.0.1:5185 and shows ERR_CONNECTION_REFUSED,
the dev server is not running.
- Start the dev server:
npm run dev - Confirm port
5185is listening:lsof -i :5185
Tool name: spotify
Actions:
connection_statuslist_playlistssearch_trackssuggest_songscreate_playlistadd_tracksstart_playlistpause_playbacknext_trackprevious_track
State is global-scoped in ~/.sero-ui/apps/spotify/state.json (with workspace
fallback in Pi CLI mode).
sero-spotify-plugin/
├── extension/ # Pi extension (agent tools)
│ ├── index.ts # Extension entry point
│ └── lib/
│ ├── action-handlers.ts # Tool action implementations
│ ├── spotify.ts # Spotify API helpers (server-side)
│ └── state.ts # State file read/write
├── shared/
│ └── types.ts # Shared TypeScript types
├── ui/ # Federated React UI
│ ├── SpotifyApp.tsx # Main app component (MF exposed)
│ ├── components/ # UI components
│ ├── lib/ # Hooks and API helpers
│ ├── styles/ # CSS styles
│ ├── index.html # Vite entry HTML
│ └── spotify-auth-callback.html # OAuth callback page
├── package.json
├── vite.config.ts
├── tsconfig.extension.json
└── README.md