{
  "markdown": "# VibeRadio\n\n**Your agent's output as audio.**\n\nTurns an agentic coding session into something you can _listen to_ instead of read. Narration is the core — spoken monologue, two-host podcast, or reactive music — so you can follow a Claude Code / Codex / Gemini agent's progress while away from the desk, commuting, or multitasking. Reactive music (below) is one style among several.\n\n**Styles:** spoken monologue · two-host podcast · reactive music (lo-fi, synthwave, ambient, classical, 8-bit).\n**Modes:** ambient stream (narrates live as the agent works) · task summary (one message when a task finishes) · session recap (a longer podcast/musical wrap).\n**Timing:** sync/live (updates as the agent works) or async (after a turn/session) — user-configurable, per-hook. See [`spec.md`](spec.md).\n\n## Demo\n\n[▶ Watch the launch video](branding/launch-video.mp4) — four coding agents, four radios, each tuned to its own station.\n\nhttps://github.com/pooriaarab/viberadio/raw/main/branding/launch-video.mp4\n\n## Quick start\n\n```sh\nnpm i -g viberadio-fm\n```\n\n```sh\nviberadio say \"hello\"                       # narrate a line now (on-device, offline)\nviberadio recap session.json                 # build a script from session events and speak it\nviberadio recap session.json --style podcast  # two-host podcast style\n```\n\n**Works offline, on-device, with zero keys.** v0 routes all narration through the\non-device tier of the shared `@pooriaarab/vibe-core` model cascade — macOS `say` /\nLinux `espeak` / `spd-say` — so it runs with nothing configured and nothing leaves\nyour machine. Bring-your-own-key TTS (ElevenLabs, OpenAI, …) plugs into the same\ncascade later; the `createNarrator()` seam is already there.\n\nUse it as a **library** too:\n\n```ts\nimport { narrate, recap, buildRecapScript } from 'viberadio-fm';\n\nawait narrate('build passed');                              // speaks via on-device TTS\nconst { script } = await recap(events, { style: 'podcast' }); // script + speak a session\nbuildRecapScript(events);                                   // pure: events -> script, no audio\n```\n\n### MCP\n\n`viberadio mcp` starts a stdio MCP server exposing `narrate({ text, style? })` and\n`recap({ events, style?, mode? })` tools, so an agent can ask for an audio recap\nmid-session. Add it to your client's MCP config:\n\n```json\n{\n  \"mcpServers\": {\n    \"viberadio\": { \"command\": \"viberadio\", \"args\": [\"mcp\"] }\n  }\n}\n```\n\n## Why Build This\n\n- Developers already listen to lo-fi while coding — this makes it reactive and personal\n- Extremely visual and shareable — imagine a tweet: \"My code literally makes music\"\n- No one has done reactive music for coding before — genuinely novel\n- Combines two massive communities: developers and lo-fi/music lovers\n- The demo video alone could go viral — watching music change as code is written\n\n## Features\n\n- **Reactive soundtrack** — Music dynamically shifts based on coding events\n  - Commit → beat drop\n  - Test pass → melodic resolution\n  - Test fail → minor key shift\n  - Error/exception → dramatic tension\n  - Idle → ambient drone\n  - Deploy → triumphant crescendo\n- **Genre modes** — Lo-fi, synthwave, ambient, classical, 8-bit\n- **Visualizer** — Terminal-based audio visualizer that shows the music reacting\n- **Session recording** — Save your coding soundtrack as an MP3/WAV\n- **Spotify-style wrap** — Weekly \"Your Vibe Radio Wrapped\" with stats and generated playlist\n- **Collaborative mode** — Team coding sessions merge into one shared soundtrack\n- **Stream mode** — OBS integration for streaming your reactive coding music\n\n## Distribution\n\n- **CLI** — `viberadio start` — runs in background, hooks into git/terminal events\n- **npm package** — `npm install -g viberadio-fm`\n- **Claude Code hook** — Auto-starts when Claude Code session begins\n- **Claude Code skill** — `/viberadio` to control playback\n- **skills.sh** — Listed on skills.sh marketplace\n- **macOS menubar app** — Visual controls + now-playing display\n\n## Voices & models (bring your own, mix freely)\n\nText-to-speech follows the shared `@vibe/core` cascade and is **mix-and-match**: use\nyour agent's existing provider if it does audio → or a TTS key you supply\n(ElevenLabs, OpenAI, etc.) → or a **local/on-device voice** so it works with no key\nand no network. Different styles can use different models — e.g. an ElevenLabs voice\nfor the monologue, two distinct voices for the podcast hosts, on-device TTS when\noffline. Per-style voice/model selection is a user setting.\n\n## Tech Stack\n\n- Node.js + TypeScript\n- TTS: `@vibe/core` cascade (agent provider → BYO key → on-device); Web Speech /\n  system TTS as the local tier\n- Tone.js / Web Audio API (reactive-music style)\n- Claude Code hooks + git/watcher (event detection, via `@vibe/core`)\n- Electron or Tauri (optional desktop app)\n\n## Prototype\n\nInteractive, self-contained UX prototype (no build, no network): open\n[`docs/prototype.html`](docs/prototype.html) in a browser. The \"Speak this line\"\nbutton uses your browser's on-device speech synthesis — real, offline narration.\n\n## Local-first\n\nRuns on your own machine. Nothing leaves it unless you opt a flow into a hosted\nprovider; the on-device tier works fully offline. Enforced by the `@vibe/core`\nconsent model.\n\n## Vibe Suite\n\nPart of the **Vibe Suite** — companion tools for agentic coding CLIs (Claude Code,\nCodex, Cursor, Gemini, Grok, pi, Kimi, and other harnesses). Ships as **CLI + npm\npackage + MCP server**.\n\n## Revenue Potential\n\n- Free tier: basic narration + lo-fi mode, on-device voices\n- Pro: all styles, premium voices, recording, visualizer, Wrapped\n- Creator tier: OBS integration, custom sound/voice packs\n",
  "bytes": 5639,
  "sha": "ea9cc08530bdb78fe0449862fa128a6b9393d637913112762cf419fed1e3584e",
  "repo_slug": "pooriaarab/viberadio",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_pooriaarab_viberadio_fm_e58b813a/readme"
}