個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證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.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
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.檢視完整 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.