codemoo/agent-world

12
GitHub 스타
2
포크
JavaScript
언어
미표기
라이선스
2026.04.23
최근 푸시
2026.05.10
별표한 날

AI 분석

설치 난이도: 쉬움
큐레이터 노트
Claude Code를 적극적으로 사용하는 개발자에게 강력 추천. 세션 모니터링, 비용 추적, 권한 승인 등 생산성 향상에 도움됨. 알파 버전이므로 프로덕션보다는 개인 개발 환경에 적합.

강점

  • Claude Code CLI 세션을 시각화하여 개발자의 작업 흐름을 직관적으로 모니터링할 수 있음
  • 제로 의존성 시작과 npx를 통한 간편한 실행으로 설치가 매우 쉬움
  • 권한 승인, 비용 추적, 타임라인 스크러버 등 다양한 실용적 기능을 제공

약점

  • 현재 알파 상태로 안정성과 버그가 있을 수 있음
  • PixyMoon 팩은 유료이며 별도 구매 필요
  • macOS에서만 Claude Code CLI를 사용할 수 있어 플랫폼이 제한적임

주의사항

  • PreToolUse 훅을 설치하면 Claude의 권한 프롬프트가 브라우저를 통해 승인되어야 하므로 워크플로가 변경됨
  • Live PTY 탭은 병렬 `claude --resume`을 실행하므로 주의 필요
  • 데스크톱 알림은 사용자 제스처 권한이 필요하며 처음 탭이 백그라운드로 갈 때만 발송됨

시작 가이드

  • npx -y github:codemoo/agent-world로 빠르게 실행해보기
  • PreToolUse 훅을 설치하여 브라우저에서 권한 승인 기능 사용해보기
  • PixyMoon 팩 구매를 고려하여 시각적 경험 업그레이드하기

README 한국어 번역

이 번역은 AI가 원문 README를 옮긴 것입니다. 원문이 항상 우선합니다.

Agent World

Mac에서 실행 중인 Claude Code CLI 세션을 공간적 RPG 스타일 시각화 도구로 보여줍니다. 실행 중인 각 claude 프로세스는 30×30 마을을 걷는 스프라이트가 되고, 각 저장소는 건물이 되며, 권한 프롬프트는 정보 데스크에 줄을 서서 대기하고, 도구 호출은 머리 위에 이모지로 표시됩니다.

!Agent World 라이브 데모

Park et al., "Generative Agents: Interactive Simulacra of Human Behavior" (논문 · 원본 저장소)와 claude-control에서 영감을 받았습니다 (발견 모델 — ps + lsof + 훅 파일, 데이터베이스 없음 — 을 차용했습니다).

!status: alpha


제공 기능

세계

  • 제로 의존성 시작npm install && npm start만으로 작동하는 마을을 얻을 수 있습니다. 유료 에셋 팩 필요 없음; 선택적 PixyMoon 업그레이드 경로 제공.
  • 라이브 세션 맵 — 이 Mac의 모든 claude 프로세스가 부드러운 서브타일 보간으로 스프라이트로 렌더링됩니다. 저장소 = 건물; cwd = 책상. SessionEnd 시 출구로 걸어가서 사라집니다.
  • 상태 기반 라우팅Working → 책상에 앉음; Waiting (권한 프롬프트) → 깜빡이는 호박색 후광과 함께 정보 데스크 줄에 합류; Errored → 선술집으로 이동; Idle → 건물 근처 배회; Finished → 출구로 걸어가서 사라짐.
  • 머리 위 도구 아이콘Bash 🖥 · Edit/Write ✏ · Read 📖 · Grep 🔎 · Task 👥 · WebFetch 🌐. 새로운 도구 호출 시마다 떠다니는 팝 이모트가 애니메이션; 기본 아이콘은 아래에서 크로스페이드.
  • 생산성 폭발 광채 — 세션이 10초 내에 3회 이상의 Edit/Write 호출을 실행하면 그림자가 따뜻한 금색으로 변하고 부드러운 외부 링이 4초간 빛납니다. "Claude가 방금 8개 파일을 작성했다"는 것을 시각적으로 알 수 있습니다.
  • 상태 전환 펑 — 의미 있는 변경 시 짧은 흰색 방사형 폭발 (Waiting→Working, Errored 진입/이탈, Idle→Working, →Finished).
  • 애니메이션 "생각하는" 점 — 세션이 Working 상태이지만 활성 도구가 없을 때 표시. 활동 버블에서 . .. ... 순환 — 추가 레이어 없음.
  • 소셜 레이어 (demo/demo-social.gif) — 상황 인식 주변 대화, 스테이션 종류 포즈, 이웃 반응, 그룹 장면. 자세한 내용은 아래 표 참조.

!소셜 레이어

  • 스테이션 종류 포즈 + 지속 이모트 — 스프라이트는 가구에 앉기만 하는 것이 아니라 시각적으로 사용합니다. 매핑 테이블 (세계 모델의 모든 스테이션 유형을 포괄하는 19개 interactionKind 값에서 클라이언트 파생):
스테이션 종류 포즈 지속 이모트
desk, archive 타이핑 (Working) / 기대기 (Idle)
tavern, cafe 마시기 (1.2초 머그잔 올리기 사이클) 🍺
monitor_wall 지켜보기 📺
bed, nap_spot 잠자기 💤
break_area 도착 시 스트레칭 스쿼시 (800ms)
queue_slot 초조함 — 4초마다 얼굴 방향 좌↔우 전환
exit 작별 인사 (1.5초 스케일 + 바운스) — 도착 시 fadeOpacity > 0.85일 때만 재생되어 대부분 사라진 스프라이트가 다시 나타나지 않음 👋
plaza, lounge 기대기
work_outdoor 타이핑 (채광 / 채집)
  • 에이전트 ↔ 에이전트 반응 — 이웃이 주목할 만한 것을 보면 작은 이모트가 발동:
이벤트 근처 에이전트 반응 반경 쿨다운
이웃이 Errored 진입 😦 + 소스 방향으로 1틱 고개 돌림 4 20초
이웃이 생산성 폭발 시작 4 30초
자신 Waiting→Working (승인됨) 🎉
이웃이 작별 인사 시작 👋 3 60초
  • 사교 장소에서의 그룹 장면 — 같은 건물 (카페) 또는 야외 플라자 클러스터에 3명 이상의 에이전트가 앉음 → 90초 원탁 대화; 한 번에 한 명의 발언자, 멤버는 시각적으로 중심점을 향해 기댐. 일반 책상에서는 절대 형성되지 않음. 위치당 60초 재형성 쿨다운으로 즉시 재집결 방지.
  • Git 브랜치 → 모자 색상 — 같은 브랜치의 세션이 시각적으로 클러스터링됩니다.
  • 낮 / 밤 / 라이브 시계 — 하늘 오버레이가 실제 시간에 따라 보간됩니다. 밤에는 모든 건물 내부에서 따뜻한 창문 빛이 흘러나옴 (30% 깜빡임, 나무 램프처럼).

첫 틱 페이지 로드 전환은 여러 이미 Errored 상태인 세션이 뷰를 넘치지 않도록 억제됩니다. 전역 제한: 한 번에 최대 3개의 활성 이모트; 가장 먼저 만료되는 것이 먼저 제거되고, 동률 시 에이전트 ID 사전순 (결정적).

!낮 / 밤 !밤

보기 및 상호작용

!UX 개요

  • DOM 에이전트 명단 (오른쪽 상단) — 클릭 가능한 행, Working 세션에 작업 스피너 표시. 호버 시 강조; 선택은 스프라이트 + 단축키 선택을 따름. 900px 이하 뷰포트에서 자동 접힘.
  • 스프라이트 / 건물 호버 툴팁 — 커서를 따라가는 DOM 툴팁, 상태, 도구, cwd, 브랜치 (스프라이트의 경우) 또는 내부 활성 세션 (건물의 경우) 표시. 클릭과 동일한 히트 테스트 반경을 공유하여 하이라이트 링과 클릭 대상이 절대 분리되지 않음.
  • DOM 세션 상세 패널 — 스프라이트 또는 명단 행 클릭; 패널에 저장소, 브랜치, 모델, 도구, 마지막 어시스턴트 메시지, 세션별 토큰/USD 비용, 대화록 / Live PTY 열기 및 호스트 터미널 포커스 버튼 표시.
  • 브라우저 내 TUI — 패널의 "💬 대화 보기"는 전체 화면 xterm 뷰를 엽니다. 📜 대화록 탭은 1.5초 폴링으로 JSONL을 테일링; 🎛 라이브 탭은 라이브 PTY를 연결 (병렬 claude --resume 실행 전 이중 언어 논블로킹 확인).
  • 💰 세계 예산 배지 (왼쪽 상단) — 이 Mac에서 실행 중인 모든 것의 라이브 USD + 토큰 카운터. 클릭하면 비용별로 정렬된 세션별 분석이 포함된 팝오버 열림. 각 세션의 대화록 JSONL에서 assistant.usage를 가져와 모델별 Anthropic 가격 (Opus / Sonnet / Haiku; 입력, 출력, 캐시 쓰기, 캐시 읽기 별도 청구)에 대해 계산. 콜드 스타트는 기록 스캔을 세션당 1.5MB로 제한하여 시작이 절대 지연되지 않음.

!💰 비용 배지

  • 🔒 대화형 권한 승인 — 선택적 PreToolUse 훅이 설치된 경우 (npm run install-hooks -- --apply), Claude는 권한 프롬프트에서 차단; Agent World는 훅 플러그인을 통해 요청을 포착하고 브라우저에 허용 / 거부 / 터미널 포커스 토스트를 렌더링합니다. 결정은 <100ms 내에 CLI로 왕복합니다. 탭이 백그라운드에 있을 때 처음으로 데스크톱 알림이 발송 (사용자 제스처 권한 필요). 훅이 없어도 토스트는 읽기 전용 폴백 모드로 계속 표시되어 (세션이 Waiting으로 감지, "터미널 포커스"만 표시) 무엇이 차단되었는지 알 수 있습니다.

!🔒 권한 토스트

  • 이벤트 로그 (왼쪽 아래, 접을 수 있음) — 세션 시작, 상태 변경, 도구 호출, 세션 종료를 스트리밍. 행을 클릭하면 해당 에이전트 선택. 최근 80개 항목, 상대적 타임스탬프 (now, 12s, 3m). 600px 이하 뷰포트에서는 숨겨져 휴대폰에서도 세계를 볼 수 있음.
  • 타임라인 스크러버 (중앙 아래) — 1Hz 클라이언트 측 스냅샷 링 버퍼 (~60초 윈도우). 썸을 드래그하여 과거 프레임에서 세계를 고정, 놓거나 Space를 누르면 라이브로 복귀. 절대 시계 + ● LIVE / ⏸ PAUSED 배지 표시.
  • 권한 큐를 문자 그대로의 줄로 플라자에 표시 — 깊이가 승인 부채를 시각화.
  • 안정화된 말풍선 — 각 스프라이트의 활동 버블은 우선순위 순서 (Waiting > Errored > 활성 도구 > 최근 어시스턴트 스니펫 > 스테이션 > 비어 있음)를 가지며, 낮은 우선순위 다운그레이드 시 최소 2.5초 유지. 높은 우선순위 이벤트는 즉시 선점. 혼합 이벤트 소스의 "깜빡이는 텍스트" 문제 해결.
  • 상황 인식 주변 대화 — 두 에이전트가 2타일 이내로 지나갈 때 스크립트된 2~4턴 대화를 교환. 풀은 상황에 따라 선택되며, 우선순위:
  1. 공유 repoRootSAME_REPO 풀 ("{repo} 작업 중이야?")
  2. 한쪽이 Errored → ERROR_COMMISERATE ("또 레드 빌드야?")
  3. 정확히 한쪽이 Waiting → WAITING_SUPPORT ("승인 막혔어?")
  4. 이전에 만난 적 있음 → RECONNECT ("또 왔네?") — 각 런타임의 chatLastMetAt에 키 지정된 메모리
  5. 폴백 → 시간대 인사 풀 (MORNINGGREETINGS / LUNCHGREETINGS / EVENINGGREETINGS / NIGHTGREETINGS) 벽시계 시간에서 선택
  • 드라마 레벨 토글 (🧘 차분 / 🎭 보통 / 🎉 활기참) — 상단 바 버튼 또는 D 키. 반응 한도 (1/3/5), 채팅 시작 확률 (0.10/0.30/0.50), 그룹 형성 확률 (0.05/0.20/0.35) 조정. localStorage에 저장.
  • 도움말 오버레이 (?) — 이중 언어 (영어 + 한국어) 단축키 설명. 오른쪽 상단 버튼, ? 또는 Shift+/로 전환. ESC로 닫기.

키보드

동작
? 단축키 설명 열기 / 닫기
19 세션 #N 포커스
0 세션 패널 닫기
Esc 패널 + 모달 닫기
T 대화록 뷰어 열기 (세션 선택됨)
L Live PTY 탭으로 전환
N 영구 이름표 전환 (호버 / 선택 시 항상 이름 표시)
M 미니멀 모드 미리보기 전환 (팩이 설치되어 있어도 절차적 스프라이트)
타임라인 ±1초 스크럽
Space 타임라인 재생 / 일시정지
E 세계 편집기 전환
D 드라마 레벨 순환 (차분 / 보통 / 활기참)
Ctrl-Z / Ctrl-S / 화살표 / F 편집기 실행취소 / 저장 / 이동 / 뒤집기

빠른 시작

가장 빠른 방법 — 체크아웃 필요 없음, npx를 github 저장소에 직접 지정:

npx -y github:codemoo/agent-world
# → 생성된 API 토큰 출력, http://localhost:3102 부팅
# 데이터는 ~/.agent-world/에 저장되어 npm 캐시가 깨끗하게 유지됨.

선택적 플래그:

npx -y github:codemoo/agent-world --port 4000          # 사용자 지정 포트
npx -y github:codemoo/agent-world --token my-token     # 토큰 고정
npx -y github:codemoo/agent-world --install-hooks --apply
                                                        # PreToolUse 훅 설치

또는 개발용 (클론 + 해킹):

# 1) 의존성 설치
npm install

# 2) 서버 시작
export AGENT_WORLD_API_TOKEN=$(openssl rand -hex 16)
npm start

# 3) http://localhost:3102 열기

에셋 필요 없음 — 절차적 스프라이트 (폴백 가구, 나무, 꽃, 모자 색상 아바타)로 미니멀 모드로 실행됩니다. 오른쪽 아래 배너에서 업그레이드 방법을 설명합니다.

!미니멀 모드 데모

선택 사항: PixyMoon 룩으로 업그레이드

PixyMoon Cute RPG Worldpixymoon.itch.io에서 구매하고 추출된 팩을 assets/pixymoon/Cute RPG World/ 아래에 넣으세요. 서버는 다음 리로드 시 자동으로 인식 — 미니멀 모드 배너가 사라지고 Assets Manager와 World Editor가 활성화되며 50개 이상의 가구 스프라이트가 픽셀 아트로 렌더링됩니다.

PixyMoon 팩은 이 저장소에 포함되어 있지 않습니다 (라이선스에 따라 직접 구매해야 함). assets/pixymoon/README.md 참조.

서버가 읽는 파일:

  • ~/.claude/sessions/<pid>.json — 라이브 세션 메타데이터
  • ~/.claude-control/events/<pid>.json — claude-control이 설치된 경우 훅 이벤트
  • ~/.claude/plugins/agent-world/events/<pid>.jsonl — 자체 플러그인의 훅 이벤트 (옵트인)
  • ~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl — 필요 시 대화록 테일링

claude-control이 없으면 훅을 설치하세요 (추가적이며 ~/.claude/settings.json을 건드리지 않음):

npm run install-hooks            # 드라이런, 계획 출력
npm run install-hooks -- --apply # 실제로 플러그인 + 훅 스크립트 작성

~/.claude/plugins/agent-world/ 아래에 세 개의 스크립트를 설치합니다:

  • 상태 훅 (SessionStart, UserPromptSubmit, Stop, PostToolUse, SessionEnd, SubagentStart, SubagentStop) — 비동기, 스냅샷터가 읽는 JSONL 빵 부스러기 추가.
  • PreToolUse 훅 — 동기 (async: false); 보류 중인 도구 호출을 /api/hooks/permission-request에 POST하고 브라우저 클릭을 최대 92초 동안 기다림. allow/deny 시 [...]

원본 저장소: codemoo/agent-world

라이선스: 미표기

게재 제외를 원하시면 삭제 요청을 보내주세요.