Privacy And Security
Local-first data behavior, approximate location lookup, and vulnerability reporting.
RadioCLI does not require secrets or accounts.
Local Agent Control
Agent control is opt-in. Its MCP transport is stdio, and active playback uses a
short-lived authenticated HTTP endpoint bound only to 127.0.0.1. The random
bearer token and port are stored in a user-private runtime file. Requests are
serialized, stale discovery records are removed, and a single-owner lock keeps
two local agents from starting competing players. The endpoint is not exposed
to the LAN or internet.
MCP and radiocli agent can play only stations saved by RadioCLI or opaque IDs
returned by its search and browse operations. The agent interface does not
accept arbitrary stream URLs. Alarm controls use a separate authenticated
session namespace and are never called by ordinary agent playback tools.
Agent-started playback opens a separate RadioCLI terminal TUI by default on macOS, Windows, and Linux. On macOS, this can make the agent host request Apple's one-time Automation permission for Terminal; RadioCLI cannot grant another app's OS permission. Headless playback is an explicit opt-out for users who do not want external terminal windows or app-control prompts.
Privacy Notes
- Nearby location is enabled by default for new libraries, but no location request is made until you open Nearby.
- Location lookup uses approximate IP-based location from
ipapi.co. Disable it withl, Settings, or:location off. - Explore uses only the cursor coordinate you move in the terminal.
- Recents, favorites, settings, imports, listening activity, alarm definitions, and provider cache data are stored locally on your machine.
- RadioCLI does not proxy audio. It resolves public stream URLs and hands playback
to
mpv,ffplay, or the experimental macOS AirPlay worker. - AirPlay discovery uses Bonjour on your local network. AirPlay streaming runs through a local worker and the bundled sender bridge.
- Favoriting a Radio Browser station sends a best-effort vote to that public directory by default. Disable Share favorite votes with Radio Browser in Settings to keep favorites local-only.
Alarm Data And Local Control
Alarm scheduling does not use a RadioCLI account, hosted scheduler, push service, or cloud relay. Definitions, station choices, reliability settings, snooze override, and the latest run result live in the JSON library and are included in a full RadioCLI JSON backup.
The following state is deliberately machine-local and excluded from backups:
- launchd, systemd, or Windows Task Scheduler registration artifacts
- scheduler and power-inhibitor health records
- Alarm Guard process/lease state and occurrence locks
- active-alarm discovery files and their random bearer tokens
After restoring a backup on another machine, run radiocli alarm sync to create
that machine's native jobs. Alarm playback resolves the configured public station
and connects to its stream just like normal playback; RadioCLI does not upload
the alarm or proxy its audio.
While an alarm is playing, the detached runner opens an HTTP control endpoint on
127.0.0.1 only. Discovery files and 32-byte random bearer tokens use private
machine-local storage permissions where the OS supports POSIX modes. Dismiss,
snooze, keep-playing, and Guard ownership requests must authenticate; there is no
network-facing control server. The detached runner may open the locally saved
terminal emulator to expose those controls. It does not pass the bearer token on
the command line; the TUI discovers it through the private machine-local file.
Location Lookup
Nearby stations are useful, but IP-based location lookup is privacy-sensitive.
For new libraries the feature is on, and opening Nearby requests an approximate
location from ipapi.co. RadioCLI uses the returned city, region, country,
latitude, and longitude to sort the local geotagged station atlas. Turn it off
before opening Nearby with Settings or :location off if you do not want that
request; the choice is stored locally.
Reporting Security Issues
Open a private security advisory on GitHub:
https://github.com/Ciphore/RadioCLI/security/advisoriesPlease avoid filing public issues for vulnerabilities that could expose local files, private network information, or unexpected command execution.
If private reporting is unavailable, open a minimal public issue asking for a private disclosure path, but do not include exploit details.
Supported Versions
Until a tagged release cadence is established, security fixes target the active development branch and the latest public npm release.
Related reading: Reliability and Contributing.