lottery
🎉🌟✨🎈年会抽奖程序,基于 Express + Three.js的 3D 球体抽奖程序,奖品🧧🎁,文字,图片,抽奖规则均可配置,😜抽奖人员信息Excel一键导入😍,抽奖结果Excel导出😎,给你的抽奖活动带来全新酷炫体验🚀🚀🚀
Claude Code 에이전트 활동을 실시간으로 시각화하는 로컬 대시보드. 나의 활동기반으로 잔디를심고 게임을 곁들인!
git clone https://github.com/JeongInjin/claude-agent-viz.gitJeongInjin/claude-agent-vizA local dashboard that visualizes Claude Code agent activity in real-time. Pixel-art characters represent agent states and roam freely in the workspace. 🌐 UI supports both Korean and English.
Claude Code의 에이전트 활동을 실시간으로 시각화하는 로컬 대시보드입니다. 픽셀아트 캐릭터들이 에이전트의 상태를 표현하고, 워크스페이스에서 자율적으로 활동합니다.
💡 설치가 귀찮다면? 이 README를 Claude Code에게 보여주고 "설치해줘"라고 하면 됩니다.
~/.claude/agents/*.md 파일 생성/편집/삭제, 드래그앤드롭 순서 변경 (order 필드로 .md 파일에 저장)/rename 자동 동기화 — Claude Code에서 /rename 명령 실행 시 탭 이름 실시간 갱신sk-*, ghp_*, AKIA*, JWT, Bearer 토큰 등 자동 치환··· 바운스 애니메이션 (일반 작업 말풍선과 시각적 구분)?preview=empty/mid/full).node --version으로 확인)# ~/.claude/agent-viz/ 에 프로젝트 파일 배치 git clone https://github.com/oy-snowwwww/claude-agent-viz.git ~/.claude/agent-viz
에이전트 .md 파일을 넣을 디렉토리가 없다면 생성합니다 (이미 있으면 건너뛰세요):
mkdir -p ~/.claude/agents
chmod +x ~/.claude/agent-viz/start.sh chmod +x ~/.claude/agent-viz/hook-handler.sh
# ~/.zshrc 또는 ~/.bashrc에 추가 alias claude-agents="bash ~/.claude/agent-viz/start.sh"
~/.claude/settings.json을 열고 hooks 키 안에 아래 이벤트들을 추가합니다.
이미 다른 hooks가 있다면? 기존 이벤트 배열에 항목을 추가하세요. 예를 들어
SessionStart에 이미 훅이 있으면, 해당 배열에 아래 항목을 병합합니다. 처음 설정하는 경우 아래 전체를 그대로 붙여넣으면 됩니다.
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "bash ~/.claude/agent-viz/start.sh auto"
},
{
"type": "command",
"command": "bash ~/.claude/agent-viz/hook-handler.sh session_start"
}
]
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "bash ~/.claude/agent-viz/hook-handler.sh thinking_start"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "bash ~/.claude/agent-viz/hook-handler.sh thinking_end"
}
]
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "bash ~/.claude/agent-viz/hook-handler.sh session_end"
}
]
}
],
"PreToolUse": [
{
"matcher": "Agent",
"hooks": [
{
"type": "command",
"command": "bash ~/.claude/agent-viz/hook-handler.sh agent_start"
}
]
},
{
"hooks": [
{
"type": "command",
"command": "bash ~/.claude/agent-viz/hook-handler.sh tool_use"
}
]
}
],
"PostToolUse": [
{
"matcher": "Agent",
"hooks": [
{
"type": "command",
"command": "bash ~/.claude/agent-viz/hook-handler.sh agent_done"
}
]
}
]
}
}
설정 후 Claude Code를 재시작하거나 새 세션을 시작해야 훅이 반영됩니다.
claude-agents # 서버 시작 + 브라우저 열기 claude-agents stop # 서버 종료 claude-agents status # 현재 상태 확인 claude-agents on # 세션 시작 시 자동 실행 ON claude-agents off # 세션 시작 시 자동 실행 OFF
| 영역 | 설명 |
|---|---|
| 좌측 패널 | Master(CLAUDE.md), Agents(관리/토글), MCP 서버, Hooks |
| 워크스페이스 | 픽셀아트 캐릭터 + 우주 배경 (별/은하수/nebula/별똥별/별자리). 드래그 재배치, Thinking 말풍선, 계보선. Tier 1/2/3 자동 크기 |
| 액티비티 | Master + 에이전트별 프로그레스 바 + 상태 |
| 타임라인 | 에이전트 실행 시간 시각화 (Master는 액티비티 패널) |
| 로그 | 실시간 이벤트 로그 |
| 히스토리 | 🕐 버튼으로 열기 — 종료 세션의 프롬프트/응답 요약, 작업 폴더 칩(parent/basename, hover 시 전체 경로, 클릭 시 클립보드 복사), 키워드 검색, 날짜/에이전트 필터, 🔒 사용 안 함 토글, 🗑 전체 삭제 버튼, 행 단위 ✕ 삭제 (2단계 confirm) |
| 버튼 | 기능 |
|---|---|
| ⭐ 포인트 배지 | 현재 잔고 + 누적 표시. 클릭 시 🛒 상점 모달 열기 |
| 🏆 | 포인트 히스토리 & 성취 모달 (일별 추이 + 성취 배지) |
| 🌱 | 활동 잔디 모달 (GitHub 스타일, 년도별) |
| 🎮 | 미니게임 (Snake, 2048, Flappy Bird) |
| 🔔 | 브라우저 알림 on/off |
| 🕐 | 세션 히스토리 |
| ? | 도움말 |
| ↻ | 서버 재시작 |
| ■ | 서버 종료 |
| 🌙/☀️ | 테마 전환 (Dark/Light) |
각 에이전트 카드의 토글 스위치로 프로젝트별 에이전트 활성화를 제어합니다.
OFF하면? 프로젝트 CLAUDE.md 끝에 아래 마커가 자동 삽입됩니다:
<!-- agent-viz:agents coder, qa --> <!-- 이 프로젝트에서는 위 에이전트만 사용한다 -->
Claude는 이 주석을 읽고 해당 에이전트만 사용합니다. 기존 CLAUDE.md 내용은 건드리지 않습니다.
none)종료된 세션을 자동으로 저장하고 나중에 검색/조회할 수 있습니다. 🕐 버튼으로 히스토리 모달 열기.
자동 저장 내용
검색/필터
용량 가드
history/ 디렉토리 10MB 초과 시 오래된 순으로 추가 삭제사용 안 함 토글 (🔒) — 이후 종료되는 세션을 디스크에 저장하지 않음
saveSessionHistory()가 skip되어 history/ 에 새 파일이 생기지 않음 (실시간 UI는 메모리 기반이라 정상 동작)~/.claude/agent-viz/privacy 파일로 상태 관리 (서버 재시작 후에도 유지)민감정보 자동 마스킹
sk-*)ghp_*, ghs_*, gho_*, ghu_*, github_pat_*)xoxb-* 등)AKIA*)/rename 자동 동기화Claude Code 세션에서 /rename <이름> 명령을 실행하면 대시보드 탭 이름이 자동으로 갱신됩니다.
동작
/rename 명령은 Claude Code transcript(<sessionId>.jsonl)에 기록됨thinking_start 시 서버가 transcript 끝에서 가장 최근 /rename 명령 추출_renamedFromTranscript 플래그로 이후 훅 이벤트의 cwd basename 덮어쓰기 방지| 증상 | 확인 |
|---|---|
| 서버가 뜨지 않음 | 포트 충돌 — lsof -i :54321 → AGENT_VIZ_PORT=다른포트 환경변수로 변경 |
| 훅이 동작 안 함 | ~/.claude/settings.json의 hooks 설정 확인 + Claude Code 세션 재시작 |
| 훅 에러 디버깅 | bash ~/.claude/agent-viz/hook-handler.sh session_start 수동 실행해서 에러 확인 |
| 탭/UI가 이상함 | 브라우저 새로고침 (F5) 또는 서버 재시작 (↻ 버튼) |
| 히스토리가 저장 안 됨 | /exit로 세션 종료했는지 + 히스토리 모달의 🔒 사용 안 함 토글 해제 확인 |
탭 이름이 /rename과 다름 |
브라우저 새로고침 — SSE가 일시적으로 끊겼을 수 있음 |
| 에이전트가 워크스페이스에 안 보임 | 좌측 에이전트 토글 확인 + ~/.claude/agents/*.md 파일 존재 확인 |
에이전트 토글 기능이 프로젝트 CLAUDE.md에 마커를 씁니다. 프로젝트의 .gitignore에 아래 항목을 추가하세요:
CLAUDE.md
.claude/
.mcp.json
| 변수 | 기본값 | 설명 |
|---|---|---|
AGENT_VIZ_PORT |
54321 |
서버 포트 |
~/.claude/agent-viz/
├── public/ # 클라이언트 정적 파일 (브라우저에 서빙)
│ ├── index.html # UI 마크업 + <script> 태그만 (인라인 JS 없음)
│ ├── css/
│ │ └── styles.css # 전체 스타일
│ └── js/ # JS 모듈 (<script> 순서 로딩)
│ ├── lang.js # i18n (한/영) 문자열 관리, t(key) 함수
│ ├── constants.js # 상수 (색상, 도구 목록, 픽셀맵, Village Tier, 게임화 ITEMS 카탈로그)
│ ├── state.js # 전역 상태 (sessions, liveInstances, currentVillageTier 등)
│ ├── utils.js # 순수 헬퍼 (esc, shade, buildPix) + Village Tier 감지 + 글로벌 툴팁
│ ├── village.js # 마을(우주) 모드 — 별/은하수/nebula/별똥별 (게임 버프 적용)
│ ├── creature.js # 픽셀 캐릭터 자율 행동 (roam/sleep/blink)
│ ├── history.js # 세션 히스토리 UI (검색·필터·삭제·cwd 칩)
│ ├── notifications.js # 브라우저 알림
│ ├── animations.js # 시각 이펙트 (sparks/flyDot/celebrate)
│ ├── event-ticks.js # 게임화 이벤트 마스터 틱 (10종 주기 이벤트 + Twin Moons 상시 오버레이)
│ ├── points.js # 게임화 포인트 — 배지 렌더 + SSE 수신 + 버프 동기화 (프리뷰 모드 격리)
│ ├── shop.js # 🛒 상점 모달 — 12 카테고리 탭, 구매 (Epic/Legendary 2단계 확인), 환불 초기화
│ ├── games.js # 🎮 미니게임 공통 (모달, 메뉴)
│ ├── games/ # 미니게임 개별 파일
│ │ ├── snake.js # Snake (localStorage 저장, 이어하기)
│ │ ├── 2048.js # 2048 (localStorage 저장, 이어하기)
│ │ └── flappy.js # Flappy Bird
│ ├── api.js # 서버 API 호출 래퍼 (fetch/save/delete)
│ ├── log.js # 로그 패널 (addLog, renderLogs, fmtTime)
│ ├── sessions.js # 세션/탭 관리 (register/switch/rename/reorder + 이벤트 위임)
│ ├── workspace.js # 워크스페이스 + 에이전트 목록 + Master 카드 렌더 (Ambient 버프 적용)
│ ├── panels.js # Activity + Timeline 패널 렌더
│ ├── stats.js # Daily Stats 드롭다운 + SSE 실시간 업데이트
│ ├── mcp-hooks.js # MCP 서버 + Hooks 사이드바 렌더
│ ├── modal.js # 에이전트/마스터 설정 모달
│ ├── server-control.js # 재시작/종료/도움말/토스트
│ ├── events.js # SSE 연결 + 이벤트 타입별 핸들러 (handleLiveEvent)
│ └── main.js # 부트스트랩 — Theme, renderAll, Logo, init, Page Visibility, 게임 버프 초기화 + 프리뷰 모드
├── lib/ # 서버 모듈 (server.js에서 분리)
│ ├── state.js # 공유 상태 컨테이너 (sessions, sseClients, statsData, pointsData)
│ ├── utils.js # 순수 유틸 (maskSecrets, truncate, isPrivacyOn, _ymd)
│ ├── security.js # 보안 가드 (guardMutate, readBodySafe, isValidCwd, safePath)
│ ├── frontmatter.js # YAML Frontmatter 파서
│ ├── sse.js # SSE 브로드캐스트
│ ├── agents.js # 에이전트/MCP/Hooks CRUD
│ ├── stats.js # 일일 통계
│ ├── gamification.js # 게임화 (포인트/성취/레벨/구매)
│ ├── session-tracker.js # 세션 트래커
│ └── history.js # 히스토리 저장/파싱
├── server.js # Node.js HTTP 서버 (라우팅 + lib 모듈 조합)
├── hook-handler.sh # Claude Code 훅 → 서버 이벤트 브릿지
├── start.sh # 서버 시작/종료/상태 CLI
├── enabled # 자동 실행 플래그 (파일 존재 여부)
├── privacy # Privacy 모드 플래그 (파일 존재 여부)
├── sessions/ # 활성 세션 PID 파일
├── history/ # 세션 히스토리 JSON (7일·10MB 가드, 1시간 주기 정리)
├── agent-stats.json # 일일/주간/누적 통계
└── points.json # 게임화 포인트 (잔고·누적·인벤토리, 런타임 — .gitignore 처리)
대시보드에 보이는 각 영역이 어떤 파일을 읽는지 매핑입니다.
| 대시보드 영역 | 데이터 소스 | 설명 |
|---|---|---|
| MASTER (좌측) | ~/CLAUDE.md + <프로젝트>/CLAUDE.md |
클릭하면 편집 가능 |
| AGENTS (좌측) | ~/.claude/agents/*.md |
에이전트 카드 + 토글 |
| 에이전트 토글 on/off | <프로젝트>/CLAUDE.md에 마커 저장 |
프로젝트별 에이전트 제한 |
| MCP SERVERS (좌측) | ~/.mcp.json |
연결된 MCP 서버 목록 |
| HOOKS (좌측) | ~/.claude/settings.json → hooks |
훅 핸들러 현황 |
| 워크스페이스 캐릭터 | ~/.claude/agents/*.md + 실시간 이벤트 |
에이전트 상태 시각화 |
| 액티비티/타임라인/로그 | Claude Code 훅 이벤트 (실시간) | SSE로 수신 |
| 세션 히스토리 | ~/.claude/agent-viz/history/*.json |
세션 종료 시 자동 저장, /api/history?q=&days=&agent=로 검색 |
| 히스토리 삭제 | DELETE /api/history (전체) / DELETE /api/history/:filename (개별) |
모달 헤더의 "전체 삭제" 버튼 + 행 단위 ✕ 버튼 |
| 통계 초기화 | POST /api/stats/reset |
헤더 📊 드롭다운 하단 "🔄 통계 초기화" 버튼 (today + history + total 모두 비움) |
| 질문별 응답 요약 | ~/.claude/projects/<프로젝트>/<sessionId>.jsonl |
Claude Code transcript 파싱으로 자동 추출 |
/rename 탭 동기화 |
같은 transcript의 <command-name>/rename</command-name> 추출 |
thinking_start 시 최신 rename 감지 → 탭 이름 자동 갱신 |
| 사용 안 함 토글 | ~/.claude/agent-viz/privacy (파일 존재 여부) |
/api/privacy 토글 — ON 시 saveSessionHistory() 스킵, 다음 세션부터 디스크에 기록 안 함 (디스크 정리는 별도 "전체 삭제" 액션) |
| 민감정보 마스킹 | server.js의 maskSecrets() |
sk-*/ghp_*/AKIA*/JWT/Bearer 자동 치환 |
| ⭐ 포인트 배지 | points.json → GET /api/points + SSE points_updated |
잔고/누적/인벤토리/buffs. 이벤트 훅에서 POINTS_RULES에 따라 자동 획득 (질문 +3, 도구 +0.5, 에이전트 완료 +10, 응답 +1) |
| 🛒 상점 모달 | constants.js ITEMS 카탈로그 + pointsData.inventory |
14 카테고리 탭 · POST /api/points/purchase로 구매 (화이트리스트/Origin/1KB DoS 가드) · POST /api/points/reset mode:refund로 환불 |
| 🏆 성취 모달 | GET /api/points/achievements → 성취 정의 + 달성 상태 |
10개 카테고리 × 51개 성취, 이모지 탭 전환, 달성 시 포인트 보상 |
| 📐 계보선 | 실시간 이벤트 (Master working + 에이전트 working) | updateLineage() — Master→working 에이전트 SVG 대시선, 15fps 업데이트 |
| 🌱 활동 잔디 | GET /api/stats/activity → agent-stats.json history |
년도별 1월~12월 격자, 데이터 무제한 보관 |
| 우주 버프 반영 | computeBuffs(inventory) → window.gameBuffs → village.js / workspace.js / event-ticks.js |
구매 즉시 renderVillage() 재호출로 레이어 재생성 + Aurora 상시 오버레이 재부착 |
~/.claude/agents/my-agent.md 생성 → 좌측 AGENTS에 카드 표시 + 워크스페이스에 캐릭터 등장
~/.mcp.json에 서버 추가 → 좌측 MCP SERVERS에 표시
~/CLAUDE.md 수정 → MASTER에서 편집/확인 가능
이 도구는 Claude Code의 설정 파일들과 연동됩니다. 처음이라면 아래 구조를 참고하세요.
~/
├── CLAUDE.md # 전역 설정 (모든 프로젝트에 적용)
└── .claude/
├── settings.json # Claude Code 설정 (hooks, permissions 등)
├── settings.local.json # 로컬 설정 (gitignore 대상)
├── agents/ # 에이전트 정의 (.md 파일)
│ ├── coder.md
│ ├── reviewer.md
│ └── ...
└── agent-viz/ # ← 이 프로젝트
~/.claude/agents/coder.md)--- name: coder description: 백엔드 코드 구현 tools: ["Read", "Write", "Edit", "Glob", "Grep", "Bash"] model: sonnet --- 당신은 백엔드 개발자입니다. 코드를 구현하고 테스트를 작성합니다.
<프로젝트>/CLAUDE.md)# 프로젝트 설정 ## 기본 규칙 - Kotlin/Spring Boot 프로젝트 - 테스트는 JUnit5 사용 ## 빌드 - ./gradlew build
~/.mcp.json){
"mcpServers": {
"github-mcp": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"]
}
}
}
public/ 하위에 클라이언트 자산 (HTML/CSS/JS) 분리, 서버가 직접 서빙<script> 순서 로딩으로 8개 파일 분리)node:test (의존성 0). 124 tests — 서버 단위 81개 + HTTP 통합 18개(child 서버 spawn + 실제 API) + 클라이언트 순수 함수 25개(constants/utils). 실행: bash test/run.sh [unit|integration|all]MIT
more like this
🎉🌟✨🎈年会抽奖程序,基于 Express + Three.js的 3D 球体抽奖程序,奖品🧧🎁,文字,图片,抽奖规则均可配置,😜抽奖人员信息Excel一键导入😍,抽奖结果Excel导出😎,给你的抽奖活动带来全新酷炫体验🚀🚀🚀
Comprehensive analytics dashboard for AI coding agents — Cursor, Windsurf, Claude Code, VS Code Copilot, Zed, Antigravi…
TachiSnap — Pixel Snapper for animation pixel artists. Rust + WebAssembly client-side tool for cleaning up AI-generated…
search projects, people, and tags