Skip to content

Changelog

  • stop reconnect recovery from creating another audio sink when the previous native sink is still shutting down
  • stop a stuck CoreAudio teardown from accumulating replacement sinks and cleanup threads
  • retry another Spotify CDN when the first response is not playable audio
  • resume the interrupted track after the audio watchdog reconnects the embedded player
  • wait for the old daemon process to exit during stop and restart, then terminate that exact PID if its audio cleanup hangs
  • keep player cleanup off the async runtime so a stuck audio driver cannot freeze daemon shutdown
  • make the live playback release check wait for restart recovery and verify audio after the watchdog window
  • resume the current track after a daemon restart instead of restoring a silent playing state
  • start playback once after an audio-output change and report any resume failure to the caller
  • make the opt-in live playback check restart the daemon and confirm that audio still advances
  • recover playback automatically when Spotify rejects cached device credentials
  • keep the current track playing when the macOS audio output changes
  • wait for Spotify’s final playback result before CLI commands report success
  • stop unchanged playlist refreshes from repeatedly consuming Spotify API quota
  • daemon hygiene from review follow-ups (#109) (7ab9aa3)
  • EQ peak limiter replaces static headroom (#102) (e29fbba)
  • spotuify events + unknown-event tolerance + event-kind parity (#103) (e35aca3)
  • document how the spotuify agent skill configures and tests Last.fm or ListenBrainz hooks (cd47a5b)
  • build the downloadable skill reproducibly and add an optional local-sync command (cd47a5b)
  • stop tag releases when their changelog entry is missing or the downloadable skill is stale (0a6b55d)
  • visualizer motion parity with cliamp + sign-off gallery script (#104) (8059737)
  • keep artist follow state unchanged until the daemon confirms the request, and show failures in the TUI (53bafe0)
  • pass cached track, artist, album, audible time, and playback start time to qualified-listen hooks (53bafe0)
  • replace the Last.fm and ListenBrainz placeholders with working scrobble recipes that check API responses (53bafe0)
  • visualizer styles batch 2 (waveform + particle styles) (#98) (bdefb70)
  • visualizer styles (cliamp port, batch 1) (#95) (185497a)
  • 10-band equalizer across all clients (#94) (494adfb)
  • rate-limit cooldowns gate only their own sync domain (3240830)
  • podcast playback speed and bookmarks across all clients (819fe3c)
  • build the time-stretch shim with cc so Windows compiles (598b09a)
  • satisfy Rust 1.98 unused-import lint and allowlist the clock parser (0a9046f)
  • trim README and refresh guides, research, and demo asset (7dd3418)
  • site: update vulnerable build dependencies (fa77138)
  • stop the Mac reclaiming playback from the car on session reconnect (b7e2399)
  • cli,spotify: repair artist likes, show playback, and legacy share-link resolution (702ae8c)
  • cli: repair provider-abstraction CLI regressions (235b98a)
  • cli: validate queue/playlist target selection before daemon contact (261b787)
  • core,daemon: drop remaining u128 from search analytics payload (1be6ea1)
  • harden config load and sync/auth after provider abstraction (4a66651)
  • harden core/protocol wire compatibility (d99d019)
  • macos: harden search, mutation retry, IPC decode, and reseed (02deca8)
  • mcp,tui: repair provider-abstraction client regressions (2f5db58)
  • mcp: only promise safe mutation replay when the daemon dedupes (441b1a8)
  • spotify,provider-fake: close provider adapter defects from d52aa98 review (7d65ad7)
  • spotify: close the lock-free credential-migration race and temp-path collision (a130475)
  • store,search: harden provider-abstraction migrations and derived-data paths (320f5a8)
  • system: include provider in feature-gated auth-error notification match (b58e388)
  • add provider abstraction (d52aa98)
  • record Apple Music feasibility findings and settle as D026 (b99b751)
  • spotify,daemon: stop burning the first-party rate budget on doctor + isolate cooldowns by bearer (#74) (bd323b2)
  • tui: reorganize navigation into 7 focused tabs and from-anywhere surfaces (#73) (b6e90ea)
  • daemon,tui: stop the queue flashing empty on next, and fix failed-toast styling (#71) (7e52eae)
  • cli: TTY-aware styled human output with aligned columns (#68) (f6edfbe)
  • macos: design tokens, shared load/error states, accessibility polish (#66) (b8e53b3)
  • player: fall back to system default when the configured audio output is gone (#70) (371095e)
  • tui: dedup spinner/volume helpers and harden glyph widths (#69) (922f748)
  • tui: unify color constants into one semantic token system (#65) (0c6a94a)
  • sync Cargo.lock workspace versions so --locked release builds pass (#61) (9c0a055)
  • prompt first-party-only users to migrate to dev-app auth (#59) (38dcfc9)
  • hybrid Spotify auth with dev-app reads and first-party playlist/library writes (#57) (bee8fcb)
  • add desktop theme setting (system/light/dark/adaptive) (#51) (94b7706)
  • lazy-load liked songs with scroll pagination (#52) (c395943)
  • play liked songs track within full collection context (#55) (be5b50d)
  • keep the embedded device listed while its player is idle (29f9771)
  • derive auth mode from stored credentials when env unset (c67b047)
  • derive tui palette from cover art (8a82068)
  • import lastfm listening history (04cc39c)
  • keep followed playlists usable (f59dd55)
  • point llms-full.txt page urls at spotuify.app (96c82eb)
  • prevent mobile horizontal overflow on landing page (bf6c30c)
  • stop audio-flow watchdog stealing playback from id-less devices (c32d9a6)
  • auto-resolve latest release in windows install snippet (a1b2473)
  • correct stale command and mcp tool counts (58, 41) (c84e14f)
  • drop vanity stats strip from landing page (8ba3a1e)
  • lead landing page with value prop and runnable examples (93905cc)
  • lead landing with command-line framing, trim install block (eee9243)
  • record album reactive tui workstream (389b94e)
  • regenerate cli reference from current command snapshot (787553f)
  • macos: add album save/unsave button to detail view with track art fallback (97a5a29)
  • library: update in-file test and url-encode ids in endpoint paths (4a09dd7)
  • library: use type-specific Spotify endpoints for library saves (a4a8021)
  • macos: album save button rolls back on failure and grid uses fallback art (bc8c9d4)
  • add bugs and security audit report (f4e3824)
  • add half-finished features audit report (7b1927d)
  • add outstanding work audit report (0c8c6e4)
  • add quality architecture audit report (eb7eda5)
  • add races and concurrency audit report (b369e72)
  • consolidate audit backlog (8a2eea2)
  • daemon,macos: stop relaunching the daemon after an intentional stop (4597f9a)
  • daemon: stop permanently latching the player reconnect give-up (0d79f87)
  • ipc: make GetDoctorReport serializable and stop silent connection drops (d92bfef)
  • player: pin forked librespot with session-recovery backport (PR #1692) (1ff33e9)
  • add lyrics follow (b6a7759)
  • add macos client (98b7d18)
  • add media browse commands (b40b543)
  • analytics: playlist-level top-k (0cf1248)
  • analytics: sink-accurate audible time from the embedded counter (aa87ac6)
  • artist discography browser, listening reminders, and macOS client (f7374a0)
  • cli: add unlike (library unsave) to close a CLI parity gap (12c2fb6)
  • cli: config show –format json (full config dump) (2afe3d8)
  • cli: play Spotify URIs and share links directly (99ae7d2)
  • daemon: bound every IPC request with a category-aware timeout (bc62cbe)
  • daemon: cut Spotify API volume ~90%, surface rate limits + loading states (cd5f9c9)
  • daemon: follow the system default audio output (macOS) (0fb2bef)
  • daemon: self-heal zombie player sessions (bd903de)
  • discord: real Rich Presence from playback events (a63b973)
  • doctor: report terminal + cover-art protocol (client-side) (491b238)
  • instant queue sync on next and full context queue retention (5583dc5)
  • ipc: atomic daemon startup lock + peer-credential check (a888a8f)
  • macos: add album label and seek bar to menu bar popover header (20f60ec)
  • macos: add column headers to track list table (4ac2324)
  • macos: bundle daemon+CLI in app for self-contained install (2b33137)
  • macos: full DaemonRequest protocol parity + enforcement test (c12a996)
  • macos: full Settings window (visual config editor) + Check for Updates (dcbe79e)
  • macos: global keyboard control (transport + view navigation) (c5ee6ea)
  • macos: new app icon (glowing equalizer, gradient squircle) (5da8bf8)
  • macos: pointing hand cursor on nav link hover (973b102)
  • macos: skeleton placeholders for first-load surfaces (73ad16c)
  • macos: update banner + Settings toggle + podcast overhaul (9d169cb)
  • mcp: live resource push over stdio (87ed5db)
  • Mercury-backed related artists + radio stations (67d2780)
  • per-client viz focus voting and one-click macOS app updates (4146a08)
  • protocol v5, TUI parity, and macOS Apple-Music client (0ef3c09)
  • refresh macOS client (9c25f93)
  • release album-reactive tui fixes (9f55cf7)
  • switch audio output live without a daemon restart (8cdfc86)
  • system: enrich notifications, media controls, and hooks from playback (1a224ee)
  • system: Windows SMTC via a hidden-window driver (0d24850)
  • tui: delete-playlist + bulk-unsave behind a confirm modal (1f48213)
  • tui: responsive narrow-width layout and album-adaptive accents everywhere (6c7b1b0)
  • tui: width-filling contextual hints; surface queue-whole-playlist (f3fd135)
  • update-awareness + cross-show episode feed (protocol 6) (3373e32)
  • add player bar device switcher (331e821)
  • audit waves 0-1 for cleanup and P1 correctness (1c304c3)
  • avoid windows cli stack overflow (df71b03)
  • bound windows smoke build time (5bc1f91)
  • clean up fake daemon on windows (ea9dfaa)
  • cli: selection misses exit 2, not whatever the query text matches (0f82b94)
  • cli: structured exit codes, JSON contract, IPC robustness, link parity, –wait (b1fcdd8)
  • daemon: actually enable media controls + wire the opt-out (307b850)
  • daemon: queue integrity + optimistic reconciliation holes (35fe7c7)
  • daemon: satisfy clippy (sort_by_key + episode-feed type alias) (76aaa93)
  • daemon: start on Windows by keeping the named pipe off the filesystem (8c5793b)
  • extend daemon startup wait (f28ffee)
  • extend the side rail behind the titlebar (c7034a0)
  • honest queue-add reversibility, queue dedup, and undo dry-run preview (dc58c9d)
  • keep optimistic queue appends visible (ad1f1df)
  • keep playback live through empty Spotify Web API polls (ddac640)
  • keep test daemon watchdog cross-platform (5347d8e)
  • keep windows entrypoint safe (5e4c57c)
  • keep windows named pipe listener ready (09784ce)
  • launcher: don’t restart a newer daemon (post-upgrade livelock) (50b06b4)
  • library: paginate liked songs past Spotify’s 50-per-page cap (c3517b2)
  • macos: address PR review comments (df6a565)
  • macos: align track table column headers with row values (381150f)
  • macos: align track table header columns with rows (1e66e51)
  • macos: use consistent column slots so every track row has the same structure (43e367d)
  • macos: don’t shadow a system spotuify with the bundled CLI (02d521a)
  • macos: flexible album column width, title fills remaining space (9eb990f)
  • macos: group action buttons into fixed-width container, align header placeholder (8c693d3)
  • macos: headphone/media-key play-pause routing (250d017)
  • macos: move table header outside scroll view, match padding to rows (7866505)
  • macos: now-playing layout, mode-pill hit target, heart feedback (c221ece)
  • macos: player bar fits any width + confirmation toasts for actions (d320770)
  • macos: remove top padding gap between table header and first row (e49b474)
  • macos: right-align collection row meta into a fixed column (6cbe64b)
  • macos: stop Liked Songs header breaking at narrow widths (2ac69f6)
  • macos: update banner false positive + apply audio-output changes (4c9f893)
  • macos: updater off the main actor, pipe drains, connection races, vote hygiene (8773afa)
  • macos: use .pointerStyle(.link) instead of NSCursor push/pop for hover cursors (4ad94f4)
  • macos: wrap table header divider inside VStack to align with rows (3bd76b5)
  • normalize windows cli help snapshots (550a681)
  • player: heal silent device transfers for contextless playback (ed1dd73)
  • preserve Spotify queue entries (c805a2b)
  • reject blank client id (374b9eb)
  • repair v1 hardening ci fallout (533332c)
  • repair windows fingerprint state (f856ae3)
  • seed fake smoke config (a1f04b2)
  • site: force esbuild 0.28.1 to clear the npm audit gate (bad2555)
  • stabilize fake daemon ci tests (f0de625)
  • sync: probe /me/player at idle cadence when nothing is playing (cfad16f)
  • tui: keep the last-played track on screen when idle (6679290)
  • use windows pipe paths in cli tests (c629f56)
  • viz vote expiry, loopback off-runtime init, shared chrome geometry (f12d0be)
  • wire macOS playback controls (6988110)
  • daemon: split the dispatch god-function into handler modules (78b20dd)
  • extract spotuify-launcher crate, decouple CLI from daemon (226655a)
  • macos: rename ArtistLinkLabel to NavLinkLabel for reuse (0d6a38b)
  • remove analytics export/import scrobble stubs (7deb48b)
  • add hero video shooting script (ce511ce)
  • add windows install instructions (0c84ccb)
  • align README with daemon-first positioning and add daemon proof video (d6cfeab)
  • close the audit with roadmap, current-state, discovery guide, and em-dash fixes (483a12f)
  • cli: generate reference pages for radio + artist related (be45aff)
  • dedupe installs to Homebrew-only in the ship-it flow (9383d1e)
  • macOS app is self-contained (bundles daemon + CLI) (26ef10b)
  • macOS DMG is now signed + notarized (drop the right-click caveat) (567eb99)
  • macos: add doc comments to detail views and shared types (cb1db73)
  • notification template tokens + the hook positional-arg contract. (1a224ee)
  • prominent Download for macOS button + stable DMG link; refresh CLI reference (4768bf5)
  • record launcher-crate extraction deferral (D021) (101cb52)
  • replace em dash in config media-controls note (site validate gate) (c1980cb)
  • reposition the landing page around the daemon and its four clients (6d733de)
  • skill: correct queue semantics, add discovery + live audio, refresh MCP tool list (e26b048)
  • update-awareness + episode feed (staying up to date, D018) (32e5cba)
  • sharpen homepage positioning (948a205)
  • prepare spotuify 0.1.39 (633b5a1)
  • keep lyrics and cover art synced (c3ec454)
  • update homepage hero video (06f6231)
  • prepare spotuify 0.1.38 (abbf669)
  • replace keychain auth with file store (5447301)
  • keep playlist context queue visible (012c195)
  • [] add analytics + ops CLI subcommands (6757bef)
  • [] add core types for Phase 10 analytics (1bec408)
  • [] add cross-platform CI + release matrix (3b86633)
  • [] add cross-platform paths + IpcStream module (498670f)
  • [] add flake.nix + cargo-deb + Windows console FFI dep (40fae87)
  • [] add HealthClass::Unhealthy + error-based doctor election (cc5ceef)
  • [] add hook_executor + listen-qualified recipes (b39dd6e)
  • [] add operations CRUD + listen_facts queries (6519f23)
  • [] add Phase 13 CLI surface (panic hook, log-format, globals, bug-report, generate) (1c011ef)
  • [] add Phase 9 player backends + AudioCounterTap (2dd45ab)
  • [] add platform service installers (887a4fe)
  • [] add PrivacyGate to spotuify-sync (37138d7)
  • [] add reload/reconnect/search-prune daemon requests (1a556e3)
  • [] add souvlaki media-controls + notify-rust + Discord RPC modules (65870b7)
  • [] add Spotify inverse mutators + enriched User-Agent (80d5699)
  • [] add spotuify-keychain crate (8ee01d4)
  • [] add TUI ops panel + u-key undo + confirm-modal scaffold (be40fe0)
  • [] add TUI ops panel under Diagnostics (61c555c)
  • [] add undo module + ops + analytics handlers (9c5365e)
  • [] add v4+v5 SQLite migrations (08e5c57)
  • [] capture pre-state + implement undo/redo for Phase 12 (9856a52)
  • [] extend Config with PlayerConfig + AnalyticsConfig (d000135)
  • [] extend protocol with analytics + operations surface (0a7ee0d)
  • [] render full op detail + plan/pre_state in ops show –diff (3829b5a)
  • [] scaffold spotuify-system crate with cover cache + shell hooks (7d8cc82)
  • [] wire analytics + ops MCP tools (9291208)
  • [] wire player factory + SessionTracker into daemon state (0dae611)
  • [] wire SystemIntegration actor into daemon event fan-out (1fb221f)
  • activate-first guard for embedded queue mutations (88a1811)
  • add agent playlist workflow (3b2dc21)
  • add batch URI mutations (a353750)
  • add daemon event refreshes (552b8f3)
  • add local cache search and sync (b9306bd)
  • add player-first TUI redesign (50ff672)
  • audio crate analyzer + cpal/pipewire loopback capture (76c36dc)
  • auth: silent OAuth + typed AuthRevoked + diagnostic logging (e083fd5)
  • choose the embedded player’s local audio output device (c208642)
  • clearer error when transferring to an Alexa/Echo device (1236002)
  • cli crate command surface (cache + hooks + mcp + mpris + viz) (e195c3c)
  • cli: streaming search, search-page, –pages, auth-revoked retry, daemon login nudge (052d65c)
  • daemon crate clock + queue_warm + retention + viz coordinator + session tracker (97276f1)
  • daemon: push-state architecture for playback/queue/devices (cfa2582)
  • daemon: wire request handlers for push-state + auth-revoked + optimistic transport (15351a8)
  • device: stable SHA-1 device_id + replace-on-refresh device cache (d8faf3a)
  • don’t auto-restart a stale daemon mid-playback (1cc4595)
  • first-party Spotify login (keymaster + login5) (dd86966)
  • initialize spotuify (293c1d4)
  • keychain crate cross-platform credential storage (b99370e)
  • lyrics crate with mercury + lrclib providers + alignment + parser (1c22434)
  • make TUI home actionable (1f793c5)
  • mcp crate http + stdio + server transports + bridge expansion (4f8fcb0)
  • phase-6.1: typed SpotifyError + classifier with adversarial tests (ad1f7cb)
  • phase-6.2: Spotify payload compat normalizer (852d4e7)
  • phase-6.3: rate-limit middleware (retry decisions, backoff, budget) (304a0e6)
  • phase-6.4: schema v2 (snapshot_id, freshness, sync_generation) (ef2fb3f)
  • phase-6.5/6.6/6.8/6.9: wire typed cores into the binary (9c5a432)
  • phase-6.5: snapshot_id field + sync refetch gate helpers (a3e07cb)
  • phase-6.6/6.7: two-stage receipts + new typed daemon events (1afa564)
  • phase-6.6: receipts table + lifecycle in spotuify-store (e7c57b4)
  • phase-6.8/6.9: refresh planner + recent-event log + doctor findings (9799eb2)
  • phase-8.1-8.3: MCP server core (catalogue + confirm + bridge) (0631e81)
  • phase-8.4-8.8: MCP resources catalogue + README + decision log (8ccc732)
  • phase-8.6/8.7: JSON-RPC 2.0 dispatch + spotuify-mcp stdio binary (b238a28)
  • phase-8: spotuify-mcp dispatches executable Requests to the daemon (4bfd9e1)
  • player crate librespot sink chain + viz tap + premium gate + token bridge + recovering sink (929c9ad)
  • pre-existing core/daemon/tui/player work + queue dedup + librespot queue_add (eedcc38)
  • preserve queue across sessions when Spotify drops the device (3730a2b)
  • protocol crate event log + receipts + agent playlists request types (fe01959)
  • reroute 8 playback controls through embedded librespot Spirc (ea6207f)
  • route music controls through daemon IPC (6e629c9)
  • search/sync/store crate updates for analytics + listen facts (cc525a7)
  • search: concurrent per-type Spotify fanout (2d2708a)
  • show playlist and album artwork in tui (10ff578)
  • spotify crate auth scopes + rate limit + selection + compat + spotifyd helpers (c9657ac)
  • spotuify playlist set-image (custom cover art) (1c50241)
  • system crate cover cache + media controls + discord rpc + hooks (51b5064)
  • teleprompter lyrics + softer queue selection highlight (07389ca)
  • TUI banner to restart the daemon after an in-place upgrade (09b349d)
  • tui crate widgets (album art + spectrum + style) + now playing module (143874a)
  • TUI picker for the local audio output device (19fcb46)
  • tui: deterministic streaming-search pane focus and order (d29c49f)
  • tui: push-state client, streaming search panes, snappy transport, auth modal (1b6560a)
  • activate embedded device so volume and transport work (2a6dd17)
  • auth: cache Spotify token to disk so daemon doesn’t re-prompt keychain (1282b76)
  • auto-play first selection when queueing with no active device (e22fa2f)
  • avoid playback rate-limit preflights (da05376)
  • bound provider rate-limit waits (8c6f6f7)
  • call POST /me/playlists instead of POST /users/{user_id}/playlists (3587625)
  • consolidate Spotify endpoints; route playlist writes to /items (f79917f)
  • daemon: log rotation + tantivy noise filter + zombie preflight (c47d14b)
  • daemon: make cargo build produce a working daemon by default (9c95453)
  • declare Homebrew portaudio dependency (404343e)
  • escalating global backoff so the daemon self-heals from throttling (b6d93a8)
  • harden first-party auth (review findings) (0d6fc7a)
  • harden public release security (f2058e5)
  • harden Spotify runtime reliability (8c62d80)
  • isolate dev and prod runtime state (7ebeb28)
  • isolate target builds from prod daemon (6bf348a)
  • load docs fonts without blocking render (e8a87a9)
  • poll devices and queue on slower lanes than playback (10f4c84)
  • preserve playback context and audio defaults (98f25bd)
  • record operations log + add playlist unfollow + auth bearer (21c8635)
  • recover onboarding from blank config (d45cb56)
  • reduce keychain prompt fanout (e404766)
  • reduce startup Spotify polling (3e2c9f7)
  • revert Spirc::add_to_queue + PlayerEvent::SetQueue (not in librespot 0.8.0) (2f97351)
  • search: clamp Spotify /v1/search limit to 10 (empirical cap) (c99e576)
  • search: CLI –source default flip + bump default limit to 50 (a1b9fc0)
  • search: dedup merged per-type results + raise TUI timeout to 30s (49779a5)
  • search: default discovery surfaces to Spotify (was Hybrid) (bc8392b)
  • search: drop multi-type limit to 20 (Spotify rejects 50 here) (6dadc84)
  • search: fan multi-type queries into sequential per-type requests (acb268f)
  • search: make Tantivy QueryParser AND-by-default (d87cdfd)
  • search: raise Spotify /v1/search limit cap from 10 to 50 (f6854fb)
  • search: reject queries >144 chars with a clear error (1515a89)
  • search: render artist + album subtitle under each search result (892ab11)
  • search: stop polluting library Tantivy index with catalog hits (ad0acc0)
  • silence linux log path warning (f6b2b14)
  • SPOTUIFY_FAKE_SPOTIFY routes to MockPlayerBackend, expose mock unconditionally (fc09101)
  • stop auth prompt storms (478f634)
  • stop chronic Web API rate-limiting under first-party auth (a34aa06)
  • stop startup cache-warm bursts that re-feed the rate limit (25988bd)
  • tui: keep library cursor inside its visible panel (eab4999)
  • unstick lyrics “Fetching” on track-change race (67026cc)
  • AnalyticsSink trait + analytics types into spotuify-core (ad558ea)
  • drop dead spotifyd_* fields from Config + DoctorReport (7348bc2)
  • extract spotuify-core and spotuify-protocol crates (28aa30f)
  • extract spotuify-store and spotuify-search crates (6acb26e)
  • phase 0 drops Spotifyd and ConnectOnly backends in favour of embedded playback (808fe3f)
  • phase-7: break the cli↔daemon cycle; move OutputFormat to protocol (d2a21e1)
  • phase-7: extract config/auth/spotifyd/agent_playlists/selection (43f65c9)
  • phase-7: extract output, actions, commands, ipc_client, analytics types (3ad4291)
  • phase-7: move daemon + TUI + analytics + diagnostics into crates (675350d)
  • phase-7: move src/spotify.rs and src/sync.rs into their crates (6ce96de)
  • simplify workspace and harden daemon accept loop (4119e70)
  • SpotifyClient holds Arc<dyn AnalyticsSink> – cycle broken (9ccbbf4)
  • SyncContext trait – the sync↔daemon::state seam (e1f19bd)
  • [] add D013 HealthClass + D014 competitor study + Phase 5 note (5cca1db)
  • [] rewrite README for cross-platform install + repo move (da07e7b)
  • add demo media and agent skill with mcp integration (3c6e22b)
  • add idiomatic-rust rubric and backlog (11593b2)
  • add phase 6-17 implementation plans and competitor research (b9f8f7d)
  • add player screenshot asset (7b00876)
  • add security audit v2 (a3ad5f0)
  • add spotuify docs site (fb92141)
  • add visual revamp research + 23 TUI snapshot baselines (81b795d)
  • agents: adopt mxr’s CLI-first operating rules (5e5ecc8)
  • agents: daemon-owns-state doctrine + symlink CLAUDE.md → AGENTS.md (f2ba31a)
  • correct remaining dev-app onboarding references (e0294b4)
  • document audio-output, audio-outputs, and search-page commands (f8eb793)
  • document shell workflow shortcuts (a57b1d3)
  • first-party login onboarding (bd6a919)
  • fix Homebrew install commands (70b8ed4)
  • lead README with plain positioning and honest install matrix (c7783bd)
  • refresh guides + reference for recent shipped changes (a525922)
  • refresh root readme + contributing guide (ef9f271)
  • rewrite README + ARCHITECTURE + AGENTS narrative for librespot-only (ea55edc)
  • serve demo gif from site/public for a stable URL (af7cc32)
  • sharpen landing positioning (name prior art, lead pipeable CLI) (17f2a08)
  • update astro docs site content + add new CLI references (ea8c797)
  • update implementation phase notes + add observability plan (91103e7)
  • widen landing demo (a252a0f)