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

move-coach

Claude Code에 카메라 패널을 추가하는 모드입니다. 녹색 MediaPipe 포즈 랜드마크가 그려진 웹캠 화면, 옆에 놓인 해당 *Built to Move* 일러스트, 테스트 중 들을 수 있는 음성 코칭을 제공합니다.

번역 완료

이 mod 소개

Move Coach

Claude Code에 카메라 패널을 추가하는 모드입니다. 녹색 MediaPipe 포즈 랜드마크가 그려진 웹캠 화면, 옆에 놓인 해당 Built to Move 일러스트, 테스트 중 들을 수 있는 음성 코칭을 제공합니다.

  • **/move-coach [test] [camera#]**로 패널을 엽니다. 테스트를 지정하지 않으면 일반 카메라 미리보기가 열립니다. /move-coach stop은 실행을 끝냅니다.
  • **도구 mcp__move-coach__camera_test**로 Claude가 테스트를 실행할 수 있습니다. built-to-move-mobility-test 스킬이 사용합니다.
  • 테스트: sit_and_rise, couch, airport_scanner, shoulder_rotation, squat, solec, old_man.

구성 요소

  • helper/pose_coach.py: uv 스크립트(mediapipe 0.10.14, opencv)입니다. 카메라를 캡처하고 Pose Landmarker(모델은 ~/.cache/move-coach에 캐시됨)를 실행하며 테스트마다 상태 머신 하나를 돌립니다. 음성 신호를 내보내고 JSON 줄을 모드로 스트리밍합니다.
  • hooks/register.tsx: 패널, 슬래시 명령, 도구입니다. Ghostty는 카메라를 PNG Image로 그립니다. Desktop 앱은 JPEG 프레임을 포함하고 그 위에 벡터 골격을 올린 Svg로 그립니다.
  • assets/book/: 선택 사항인 일러스트입니다. 책의 일러스트에는 저작권이 있어 포함하지 않습니다. 직접 만든 것을 ~/.config/move-coach/book/에 넣으세요(assets/book/README.md 참고). 없어도 패널은 작동합니다.

음성

기본적으로 코치는 macOS 내장 음성(say)으로 말하므로 설정할 것이 없습니다. 더 자연스러운 음성을 원하면 플러그인 설정(/config → move-coach → "ElevenLabs API key", 보안 저장소에 저장)에 ElevenLabs API 키를 추가하고 필요하면 voice ID도 지정하세요. 키는 읽은 뒤 삭제되는 비공개 파일로 helper에 전달되며 명령줄에는 나타나지 않습니다. ELEVENLABS_API_KEY=...가 들어 있는 ~/.config/move-coach/keys.env도 쓸 수 있습니다. ElevenLabs가 신호를 재생하지 못하면 해당 신호는 say로 대체됩니다. 오디오 클립은 ~/.cache/move-coach/tts에 캐시됩니다.

요구 사항

카메라가 있는 macOS, uv(helper는 첫 실행 때 자체 Python 패키지를 설치하는 uv 스크립트), Xcode 명령줄 도구(xcode-select --install, 작은 "Move Coach Camera" 앱을 한 번 빌드하는 데 사용)가 필요합니다. 선택 사항으로 ffmpeg(카메라 이름), Muse 헤드밴드, EEG용 liblsl(brew install labstreaminglayer/tap/lsl)을 사용할 수 있습니다.

카메라 권한

Claude 앱은 카메라 책임을 넘겨받지 않는 상태로 세션을 시작하므로 모드에서 바로 생성한 helper는 카메라 접근 권한을 얻을 수 없고 macOS도 권한을 요청할 수 없습니다. 그래서 helper/launch.sh는 작은 Move Coach Camera.app(helper/camera-app/에서 ~/Library/Application Support/move-coach/에 생성)을 빌드하고 open으로 그 안에서 helper를 실행합니다. 표준 출력은 FIFO로 중계합니다. 첫 실행 때 macOS가 "Move Coach Camera"에 카메라를 허용할지 묻고, 한 번 허용하면 Claude 업데이트 뒤에도 유지됩니다. 철회하려면 시스템 설정 → 개인정보 보호 및 보안 → 카메라로 이동하세요.

선택 사항: Muse 헤드밴드의 뇌파 읽기

/move-coach eeg(패널의 Connect Muse EEG 버튼 또는 도구의 eeg_start 동작)는 helper/eeg_stream.py를 실행하고 muse-lsl을 통해 Muse를 읽습니다. 이미 실행 중인 LSL EEG 스트림(muselsl stream)에 연결하고, 없으면 Bluetooth로 Muse를 검색해 muselsl stream을 직접 시작합니다. /move-coach eeg Muse-1A2B는 이름으로 헤드밴드를 고르고 /move-coach eeg stop은 끝냅니다.

패널에는 각 채널(TP9, AF7, AF8, TP10)의 최근 4 s, 센서별 접촉 점, 최근 1 s의 상대 밴드 파워가 그려집니다. 테스트 중에는 테스트 동안의 평균 밴드 파워(eeg_mean_relative_band_power)도 결과에 들어갑니다.

카메라와 마찬가지로 helper는 "Move Coach Camera.app" 안에서 실행되므로 macOS가 Bluetooth 허용을 한 번 묻습니다. pylsl에는 liblsl이 필요합니다. wheel에 포함되어 있지 않다면 brew install labstreaminglayer/tap/lsl을 실행하세요.

설치

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

claude plugin marketplace add natea/move-coach
claude plugin install move-coach
원문 / README

Move Coach

A Claude Code mod that adds a camera pane: your webcam feed with MediaPipe pose landmarks drawn in green, the matching Built to Move illustration beside it, and spoken coaching while you do the test.

  • /move-coach [test] [camera#] opens the pane. With no test it's a plain camera preview. /move-coach stop ends a run.
  • Tool mcp__move-coach__camera_test lets Claude run a test. The built-to-move-mobility-test skill uses it.
  • Tests: sit_and_rise, couch, airport_scanner, shoulder_rotation, squat, solec, old_man.

Pieces

  • helper/pose_coach.py: a uv script (mediapipe 0.10.14, opencv). It captures the camera, runs the Pose Landmarker (model cached in ~/.cache/move-coach), and runs one state machine per test. It speaks cues and streams JSON lines to the mod.
  • hooks/register.tsx: the pane, the slash command and the tool. Ghostty draws the camera as a PNG Image; the Desktop app draws it as an Svg that embeds the JPEG frame with a vector skeleton on top.
  • assets/book/: illustrations, optional. The book's illustrations are copyrighted and aren't shipped; put your own in ~/.config/move-coach/book/ (see assets/book/README.md). The pane works without them.

Voice

By default the coach speaks with the built-in macOS voice (say); nothing to set up. For a more natural voice, add an ElevenLabs API key in the plugin's settings (/config → move-coach → "ElevenLabs API key", stored in secure storage), and optionally a voice ID. The key reaches the helper in a private file it deletes on read, never on the command line. ~/.config/move-coach/keys.env with ELEVENLABS_API_KEY=... also works. If ElevenLabs fails for a cue, that cue falls back to say. Audio clips are cached in ~/.cache/move-coach/tts.

Requirements

macOS with a camera, uv (the helpers are uv scripts that install their own Python packages on first run), and the Xcode command-line tools (xcode-select --install, used once to build the small "Move Coach Camera" app). Optional: ffmpeg (camera names), a Muse headband and liblsl (brew install labstreaminglayer/tap/lsl) for EEG.

Camera permission

The Claude app starts its sessions with camera responsibility disclaimed, so a helper spawned straight from the mod can never get camera access (and macOS can't prompt for it). helper/launch.sh therefore builds a tiny Move Coach Camera.app (in ~/Library/Application Support/move-coach/, from helper/camera-app/) and runs the helper inside it with open, relaying its stdout through a FIFO. The first run shows the macOS camera prompt for "Move Coach Camera"; the grant then sticks across Claude updates. Revoke it in System Settings → Privacy & Security → Camera.

Optional: brain waves from a Muse headband

/move-coach eeg (or the pane's Connect Muse EEG button, or the tool's eeg_start action) runs helper/eeg_stream.py, which reads a Muse through muse-lsl. It attaches to an LSL EEG stream if one is already running (muselsl stream), and otherwise scans Bluetooth for a Muse and starts muselsl stream itself. /move-coach eeg Muse-1A2B picks a headband by name; /move-coach eeg stop ends it.

The pane draws the last 4 s of each channel (TP9, AF7, AF8, TP10), a contact dot per sensor, and relative band power over the last second. While a test runs, its result also carries the mean band power during the test (eeg_mean_relative_band_power).

The helper runs inside "Move Coach Camera.app", like the camera, so macOS asks once to allow Bluetooth. pylsl needs liblsl: if the wheel doesn't bundle it, brew install labstreaminglayer/tap/lsl.

비슷한 프로젝트