Skip to content

docs: split spec 03 into 03-01 brain-harness + 03-02 ducking [spec 03-01] - #1

Merged
wine-fall merged 1 commit into
mainfrom
zachg-0702--spec-03-split
Jul 2, 2026
Merged

docs: split spec 03 into 03-01 brain-harness + 03-02 ducking [spec 03-01]#1
wine-fall merged 1 commit into
mainfrom
zachg-0702--spec-03-split

Conversation

@wine-fall

Copy link
Copy Markdown
Owner

What

Defines and splits spec 03 (music-provider, milestone L1 "radio feel") into two single-purpose sub-specs, and locks a master-level decision about the brain.

  • specs/03-01-brain-harness.md — the general brain-harness seam (turn the isolated brain into a tool/skill-using agent, preserving local-env isolation). First capability: habit-based, Claude-driven music search & recommendation (MusicProvider impl; yt-dlp default, musicdl optional) + Director talk↔music scheduling. Music plays sequentially via the existing player.
  • specs/03-02-ducking.md — a source-agnostic mixing audio engine (ffmpeg→PCM + numpy) that replaces the afplay AudioPlayer, with gain-envelope ducking; a typed interjection ducks the music instead of hard-stopping it.
  • DESIGN.md — §3.2 locks "the brain is a harnessed agent, not a one-shot LLM call"; §5 records musicdl / NetEase / Spotify-librespot as optional user-installed gray providers (never shipped); §9.4/§10 do the split + reorder (harness first) and mark spec 02 code-implemented.
  • contracts.py — realign spec references to 03-01/03-02.

Build order: 01 → 03-01 (harness + music) → 03-02 (ducking); both are L1, both depend only on 01 (03-02 also integrates 03-01).

AI coding brief

  • Original request: discuss the scope of spec 03 and how to build it. Why: spec 02 is done and spec 03 (making the radio feel like radio — music + ducking) had no spec yet.
  • Manual interventions / human feedback:
    • Ducking is a core feature and must be owned by some spec — not deferred into limbo.
    • Music search must be fully Claude-driven (tools/skills/context), not deterministic yt-dlp heuristics.
    • The brain is a complete, harnessed agent, not a crippled LLM call: isolation from the local Claude env is mandatory, but it still uses murmur's own tools/skills and can be steered by conversation.
    • Rejected swapping Claude for nousresearch/hermes-agent (model would hurt the soul now; harness would cede control of the custom radio loop).
    • Do the harness first, ducking second.
    • Don't name it "music agent" — the harness is general; music is just its first capability.
    • Treat musicdl (and other gray sources) as optional, not the default.
  • Retro (prompt-to-ship-faster): stating "brain = full harnessed agent, not a neutered LLM call, isolated but tool-capable" up front would have skipped a couple of scoping rounds; and naming the two axes early (audio-engine vs agent-harness) would have led to the split sooner.

🤖 Generated with Claude Code

…-01]

Define spec 03 (music-provider, L1 "radio feel") as two single-purpose
sub-specs, and lock a master-level decision about the brain.

- DESIGN §3.2: lock "the brain is a harnessed agent, not a one-shot LLM
  call" — isolation from the user's local Claude env is preserved, but the
  brain gets murmur's own tools/skills; bounded surface + off the live loop.
- DESIGN §5: record musicdl / unofficial NetEase / Spotify-via-librespot as
  optional, user-installed gray providers (personal-experiment tier), never
  in the shipped default stack.
- DESIGN §9.4/§10: split spec 03 into 03-01 + 03-02, reorder (harness first,
  ducking second), mark spec 02 code-implemented.
- specs/03-01-brain-harness.md: general tool/skill harness seam + first
  capability (habit-based, Claude-driven music search/recommend/pull; yt-dlp
  default, musicdl optional) + Director talk<->music scheduling. A terminal
  submit_pick tool ends the agentic loop and hands back the AudioClip.
- specs/03-02-ducking.md: source-agnostic mixing engine (ffmpeg->PCM + numpy)
  with gain-envelope ducking; a typed interjection ducks music, not hard-stop
  (forks the spec-01 Director arbitration, §3.5).
- specs/01-core-loop.md, contracts.py: realign spec references to 03-01/03-02.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@wine-fall
wine-fall force-pushed the zachg-0702--spec-03-split branch from 97217f7 to fcafbd4 Compare July 2, 2026 07:41
@wine-fall wine-fall changed the title Split spec 03 into 03-01 brain-harness + 03-02 ducking docs: split spec 03 into 03-01 brain-harness + 03-02 ducking [spec 03-01] Jul 2, 2026
@wine-fall
wine-fall merged commit 7f8692c into main Jul 2, 2026
3 of 4 checks passed
@wine-fall
wine-fall deleted the zachg-0702--spec-03-split branch July 2, 2026 07:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant