MyGo 云音乐
用 Go 与 MyGo 写成的第三方网易云音乐桌面客户端。原生界面,没有 WebView;边下边播,无损与 Hi-Res,逐字歌词与「律动」,刘海播放器。
Translation pending
A companion radio with an agent for a brain. It talks on its own, plays music, repairs its own setup by talking, and hands your replies to an agent. Open-source, MIT-licensed.
MediaTypeScript · MakefileGitHub @wine-fallOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
An always-on AI radio host for your terminal. It picks its own topics, talks, plays music, and keeps you company; type back and it answers in a voice that sounds human. Claude for a brain, fish-speech for a voice. MIT. TypeScript.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A companion radio — "a whole radio station, for an audience of one," with an agent for a brain.
Turn the sound on — the voice is the point. Two and a half minutes of the radio actually running.Read the full README ↗npm install -g murmur-radio && murmur
A companion radio — "a whole radio station, for an audience of one," with an agent for a brain.
https://github.com/user-attachments/assets/59a300a8-8d61-443f-b592-8677e12e2be4
murmur is always on the air. It picks a topic and talks, plays a song, comes back and keeps going — whether or not you say anything. Type back and it answers out loud, chats for a bit, then eases back into the program.
~/.murmur/. Change the music rules mid-song and the next pick follows them.You need:
npm install -g murmur-radio
murmur
The first run is a short conversation. It asks a few questions to shape your host, then offers to set up whatever is missing — the voice key, ffmpeg + yt-dlp for music, bun for the full-screen UI, and, if your Node comes from nvm, fnm, asdf or mise, a small ~/.local/bin/murmur shim so the command doesn't vanish when a project switches Node. Say no and it plays anyway, just with less: talk-only without the music tools, lines on screen instead of spoken without a voice. murmur --setup reopens that conversation any time.
/ lists what it takes: settings, the setup guide, a bug report, a wish, /update (installs a newer murmur from npm) and /quit. The plain front-end takes the same commands typed in full; Ctrl-C says goodbye too.~/.murmur/music-policy.md — more Cantonese, no covers, a decade to live in — and they are added to murmur's built-in song-picking rules before every pick, winning wherever the two disagree. Empty the file to go back to the built-in rules alone./bug turns what just happened into a filled-in GitHub report with the log attached. A run that dies without saying goodnight is noticed on the next start and offered up the same way. Logs live in ~/.murmur/log/, one file per day, two weeks kept.--plain (skip the full-screen UI), --no-music, --persona PATH, --version. Pacing, cadence and the rest are the option table at the top of src/config.ts.A Node.js (TypeScript) engine runs the program and mixes the audio; a front-end draws the screen and reads your keyboard. While one segment plays, the next is already being prepared, so there is no dead air. A song ducks under the host's voice instead of stopping.
murmur ships no model. Three things come off the network: the brain is your Claude session (via @anthropic-ai/claude-agent-sdk), the voice is fish-speech over fish.audio's hosted API, and the music streams in through yt-dlp. Everything murmur owns — the program logic, memory, persona and audio mixing — runs on your machine.
The components and the reasons behind them: docs/architecture.md. The full design: specs/DESIGN.md.
Every code spec is built. What remains is acceptance by ear — pacing over a real day, how the steering feels — plus a handful of engineering debts. Current focus: specs/STATUS.md; what comes next: ROADMAP.md; engineering notes with the numbers measured along the way: docs/blog/.
Running from a checkout needs Node 24+ (it runs the TypeScript directly) and pnpm (corepack enable pnpm). One command sets up and runs the app; a second terminal tails a live debug log:
make dev # sync deps, report what is missing, launch the app either way
make logs # in another terminal: tail diagnostics + memory while it runs
make dev runs the real brain + music with the hosted voice (VOICE=hosted,
endpoint loaded from the gitignored .env — make dev-fishaudio selects the
fish.audio config); pass VOICE=stub for a silent voice, or STUB=1 make dev
for a fully offline session (canned brain, no music — needs no
network/binaries). The program timeline mirrors to .dev/dev.log; make logs
(scripts/devwatch.ts) tails that and folds in a periodic memory-tree line.
make help lists every target.
Under the hood:
pnpm install
node src/main.ts # run from source
node src/main.ts --brain stub --voice stub --no-music --no-bed # fully offline
pnpm test # fast unit layer (vitest; fakes, no network)
pnpm run typecheck # tsc over src/, test/ + the tooling scripts
pnpm run lint # oxlint
brew install ffmpeg yt-dlp # binaries real runs need (music)
Testing is layered (see DESIGN.md §11): unit tests are test-first against fakes; real-boundary checks run on demand as throwaway scratch/ smokes; sensory "sounds human / feels like radio" checks are human acceptance. Every seam ships a fake, so the core loop is testable without real audio, LLM, or network.
Conventions: specs are written in English and optimized for a coding agent to consume. No CJK anywhere in source (comments, literals, docstrings) — the radio speaks whatever language the listener settled on at onboarding (the machine's locale by default, English as the floor), produced by the model from the persona; enforced by scripts/check-source-language.ts via pre-commit.
The voice is fish-speech by @fishaudio — the reason murmur sounds like a person on the radio instead of a screen reader. murmur talks to it through fish.audio's hosted API; the model and the work behind it are theirs.
murmur's own code is MIT — see LICENSE.
Third-party services. murmur ships no model weights; it calls services that carry their own terms, and complying with them is yours:
yt-dlp on your machine, against whatever source you point it at.And these, only on the paths that need them:
bun install for the TUI; without it murmur falls back to the plain front-end.raw.githubusercontent.com — downloading a built-in voice preset's reference clip (cached and hash-pinned after the first fetch).registry.npmjs.org — the version check behind /update.