First the player reflects what the shell has done, then it drives the shell, then, if ever, a model sits inside the player — and last the whole stack leaves the desk for a device in the pocket. Each tier is a label on the issue tracker and every line below is an issue, so the boxes here follow the tracker and not the other way round. The live list is label:roadmap.
Nothing written into the player's database; the player reads what the shell leaves beside the music.
DoneRead-only surfaces fed by flacli --compact status, the JSON contract the shell already keeps for agents. Polled only while a job is running.
Doneflacli side: a stable status summary for players · one installer for the whole stack
The first write actions from the player into the shell. The shell's rules hold: naming the music is the yes, and Soulseek code stays out of this repository.
Doneflacli side: flacli serve, a session D-Bus interface with signals
Optional, and opened only once Tiers 1 and 2 are in. Claude Code with the flacli plugin, or any MCP client, already is this agent.
The stack off the desk: a digital audio player that carries MPD, a Nicotine+ core with the bridge, and flacli. Nothing hosted, nothing bought from anyone, nothing that phones home.
flacli side: a headless Nicotine+ runtime, aarch64