You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Airo now has the foundation for a Jockie-style music experience: provider-aware music tracks, direct licensed sample streams, an audio_service-backed playback path, and explicit guardrails that prevent YouTube/Spotify/Apple from being treated as raw background streams.
This needs to be productionized before release. The production requirement is cloud mode only: this feature must be available only when the user has enabled the cloud toggle / cloud mode. It must not appear or play in local/offline mode.
User Outcome
Users in cloud mode can search/play a safe music catalog, continue listening while using other Airo features, and control playback through the mini player / media controls. Users in local mode see no local music playback surface for this feature.
Coins UI cloud toggle patterns in groups_list_screen.dart and group_detail_screen.dart
Scope
In Scope
Gate the entire Music / Beats experience behind cloud mode.
Hide or disable /live/music, /beats, MiniPlayer, music search, and playback controls when cloud mode is off.
Add a cloud-mode CTA from the music entry point, using existing Airo cloud toggle UX patterns.
Ensure local/offline mode cannot start playback through direct streams, search, deep links, agent tools, mini player, or queue restoration.
Replace SampleLib demo catalog with a production cloud-backed licensed catalog service or a cloud-configured allowlist.
Keep MusicProviderAdapter / ResolvedTrack as the provider boundary for future providers.
Add provider status handling for:
Direct licensed cloud catalog: playable in background.
Spotify: metadata/search only until official SDK playback is implemented.
Apple Music: metadata/search only until MusicKit playback is implemented.
YouTube: visible-player only, excluded from background queue.
Ensure background playback uses audio_service on Android/iOS and degrades gracefully on web/test platforms.
Add telemetry for search, play start, play failure, provider unsupported, and cloud-mode blocked actions.
Add QA coverage for cloud-mode gating and background playback state transitions.
Out Of Scope
No YouTube audio extraction, yt-dlp, InnerTube, Lavalink YouTube source, or hidden audio-only YouTube playback.
No raw Spotify/Apple/Tidal audio extraction or transcoding.
No local/offline music catalog for this feature.
No copyrighted sample tracks unless Airo has explicit playback rights.
No Discord bot service in this issue. If needed later, create a separate backend/Discord issue.
Required Architecture
Cloud-Only Gate
Create a music-specific cloud availability provider, for example:
final musicCloudAvailabilityProvider =Provider<MusicCloudAvailability>((ref) {
// Read the app-level or feature-level cloud mode source.// Return enabled only when cloud mode is active and required auth/config exists.
});
The gate must be enforced in all of these layers:
Routing: local mode should not enter the full music player silently.
UI: music entry point and mini player should not expose playback in local mode.
Controller/service: direct calls to playTrack, playQueue, resume, and queue restoration must reject when cloud mode is off.
Agent/tooling: natural language commands like “play music” must route to cloud-mode CTA when cloud mode is off.
Persistence: local-mode startup must not restore a previous cloud music queue.
Problem
Airo now has the foundation for a Jockie-style music experience: provider-aware music tracks, direct licensed sample streams, an
audio_service-backed playback path, and explicit guardrails that prevent YouTube/Spotify/Apple from being treated as raw background streams.This needs to be productionized before release. The production requirement is cloud mode only: this feature must be available only when the user has enabled the cloud toggle / cloud mode. It must not appear or play in local/offline mode.
User Outcome
Users in cloud mode can search/play a safe music catalog, continue listening while using other Airo features, and control playback through the mini player / media controls. Users in local mode see no local music playback surface for this feature.
Current Foundation To Inspect
Relevant code paths:
app/lib/features/music/domain/services/music_playback.dartapp/lib/features/music/domain/services/music_provider_adapter.dartapp/lib/features/music/domain/services/direct_licensed_music_provider.dartapp/lib/features/music/domain/services/audio_service_music_service.dartapp/lib/features/music/domain/services/music_service.dartapp/lib/features/music/domain/services/just_audio_music_service.dartapp/lib/features/music/domain/services/beats_audio_handler.dartapp/lib/features/music/application/providers/music_provider.dartapp/lib/features/music/presentation/screens/music_screen.dartapp/lib/features/music/presentation/widgets/mini_player.dartdocs/features/music/JOCKIE_STYLE_MUSIC_RESEARCH.mdRelated cloud/local pattern to reuse:
app/lib/features/coins/application/providers/cloud_mode_provider.dartgroups_list_screen.dartandgroup_detail_screen.dartScope
In Scope
/live/music,/beats,MiniPlayer, music search, and playback controls when cloud mode is off.MusicProviderAdapter/ResolvedTrackas the provider boundary for future providers.audio_serviceon Android/iOS and degrades gracefully on web/test platforms.Out Of Scope
yt-dlp, InnerTube, Lavalink YouTube source, or hidden audio-only YouTube playback.Required Architecture
Cloud-Only Gate
Create a music-specific cloud availability provider, for example:
The gate must be enforced in all of these layers:
playTrack,playQueue,resume, and queue restoration must reject when cloud mode is off.Provider Contract
Keep provider resolution explicit:
Only
directStreamtracks from the cloud licensed catalog can enter the background queue today.Production Catalog
Move the demo catalog out of production behavior. Use one of:
ResolvedTrackrecords.Each catalog item must include:
Acceptance Criteria
/live/music,/beats, mini player, agent tools, deep links, queue restoration, or service calls.audio_service/just_audio.audio_serviceis unavailable.flutter analyze lib/features/music test/features/musicpasses.flutter test test/features/musicpasses.Test Plan
Risks / Notes
Agent / Ownership
Main agent:
agent/mobile-uiSupporting reviewers:
agent/securityfor provider/compliance guardrailsagent/core-architecturefor shared cloud-mode provider designagent/qa-testingfor background playback and mode-gating QAEstimate
5-8 engineering days, depending on whether a shared app-level cloud toggle already exists and whether the licensed catalog backend is ready.