dicklesworthstone/frankensonos is a memory-safe Sonos speaker controller written in Rust. It handles its own speakers on the same LAN via SSDP/UPnP-SOAP/GENA, and ships a CLI, an HTTP API, and an MCP server together so that AI agents can operate the home. The commit 221f88ac of November 2, 2026 added one household condition to the path where a track is picked through search and played immediately.
A household is a unit that is divided according to the speaker zone group structure in this code. It distinguishes and checks between the case where the playback request carries no household id at all and the case where it carries one but that one differs from the current household. Household ids that do not exist were rejected from the start, but this time household ids that exist yet are different are rejected in the same way and returned with a NotReady error. At the same place, a check for when the speaker playback generation is out of sync also remains, and in that case as well playback does not start. As a result, a track obtained through search does not sound from the speakers of a house other than the one currently playing.
The implementation changed only 28 lines (+19/-9) in two places: the search/playback surface file in crates/fsonos-api and the simulation test file. On the test side, the zone group structure read via GetZoneGroupState is applied ahead of the location information lookup so that the playback path is checked against the basis of household splitting. However, the commit message states that the product tests were not run. Behavior in an actual home with real speakers and multiple households mixed in was not confirmed by this commit, so hardware verification is still needed in order to use it in a multi-household environment.