RADIOCLI

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 with l, 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/advisories

Please 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.

On this page