From code-forge
Sets up and manages a DIY voice input stack (whisper.cpp + sox + Hammerspoon) for hands-free operation. Useful for users with wrist injuries or RSI who want to control workflows by voice.
How this skill is triggered — by the user, by Claude, or both
Slash command
/code-forge:voiceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> code-forge의 음성 입력 확장. 대장간 비유: **Anvil**(작업대)에 명령을 외치면 → **Forge Voice**가 받아 → **Smith/Implementor**가 단조.
code-forge의 음성 입력 확장. 대장간 비유: Anvil(작업대)에 명령을 외치면 → Forge Voice가 받아 → Smith/Implementor가 단조.
| 사용 | 동작 |
|---|---|
/voice 또는 /voice setup | 1회 셋업 (의존성 + 모델 + Hammerspoon 설정) |
/voice test | 동작 검증 (마이크 → STT → paste 풀 회로) |
/voice status | 현재 상태 (의존성 / 모델 / hook 활성) |
/voice doctor | 트러블슈팅 진단 |
/voice uninstall | 셋업 되돌리기 |
다음을 순서대로 실행 (사용자 확인 받으면서):
for cmd in sox whisper-cpp jq; do
command -v "$cmd" >/dev/null 2>&1 || echo " ❌ $cmd 없음"
done
command -v cliclick >/dev/null 2>&1 || echo " ⚠️ cliclick 없음 (옵션, 자동 paste 정확도 ↑)"
brew list --cask hammerspoon >/dev/null 2>&1 || echo " ❌ Hammerspoon 없음"
누락 시 사용자에게 한 줄 install 안내:
brew install whisper-cpp sox jq cliclick
brew install --cask hammerspoon
~/.whisper/models/ggml-small.bin 없으면:
mkdir -p ~/.whisper/models
curl -fsSL -o ~/.whisper/models/ggml-small.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin
→ 244MB, 한국어 OK. medium 모델은 사용자에게 옵션 제안 (1.5GB, 정확도 ↑↑).
mkdir -p ~/.local/bin ~/.local/share/forge-voice ~/.hammerspoon
PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-$(claude plugin path code-forge)}"
cp "$PLUGIN_ROOT/tools/forge-voice.sh" ~/.local/bin/forge-voice.sh
chmod +x ~/.local/bin/forge-voice.sh
cp "$PLUGIN_ROOT/tools/forge-voice.lua" ~/.local/share/forge-voice/forge-voice.lua
~/.hammerspoon/init.lua에 1줄 (중복 안 들어가게 grep 체크):
LINE='dofile(os.getenv("HOME") .. "/.local/share/forge-voice/forge-voice.lua")'
if ! grep -qF "forge-voice.lua" ~/.hammerspoon/init.lua 2>/dev/null; then
echo "$LINE" >> ~/.hammerspoon/init.lua
fi
→ Hammerspoon 메뉴바 → Reload Config 안내.
사용자에게 직접 허용해야 하는 항목:
→ 본 단계는 시스템 권한이라 자동화 불가. 사용자 직접 수행 후 /voice test.
⌘ + Shift + Space 단축키 3가지:
⌘⇧Space — 토글 (한 번 녹음 시작, 다시 누르면 종료)⌘⇧. — silence detection (말 멈추면 자동 종료)⌘⇧, — 상태 확인forge-voice.sh status → idle 확인~/.local/share/forge-voice/last.txt 확인 → 결과 표시code-forge/hooks/auto-flow-trigger.sh 존재 + 실행 권한진단 항목:
| 증상 | 진단 | 해결 |
|---|---|---|
| ⌘⇧Space 안 먹힘 | Hammerspoon menubar 활성 | Reload Config / 재시작 |
| "마이크 안 잡힘" | macOS 권한 | 시스템 환경설정 → 보안 → 마이크 |
| 녹음은 되는데 paste 안 됨 | 접근성 권한 | 환경설정 → 접근성 → Hammerspoon |
| 한국어 인식률 낮음 | small 모델 | medium 또는 large 다운로드 |
| 영문 발음 모두 받는데 티켓 ID 안 잡힘 | hook 누락 | ls -la code-forge/hooks/auto-flow-trigger.sh 실행 권한 |
| 녹음이 안 끝남 | silence 임계값 | ~/.local/bin/forge-voice.sh 의 silence 인자 조정 |
되돌리기:
rm -f ~/.local/bin/forge-voice.sh
rm -rf ~/.local/share/forge-voice
# Hammerspoon init.lua 에서 dofile 라인 제거
sed -i '' '/forge-voice.lua/d' ~/.hammerspoon/init.lua
# Hammerspoon Reload Config
→ Whisper 모델 (~244MB)은 사용자에게 유지/삭제 선택 받음.
자연어로 의도만 전달, Claude가 코드 작성:
| 발화 | 결과 |
|---|---|
| "프로젝트 일이삼 작업 시작" → Whisper → "PROJ-123 작업 시작" | G5 hook → flow tc select PROJ-123 자동 |
| "통합 테스트 돌려" | Claude가 /test 또는 flow run report 호출 |
| "이 버그 고쳐줘 — TypeError" | thinking-model GROUND "2-3 옵션 제시" 발화 |
| "회고 보여줘" | flow retro |
| 발화 (한국어) | Claude 해석 |
|---|---|
| "스타트 [티켓]" | /start [티켓] |
| "테스트" or "테스트 돌려" | /test |
| "정리" or "정리해" | /cleanup |
| "디베이트 [주제]" | /debate [주제] |
| "리서치 [주제]" | /research [주제] |
| "도네" or "다 했어" | /done (commit + PR) |
코드 직접 dictation (예: "open paren foo close paren")은 본 stack의 한계. RSI 영구화 우려 시 Talon Voice 학습 (1-2주, 무료) 권장.
본 Forge Voice는 자연어 의도 → Claude 코드 작성 패턴에 최적화. 손목 보호 + 표현 속도 우선.
본 스킬은 code-forge family의 정식 일부:
tools/forge-voice.sh (스크립트)tools/forge-voice.luadocs/voice-input.md (상세 reference)hooks/auto-flow-trigger.sh (G5 — 음성 입력에도 그대로 작동)docs/contracts/INTEGRATION.md §11→ 음성 입력은 별도 도구가 아니라 code-forge family의 확장.
npx claudepluginhub ggombee/code-forgeEnables voice conversations with Claude Code using speech-to-text and text-to-speech. Includes setup, diagnostics, and MCP-based voice interaction.
Guides Wispr Flow local dev loop for voice-to-text API integration via WebSocket or REST, covering auth, 16kHz PCM audio, programming context, and error handling.
Manages echook audio notifications for Claude Code, Cursor, and Codex: installs, configures, snoozes, mutes, tests, troubleshoots, and monitors context window usage.