diff --git a/.DS_Store b/.DS_Store index fde3205..3f26ba6 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..24f1e4a --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,5 @@ +{ + "enabledPlugins": { + "harness@harness-marketplace": true + } +} diff --git a/.omc/project-memory.json b/.omc/project-memory.json index 443a3c9..38afa2d 100644 --- a/.omc/project-memory.json +++ b/.omc/project-memory.json @@ -1,6 +1,6 @@ { "version": "1.0.0", - "lastScanned": 1778898050574, + "lastScanned": 1779881088035, "projectRoot": "/Users/gil/Downloads/gameservice-fe-agent 2", "techStack": { "languages": [], @@ -25,7 +25,6 @@ "isMonorepo": false, "workspaces": [], "mainDirectories": [ - "docs", "scripts" ], "gitBranches": { @@ -35,24 +34,11 @@ }, "customNotes": [], "directoryMap": { - "docs": { - "path": "docs", - "purpose": "Documentation", - "fileCount": 5, - "lastAccessed": 1778898050563, - "keyFiles": [ - "WDG00.04.02.06.07.01 AI 활용 - CBO-플랫폼서비스개발담당.md", - "fe-ai-reference-flow 2.html", - "fe-ai-reference-flow.html", - "fe-ai-rules.html", - "fe-ai-workflow.html" - ] - }, "html": { "path": "html", "purpose": null, "fileCount": 5, - "lastAccessed": 1778898050564, + "lastAccessed": 1779881088023, "keyFiles": [ "fe-agent-structure.html", "fe-ai-reference-flow.html", @@ -65,7 +51,7 @@ "path": "rules", "purpose": null, "fileCount": 4, - "lastAccessed": 1778898050564, + "lastAccessed": 1779881088024, "keyFiles": [ "claude-workflow.md", "coding-conventions.md", @@ -77,7 +63,7 @@ "path": "scripts", "purpose": "Build/utility scripts", "fileCount": 4, - "lastAccessed": 1778898050564, + "lastAccessed": 1779881088024, "keyFiles": [ "init-project.sh", "install.sh", @@ -89,7 +75,7 @@ "path": "skills", "purpose": null, "fileCount": 2, - "lastAccessed": 1778898050565, + "lastAccessed": 1779881088025, "keyFiles": [ "README.md" ] @@ -98,7 +84,7 @@ "path": "templates", "purpose": null, "fileCount": 1, - "lastAccessed": 1778898050565, + "lastAccessed": 1779881088025, "keyFiles": [ "CLAUDE.md.tpl" ] @@ -110,6 +96,162 @@ "accessCount": 4, "lastAccessed": 1778899125860, "type": "file" + }, + { + "path": "skills/conventional-commit/SKILL.md", + "accessCount": 3, + "lastAccessed": 1779882449816, + "type": "file" + }, + { + "path": "skills/verify-component-review/SKILL.md", + "accessCount": 3, + "lastAccessed": 1779882450087, + "type": "file" + }, + { + "path": "skills/work-mr-reviewer/SKILL.md", + "accessCount": 3, + "lastAccessed": 1779882452931, + "type": "file" + }, + { + "path": "skills/project-init/SKILL.md", + "accessCount": 3, + "lastAccessed": 1779882453953, + "type": "file" + }, + { + "path": "skills/dev-unit-test/SKILL.md", + "accessCount": 3, + "lastAccessed": 1779882455191, + "type": "file" + }, + { + "path": "CLAUDE.md", + "accessCount": 1, + "lastAccessed": 1779881527413, + "type": "file" + }, + { + "path": "skills/dev-api-state/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881687796, + "type": "file" + }, + { + "path": "skills/dev-component/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881688296, + "type": "file" + }, + { + "path": "skills/dev-docs/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881688774, + "type": "file" + }, + { + "path": "skills/dev-storybook/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881689816, + "type": "file" + }, + { + "path": "skills/dreaming/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881690818, + "type": "file" + }, + { + "path": "skills/markup-base/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881691808, + "type": "file" + }, + { + "path": "skills/markup-edm/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881692307, + "type": "file" + }, + { + "path": "skills/markup-figma/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881692781, + "type": "file" + }, + { + "path": "skills/markup-promotion/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881693816, + "type": "file" + }, + { + "path": "skills/plan-analyzer/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881694310, + "type": "file" + }, + { + "path": "skills/plan-translation-generator/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881694809, + "type": "file" + }, + { + "path": "skills/ppt-maker/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881695833, + "type": "file" + }, + { + "path": "skills/security-review/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881696830, + "type": "file" + }, + { + "path": "skills/squad-orchestration/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881697894, + "type": "file" + }, + { + "path": "skills/verify-a11y/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881698351, + "type": "file" + }, + { + "path": "skills/verify-perf/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881699852, + "type": "file" + }, + { + "path": "skills/verify-requirement/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881700334, + "type": "file" + }, + { + "path": "skills/verify-seo-geo/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881700838, + "type": "file" + }, + { + "path": "skills/work-code-reviewer/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881701830, + "type": "file" + }, + { + "path": "skills/work-log/SKILL.md", + "accessCount": 1, + "lastAccessed": 1779881702362, + "type": "file" } ], "userDirectives": [] diff --git a/.omc/state/agent-replay-137440a8-d613-4399-859d-0f83e48e0ec2.jsonl b/.omc/state/agent-replay-137440a8-d613-4399-859d-0f83e48e0ec2.jsonl new file mode 100644 index 0000000..5f37f91 --- /dev/null +++ b/.omc/state/agent-replay-137440a8-d613-4399-859d-0f83e48e0ec2.jsonl @@ -0,0 +1,5 @@ +{"t":0,"agent":"system","event":"skill_invoked","skill_name":"harness:harness"} +{"t":0,"agent":"ae77205","agent_type":"unknown","event":"agent_stop","success":true} +{"t":0,"agent":"a299369","agent_type":"analyst","event":"agent_start","parent_mode":"none"} +{"t":0,"agent":"a299369","agent_type":"analyst","event":"agent_stop","success":true,"duration_ms":136762} +{"t":0,"agent":"a879ea4","agent_type":"unknown","event":"agent_stop","success":true} diff --git a/.omc/state/hud-stdin-cache.json b/.omc/state/hud-stdin-cache.json new file mode 100644 index 0000000..4e9e22c --- /dev/null +++ b/.omc/state/hud-stdin-cache.json @@ -0,0 +1 @@ +{"session_id":"137440a8-d613-4399-859d-0f83e48e0ec2","transcript_path":"/Users/gil/.claude/projects/-Users-gil-Downloads-gameservice-fe-agent-2/137440a8-d613-4399-859d-0f83e48e0ec2.jsonl","cwd":"/Users/gil/Downloads/gameservice-fe-agent 2","session_name":"Build agent team harness for project","model":{"id":"claude-sonnet-4-6","display_name":"Sonnet 4.6"},"workspace":{"current_dir":"/Users/gil/Downloads/gameservice-fe-agent 2","project_dir":"/Users/gil/Downloads/gameservice-fe-agent 2","added_dirs":[]},"version":"2.1.132","output_style":{"name":"default"},"cost":{"total_cost_usd":2.29210485,"total_duration_ms":1385950,"total_api_duration_ms":328564,"total_lines_added":6,"total_lines_removed":5},"context_window":{"total_input_tokens":88842,"total_output_tokens":556,"context_window_size":200000,"current_usage":{"input_tokens":3,"output_tokens":556,"cache_creation_input_tokens":1061,"cache_read_input_tokens":87778},"used_percentage":44,"remaining_percentage":56},"exceeds_200k_tokens":false,"fast_mode":false,"effort":{"level":"high"},"thinking":{"enabled":true},"rate_limits":{"five_hour":{"used_percentage":21,"resets_at":1779898800},"seven_day":{"used_percentage":14.000000000000002,"resets_at":1780171200}}} \ No newline at end of file diff --git a/.omc/state/last-tool-error.json b/.omc/state/last-tool-error.json new file mode 100644 index 0000000..4320588 --- /dev/null +++ b/.omc/state/last-tool-error.json @@ -0,0 +1,7 @@ +{ + "tool_name": "Read", + "tool_input_preview": "{\"file_path\":\"/Users/gil/.claude/projects/-Users-gil-Downloads-gameservice-fe-agent-2/137440a8-d613-4399-859d-0f83e48e0ec2/tool-results/bbcz4rj5p.txt\"}", + "error": "File content (51430 tokens) exceeds maximum allowed tokens (25000). Use offset and limit parameters to read specific portions of the file, or search for specific content instead of reading the whole file.", + "timestamp": "2026-05-27T11:34:09.555Z", + "retry_count": 1 +} \ No newline at end of file diff --git a/.omc/state/mission-state.json b/.omc/state/mission-state.json new file mode 100644 index 0000000..056c8f2 --- /dev/null +++ b/.omc/state/mission-state.json @@ -0,0 +1,61 @@ +{ + "updatedAt": "2026-05-27T11:50:54.081Z", + "missions": [ + { + "id": "session:137440a8-d613-4399-859d-0f83e48e0ec2:none", + "source": "session", + "name": "none", + "objective": "Session mission", + "createdAt": "2026-05-27T11:34:36.284Z", + "updatedAt": "2026-05-27T11:50:54.081Z", + "status": "done", + "workerCount": 1, + "taskCounts": { + "total": 1, + "pending": 0, + "blocked": 0, + "inProgress": 0, + "completed": 1, + "failed": 0 + }, + "agents": [ + { + "name": "analyst:a299369", + "role": "analyst", + "ownership": "a299369360ad702d7", + "status": "done", + "currentStep": null, + "latestUpdate": "completed", + "completedSummary": null, + "updatedAt": "2026-05-27T11:50:54.081Z" + } + ], + "timeline": [ + { + "id": "session-start:a299369360ad702d7:2026-05-27T11:34:36.284Z", + "at": "2026-05-27T11:34:36.284Z", + "kind": "update", + "agent": "analyst:a299369", + "detail": "started analyst:a299369", + "sourceKey": "session-start:a299369360ad702d7" + }, + { + "id": "session-stop:a299369360ad702d7:2026-05-27T11:36:53.046Z", + "at": "2026-05-27T11:36:53.046Z", + "kind": "completion", + "agent": "analyst:a299369", + "detail": "completed", + "sourceKey": "session-stop:a299369360ad702d7" + }, + { + "id": "session-stop:a879ea409ed32ea87:2026-05-27T11:50:54.081Z", + "at": "2026-05-27T11:50:54.081Z", + "kind": "completion", + "agent": "analyst:a299369", + "detail": "completed", + "sourceKey": "session-stop:a879ea409ed32ea87" + } + ] + } + ] +} \ No newline at end of file diff --git a/.omc/state/sessions/137440a8-d613-4399-859d-0f83e48e0ec2/hud-state.json b/.omc/state/sessions/137440a8-d613-4399-859d-0f83e48e0ec2/hud-state.json new file mode 100644 index 0000000..eef405c --- /dev/null +++ b/.omc/state/sessions/137440a8-d613-4399-859d-0f83e48e0ec2/hud-state.json @@ -0,0 +1,6 @@ +{ + "timestamp": "2026-05-27T11:25:10.291Z", + "backgroundTasks": [], + "sessionStartTimestamp": "2026-05-27T11:24:48.046Z", + "sessionId": "137440a8-d613-4399-859d-0f83e48e0ec2" +} \ No newline at end of file diff --git a/.omc/state/sessions/137440a8-d613-4399-859d-0f83e48e0ec2/session-started.json b/.omc/state/sessions/137440a8-d613-4399-859d-0f83e48e0ec2/session-started.json new file mode 100644 index 0000000..e2f3ed1 --- /dev/null +++ b/.omc/state/sessions/137440a8-d613-4399-859d-0f83e48e0ec2/session-started.json @@ -0,0 +1,6 @@ +{ + "session_id": "137440a8-d613-4399-859d-0f83e48e0ec2", + "started_at": "2026-05-27T11:24:48.032Z", + "cwd": "/Users/gil/Downloads/gameservice-fe-agent 2", + "pid": 92266 +} \ No newline at end of file diff --git a/.omc/state/subagent-tracking.json b/.omc/state/subagent-tracking.json new file mode 100644 index 0000000..83a48e1 --- /dev/null +++ b/.omc/state/subagent-tracking.json @@ -0,0 +1,17 @@ +{ + "agents": [ + { + "agent_id": "a299369360ad702d7", + "agent_type": "oh-my-claudecode:analyst", + "started_at": "2026-05-27T11:34:36.284Z", + "parent_mode": "none", + "status": "completed", + "completed_at": "2026-05-27T11:36:53.046Z", + "duration_ms": 136762 + } + ], + "total_spawned": 1, + "total_completed": 1, + "total_failed": 0, + "last_updated": "2026-05-27T11:50:54.182Z" +} \ No newline at end of file diff --git a/skills/conventional-commit/SKILL.md b/skills/conventional-commit/SKILL.md index 1906d6f..28fd100 100644 --- a/skills/conventional-commit/SKILL.md +++ b/skills/conventional-commit/SKILL.md @@ -1,6 +1,6 @@ --- name: conventional-commit -description: Git 변경사항을 팀의 Conventional Commits 규칙(gameservice-fe-agent/rules/commit-pr.md)에 맞춰 커밋 메시지로 작성할 때 사용합니다. 사용자가 "커밋 메시지 만들어줘", "commit", "커밋해줘" 등을 요청하면 트리거됩니다. +description: Git 변경사항을 팀의 Conventional Commits 규칙에 맞춰 커밋 메시지로 작성할 때 사용합니다. 사용자가 "커밋 메시지 만들어줘", "commit", "커밋해줘" 등을 요청하면 트리거됩니다. --- # Conventional Commit 작성 diff --git a/skills/dev-unit-test/SKILL.md b/skills/dev-unit-test/SKILL.md index 7eb1f56..d268ddf 100644 --- a/skills/dev-unit-test/SKILL.md +++ b/skills/dev-unit-test/SKILL.md @@ -18,7 +18,7 @@ description: | - 컴포넌트 개발 완료 후 테스트 코드를 작성할 때 - TDD 방식으로 테스트를 먼저 작성할 때 -- 팀 테스트 커버리지 기준(80%↑)을 달성해야 할 때 +- 프로젝트 테스트 커버리지 목표를 달성해야 할 때 ## 입력 diff --git a/skills/project-init/SKILL.md b/skills/project-init/SKILL.md index 9e7b32b..c13b33a 100644 --- a/skills/project-init/SKILL.md +++ b/skills/project-init/SKILL.md @@ -15,7 +15,7 @@ description: > - `/init` 실행 시 - `.claude/project/*.md` 가 템플릿 상태(placeholder 가 남아 있음)일 때 -- 새로운 프로젝트에 gameservice-fe-agent 를 처음 적용할 때 +- 새로운 프로젝트에 팀 공통 지침을 처음 적용할 때 ## 작업 순서 diff --git a/skills/verify-component-review/SKILL.md b/skills/verify-component-review/SKILL.md index 3d37255..8dc6885 100644 --- a/skills/verify-component-review/SKILL.md +++ b/skills/verify-component-review/SKILL.md @@ -1,6 +1,6 @@ --- name: verify-component-review -description: Vue 3 / Nuxt 컴포넌트 파일을 팀 공통 지침(gameservice-fe-agent) 기준으로 리뷰할 때 사용합니다. 사용자가 "이 컴포넌트 리뷰해줘", "컨벤션 맞는지 봐줘", "컴포넌트 체크" 등을 요청하면 트리거됩니다. +description: Vue 3 / Nuxt 컴포넌트 파일을 팀 공통 지침 기준으로 리뷰할 때 사용합니다. 사용자가 "이 컴포넌트 리뷰해줘", "컨벤션 맞는지 봐줘", "컴포넌트 체크" 등을 요청하면 트리거됩니다. --- # Vue 컴포넌트 리뷰 diff --git a/skills/work-mr-reviewer/SKILL.md b/skills/work-mr-reviewer/SKILL.md index 90caf1e..058b19b 100644 --- a/skills/work-mr-reviewer/SKILL.md +++ b/skills/work-mr-reviewer/SKILL.md @@ -1,12 +1,13 @@ --- name: work-mr-reviewer description: | - GitLab MR URL 또는 diff를 받아 팀 공통 지침(gameservice-fe-agent) 기준으로 + GitLab MR 또는 GitHub PR URL / diff를 받아 팀 공통 지침 기준으로 코드 리뷰 코멘트 초안을 자동 생성합니다. 리뷰어가 비즈니스 로직에 집중할 수 있도록 컨벤션/스타일 지적은 AI가 사전 처리합니다. 다음 상황에서 반드시 사용하세요: - "이 MR 리뷰해줘", "MR 코멘트 작성해줘" + - "이 PR 리뷰해줘", "Pull Request 코멘트 작성해줘" - "이 PR 어떤지 봐줘: " - 리뷰어 역할로 MR을 검토하기 전 사전 검토가 필요할 때 ---