ClaudeMods
☰
KO
● 0 명 접속 중 · 조회 0 회
후원프로젝트 제출
GitHub 저장소 · 작성자 lamberttraccard

jinglebox

세션에서 무언가 일어날 때 Jinglebox 작업 공간의 사운드를 재생하는 Claude Code 플러그인입니다.

lamberttraccard@lamberttraccard

lamberttraccard/jinglebox-marketplace/tree/main/plugins/jinglebox

번역 완료

이 mod 소개

Claude Code용 Jinglebox

세션에서 무언가 일어날 때 Jinglebox 작업 공간의 사운드를 재생하는 Claude Code 플러그인입니다.

| 이벤트 | 재생 시점 | |---|---| | turn-done | Claude가 완료했고 답변이 사용자를 기다리는 상태 | | needs-answer | Claude가 사용자를 기다리는 상태: 질문, 승인할 계획, 권한 프롬프트 또는 질문으로 끝나는 답변 | | long-turn | 60 s보다 긴 턴이 끝난 경우(turn-done 대신) | | tests-passed / tests-failed | Claude가 실행한 테스트 명령이 성공하거나 실패한 경우(artisan test, pest, phpunit, pytest, jest, vitest, go test, cargo test, npm test…) | | pr-created | glab mr create 또는 gh pr create가 성공한 경우 |

기본 상태에서는 모든 이벤트가 작업 공간의 짧은 사운드를 무작위로 재생합니다. /jinglebox set으로 원하는 사운드를 지정할 수 있습니다.

이 플러그인에는 오디오가 포함되어 있지 않습니다. 각 컴퓨터가 자체 Jinglebox MCP 연결과 계정을 사용해 사운드를 다운로드하고 로컬에 캐시합니다(최대 40개 사운드).

설치

  1. Jinglebox MCP 서버에 연결(컴퓨터마다 한 번):

    claude mcp add --transport http --scope user jinglebox https://jinglebox.app/mcp
    

    그런 다음 대화형 claude 터미널에서 /mcp를 실행하고 jinglebox를 선택해 인증합니다.

  2. 읽기 전용 도구 허용: 자동 모드에서 플러그인의 호출이 거부되지 않도록 합니다. ~/.claude/settings.json에 다음을 추가합니다.

    "permissions": {
      "allow": [
        "mcp__jinglebox__get-sound",
        "mcp__jinglebox__search-sounds",
        "mcp__jinglebox__get-workspace",
        "mcp__jinglebox__list-workspaces"
      ]
    }
    
  3. 플러그인 설치:

    claude plugin marketplace add lamberttraccard/jinglebox-marketplace
    claude plugin install jinglebox@jinglebox
    

    설치하지 않고 사용해 보려면 claude --plugin-dir ./plugins/jinglebox를 실행합니다.

  4. 새 세션을 시작합니다. 계정에 여러 작업 공간이 있으면 /jinglebox workspace <slug>로 하나를 선택합니다.

명령

/jinglebox                                       current sounds
/jinglebox workspace [slug]                      list or pick the workspace
/jinglebox set <event> 329 | #329 | <sound URL>  a fixed sound
/jinglebox set <event> 21,349,336                random among these
/jinglebox set <event> random [tag]              random short sound of the workspace, or of one tag
/jinglebox set <event> default                   back to the default (random from the workspace)
/jinglebox search <words>                        find sounds and their IDs
/jinglebox test <event>                          play an event's sound now
/jinglebox mute | unmute
/jinglebox export                                your setup as one /jinglebox import line
/jinglebox import <workspace> <event>=<choice>…  apply a shared setup
/jinglebox debug                                 check the MCP call, the playback and the cache

선택값은 컴퓨터별, 작업 공간별로 저장되며 세션이 바뀌어도 유지됩니다. 무작위 선택에서는 같은 사운드가 연속으로 두 번 재생되지 않습니다. 다음 사운드도 미리 다운로드하므로 즉시 재생됩니다. 토스트에 재생된 사운드 이름이 표시되므로 마음에 드는 무작위 사운드는 /jinglebox set으로 고정할 수 있습니다.

설정 공유

/jinglebox export는 설정을 한 줄로 출력합니다. 예:

/jinglebox import my-team turn-done=random:fun needs-answer=177 long-turn=339 tests-passed=325 tests-failed=329 pr-created=344

팀이 대화하는 곳에 붙여 넣으면 됩니다. 실행한 사람은 같은 작업 공간과 사운드를 받고, 이후 /jinglebox set으로 원하는 항목을 바꿀 수 있습니다. 선택값은 사운드 ID(177), 선택 목록(21,349,336), random 또는 random:<tag>입니다. 호스팅되는 것은 없습니다. 이 줄 자체가 설정입니다.

여러 작업 공간이 있는 계정에서 작업 공간을 선택(또는 가져오기)하기 전에는 사운드가 재생되지 않습니다. 다른 오류와 마찬가지로 플러그인이 토스트로 알리며, 10분에 한 번만 표시됩니다.

설정

| 설정 | 기본값 | 의미 | |---|---|---| | workspace | empty | 작업 공간 slug. 비워 두면 /jinglebox workspace로 선택 | | mcp_server | jinglebox | /mcp에 표시되는 Jinglebox MCP 서버 이름 | | long_turn_seconds | 60 | 이보다 긴 턴에서 long-turn 재생 | | random_max_seconds | 4 | 무작위 선택에서는 이 시간 이하의 사운드만 사용 |

작동 방식

Claude Code의 function hooks 플러그인(plugins/jinglebox/hooks/register.ts)입니다. 얼리 액세스 API이므로 이를 지원하는 Claude Code 빌드가 필요합니다.

  • turn.complete: 메인 루프 턴이 끝날 때 답변의 마지막 문단이 질문이면 needs-answer, 아니면 long-turn 또는 turn-done입니다.
  • classic.PermissionRequest와 AskUserQuestion 및 ExitPlanMode의 tool.call: needs-answer이며 3 s에 한 번만 발생합니다.
  • Bash의 tool.call: tests-passed, tests-failed, pr-created입니다.
  • 플러그인은 매니페스트에 Jinglebox MCP 서버를 선언하고 첫 호출 전에 $.mcp.connect로 연결합니다. 따라서 세션이 아직 서버 도구를 로드하지 않았어도 작동합니다. 세션이 이미 같은 서버(1단계)를 실행 중이면 해당 연결을 재사용합니다.
  • 사운드는 MCP의 get-sound에서 가져와 플러그인 저장소에 캐시하고 $.audio.play로 재생합니다. 무작위 선택은 search-sounds에서 가져오며 하루에 한 번 새로 고칩니다.

문제 해결

/jinglebox debug는 각 단계를 실행하고 실패한 단계를 알려 줍니다.

  • 「MCP server is not connected」: 플러그인이 Jinglebox MCP 서버에 연결하지 못했습니다(네트워크 문제이거나 시작 시 서버 시간이 초과됨). /mcp를 실행해 jinglebox에 다시 연결한 다음 시도하세요.
  • 「call refused」: 2단계의 권한이 없습니다.

라이선스

MIT. 자세한 내용은 LICENSE를 참조하세요.

설치

먼저 작성자의 README에서 marketplace와 플러그인 이름을 확인하세요. 저장소 구조에 따라 명령어가 달라질 수 있습니다.

claude plugin marketplace add lamberttraccard/jinglebox-marketplace
claude plugin install jinglebox
원문 / README

Jinglebox for Claude Code

A Claude Code plugin that plays sounds from your Jinglebox workspace when something happens in a session.

| Event | When it plays | |---|---| | turn-done | Claude finished and its answer waits for you | | needs-answer | Claude waits on you: a question, a plan to approve, a permission prompt, or an answer that ends on a question | | long-turn | a turn longer than 60 s finished (instead of turn-done) | | tests-passed / tests-failed | a test command run by Claude passed or failed (artisan test, pest, phpunit, pytest, jest, vitest, go test, cargo test, npm test…) | | pr-created | glab mr create or gh pr create succeeded |

Out of the box every event plays a random short sound of your workspace; set your own with /jinglebox set.

The plugin ships no audio. Each machine downloads its sounds through its own Jinglebox MCP connection, with its own account, and caches them locally (40 sounds at most).

Install

  1. Connect the Jinglebox MCP server (once per machine):

    claude mcp add --transport http --scope user jinglebox https://jinglebox.app/mcp
    

    then run /mcp in an interactive claude terminal, pick jinglebox and authenticate.

  2. Allow its read-only tools, so the plugin's calls are not refused in auto mode. In ~/.claude/settings.json:

    "permissions": {
      "allow": [
        "mcp__jinglebox__get-sound",
        "mcp__jinglebox__search-sounds",
        "mcp__jinglebox__get-workspace",
        "mcp__jinglebox__list-workspaces"
      ]
    }
    
  3. Install the plugin:

    claude plugin marketplace add lamberttraccard/jinglebox-marketplace
    claude plugin install jinglebox@jinglebox
    

    Or try it without installing: claude --plugin-dir ./plugins/jinglebox.

  4. Start a new session. If your account has several workspaces, pick one with /jinglebox workspace <slug>.

Commands

/jinglebox                                       current sounds
/jinglebox workspace [slug]                      list or pick the workspace
/jinglebox set <event> 329 | #329 | <sound URL>  a fixed sound
/jinglebox set <event> 21,349,336                random among these
/jinglebox set <event> random [tag]              random short sound of the workspace, or of one tag
/jinglebox set <event> default                   back to the default (random from the workspace)
/jinglebox search <words>                        find sounds and their IDs
/jinglebox test <event>                          play an event's sound now
/jinglebox mute | unmute
/jinglebox export                                your setup as one /jinglebox import line
/jinglebox import <workspace> <event>=<choice>…  apply a shared setup
/jinglebox debug                                 check the MCP call, the playback and the cache

Choices are kept per machine and per workspace, across sessions. A random pick never plays the same sound twice in a row, and the next sound is downloaded ahead so it starts at once. The toast names each sound played, so a random one you like can be pinned with /jinglebox set.

Share a setup

/jinglebox export prints your setup as a single line, for instance:

/jinglebox import my-team turn-done=random:fun needs-answer=177 long-turn=339 tests-passed=325 tests-failed=329 pr-created=344

Paste it wherever your team talks; whoever runs it gets the same workspace and sounds, then can change any of them with /jinglebox set. A choice is a sound ID (177), a list to pick from (21,349,336), random, or random:<tag>. Nothing is hosted: the line is the setup.

Until a workspace is picked (or imported) on an account with several, no sound plays; the plugin says so in a toast, at most once every 10 minutes, like any other failure.

Settings

| Setting | Default | Meaning | |---|---|---| | workspace | empty | the workspace slug; empty to pick it with /jinglebox workspace | | mcp_server | jinglebox | the Jinglebox MCP server's name, as /mcp lists it | | long_turn_seconds | 60 | a turn longer than this plays long-turn | | random_max_seconds | 4 | a random pick only takes sounds this short |

How it works

It is a plugin of Claude Code function hooks (plugins/jinglebox/hooks/register.ts), an early-access API: it needs a Claude Code build that supports it.

  • turn.complete, at the end of a main-loop turn: needs-answer when the answer's last paragraph asks a question, else long-turn or turn-done.
  • classic.PermissionRequest, and tool.call on AskUserQuestion and ExitPlanMode: needs-answer, at most once every 3 s.
  • tool.call on Bash: tests-passed, tests-failed, pr-created.
  • The plugin declares the Jinglebox MCP server in its manifest and connects it with $.mcp.connect before its first call, so it works even when the session has not loaded the server's tools yet; when the session already runs the same server (step 1), that connection is reused.
  • Sounds come from the MCP's get-sound, are cached in the plugin's store and played with $.audio.play. Random picks draw from search-sounds, refreshed once a day.

Troubleshooting

/jinglebox debug runs each step and says which one fails.

  • "MCP server is not connected": the plugin could not connect the Jinglebox MCP server (network, or the server timed out at startup). Run /mcp, reconnect jinglebox, and try again.
  • "call refused": the permissions of step 2 are missing.

License

MIT, see LICENSE.

비슷한 프로젝트