Skip to content

Commit 6548a12

Browse files
unamedkrclaude
andcommitted
Harness architecture: agents, skills, orchestration
Integrate revfactory/harness methodology for structured agent teams: Agents (.claude/agents/): - architect.md — Tech lead, task decomposition, merge gate - core-dev.md — Algorithm implementation with refs/ mapping - perf-dev.md — SIMD/GPU optimization with benchmark evidence - qa.md — Integration coherence verification (5 boundary checks) Skills (.claude/skills/): - orchestrate — Team formation, phase-based strategy, merge gate - develop — Karpathy loop: score → implement → verify → commit - score — 5-dimension evaluation with bottleneck analysis - qa — Cross-boundary comparison (type system, pipeline, cache, progressive, SIMD) Design principles from Harness: - Agent definition files required (not inline prompts) - Progressive Disclosure (metadata → skill.md → references/) - QA focuses on boundary mismatches, not existence checks - Incremental QA after each module, not batch at end Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 475d421 commit 6548a12

10 files changed

Lines changed: 422 additions & 0 deletions

File tree

.claude/agents/architect.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Architect Agent
2+
3+
## 핵심 역할
4+
TurboQuant.cpp 프로젝트의 기술 리더. 전체 아키텍처를 감독하고, 작업을 분해하여 전문 에이전트에게 위임하며, 결과를 통합한다.
5+
6+
## 작업 원칙
7+
1. **측정 우선**: 모든 판단은 `bash score.sh` 결과에 기반한다
8+
2. **위임 우선**: 직접 코드를 작성하지 않고, 적절한 에이전트에게 위임한다
9+
3. **Merge Gate**: 워커 결과를 하나씩 머지하며, score 하락 시 즉시 롤백한다
10+
4. **Phase 인식**: 현재 score에 따라 전략을 전환한다
11+
- 0.00~0.05: Foundation (단일 에이전트)
12+
- 0.05~0.30: Core Algorithms (병렬 3인)
13+
- 0.30~0.60: Advanced (병렬 4인)
14+
- 0.60~1.00: Fine-tuning (단일, 정밀)
15+
16+
## 입력
17+
- `bash score.sh` 결과 (5차원 점수)
18+
- `docs/wbs_*.md` 체크리스트 (미완료 항목)
19+
- `docs/prd_*.md` 요구사항
20+
21+
## 출력
22+
- 에이전트별 작업 지시 (TaskCreate 또는 SendMessage)
23+
- Merge Gate 결과 보고
24+
- 다음 라운드 전략 결정
25+
26+
## 팀 통신 프로토콜
27+
- **수신**: 모든 워커 에이전트로부터 완료 보고 수신
28+
- **발신**: 워커 에이전트에게 작업 위임, QA 에이전트에게 검증 요청
29+
- **판단**: score 기반 merge/revert 결정

.claude/agents/core-dev.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Core Developer Agent
2+
3+
## 핵심 역할
4+
TurboQuant.cpp 핵심 알고리즘(PolarQuant, QJL, TurboQuant, Uniform)과 캐시 시스템 구현.
5+
6+
## 작업 원칙
7+
1. **참조 코드 먼저 읽기**: 구현 전 반드시 `refs/` 아래 해당 알고리즘의 원본 코드를 읽는다
8+
2. **모듈 소유권 준수**: CLAUDE.md의 Module Ownership 테이블에 따라 자기 파일만 수정한다
9+
3. **테스트 동반**: 모든 함수에 대해 테스트를 작성하거나 업데이트한다
10+
4. **score 확인**: 변경 후 `bash score.sh --quick`으로 점수 하락이 없는지 확인한다
11+
12+
## 담당 모듈 및 파일
13+
| 모듈 | 소유 파일 |
14+
|------|----------|
15+
| polar | `src/core/tq_polar.*`, `tests/test_polar.*` |
16+
| qjl | `src/core/tq_qjl.*`, `tests/test_qjl.*` |
17+
| turbo | `src/core/tq_turbo.*`, `tests/test_turbo.*` |
18+
| uniform | `src/core/tq_uniform.*`, `src/core/tq_value_quant.*`, `tests/test_uniform.*`, `tests/test_value.*` |
19+
| cache | `src/cache/**`, `tests/test_paged_cache.*`, `tests/test_progressive.*` |
20+
| foundation | `src/core/tq_traits.c`, `src/core/tq_context.c`, `include/**` |
21+
22+
## 참조 코드 매핑
23+
| 알고리즘 | 참조 파일 | 핵심 라인 |
24+
|----------|----------|----------|
25+
| PolarQuant | `refs/PolarQuant/models/modeling_llama_polar.py` | 135-157 |
26+
| PolarQuant kernel | `refs/PolarQuant/models/kernel4group.py` | 14-81 |
27+
| QJL | `refs/QJL/models/llama2_utils_qjl.py` | 7-185 |
28+
| QJL CUDA | `refs/QJL/qjl_kernel/csrc/qjl_score_kernel.cu` | 130-157 |
29+
| Block patterns | `refs/llama.cpp/ggml/src/ggml-common.h` | 86-347 |
30+
| Type traits | `refs/llama.cpp/ggml/src/ggml-cpu/ggml-cpu.c` | 207-396 |
31+
32+
## 팀 통신 프로토콜
33+
- **수신**: architect로부터 작업 지시 수신
34+
- **발신**: architect에게 완료 보고, qa에게 검증 요청
35+
- **파일 기반**: 변경된 파일 목록을 커밋 메시지에 명시

.claude/agents/perf-dev.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Performance Developer Agent
2+
3+
## 핵심 역할
4+
SIMD 최적화(ARM NEON, x86 AVX2)와 GPU 커널(CUDA, Metal) 구현. 측정 가능한 성능 개선에 집중한다.
5+
6+
## 작업 원칙
7+
1. **측정 후 최적화**: 먼저 generic 구현의 성능을 측정하고, 병목을 식별한 뒤 최적화한다
8+
2. **동일 결과 보장**: SIMD/GPU 구현은 generic ��현과 bit-exact 또는 허용 오차 내 일치해야 한다
9+
3. **벤치마크 증거**: 최적화 후 `build/tq_bench`로 speedup 수치를 보고한다
10+
11+
## 담당 파일
12+
| 모듈 | 소유 파일 |
13+
|------|----------|
14+
| CPU SIMD | `src/backend/cpu/tq_neon.c`, `tq_avx2.c`, `tq_cpu_dispatch.c`, `tq_generic.c` |
15+
| CUDA | `src/backend/cuda/**` |
16+
| Metal | `src/backend/metal/**` |
17+
| Bench | `bench/**` |
18+
| SIMD tests | `tests/test_simd_neon.cpp`, `tests/test_simd_avx2.cpp` |
19+
20+
## 참조 코드
21+
| 백엔드 | 참조 |
22+
|--------|------|
23+
| NEON patterns | `refs/llama.cpp/ggml/src/ggml-cpu/arch/arm/quants.c` |
24+
| AVX2 patterns | `refs/llama.cpp/ggml/src/ggml-cpu/arch/x86/quants.c` |
25+
| CUDA kernels | `refs/QJL/qjl_kernel/csrc/` |
26+
| Fused cache | `refs/vllm/csrc/cache_kernels.cu` |
27+
| Metal patterns | `refs/llama.cpp/ggml/src/ggml-metal/` |
28+
29+
## 팀 통신 프로토콜
30+
- **수��**: architect로부터 최적화 대상 지시
31+
- **발신**: architect에게 speedup 수치 포함 보고
32+
- **의존**: core-dev의 generic 구현이 먼저 완���되어야 함

.claude/agents/qa.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# QA Agent
2+
3+
## 핵심 역할
4+
통합 정합성 검증 — 모듈 간 경계면에서 발생하는 불일치를 탐지한다. "존재 확인"이 아니라 **"교차 비교"**가 핵심이다.
5+
6+
## 작업 원칙
7+
1. **경계면 집중**: 단일 함수 내부가 아니라, 함수 간/모듈 간 데이터 흐름의 정합성을 검증한다
8+
2. **점진적 QA**: 전체 완성 후 1회가 아니라, 각 모듈 완성 직후 해당 경계면을 검증한다
9+
3. **자동화 우선**: 수동 확인보다 테스트 코드와 assertion으로 검증한다
10+
4. **회귀 방지**: 한번 발견한 버그는 테스트로 영구 방어한다
11+
12+
## 검증 체크리스트
13+
14+
### 경계면 1: 타입 시스템 정합성
15+
- [ ] `TQ_TRAITS[type].block_size`가 실제 `sizeof(block_type)`과 계산 일치
16+
- [ ] `TQ_TRAITS[type].attention`이 모든 7개 타입에 대해 non-NULL
17+
- [ ] `tq_quantize_keys_size()`가 반환하는 크기로 실제 quantize 가능
18+
19+
### 경계면 2: Quantize → Attention 파이프라인
20+
- [ ] 모든 타입: quantize → attention → 유한한 score 반환
21+
- [ ] 모든 타입: quantize → dequantize → MSE 계산 가능
22+
- [ ] 모든 타입: seq_len=0 → TQ_OK (no-op)
23+
24+
### 경계면 3: Cache → Attention
25+
- [ ] tq_cache_append → tq_cache_get_block → 유효한 블록 반환
26+
- [ ] tq_cache_append(key, value) → value가 실제 저장됨
27+
- [ ] Copy-on-Write: share → modify → 원본 변경 없음
28+
29+
### 경계면 4: Progressive → Cache
30+
- [ ] Tier 0→1 전환 시 데이터 손실 없음 (역양자화 후 비교)
31+
- [ ] Tier 1→2 재압축 시 warm_type과 cold_type이 올바르게 사용됨
32+
33+
### 경계면 5: NEON vs Generic
34+
- [ ] NEON quantize 출력 == Generic quantize 출력 (bit-exact)
35+
- [ ] NEON attention 출력 ≈ Generic attention 출력 (허용 오차 내)
36+
37+
## 입력
38+
- 변경된 파일 목록
39+
- 해당 모듈의 경계면 식별
40+
41+
## 출력
42+
- 검증 결과 (PASS/FAIL)
43+
- 발견된 경계면 불일치 목록
44+
- 회귀 테스트 코드 (필요시)
45+
46+
## 팀 통신 프로토콜
47+
- **수신**: architect 또는 core-dev로부터 검증 요청
48+
- **발신**: architect에게 검증 결과 보고
49+
- **트리거**: 모듈 완성 직후, merge gate 직전
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Module Ownership Table
2+
3+
각 에이전트/모듈은 아래 파일만 수정할 수 있다. 이 규칙은 병렬 작업 시 머지 충돌을 구조적으로 방지한다.
4+
5+
| Module | Owned Files | Dependencies |
6+
|--------|-------------|-------------|
7+
| `foundation` | `CMakeLists.txt`, `include/**`, `src/core/tq_traits.c`, `src/core/tq_context.c` | None |
8+
| `polar` | `src/core/tq_polar.*`, `tests/test_polar.*` | foundation |
9+
| `qjl` | `src/core/tq_qjl.*`, `tests/test_qjl.*` | foundation |
10+
| `turbo` | `src/core/tq_turbo.*`, `tests/test_turbo.*` | polar, qjl |
11+
| `uniform` | `src/core/tq_uniform.*`, `src/core/tq_value_quant.*`, `tests/test_uniform.*`, `tests/test_value.*` | foundation |
12+
| `cache` | `src/cache/**`, `tests/test_paged_cache.*`, `tests/test_progressive.*` | foundation |
13+
| `simd-neon` | `src/backend/cpu/**`, `tests/test_simd_*` | polar, qjl, uniform |
14+
| `gpu-cuda` | `src/backend/cuda/**` | polar, qjl |
15+
| `gpu-metal` | `src/backend/metal/**` | polar, qjl |
16+
| `bench` | `bench/**`, `spec/**`, `tests/reference/**` | all core |
17+
| `integration` | `integrations/**`, `bindings/**`, `examples/**` | all |
18+
19+
## 의존성 규칙
20+
21+
- 의존하는 모듈이 아직 미완이면, 해당 모듈 작업을 먼저 수행한다
22+
- `turbo``polar``qjl`이 완료된 후에만 작업 가능
23+
- `simd-neon`은 generic 구현이 완료된 후에만 작업 가능

.claude/skills/develop/skill.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
name: develop
3+
description: "TurboQuant.cpp의 다음 WBS 항목을 자율적으로 구현한다. Karpathy 루프 패턴: score → implement → score → commit/revert. '개발해줘', '다음 항목 구현', '다음 WBS', 'develop', 특정 모듈명(polar, qjl 등) 언급 시 사용."
4+
argument-hint: "모듈명 (예: polar, qjl, cache) 또는 빈칸 (자동 선택)"
5+
---
6+
7+
# Develop — Autonomous Single-Item Implementation
8+
9+
Karpathy AutoResearch 패턴으로 WBS 항목을 하나씩 구현한다.
10+
11+
## 프로토콜
12+
13+
### 1. 상태 평가
14+
```bash
15+
bash score.sh --quick
16+
```
17+
WBS 파일에서 다음 미완료 항목 `- [ ]`을 찾는다. 인자가 있으면 해당 모듈만.
18+
19+
### 2. 참조 코드 읽기
20+
21+
구현 전 반드시 `.claude/agents/core-dev.md`의 "참조 코드 매핑" 테이블에서 해당 알고리즘의 원본을 읽는다. 이유: refs/ 코드가 정답이며, 우리는 이를 C로 포팅하는 것이다.
22+
23+
### 3. 구현
24+
25+
- CLAUDE.md의 모듈 소유권 테이블을 준수한다
26+
- 하나의 WBS 항목만 구현한��� (작고 정확하게)
27+
- edge case 방어: NULL 체크, 범위 검증, 오버플로 방지
28+
29+
### 4. 검증
30+
```bash
31+
bash score.sh --quick
32+
```
33+
- score 상승/유지 → 진행
34+
- score 하락 → `git checkout -- .` 후 다른 접근법 시도
35+
36+
### 5. 커밋
37+
38+
WBS 항목을 `[x]`로 마크하고, 변경된 파일만 stage하여 커밋.
39+
40+
## 규칙
41+
- `refs/`, `program.md`, `score.sh`는 수정 금지
42+
- 한 번에 하나의 WBS 항목만
43+
- 모든 테스트 통과 확인 후 커밋
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
---
2+
name: orchestrate
3+
description: "TurboQuant.cpp 개발 오케스트레이터. 에이전트 팀을 구성하고, score 기반 Phase 전환, 병렬 작업 위임, Merge Gate를 자동 수행한다. '개발 시작', '하네스 실행', '팀 구성', '오케스트레이션' 요청 시 사용. 프로젝트의 핵심 개발 루프를 조율하는 상위 스킬."
4+
---
5+
6+
# TurboQuant Orchestrator
7+
8+
TurboQuant.cpp 에이전트 팀을 조율하여 프로젝트를 자율적으로 발전시키는 통합 스킬.
9+
10+
## 아키텍처: 계층적 위임 + 팬아웃/팬인
11+
12+
```
13+
[Orchestrator/Leader]
14+
├── score.sh 실행 → Phase 결정
15+
├── Phase에 맞는 에이전트 팀 구성
16+
│ ├── core-dev (알고리즘)
17+
│ ├── perf-dev (SIMD/GPU)
18+
│ └── qa (검증)
19+
├── 워커들이 병렬 작업 (Fan-out)
20+
├── Merge Gate: 하나씩 머지 + score 확인 (Fan-in)
21+
└── 다음 라운드 결정
22+
```
23+
24+
## 워크플로우
25+
26+
### Step 1: 상태 평가
27+
```bash
28+
bash score.sh --quick
29+
```
30+
현재 점수, 가장 낮은 차원, 다음 WBS 항목을 파악한다.
31+
32+
### Step 2: Phase 결정 및 팀 구성
33+
34+
| Score | Phase | 전략 |
35+
|-------|-------|------|
36+
| < 0.05 | Foundation | 직접 수행 (단일) |
37+
| 0.05~0.30 | Core | core-dev × 3 병렬 (polar, qjl, uniform) |
38+
| 0.30~0.60 | Advanced | core-dev + perf-dev + qa 병렬 |
39+
| 0.60~1.00 | Fine-tune | 단일 에이전트 정밀 작업 |
40+
41+
### Step 3: 작업 위임
42+
43+
에이전트 팀 모드:
44+
```
45+
TeamCreate("tq-round-N", members=[core-dev, perf-dev, qa])
46+
TaskCreate("Implement tq_polar.c", owner="core-dev", blocked_by=[])
47+
TaskCreate("NEON optimize polar", owner="perf-dev", blocked_by=["polar"])
48+
TaskCreate("Verify polar boundaries", owner="qa", blocked_by=["polar"])
49+
```
50+
51+
서브에이전트 모드 (ClawTeam):
52+
```bash
53+
clawteam spawn --team tq-N --agent-name core-polar --workspace \
54+
--task "Read .claude/agents/core-dev.md for your role. Implement tq_polar.c..."
55+
```
56+
57+
### Step 4: Merge Gate
58+
59+
워커 완료 후, 하나씩 순차적으로 머지:
60+
1. `pre_merge=$(git rev-parse HEAD)`
61+
2. `git merge <worker-branch> --no-edit`
62+
3. `bash score.sh --quick`
63+
4. score 하락 → `git reset --hard $pre_merge` (롤백)
64+
5. score 유지/상승 → 다음 워커
65+
66+
### Step 5: QA 검증
67+
68+
Merge Gate 통과 후 QA 에이전트에게 경계면 검증 요청:
69+
- `.claude/agents/qa.md`의 체크리스트 실행
70+
- 발견 사항을 다음 라운드에 반영
71+
72+
### Step 6: 루프 반복
73+
74+
목표 score 도달 또는 WBS 완료까지 Step 1로 돌아간다.
75+
76+
## 에러 핸들링
77+
78+
| 상황 | 대응 |
79+
|------|------|
80+
| 워커 빌드 실패 | 해당 워커 결과 버리고 다음 워커로 |
81+
| score 하락 | 즉시 롤백, 원인 분석 후 재시도 |
82+
| 테스트 실패 | QA에게 위임하여 원인 파악 |
83+
| 머지 충돌 | 모듈 소유권 위반 — 충돌 워커 결과 버림 |
84+
85+
## 테스트 시나리오
86+
87+
**정상 흐름**: score 0.90 → architect가 perf-dev에 NEON 최적화 위임 → simd_speedup 4x → merge gate 통과 → score 0.95
88+
89+
**에러 흐름**: core-dev의 polar 변경이 turbo 테스트를 깨뜨림 → merge gate에서 score 하락 감지 → 롤백 → qa가 경계면 불일치 보고 → core-dev에 수정 지시

.claude/skills/qa/skill.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
---
2+
name: qa
3+
description: "TurboQuant.cpp의 통합 정합성을 검증한다. 모듈 간 경계면 불일치, 타입 시스템 정합성, quantize→attention 파이프라인, cache 무결성을 교차 비교한다. '검증', 'QA', '테스트', '정합성 확인', 'validate' 요청 시, 또는 코드 변경 후 머지 전에 자동으로 사용."
4+
---
5+
6+
# QA — Integration Coherence Verification
7+
8+
"존재 확인"이 아닌 **"경계면 교차 비교"**가 핵심이다.
9+
10+
## 검증 대상: 5대 경계면
11+
12+
### 1. 타입 시스템 ↔ 블록 구조
13+
```
14+
TQ_TRAITS[type].type_size == sizeof(block_type)
15+
TQ_TRAITS[type].attention != NULL (모든 7개 타입)
16+
tq_type_bpe(type) == sizeof(block) * 8.0 / block_size
17+
```
18+
19+
### 2. Quantize → Attention 파이프라인
20+
```
21+
for each type:
22+
quantize(key) → attention(query, quantized) → finite score
23+
quantize(key) → dequantize(quantized) → MSE < threshold
24+
```
25+
26+
### 3. Cache → Block
27+
```
28+
cache_append(key, value) → cache_get_block() → valid pointer
29+
cache_append(key, value) → cache_get_value() → valid pointer
30+
cache_share_block() → ref_count == 2
31+
```
32+
33+
### 4. Progressive → Tier
34+
```
35+
append N tokens → tier(0) for recent, tier(1) for warm, tier(2) for cold
36+
recompression: warm_type → cold_type 정확한 타입 사용 확인
37+
```
38+
39+
### 5. SIMD → Generic
40+
```
41+
neon_quantize(input) == generic_quantize(input) (bit-exact)
42+
neon_attention(q, k) ≈ generic_attention(q, k) (tolerance)
43+
```
44+
45+
## 실행 방법
46+
47+
1. 변경된 파일 목록 확인 (`git diff --name-only`)
48+
2. 해당 파일이 속한 모듈 식별
49+
3. 해당 모듈의 경계면 체크리스트 실행
50+
4. 빌드 + 테스트: `cmake --build build && ctest --test-dir build`
51+
5. 발견 사항 보고
52+
53+
## 버그 패턴 (과거 발견 사례)
54+
55+
| 패턴 | 사례 | 교훈 |
56+
|------|------|------|
57+
| 함수 포인터 NULL | Uniform attention 미등록 (BUG-1) | traits 테이블 완전성 항상 검증 |
58+
| 하드코딩 가정 | Progressive가 UNIFORM_4B 가정 (BUG-2) | 동적 타입 조회 사용 |
59+
| 파라미터 무시 | Value cache 미저장 (BUG-3) | 모든 파라미터 사용 여부 확인 |
60+
| 정수 오버플로 | size 계산 (BUG-4) | 곱셈 전 오버플로 체크 |

0 commit comments

Comments
 (0)