# 2026-03-23 작업 일지

## 개요

Claude Code 호환 확장 시스템 구현 및 플러그인 생태계 통합. 75개 커밋, beta.25 ~ beta.26 배포.

---

## 1. Claude Code 호환 확장 시스템 구축 (4대 시스템)

### Skill/Command

- `.claude/skills/`, `.claude/commands/`, `~/.robota/skills/`, `.agents/skills/` 4경로 스캔
- Claude Code frontmatter 전체 파싱 (name, description, argument-hint, disable-model-invocation 등 10개 필드)
- `$ARGUMENTS`, `${CLAUDE_SESSION_ID}`, `` !`command` `` 변수 치환
- `context: fork`, `allowed-tools`, `agent` 실행 기능 (callback 기반)
- system prompt에 skill name+description 자동 주입

### Hook

- 8개 이벤트 (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, Notification, PreCompact, PostCompact)
- 4가지 타입 (command, http, prompt, agent) — strategy 패턴
- `IHookTypeExecutor` 인터페이스로 core(command/http)와 sdk(prompt/agent) 분리
- 세션 라이프사이클 전 구간 연결
- hook stdout → `<system-reminder>`로 AI 컨텍스트에 주입
- `CLAUDE_PLUGIN_ROOT`, `CLAUDE_PLUGIN_PATH`, `CLAUDE_PROJECT_DIR`, `CLAUDE_SESSION_ID` 환경변수 제공

### BundlePlugin

- `~/.robota/plugins/` 디렉토리 기반 플러그인 시스템
- marketplace repo shallow clone → 상대 경로로 플러그인 추출 → cache에 설치
- `skills/`, `commands/`, `hooks/hooks.json`, `.mcp.json`, `agents/` 로드
- `PluginSettingsStore`로 설정 영속 (enabledPlugins, extraKnownMarketplaces)
- `known_marketplaces.json`, `installed_plugins.json` 레지스트리

### Marketplace

- `/plugin marketplace add/remove/list/update` 명령
- GitHub repo 기반 marketplace (shallow clone, manifest name 자동 인식)
- local 경로 marketplace 지원
- 플러그인 설치: 상대 경로 source → marketplace clone에서 복사

---

## 2. 실제 플러그인 동작 검증 (rulebased-harness)

- `rulebased-io/claude-plugin` marketplace 등록 및 `rulebased-harness` 플러그인 설치 성공
- `/rulebased-harness:audit` (command) 및 `/audit` (skill) 실행 성공
- hook `resolve-plugin-path.sh` 실행 → stdout으로 `CLAUDE_PLUGIN_PATH` 전달 → AI가 reference 파일 읽기 성공
- skill 단축 이름(`/audit`) → 정규화된 이름(`/rulebased-harness:audit`)으로 hook 매칭하는 `resolveQualifiedName` 구현

---

## 3. 핵심 버그 수정

| 버그                   | 원인                                          | 수정                                          |
| ---------------------- | --------------------------------------------- | --------------------------------------------- |
| `~/.claude/` 폴더 접근 | 코드가 Claude Code 소유 폴더를 사용           | `~/.robota/`로 통일                           |
| settings.json 삭제     | `/reset` 테스트가 실제 파일 삭제              | settings-io mock 추가                         |
| 이중 네임스페이싱      | BundlePluginLoader + PluginCommandSource 중복 | PluginCommandSource에서 제거                  |
| `/plugin` 명령 미작동  | executeSlashCommand에 라우팅 누락             | switch case 추가                              |
| "No response received" | `max_tokens = 4096` 하드코딩                  | 모델별 maxOutput 사용 (64K/128K)              |
| maxRounds 후 빈 응답   | tool loop 종료 후 최종 응답 미생성            | synthetic user message 주입 → provider 재호출 |
| ESM require 에러       | `require('child_process')` 동적 import        | static import 사용                            |
| Zod 스키마 불일치      | `extraKnownMarketplaces` array vs object      | Record 스키마로 수정                          |
| hook prompt 필드 누락  | `user_message`만 전달, `prompt` 미제공        | Claude Code 호환 `prompt` 필드 추가           |

---

## 4. 프로세스/구조 개선

### 규칙 추가

- **Feature Gap Process** — gap 발견 시 코딩 중단 → 백로그 확인 → 스펙 수정 → 구현
- **Document Size Rule** — rule 파일 80줄 초과 시 분리
- **Command routing completeness guard** — builtin에 등록된 모든 명령이 라우팅되는지 테스트

### 문서 분리

- `process.md` (179줄) → 5개 파일 (spec-workflow, tdd-and-planning, verification, publish, operational)
- `project-structure.md` (106줄) → 3개 파일 (본체, publish-registry, dag-dependency-direction)

### 스펙-코드 적합성 감사

- 32개 항목 검사, 19개 gap 발견 → 전부 해결
- 스펙 먼저 수정 → 코드를 스펙에 맞춤 프로세스 준수

---

## 5. UI 개선

| 변경                | 이전                         | 이후                                                       |
| ------------------- | ---------------------------- | ---------------------------------------------------------- |
| 플러그인 skill 표시 | `/audit {desc} (plugin)`     | `/audit (plugin) {desc}`                                   |
| 도구 말줄임표       | 끝에서 자름 `...path/ver...` | 중간 자름 `...path/file.ts` (뒤 30자 유지)                 |
| 도구 상태           | ✓ 녹색만                     | ✓ 녹색(성공), ✗ 빨강+취소선(에러), ⊘ 밝은노랑+취소선(거부) |
| 라벨 색상           | 회색 (다크모드 안 보임)      | 흰색 bold                                                  |
| 설정 손상 안내      | 무조건 재설정                | corrupt/incomplete 오류 표시 후 재설정                     |

---

## 6. 배포

- **beta.25**: 4대 확장 시스템 최초 배포
- **beta.26**: maxOutput 수정, forced summary, UI 개선, 플러그인 hook 완성

---

## 테스트 현황

| 패키지         | 테스트 수 |
| -------------- | --------- |
| agent-core     | 599       |
| agent-sessions | 13        |
| agent-sdk      | 282       |
| agent-cli      | 221       |
| **합계**       | **1,115** |
