Claude Code, Codex, Antigravity CLI에 사운드 훅 추가. 각 에이전트마다 다른 목소리가 이벤트에 반응함.
PeonPing에서 아이디어를 얻어 훅(hooks)과 셸 스크립트로 구현.
| OS | 재생 방식 |
|---|---|
| macOS | afplay |
| Linux | paplay / aplay / ffplay / mpg123 (순서대로 시도) |
| Windows (Git Bash / WSL) | PowerShell MediaPlayer |
프로젝트 루트에서 실행. 동일한 명령어 재실행으로 업데이트 가능.
curl, jq 기본 사용. jq가 없다면 Homebrew로 설치:
brew install jq
curl -fsSL https://raw.githubusercontent.com/qus0in/1ggun/main/install.sh | bashcurl, jq 필요. 패키지 매니저로 설치:
# Debian / Ubuntu
sudo apt install -y curl jq
# Fedora / RHEL
sudo dnf install -y curl jqcurl -fsSL https://raw.githubusercontent.com/qus0in/1ggun/main/install.sh | bashGit Bash 또는 WSL2 환경을 권장. PowerShell이나 cmd에서는 동작하지 않음.
설치 스크립트는 아래 순서로 JSON 처리 방법을 자동 감지:
- 설정 파일 미존재 시 → 직접 생성
jq설치 확인 → jq로 머지python3/python설치 확인 → Python으로 머지- 모두 불가 시 → 덮어쓰기 여부 사용자 확인 (거부 시 설치 취소)
Git Bash (Git for Windows 포함):
curl -fsSL https://raw.githubusercontent.com/qus0in/1ggun/main/install.sh | bashWSL2 (Ubuntu 등):
sudo apt install -y curl jq
curl -fsSL https://raw.githubusercontent.com/qus0in/1ggun/main/install.sh | bash생성/수정되는 파일:
.agents/
sound_hook.sh # 훅 실행 스크립트
sound/ # MP3 파일들
hooks.json # AGY 훅 설정
.claude/
settings.json # Claude Code 훅 설정
.codex/
hooks.json # Codex 훅 설정
| 에이전트 | 인자 | 목소리 | 비고 |
|---|---|---|---|
| Claude Code | cc |
조선 일꾼 | |
| Codex | codex |
일본 일꾼 | 훅 실행 시 사용자 승인 필요 |
| Antigravity CLI | agy |
명 일꾼 |
Codex: 훅 명령어 실행 전 터미널에서 승인 여부를 묻는 프롬프트가 표시됨. 매번 수동으로 허용해야 사운드가 재생됨.
| 이벤트 | cc (조선 일꾼) | codex (일본 일꾼) | agy (명 일꾼) |
|---|---|---|---|
| SessionStart | 찾으셨나요 | 갑니다요 | - |
| UserPromptSubmit | 그렇게 합죠 | 녜녜 그렇게 합죠 | - |
| PermissionRequest | 열심히 하겠습니다 | 걱정마십쇼 | - |
| Notification | 말씀하세요 | - | - |
| Stop | 말씀하세요 | 어떤 일을 할까요 | 분부만 내리세요 |
| PreInvocation | - | - | 네네 알겠습니다요 |
.agents/sound/ 하위 구성. 이벤트 매핑에 쓰이지 않는 파일도 포함되어 있으며, 커스터마이징에 활용 가능.
조선 일꾼 (sound/ko/)
| 파일 | 대사 |
|---|---|
ko_s1.mp3 |
찾으셨나요 |
ko_s2.mp3 |
말씀하세요 |
ko_s3.mp3 |
예 |
ko_h1.mp3 |
일하러 갑니다요 |
ko_h2.mp3 |
그렇게 합죠 |
ko_h3.mp3 |
열심히 하겠습니다 |
ko_m1.mp3 |
갑니다요 |
ko_m2.mp3 |
예 갑니다 |
명 일꾼 (sound/ch/)
| 파일 | 대사 |
|---|---|
ch_s1.mp3 |
일해야죠 |
ch_s2.mp3 |
분부만 내리세요 |
ch_m1.mp3 |
네네 알겠습니다요 |
ch_h1.mp3 |
그렇게 합죠 |
일본 일꾼 (sound/jp/)
| 파일 | 대사 |
|---|---|
jp_s1.mp3 |
어떤 일을 할까요 |
jp_s2.mp3 |
녜녜녜녜 |
jp_h1.mp3 |
걱정마십쇼 |
jp_h2.mp3 |
녜녜 그렇게 합죠 |
jp_m1.mp3 |
갑니다요 |
jp_m2.mp3 |
아 녜녜 |
설치 스크립트가 자동으로 작성하는 훅 설정. 수동 구성 시 참고.
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "bash .agents/sound_hook.sh cc SessionStart",
"timeout": 30
}
]
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "bash .agents/sound_hook.sh cc UserPromptSubmit",
"timeout": 30
}
]
}
],
"PermissionRequest": [
{
"hooks": [
{
"type": "command",
"command": "bash .agents/sound_hook.sh cc PermissionRequest",
"timeout": 30
}
]
}
],
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "bash .agents/sound_hook.sh cc Notification",
"timeout": 30
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "bash .agents/sound_hook.sh cc Stop",
"timeout": 30
}
]
}
]
}
}{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "bash .agents/sound_hook.sh codex SessionStart",
"timeout": 30
}
]
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "bash .agents/sound_hook.sh codex UserPromptSubmit",
"timeout": 30
}
]
}
],
"PermissionRequest": [
{
"hooks": [
{
"type": "command",
"command": "bash .agents/sound_hook.sh codex PermissionRequest",
"timeout": 30
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "bash .agents/sound_hook.sh codex Stop",
"timeout": 30
}
]
}
]
}
}{
"AGY": {
"enabled": true,
"PreInvocation": [
{
"type": "command",
"command": "bash sound_hook.sh agy PreInvocation",
"timeout": 30
}
],
"Stop": [
{
"type": "command",
"command": "bash sound_hook.sh agy Stop",
"timeout": 30
}
]
}
}이벤트별 재생 파일 변경 시 .agents/sound_hook.sh 수정.
- 임진록 2+ 조선의 반격은 현재 어밴던웨어(abandonware)로 분류됨
- 현재 실질적인 저작권 행사 주체 없음 → 최종적으로 인천시청에 의해 몰수됨 (근거)
- 하지만 이것이 곧 저작권 소멸을 의미하는 것은 아님
⚠️ 상업적 활용 시 법적 위험 있음
MIT