leerness 1.9.270 → 1.9.271

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.271 — 2026-06-02 — README 한/영 이중 사용자 친화 재작성 (가독성) + e2e 배지 카운트 정확화
4
+
5
+ **📖 README 를 한국어/영어 이중 버전으로 가독성 좋게 재작성 (사용자 명시).**
6
+
7
+ ### 배경
8
+ 기존 README 는 한국어 단일(636줄)에 변경이력 덤프가 길어 가독성이 낮고, 일부 내용이 stale(gemini 표기, 배지 버전/카운트)했음. 사용자 요청: 사용 방법을 유저 친화적으로·이해하기 쉽게·한/영 버전으로·가독성 좋게.
9
+
10
+ ### 구현
11
+ 1. **언어 스위처 + 이중 섹션** — 상단 `🇰🇷 한국어 · 🇬🇧 English` 앵커 네비 + 명시적 `<a id>` 앵커(이모지 무관 안정). 한국어 전문 → 영어 전문 미러 구조.
12
+ 2. **가독성 재구성** — "5가지 함정 → 방어" 표, 60초 시작, 작동 방식 4단계, 핵심 명령(카테고리별), FAQ, 환경변수, 최근 변경 5건 + CHANGELOG 링크. 긴 변경이력 덤프 제거(링크 대체).
13
+ 3. **최신화** — gemini → agy(Antigravity)/grok 표기, 1.9.269 시스템 언어 감지·1.9.270 역할 부여 반영, 배지(version 1.9.271 / e2e 219 / selftest 24 / MCP 75 / providers 6).
14
+ 4. **`syncReadme` e2e 배지 카운트 보강** — 기존 `^total++;`만 세어 177(부정확) → `run(...)` 호출(42) 포함 = **219**(실제 결과와 정확히 일치). 1.9.40 배지 자동 동기화의 정확도 개선.
15
+ 5. **관리 블록 보존** — `leerness:project-readme` 마커 유지, `readme sync` 로 정합화.
16
+
17
+ ### 검증
18
+ - **E2E 219/219 PASS** (readme sync + consistency check 포함) · **selftest 24/24 PASS** (회귀 0).
19
+ - 배지 자동 동기화 후 e2e 배지 = 219/219 (실제 결과 일치 확인).
20
+
3
21
  ## 1.9.270 — 2026-06-02 — agent roles: 모델별 역할 부여 (코딩/검수/지휘/디자인/디버그/설계/분배)
4
22
 
5
23
  **🎭 여러 AI 에이전트 활성 시 역할을 provider+model 에 매핑하고 `dispatch --role` 로 라우팅 — 사용자가 선택적으로 역할 룰 설정 (사용자 명시).**
package/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Leerness
2
2
 
3
3
  > **AI 코딩 에이전트의 거짓 완료·중복·망각·충돌을 막아주는 검수·기억·협업 CLI 하네스.**
4
+ > **A CLI harness that stops AI coding agents from faking completion, duplicating work, forgetting context, and colliding.**
4
5
 
5
- [![npm](https://img.shields.io/badge/npm-leerness-blue)](https://www.npmjs.com/package/leerness) [![version](https://img.shields.io/badge/version-1.9.266-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v211-21%2F21-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-73-brightgreen)]() [![cli](https://img.shields.io/badge/CLI_commands-60-brightgreen)]() [![json-fields](https://img.shields.io/badge/JSON_통합-12_필드-blueviolet)]() [![rounds](https://img.shields.io/badge/autonomous_R-222-blueviolet)]() [![main-push](https://img.shields.io/badge/🎉_main--push_streak-128_rounds-success)]() [![npm-streak](https://img.shields.io/badge/🎉_npm--publish-89_streak-success)]() [![encoding](https://img.shields.io/badge/🌐_인코딩보호-Windows%2BPOSIX-blueviolet)]() [![perf](https://img.shields.io/badge/cold_start-370ms-success)]() [![license](https://img.shields.io/badge/license-MIT-lightgrey)]()
6
+ [![npm](https://img.shields.io/badge/npm-leerness-blue)](https://www.npmjs.com/package/leerness) [![version](https://img.shields.io/badge/version-1.9.271-green)]() [![tests](https://img.shields.io/badge/e2e-219%2F219-success)]() [![selftest](https://img.shields.io/badge/selftest-24%2F24-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-75-brightgreen)]() [![providers](https://img.shields.io/badge/AI_providers-6-brightgreen)]() [![license](https://img.shields.io/badge/license-MIT-lightgrey)]()
6
7
 
7
8
  ```
8
9
  ╔══════════════════════════════════════════════════════════════╗
@@ -12,525 +13,361 @@
12
13
  ║ ██║ ██╔══╝ ██╔══╝ ██╔══██╗██║╚██╗██║██╔══╝ ╚════██║ ║
13
14
  ║ ███████╗███████╗███████╗██║ ██║██║ ╚████║███████╗███████║ ║
14
15
  ║ ╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝╚══════╝ ║
15
- ║ v1.9.266 AI Agent Reliability Harness + Sandbox
16
- ║ verify · remember · orchestrate · audit · sandbox · drift
17
- ║ 🤖 dispatch 슬래시 주입 + MCP 73 (UR-0021 2단계 · R222) ║
16
+ ║ v1.9.271 · AI Agent Reliability Harness
17
+ ║ verify · remember · orchestrate · audit · drift · roles
18
18
  ╚══════════════════════════════════════════════════════════════╝
19
19
  ```
20
20
 
21
+ <p align="center"><b>🇰🇷 <a href="#한국어">한국어</a> &nbsp;·&nbsp; 🇬🇧 <a href="#english">English</a></b></p>
22
+
21
23
  ---
22
24
 
23
- ## leerness는 무엇인가요?
25
+ <a id="한국어"></a>
24
26
 
25
- Claude Code · Cursor · Copilot · Codex · Gemini CLI 같은 **AI 코딩 에이전트와 함께 일할 때 발생하는 구조적 문제**를 자동으로 막는 CLI 하네스입니다.
27
+ # 🇰🇷 한국어
26
28
 
27
- AI 에이전트는 빠르게 코드를 쓰지만, 다음 **5가지 함정**에 반복해서 빠집니다:
29
+ ## 한눈에 보기
28
30
 
29
- ```
30
- 1. 거짓 완료 — "구현했습니다"는데 코드에 변경이 없거나 테스트 미실행
31
- 2. 중복 생성 — 이미 있는 함수를 다른 프로젝트에 만듦
32
- 3. 망각 — 다음 세션에서 컨텍스트(plan/decisions)를 잃음
33
- 4. 충돌 — 멀티 에이전트가 같은 파일을 동시에 써서 작업 손실
34
- 5. 도구 drift — 시간이 지날수록 메인 에이전트가 도구·메타파일을 잊음
31
+ `leerness`는 **Claude Code · Cursor · Copilot · Codex · Antigravity · Grok** 같은 AI 코딩 에이전트와 함께 일할 때 생기는 구조적 문제를 자동으로 막아주는 CLI 도구입니다.
32
+
33
+ AI는 코드를 빠르게 쓰지만, 다음 **5가지 함정**에 반복해서 빠집니다 — leerness는 이를 모두 자동으로 감지·차단·회복합니다.
34
+
35
+ | # | 함정 | leerness의 방어 |
36
+ |---|------|-----------------|
37
+ | 1 | **거짓 완료** — "구현했습니다"인데 코드 변경/테스트가 없음 | `verify-claim --run-tests` (증거 파일 + 실제 테스트 실행) |
38
+ | 2 | **중복 생성** — 이미 있는 함수를 또 만듦 | `reuse-map` (워크스페이스 전체 중복 감지) |
39
+ | 3 | **망각** — 다음 세션에서 계획·결정을 잃음 | `handoff` (컨텍스트 자동 적재) |
40
+ | 4 | **충돌** — 멀티 에이전트가 같은 파일을 동시에 수정 | `agents dispatch` (경로 격리 + 역할 분배) |
41
+ | 5 | **도구 drift** — 시간이 지나며 도구·메타파일을 잊음 | `drift check` (자동 감지 + 회복) |
42
+
43
+ ---
44
+
45
+ ## ⏱️ 60초 시작
46
+
47
+ ```bash
48
+ # 1) 설치 + 초기화 — 시스템 언어를 자동 감지해 한/영 가이드 표시 (1.9.269)
49
+ npx leerness@latest init .
50
+
51
+ # 2) AI 세션 시작 — 컨텍스트 자동 적재
52
+ npx leerness handoff .
53
+
54
+ # 3) AI 작업 끝 — "정말 했는지" 증거로 검증
55
+ npx leerness verify-claim T-0001 --run-tests
56
+
57
+ # 4) 세션 마감 — 다음 세션으로 자동 인계
58
+ npx leerness session close .
35
59
  ```
36
60
 
37
- leerness는 5가지를 모두 **자동으로 감지·차단·회복**합니다.
61
+ > 💡 `@latest`를 붙이면 npx 캐시로 옛 버전이 실행되는 함정을 피할 수 있습니다.
38
62
 
39
63
  ---
40
64
 
41
- ## 어떻게 작동하나요?
65
+ ## 🧩 작동 방식
42
66
 
43
- ### 1. 워크스페이스에 4개 채널을 만듭니다
67
+ ### 1. 워크스페이스에 "기억 채널"을 만듭니다
44
68
 
45
69
  ```
46
70
  .harness/
47
71
  ├── plan.md ← 무엇을 할 것인가
48
72
  ├── progress-tracker.md ← 무엇을 했는가 (증거 포함)
49
73
  ├── decisions.md ← 왜 그렇게 했는가
50
- └── session-handoff.md ← 다음 세션에 무엇을 전달하는가
74
+ └── session-handoff.md ← 다음 세션에 무엇을 넘기는가
51
75
  ```
52
76
 
53
- 4개 파일은 사용자 메모리로 보호됩니다. leerness가 자동 업데이트하지만, 사용자/AI가 직접 편집한 내용은 **항상 보존**됩니다.
77
+ 파일들은 **사용자 메모리로 보호**됩니다. leerness가 자동 갱신하되, 사람이나 AI가 직접 내용은 **항상 보존**되고 변경 전 `.harness/archive/`에 백업됩니다.
54
78
 
55
- ### 2. AI가 작업할 때마다 자동 검증
79
+ ### 2. AI가 "완료"라고 때마다 증거로 검증
56
80
 
57
81
  ```
58
82
  AI: "T-0042 API 호출 구현 완료했습니다"
59
-
60
- leerness verify-claim T-0042 --run-tests
61
-
62
- evidence 파일 확인 테스트 실제 실행 URL 코드 매칭
63
-
64
- ✓ 검증 통과 또는 ✗ "코드에 fetch 호출 흔적 없음 (confidence 0.85)"
83
+ leerness verify-claim T-0042 --run-tests
84
+ evidence 파일 확인 → 테스트 실제 실행 → 코드 매칭
85
+
86
+ 검증 통과 또는 ✗ "코드에 fetch 호출 흔적 없음 (신뢰도 0.85)"
65
87
  ```
66
88
 
67
- ### 3. 워크스페이스 전체에서 중복·관계 추적
89
+ ### 3. 여러 AI 에이전트를 역할별로 지휘 (1.9.270 신규)
68
90
 
69
- ```bash
70
- leerness reuse-map --all-apps --strict-elements
71
- → escapeHtml in 3 projects (project-a:42, project-b:18, project-c:103)
72
- → useCart depends on AuthContext (cycle detected)
73
- ```
74
-
75
- ### 4. 다중 AI 에이전트 안전 협업
91
+ 모델마다 강점이 다릅니다. **역할을 모델에 매핑**해 적재적소로 일을 시킵니다.
76
92
 
77
93
  ```bash
78
- leerness agents list # claude/codex/gemini/copilot 상태
79
- leerness agents dispatch "<task>" --to gemini --write # 권장 플래그 자동 첨부
80
- leerness agents bench "<task>" # 3 CLI 동시 호출 + 시간/품질 비교
81
- leerness contract verify SPEC.md src/x.js # 사양 구현 함수/필드 일치 검증
94
+ leerness roles set 코딩 --provider codex --model gpt-5.5 # 코딩 담당
95
+ leerness roles set 검수자 --provider claude --model claude-opus-4-7 # 검수 담당
96
+ leerness roles suggest # 활성 에이전트 기반 최적 배치 + 근거 추천
97
+ leerness agents dispatch "이 변경 검수" --role 검수자 # 역할 모델 자동 라우팅
82
98
  ```
83
99
 
84
- ### 5. 도구 drift 자동 감지 (1.9.37+)
100
+ > 역할 7종: 지휘(commander)·검수(reviewer)·코딩(coder)·설계(architect)·디자인(designer)·디버그(debugger)·분배(dispatcher). 한국어 별칭 지원.
85
101
 
86
- 라운드가 길어지면 AI가 leerness를 "점점 안 쓰는" 현상을 자동 감지:
102
+ ### 4. 라운드가 길어지면 "leerness를 안 쓰는" drift를 자동 감지
87
103
 
88
104
  ```bash
89
105
  leerness drift check .
90
- → 🔴 critical (100/200) — session close 4.6누락, task update 3.6일 stale
91
- → 권장: leerness session close .
106
+ → 🔴 critical (110/200) — session close 11누락
107
+ → 권장: leerness session close . (1회 실행으로 🟠 attention 회복)
92
108
  ```
93
109
 
94
- → `handoff` 호출 시 inline 경고 자동, severe 시 `.harness/agent-reminders.md` 자동 생성.
95
-
96
110
  ---
97
111
 
98
- ## 60초 시작
99
-
100
- ```bash
101
- # 1) 설치 + 초기화 (방향키/스페이스 인터랙티브)
102
- npx leerness@latest init .
112
+ ## 📊 적용 효과 (정량)
103
113
 
104
- # 2) AI 세션 시작 — 컨텍스트 자동 적재
105
- npx leerness handoff .
114
+ `leerness-bench` 28 프로젝트 124 task 측정:
106
115
 
107
- # 3) AI 작업 증거 자동 검증
108
- npx leerness verify-claim T-0001 --run-tests
116
+ | 항목 | 적용 | 미적용 |
117
+ |------|-----:|-------:|
118
+ | 다중 에이전트 효율 | 100/100 | 3/100 |
119
+ | 자동 검수 (verify-claim) | 98/100 | 0/100 |
120
+ | 재사용 인식 | 100/100 | 0/100 |
121
+ | 자동 BUG 감지 | 100/100 | 0/100 |
122
+ | 컨텍스트 유지 | 100/100 | 0/100 |
123
+ | **종합** | **597/600 (99%)** | **3/600 (0.5%)** |
109
124
 
110
- # 4) 세션 마감 다음 세션 인계
111
- npx leerness session close .
112
- ```
125
+ - 수동 검수 **90초 자동 1.5초**
126
+ - 컨텍스트 적재 **500자** (`handoff --compact`, AI 토큰 90% 절감)
113
127
 
114
128
  ---
115
129
 
116
- ## 적용시 효과 — 정량 데이터
130
+ ## 🛠️ 핵심 명령
117
131
 
118
- `leerness-bench` 28 프로젝트 124 task 측정 결과:
119
-
120
- | 카테고리 | 적용 | 미적용 | 개선 |
121
- | ------------------------ | ----------------------: | -----------: | -------------: |
122
- | 다중 에이전트 효율 | 100/100 | 3/100 | **+97** |
123
- | 자동 검수 (verify-claim) | 98/100 | 0/100 | +98 |
124
- | 재사용 인식 | 100/100 | 0/100 | +100 |
125
- | 워크스페이스 가시성 | 99/100 | 0/100 | +99 |
126
- | 자동 BUG 감지 | 100/100 | 0/100 | +100 |
127
- | 컨텍스트 유지 | 100/100 | 0/100 | +100 |
128
- | **종합** | **597/600 (99%)** | 3/600 (0.5%) | **+594** |
132
+ ```bash
133
+ # 일상
134
+ leerness init [path] # 신규 설치 (시스템 언어 자동 감지)
135
+ leerness handoff [path] [--compact] # 세션 시작 컨텍스트 적재
136
+ leerness verify-claim T-XXX --run-tests # 거짓 완료 검증
137
+ leerness audit [path] [--fix] # 일관성 감사 (--fix 자동 갱신)
138
+ leerness session close [path] # 세션 마감 + 다음 세션 인계
139
+ leerness drift check [path] # leerness 미사용 drift 점수
129
140
 
130
- ### 실제 작업 시간 절감
141
+ # 멀티 AI 에이전트 · 역할
142
+ leerness setup-agents # 활성화 (claude/codex/agy/grok/copilot/ollama)
143
+ leerness agents list | quota # 상태 / 한도
144
+ leerness agents dispatch "<task>" --role coder # 역할 기반 모델 라우팅
145
+ leerness agents bench "<task>" # 여러 CLI 동시 호출 + 비교
146
+ leerness roles list | set | suggest | verify # 모델별 역할 부여
131
147
 
132
- - **수동 검수 90s → 자동 1.5s** (`verify-claim --run-tests`)
133
- - **워크스페이스 28 프로젝트 1 명령** (vs 112 개별 명령)
134
- - **컨텍스트 적재 500자** (`handoff --compact`, AI 토큰 비용 90% 절감)
148
+ # 보안 · 인코딩
149
+ leerness scan secrets . # API 키/토큰 패턴 스캔
150
+ leerness encoding check . # BOM/UTF-16/한글 라운드트립
151
+ leerness gate [path] # verify+audit+scan+encoding+lazy 통합
135
152
 
136
- ### 실제 BUG 자동 발견 사례
153
+ # 버전
154
+ leerness update --check # 새 버전 감지
155
+ leerness update --yes # 자동 마이그레이션 + 검증
156
+ ```
137
157
 
138
- - **거짓 완료**: 5건 (모두 verify-claim에서 evidence 누락 감지)
139
- - **사양 불일치**: rpg-replay에서 `tick.damage` vs `tick.amount` 필드명 충돌 자동 감지 (contract verify)
140
- - **보안 위험**: `contract verify`가 require()로 임의 코드 실행 → 정적 분석으로 즉시 수정 (1.9.36)
141
- - **drift**: 실 워크스페이스에서 4.6일 stale 자동 감지 → session close 1회로 70점 회복 (1.9.37/38)
158
+ 전체 명령은 `leerness commands`, MCP 도구는 `leerness mcp serve`로 확인하세요.
142
159
 
143
160
  ---
144
161
 
145
- ## 어떤 함정을 어떻게 막나요?
146
-
147
- | AI와 일할 때 함정 | leerness 도구 | 효과 |
148
- | ------------------------------------ | ------------------------------------------------------- | ----------------------------------------- |
149
- | "완료했습니다"인데 코드 변경이 없음 | `verify-claim --run-tests` | 증거 파일 + 테스트 실제 실행 검증 |
150
- | "API 호출 완료"인데 URL 코드 없음 | `optimism-check` | 10 카테고리 패턴 + URL 매핑 + 신뢰도 점수 |
151
- | 같은 함수를 여러 프로젝트에 중복 | `reuse-map --strict-elements` | 함수명 fuzzy 중복 감지 |
152
- | 다음 세션이 컨텍스트 잃음 | `handoff` 3채널 자동 적재 | 500자 압축 (`--compact`) |
153
- | 표면적 코드 리뷰 (도메인 깊이 부족) | `review --persona security,performance,ux` | 도메인 sub-agent 자동 부여 |
154
- | 외부 AI CLI 자동 호출 위험 | `agents list/dispatch/quota` | 환경변수 활성화 + 명시적 분배 |
155
- | npx 캐시로 옛 버전 실행 | `_warnIfStale` 자동 (1.9.33+) | npm latest 자동 비교 + 경고 |
156
- | 멀티 sub-agent 파일 충돌 | `agents dispatch` 안내 + 경로 격리 | last-writer-wins 위험 사전 차단 |
157
- | sub-agent마다 사양 해석 다름 | **`contract verify`** | 명세 ↔ 구현 함수/필드 자동 검사 |
158
- | 신규 모듈 capability 미등록 | **`reuse autodetect`** | `module.exports` 정적 분석 + 자동 등록 |
159
- | 라운드 길어지며 메인이 leerness 잊음 | **`drift check`** + `agent-reminders.md` 자동 | 4 신호 + 자동 reminder + 학습 |
160
- | TodoWrite ↔ progress-tracker 분리 | **`task sync --from`** (1.9.38) | TodoWrite JSON 자동 import |
162
+ ## FAQ
161
163
 
162
- ---
164
+ **Q. leerness가 내 코드를 바꾸나요?**
165
+ A. 사용자 메모리(plan/progress/decisions)는 **항상 보존**, 모든 변경 전 자동 백업합니다. 소스 코드는 직접 수정하지 않습니다.
163
166
 
164
- ## 핵심 명령
167
+ **Q. AI 에이전트 없이도 쓸 수 있나요?**
168
+ A. 네. 1인 개발자의 작업 검증·기억·중복 감지에도 유용합니다.
165
169
 
166
- ### 일상
170
+ **Q. 외부 AI CLI를 자동으로 호출하나요?**
171
+ A. **절대 아니요.** `agents dispatch`는 실행 명령 텍스트만 생성합니다. 실제 실행은 사용자/메인 에이전트가 명시적으로 합니다.
167
172
 
168
- ```bash
169
- leerness init [path] [--language ko|en] # 신규 프로젝트 (방향키 multi-select)
170
- leerness handoff [path] [--compact] # 컨텍스트 적재 (drift 자동 경고)
171
- leerness verify-claim T-XXX --run-tests # 증거 + 실 테스트
172
- leerness optimism-check T-XXX # 낙관적 표시 감지
173
- leerness audit [path] [--fix] # 일관성 감사 (--fix: 자동 갱신)
174
- leerness session close [path] # 세션 마감
175
- leerness drift check [path] # drift 점수 + 4단계 레벨
176
- leerness usage stats [path] # 명령별 누적 카운터
177
- ```
173
+ **Q. CI에서 쓸 수 있나요?**
174
+ A. 네. 모든 명령이 exit code + `--json` + `--yes` 비대화형을 지원합니다.
178
175
 
179
- ### 워크스페이스 (멀티 프로젝트)
176
+ ---
180
177
 
181
- ```bash
182
- leerness handoff --all-apps # 전 프로젝트 통합 뷰
183
- leerness reuse-map --all-apps --strict-elements
184
- leerness reuse autodetect [--apply] # src/bin/lib/app 정적 스캔 + 등록
185
- leerness contract verify <spec> <impl> # 명세 ↔ 구현 검증
186
- leerness deps <capability> --run-tests # 영향 추적 + 자동 회귀
187
- leerness retro --all-apps --days 7 # 회고
188
- leerness insights --all-apps # 통계
189
- leerness task sync --from <todo.json> # TodoWrite import
190
- ```
178
+ <a id="english"></a>
191
179
 
192
- ### 외부 AI CLI · 멀티 에이전트
180
+ # 🇬🇧 English
193
181
 
194
- ```bash
195
- leerness setup-agents # 인터랙티브 활성화 + 자동 설치
196
- leerness agents list / check / quota # 상태/한도
197
- leerness agents dispatch "<task>" --to gemini --write
198
- leerness agents bench "<task>" # 3 CLI 동시 호출 + 비교표
199
- ```
182
+ ## At a glance
200
183
 
201
- ### 페르소나·리뷰
184
+ `leerness` is a CLI harness that automatically prevents the structural problems that arise when working with AI coding agents like **Claude Code · Cursor · Copilot · Codex · Antigravity · Grok**.
202
185
 
203
- ```bash
204
- leerness persona list / show <id> / add <id>
205
- leerness review <file> --persona security,performance,ux
206
- ```
186
+ AI writes code fast, but repeatedly falls into **5 traps** — leerness detects, blocks, and recovers from all of them.
207
187
 
208
- ### Agent Skills 표준 (1.9.42, agentskills.io 호환)
188
+ | # | Trap | leerness defense |
189
+ |---|------|------------------|
190
+ | 1 | **Fake completion** — "done!" but no code change / no tests run | `verify-claim --run-tests` (evidence files + real test execution) |
191
+ | 2 | **Duplication** — rebuilding a function that already exists | `reuse-map` (workspace-wide duplicate detection) |
192
+ | 3 | **Amnesia** — losing plans/decisions across sessions | `handoff` (automatic context loading) |
193
+ | 4 | **Collisions** — multiple agents editing the same file | `agents dispatch` (path isolation + role routing) |
194
+ | 5 | **Tool drift** — forgetting tools/meta files over time | `drift check` (auto detection + recovery) |
209
195
 
210
- ```bash
211
- # Claude Code/Cursor/Copilot/Codex/Gemini CLI/Hermes Agent 등 30+ 도구와 스킬 공유
212
- leerness skill install <url-or-path> # SKILL.md 다운로드/import
213
- leerness skill discover --query "<task>" # 매칭 추천 (opt-in)
214
- leerness skill export <id> [--out <dir>] # 자체 skill → 표준 SKILL.md 변환
215
- leerness skill export-all [--out <dir>] # 1.9.43 9개 자체 skill 일괄 SKILL.md export
216
- ```
196
+ ---
217
197
 
218
- ### MCP Server — leerness 도구를 메인 에이전트의 sub-tool로 (1.9.43)
198
+ ## ⏱️ 60-second start
219
199
 
220
200
  ```bash
221
- leerness mcp serve # stdio JSON-RPC로 leerness 도구 10종 노출
222
- ```
201
+ # 1) Install + init — auto-detects system language for KO/EN guides (1.9.269)
202
+ npx leerness@latest init .
223
203
 
224
- Claude Code · Hermes · Cursor 등이 `.mcp.json`에 등록하면 메인 에이전트가 leerness 검수를 sub-tool로 호출 가능:
225
-
226
- ```json
227
- {
228
- "mcpServers": {
229
- "leerness": {
230
- "command": "npx",
231
- "args": ["leerness", "mcp", "serve"]
232
- }
233
- }
234
- }
235
- ```
204
+ # 2) Start an AI session auto-load context
205
+ npx leerness handoff .
236
206
 
237
- 노출 도구 10종: `leerness_handoff` · `leerness_drift_check` · `leerness_audit` · `leerness_verify_claim` · `leerness_contract_verify` · `leerness_agents_list` · `leerness_reuse_map` · `leerness_whats_new` · `leerness_usage_stats` · `leerness_session_close`
207
+ # 3) After AI claims "done" verify with evidence
208
+ npx leerness verify-claim T-0001 --run-tests
238
209
 
239
- opt-in 설정 (`.env`):
240
- ```bash
241
- LEERNESS_SKILL_DISCOVER_URL=https://agentskills.io/llms.txt # 또는 자체 카탈로그 URL
242
- LEERNESS_SKILL_AUTO_DISCOVER=0 # 1=요청 자동 추천
210
+ # 4) Close the session — hand off to the next one
211
+ npx leerness session close .
243
212
  ```
244
213
 
245
- > leerness는 외부 URL을 자동 fetch하지 않습니다. `LEERNESS_SKILL_DISCOVER_URL` 설정 또는 `--source` 명시 후에만 호출.
214
+ > 💡 Adding `@latest` avoids the trap of npx running a stale cached version.
246
215
 
247
- ### 보안·인코딩
216
+ ---
248
217
 
249
- ```bash
250
- leerness scan secrets . # AWS/GitHub/OpenAI/Anthropic/Google/Slack/PEM
251
- leerness encoding check . # BOM/UTF-16/한글 라운드트립
252
- leerness lazy detect . # 증거 없는 done · 빈 handoff · 추적 없는 TODO
253
- leerness gate [path] # verify + audit + scan + encoding + lazy 통합
254
- ```
218
+ ## 🧩 How it works
255
219
 
256
- ### 버전 관리
220
+ ### 1. Creates "memory channels" in your workspace
257
221
 
258
- ```bash
259
- leerness update --check # 24h 캐시로 새 버전 감지
260
- leerness update --yes # 자동 마이그레이션 + 검증
222
+ ```
223
+ .harness/
224
+ ├── plan.md ← what to do
225
+ ├── progress-tracker.md ← what was done (with evidence)
226
+ ├── decisions.md ← why it was done that way
227
+ └── session-handoff.md ← what to pass to the next session
261
228
  ```
262
229
 
263
- ---
264
-
265
- ## 사용 시나리오
230
+ These are **protected as user memory**. leerness updates them automatically, but anything a human or AI wrote is **always preserved** and backed up to `.harness/archive/` before any change.
266
231
 
267
- ### 시나리오 1: AI에게 작업 시키고 거짓 완료 검증
232
+ ### 2. Verifies every "done" with evidence
268
233
 
269
- ```bash
270
- # AI에게 작업 지시 후
271
- leerness verify-claim T-0042 --run-tests --strict-claims
272
- # → evidence 파일 존재 + 실제 npm test 실행 + 낙관적 표시 자동 감지
273
- # → 거짓이면 exit 1, 진짜면 진행
274
234
  ```
275
-
276
- ### 시나리오 2: 멀티 AI 에이전트 협업
277
-
278
- ```bash
279
- # 1) 외부 CLI 활성화
280
- leerness setup-agents . # 방향키로 claude/codex/gemini 선택
281
-
282
- # 2) 같은 task를 3 CLI에 동시 호출 → 비교
283
- leerness agents bench "rpg-core/combat.js useSkill 함수 한 줄 요약"
284
- # | claude | 7s | "..." | ← 가장 빠름
285
- # | codex | 21s | "..." | ← 가장 상세
286
- # | gemini | 19s | "..." | ← 중간
287
-
288
- # 3) 작업 유형별 최적 CLI에 분배
289
- leerness agents dispatch "파일 생성" --to gemini --write
290
- # → --yolo 자동 첨부, 안전 규칙 안내
235
+ AI: "Finished implementing the T-0042 API call"
236
+ ↓ leerness verify-claim T-0042 --run-tests
237
+ check evidence files → actually run tests → match code
238
+
239
+ verified or ✗ "no trace of a fetch call in code (confidence 0.85)"
291
240
  ```
292
241
 
293
- ### 시나리오 3: 라운드가 길어지며 drift 감지
242
+ ### 3. Directs multiple AI agents by role (new in 1.9.270)
294
243
 
295
- ```bash
296
- # 며칠 후 새 세션 시작
297
- leerness handoff .
298
- # ⚠ leerness drift 감지 — 메타파일이 stale합니다
299
- # session-handoff.md: 4.6일 stale
300
- # → 권장: leerness session close .
301
-
302
- # 권장 명령 1회 실행으로 회복
303
- leerness session close .
304
- # 🔴 critical (100/200) → 🟠 attention (30/200)
305
- ```
306
-
307
- ### 시나리오 4: TodoWrite ↔ leerness 동기화
244
+ Each model has different strengths. **Map roles to models** to put the right model on the right job.
308
245
 
309
246
  ```bash
310
- # Claude Code의 TodoWrite를 JSON으로 export 후
311
- leerness task sync --from /path/to/todos.json
312
- # completed done, in_progress in-progress, pending planned로 자동 mirror
247
+ leerness roles set coder --provider codex --model gpt-5.5
248
+ leerness roles set reviewer --provider claude --model claude-opus-4-7
249
+ leerness roles suggest # recommend optimal layout from active agents + rationale
250
+ leerness agents dispatch "review this change" --role reviewer # role → model auto-routing
313
251
  ```
314
252
 
315
- ---
253
+ > 7 roles: commander · reviewer · coder · architect · designer · debugger · dispatcher.
316
254
 
317
- ## 디렉토리 구조
255
+ ### 4. Detects "drift" when you stop using leerness over long rounds
318
256
 
319
- ```
320
- .harness/
321
- ├── plan.md · progress-tracker.md · current-state.md · session-handoff.md
322
- ├── decisions.md · task-log.md · review-evidence.md · guideline.md
323
- ├── architecture.md · context-map.md · feature-contracts.md · reuse-map.md
324
- ├── design-system.md · consistency-policy.md · writeback-policy.md
325
- ├── anti-lazy-work-policy.md · secret-policy.md · encoding-policy.md
326
- ├── protected-files.md · guardrails.md · language-policy.md
327
- ├── orchestrate-log.md · llm-bench-history.md (1.9.22+)
328
- ├── skill-index.md · skills/<id>/ · templates/
329
- ├── personas/<id>.md (1.9.29+, 사용자 정의 페르소나)
330
- ├── reviews/ (1.9.29+, 페르소나 리뷰 결과)
331
- ├── cache/
332
- │ ├── update-check.json (1.9.33+)
333
- │ └── usage-stats.json (1.9.38+ 명령 카운터)
334
- └── agent-reminders.md (1.9.38+, drift critical 시 자동 생성)
335
-
336
- .claude/ (commands · skills · settings.local.json)
337
- .cursor/rules/leerness.mdc
338
- .github/copilot-instructions.md
339
- AGENTS.md · CLAUDE.md
257
+ ```bash
258
+ leerness drift check .
259
+ 🔴 critical (110/200) session close missing for 11 days
260
+ recommended: leerness session close . (one run recovers to 🟠 attention)
340
261
  ```
341
262
 
342
263
  ---
343
264
 
344
- ## 환경변수
345
-
346
- | 변수 | 효과 |
347
- | ----------------------------------------------- | ------------------------------------ |
348
- | `LEERNESS_OFFLINE=1` | npm 호출 스킵 (오프라인) |
349
- | `LEERNESS_OLLAMA_BASE_URL` | orchestrate opt-in (1.9.22+) |
350
- | `LEERNESS_ENABLE_CLAUDE/CODEX/GEMINI/COPILOT` | 외부 CLI 활성화 (1.9.30+) |
351
- | `LEERNESS_NO_BANNER` | ASCII 배너 스킵 (1.9.32+) |
352
- | `LEERNESS_NO_PROMPT` | readline prompt 비활성 (1.9.32+) |
353
- | `LEERNESS_NO_STALE_CHECK` | npx 옛 버전 경고 끄기 (1.9.33+) |
354
- | `LEERNESS_NO_INTERACTIVE` | 방향키 multi-select 비활성 (1.9.34+) |
355
- | `LEERNESS_NO_DRIFT_CHECK` | drift 자동 경고 끄기 (1.9.37+) |
356
-
357
- ---
358
-
359
- ## Claude Code / Cursor / Copilot 통합
360
-
361
- 설치 시 자동 등록:
362
-
363
- - `.claude/commands/{handoff, session-close, audit, lazy-detect, update}.md`
364
- - `.claude/skills/leerness.md` (스킬 정의)
365
- - `.claude/settings.local.json` (SessionStart hook = `update --check`)
366
- - `.cursor/rules/leerness.mdc` · `.github/copilot-instructions.md`
367
- - `AGENTS.md` · `CLAUDE.md`
368
-
369
- ---
265
+ ## 📊 Measured impact
370
266
 
371
- ## 자연어 트리거
267
+ From `leerness-bench` across 28 projects / 124 tasks:
372
268
 
373
- | 사용자 발화 | 자동 실행 |
374
- | --------------------------------------- | ------------------------------------------- |
375
- | "회고해줘 / 돌아보자" | `leerness retro` |
376
- | "최근 N일 회고" | `leerness retro --days N` |
377
- | "통계 / 누적 지표" | `leerness insights` |
378
- | "X 관련 자료 / X 시작 전 검토" | `leerness brainstorm "X"` |
379
- | "매 X마다 Y를 해줘" | `leerness rule add "Y" --trigger every-X` |
380
- | "외부 CLI 설정" | `leerness setup-agents` |
381
- | "drift 점검 / leerness를 잘 쓰고 있나?" | `leerness drift check` |
269
+ | Metric | With | Without |
270
+ |--------|-----:|--------:|
271
+ | Multi-agent efficiency | 100/100 | 3/100 |
272
+ | Auto-verification (verify-claim) | 98/100 | 0/100 |
273
+ | Reuse awareness | 100/100 | 0/100 |
274
+ | Auto bug detection | 100/100 | 0/100 |
275
+ | Context retention | 100/100 | 0/100 |
276
+ | **Total** | **597/600 (99%)** | **3/600 (0.5%)** |
382
277
 
383
- `AGENTS.md`에 자동 등록 AI 에이전트가 자연어를 명령으로 변환.
278
+ - Manual review **90s 1.5s automated**
279
+ - Context load **~500 chars** (`handoff --compact`, ~90% fewer AI tokens)
384
280
 
385
281
  ---
386
282
 
387
- ## 설치 함정 주의
388
-
389
- ### `@latest` 명시 권장
283
+ ## 🛠️ Core commands
390
284
 
391
285
  ```bash
392
- # ❌ npx 캐시로 옛 버전 실행 가능
393
- npx leerness init .
286
+ # Daily
287
+ leerness init [path] # new install (auto-detects system language)
288
+ leerness handoff [path] [--compact] # load session-start context
289
+ leerness verify-claim T-XXX --run-tests # verify fake completion
290
+ leerness audit [path] [--fix] # consistency audit (--fix auto-update)
291
+ leerness session close [path] # close session + hand off
292
+ leerness drift check [path] # leerness-disuse drift score
394
293
 
395
- # 항상 최신 받음
396
- npx leerness@latest init .
294
+ # Multi AI agents · roles
295
+ leerness setup-agents # enable (claude/codex/agy/grok/copilot/ollama)
296
+ leerness agents list | quota # status / limits
297
+ leerness agents dispatch "<task>" --role coder # role-based model routing
298
+ leerness agents bench "<task>" # call several CLIs at once + compare
299
+ leerness roles list | set | suggest | verify # per-model role assignment
300
+
301
+ # Security · encoding
302
+ leerness scan secrets . # API key/token pattern scan
303
+ leerness encoding check . # BOM/UTF-16/CJK round-trip
304
+ leerness gate [path] # verify+audit+scan+encoding+lazy combined
397
305
 
398
- # ✅ 캐시 의심 시
399
- npx --yes clear-npx-cache && npx --yes leerness@latest init .
306
+ # Versions
307
+ leerness update --check # detect new version
308
+ leerness update --yes # auto-migrate + verify
400
309
  ```
401
310
 
402
- 1.9.33+ 부터 `leerness init` npm latest와 자동 비교 버전 경고.
311
+ Run `leerness commands` for the full list, or `leerness mcp serve` to expose tools to a main agent.
403
312
 
404
313
  ---
405
314
 
406
- ## FAQ
315
+ ## FAQ
407
316
 
408
- **Q. leerness 코드를 변경하나요?**
409
- A. 사용자 메모리(plan/progress/decisions) **항상 보존**. 관리 인스트럭션은 머지 + preserved 블록 보존. 모든 변경 `.harness/archive/`에 자동 백업.
317
+ **Q. Does leerness change my code?**
318
+ A. User memory (plan/progress/decisions) is **always preserved** and backed up before any change. It never edits your source code directly.
410
319
 
411
- **Q. AI 에이전트 없이 사용 가능한가요?**
412
- A. 네. 1인 개발자도 자기 자신의 작업 검증·기억·중복 감지에 활용 가능. `verify-claim` / `audit` / `reuse-map`은 모두 AI 무관.
320
+ **Q. Can I use it without an AI agent?**
321
+ A. Yes. Solo developers can use it for self-verification, memory, and duplicate detection.
413
322
 
414
- **Q. CI에서 사용 가능?**
415
- A. 네. 모든 명령이 exit code + `--json` 출력 + `--yes` 비대화형 지원. 임의 `LEERNESS_NO_*` env로 prompt 강제 비활성.
323
+ **Q. Does it auto-call external AI CLIs?**
324
+ A. **Never.** `agents dispatch` only generates command text. Actual execution is explicit, by you or your main agent.
416
325
 
417
- **Q. 외부 AI CLI를 자동 호출하나요?**
418
- A. **절대 아니요.** `agents dispatch`는 명령 텍스트만 생성합니다. 사용자/메인이 명시적으로 spawn.
419
-
420
- **Q. 멀티 언어 프로젝트는?**
421
- A. 영어 인스트럭션 옵션 (`--language en`). 단 도구 출력 메시지/안내는 한국어가 풍부합니다.
326
+ **Q. Can I use it in CI?**
327
+ A. Yes. Every command supports exit codes, `--json`, and non-interactive `--yes`.
422
328
 
423
329
  ---
424
330
 
425
- ## E2E
331
+ ## 🔧 Environment variables / 환경변수
426
332
 
427
- ```bash
428
- npm test # = node ./scripts/e2e.js
429
- ```
430
-
431
- **174/174 시나리오** 통과 (1.9.7~1.9.38 회귀 + 신규 검증).
333
+ | Variable | Effect |
334
+ |----------|--------|
335
+ | `LEERNESS_OFFLINE=1` | Skip npm calls (offline) / npm 호출 스킵 |
336
+ | `LEERNESS_ENABLE_CLAUDE/CODEX/AGY/GROK/COPILOT/OLLAMA` | Enable external CLIs / 외부 CLI 활성화 |
337
+ | `LEERNESS_NO_BANNER` | Skip ASCII banner / 배너 스킵 |
338
+ | `LEERNESS_NO_DRIFT_CHECK` | Disable drift warning / drift 경고 끄기 |
339
+ | `LEERNESS_NO_INTERACTIVE` | Disable arrow-key select / 방향키 선택 끄기 |
432
340
 
433
341
  ---
434
342
 
435
- ## 변경 이력 (최근)
436
-
437
- - **1.9.99** — **`leerness handoff --quiet` 옵션** — 자동 회수 라인 6종 모두 비활성, 기본 컨텍스트만. CI/자동화용.
438
- - **1.9.98** — **`leerness skill publish` 보안 사전 점검** — `health` 자동 실행, issue 있으면 publish 중단. `--force`/`--no-security-check`로 우회.
439
- - **1.9.97** — **자율 모드 27 라운드 마무리** (1.9.70~96) — MCP 도구 12→21개, handoff 5단 통합, 보안 3중 가드, JSON 9종, 매 라운드 e2e PASS.
440
- - **1.9.96** — **`leerness handoff --json` 옵션** — 외부 AI/MCP에 handoff 데이터를 구조화 JSON으로 출력.
441
- - **1.9.95** — **`leerness lessons --json` + MCP lessons 자동 JSON** — 외부 AI가 lessons 결과를 파싱 친화적으로 받음.
442
- - **1.9.94** — **MCP server 21번째 도구 `leerness_benchmark`** — 1.9.46/51 benchmark를 외부 AI에 노출 (6 차원 점수 + 검수 시나리오 결과).
443
- - **1.9.93** — **handoff 헤드라인에 health 종합 상태 1 토큰 추가** — `⚕ health: ✓/⚠` (1.9.81 + 1.9.85 통합, inline 추론으로 성능 비용 없음).
444
- - **1.9.92** — **`skill info --json` + MCP 20번째 도구 `leerness_skill_info`** — 외부 AI가 개별 skill 상세 (능력/소스/패턴/사용 이력) 정확 파악.
445
- - **1.9.91** — **MCP server 19번째 도구 `leerness_skill_search`** — 1.9.90 skill search를 외부 AI에 노출.
446
- - **1.9.90** — **`leerness skill search <capability>` 새 명령** — capability 배열 부분 일치 검색 (skill match와 다른 정확 매칭). `--json` 옵션.
447
- - **1.9.89** — **자율 모드 19 라운드 종합 검증** — stress-v35 24/24 PASS + handoff 692ms / health 689ms (회귀 없음). 자율 모드 (1.9.70~88) 안정 완료.
448
- - **1.9.88** — **`handoff`에 brainstorm 자동 hits 노출** — 현재 task 키워드로 자동 호출 → decisions / lessons / task-log fail / skill 미리보기 1줄씩 (1.9.72 brainstorm 통합).
449
- - **1.9.87** — **`session-workflow.md` 템플릿 갱신** — 1.9.69~86 누적 신규 기능 안내 추가 (handoff history hit / 보안 요약 / CRITICAL / 헤드라인 / health / drift --auto-fix 보안 / MCP 18 도구). init 가이드 정확성 보장.
450
- - **1.9.86** — **MCP server 18번째 도구 `leerness_health`** — 1.9.85 health 종합 헬스 체크를 외부 AI에 노출. drift + 보안 + skill + MCP + tasks 한 호출.
451
- - **1.9.85** — **`leerness health` 새 명령** — drift + 보안 + skill + MCP + 누적 통계 종합 헬스 체크. `--json` / `--strict` 옵션.
452
- - **1.9.84** — **MCP server 17번째 도구 `leerness_skill_list`** — 외부 AI에 skill 카탈로그 (id/이름/출처/능력/사용 횟수) 조회 노출. `skill list --json` 옵션도 함께 추가.
453
- - **1.9.83** — **MCP server 16번째 도구 `leerness_skill_match`** — 1.9.45/50/68 skill match를 외부 AI에 노출. rolling history 자동 누적.
454
- - **1.9.82** — **`drift check --auto-fix` 보안 회복 통합** — 1.9.78 보안 신호 발견 시 `audit --fix` 자동 실행 → `.gitignore` + `.env.example` 동기화 후 재검사. 보안 + 세션 마감 한 번에 자동 회복.
455
- - **1.9.81** — **`handoff` 통합 헤드라인** — drift level + 보안 상태 + MCP 활동 + skill query + 설치 skill 수를 한 줄로 압축. AI가 세션 시작 즉시 워크스페이스 상태 인지.
456
- - **1.9.80** — **handoff 보안 critical 자동 회복** — `.env` 가 `.gitignore` 에 없으면 🚨 CRITICAL 경고 + `LEERNESS_AUTO_SECURITY_FIX=1` 시 `audit --fix` 자동 실행.
457
- - **1.9.79** — **`leerness skill suggest` 알고리즘 강화** — 1.9.68 rolling history 빈도 (×2 가중) 추가. 반복 검색된 키워드를 신규 skill 후보로 자동 식별 (Hermes-style 학습).
458
- - **1.9.78** — **`drift check` 5번째 신호** — `.env` + `.gitignore` 보안 누락을 drift score에 가중 (`.env` 자체 누락 시 +30, 동기화 누락 +15). 보안 위험이 drift critical 승격 가능.
459
- - **1.9.77** — **MCP server 15번째 도구 `leerness_brainstorm`** — 1.9.72 brainstorm (decisions + skills + tasks + rules + evidence + lessons + skillHistory + taskLogFails)을 외부 AI에 노출. AI가 새 작업 시작 전 누적 컨텍스트 자동 회수.
460
- - **1.9.76** — **`leerness handoff`에 보안 상태 요약 자동 표시** — `.env→.env.example` 누락 + `.gitignore` 시크릿 패턴 누락을 매 handoff에 1-2 line 자동 노출. AI가 세션 시작 즉시 보안 위험 인지.
461
- - **1.9.75** — **`leerness audit` 보안 강화** — `.env` 존재 시 `.gitignore`에 시크릿 패턴 (`.env`/`.env.local`/`.env.production`/`*.pem`/`credentials.json`) 자동 검증, `--fix`로 자동 추가.
462
- - **1.9.74** — **`session close` 마감 시 누적 회고 통계 강화** — MCP tools/call 카운트 + skill match query top + drift 통계를 자동 요약 (1.9.70 + 1.9.68 결합).
463
- - **1.9.73** — **MCP server 14번째 도구 `leerness_env_check`** — 1.9.71 env 보안 검사를 외부 AI에 노출 (외부 워크스페이스 .env/.env.example 동기화 자동 점검).
464
- - **1.9.72** — **`leerness brainstorm`에 skill-suggestions.md history + task-log 실패 라인 통합** — 누적 컨텍스트 기반 brainstorm 강화 (이전 매칭 이력 + task-log 실패 회수).
465
- - **1.9.71** — **`.env` / `.env.example` 자동 동기화** — `leerness env check` / `env sync` 명령 + `audit` 통합 (`--fix`로 누락 키 자동 추가). 보안 정책: 실제 값 절대 노출 안 함 (키만 추가, 값은 빈 문자열).
466
- - **1.9.70** — **MCP server `tools/call` 자동 사용 통계** — 도구별 호출 카운트 (`.harness/cache/usage-stats.json#mcp.tools`) + `leerness usage stats` 출력에 MCP 섹션 + 드물게 호출되는 도구 식별.
467
- - **1.9.69** — **handoff에 skill-suggestions.md history hit 노출** (fuzzy 매칭, 최근 2건 + top 2 매치). AI가 이전 세션 결정을 일관 유지. mtime 기반 캐시 (1.9.65/66/67 캐시 패밀리 연속).
468
- - **1.9.68** — **`skill match` 결과 → `.harness/skill-suggestions.md` rolling history 자동 누적** (AI가 다음 세션에 이전 추천 참조 가능). `--no-save` / `LEERNESS_NO_SKILL_HISTORY=1`로 끄기.
469
- - **1.9.67** — **handoff 자동 skill 추천 default ON** (jaccard 매칭) + lessons 인덱스에 task-log.md 실패 라인 통합 (회수 범위 확장).
470
- - **1.9.66** — **성능 최적화 2차 + MCP 13번째 도구**. `listAllSkills` 메모리 캐시 (skill list/info/match/discover/suggest 공유) + MCP `leerness_task_export` 추가 (TodoWrite 양방향 sync 외부 노출).
471
- - **1.9.65** — **성능 최적화 1차** — usage-stats 메모리 캐시 + lessons 인덱스 캐시 (mtime invalidation). handoff -37% · drift -19% · audit -29% · skill list -17% · 100-task handoff -42% · status -48% (vs 1.9.64).
472
- - **1.9.64** — `leerness install <SKILL.md>` 별칭 (skill install 단축) · **성능 벤치마크 1차 실측** (status/handoff/drift/audit/skill list 평균 1.2~1.5초).
473
- - **1.9.63** — `leerness audit --strict [--threshold N]` — CI 친화 옵션 (warnings → failures 승격).
474
- - **1.9.62** — `leerness audit` npm CVE 자동 감지 (npm audit --json 통합, OFFLINE/no-npm-audit 스킵).
475
- - **1.9.61** — MCP server cursor 기반 페이지네이션 — `nextCursor` + `_chunkSize` override.
476
- - **1.9.60** — `leerness task export` — progress-tracker → TodoWrite JSON 형식. **양방향 sync 완성** (1.9.38 sync + 1.9.60 export).
477
- - **1.9.59** — `session close` **--suggest default 활성** (잊을 단계 없음, `--no-suggest`로 비활성 가능) · 설치 가이드 갱신.
478
- - **1.9.58** — handoff lessons **fuzzy 매칭** (어간 변형, 복합어, decisions.md 매칭 추가).
479
- - **1.9.57** — `session close --suggest` (마감 시 skill suggest + drift + 명령 통계 통합 보고) · install banner quickStart + session-workflow.md 갱신 (1.9.56/57 흐름 자동 안내).
480
- - **1.9.56** — `handoff`에 lessons 자동 재상기 통합 (현재 in-progress task 키워드 매칭 → 과거 실패 자동 표시).
481
- - **1.9.55** — MCP server에 `leerness_skill_suggest` + `leerness_lessons` 추가 (10 → 12 도구) · lessons --auto의 stopword 확장 (false positive 차단).
482
- - **1.9.54** — `leerness lessons --auto` — 최근 in-progress task에서 키워드 자동 추출 → 과거 lessons 자동 매칭·재상기.
483
- - **1.9.53** — `leerness skill suggest` — task-log / progress-tracker / usage-stats에서 반복 패턴 **자동 감지 → 새 skill 후보 제안** (Hermes-style 자동 학습의 leerness 버전).
484
- - **1.9.52** — `skill discover` 카탈로그 형식 다양성 — JSON manifest / RSS·Atom / Markdown / llms.txt URL 4 형식 자동 감지 (`_parseSkillCatalog`).
485
- - **1.9.51** — `benchmark --scenario <id|all>` — leerness 고유 가치 시나리오 4종 (거짓 완료 / 사양 불일치 / drift / BOM) **command 한 번에 정량 증명**.
486
- - **1.9.50** — `skill match --embedding` — Ollama API 코사인 유사도 매칭 (opt-in, 실패 시 jaccard fallback).
487
- - **1.9.49** — `benchmark --measure "<task>"` — 외부 CLI 실 호출 시간 측정 + leerness 검수 오버헤드 측정.
488
- - **1.9.48** — cross-platform archive — `skill publish` tar 실패 시 PowerShell ZIP 자동 fallback (stress-v3 H1-H3 검증).
489
- - **1.9.47** — `leerness skill publish` — 자체 skill을 SKILL.md + manifest.json 번들로 export (외부 공유 가능, agentskills.io 표준).
490
- - **1.9.46** — `leerness benchmark` — 자체 6 차원 점수 + 6 도구 (vanilla/claude_code/hermes/leerness+claude 등) 시뮬 비교 매트릭스.
491
- - **1.9.45** — `leerness skill match <query>` — 사용자 요청 ↔ 설치 SKILL.md description **jaccard 매칭** + 자동 추천.
492
- - **1.9.44** — 1.9.34~43 13종 기능 통합 stress test 25/25 PASS · 발견된 BOM 처리 BUG 1건 즉시 패치 (`_parseSkillMd` UTF-8 BOM 자동 제거) · e2e 196/196.
493
- - **1.9.43** — MCP 서버로 leerness 도구 10종 노출 (`leerness mcp serve`, Claude Code/Hermes/Cursor 등이 직접 호출 가능) · `skill export-all` (9개 일괄 SKILL.md export) · 내부 보고서 자동 비공개 (`_reports/` gitignore + npmignore).
494
- - **1.9.42** — [agentskills.io](https://agentskills.io) 공개 표준 호환 (Claude Code · Cursor · Copilot · Codex · Gemini CLI · Hermes Agent 등 30+ 도구와 스킬 공유): `skill install <url>` · `skill discover` (opt-in) · `skill export` (SKILL.md frontmatter) · `LEERNESS_SKILL_DISCOVER_URL` .env opt-in.
495
- - **1.9.41** — 디스크↔AI 컨텍스트 인지 갭 차단: `leerness whats-new` 명령 (CHANGELOG 자동 차분 추출) · `migrate` 후 stdout에 AI must re-read 차분 자동 출력 · `migration-report.md`에 신규 명령/파일 영구 기록 · `handoff`가 fresh migrate(24h 내) 시 자동 알림.
496
- - **1.9.40** — dogfooding gap 차단: `leerness release pack` 통합 명령 (라운드 마감 자동화 — npm pack + parent migrate + task add + close + readme sync) · `audit`에 README ↔ package.json version mismatch 자동 감지 + `--fix`로 자동 갱신.
497
- - **1.9.39** — AI 하네스 엔지니어링 6단계 워크플로 자동 유도 (`session-workflow.md` + handoff 끝 가이드 + AGENTS/CLAUDE 인스트럭션 통합) · `drift check --auto-fix` · `handoff --auto-recover` (critical 시 session close 자동 실행).
498
- - **1.9.38** — drift 자동 reminder (`agent-reminders.md`) · `usage stats` 명령 · `task sync --from <todo.json>` · drift 임계 학습 (skip ≥5 → 임계 완화).
499
- - **1.9.37** — `leerness drift check` (4 신호 + 4단계 레벨) — 라운드 길어지며 메인이 leerness 잊는 현상 자동 감지.
500
- - **1.9.36** — `agents bench` (3 CLI 동시 비교) · `dispatch --write` (CLI별 권장 플래그) · 작업 유형 추천 · `contract verify` require() side-effect 25× 속도 회복.
501
- - **1.9.35** — `contract verify` · `reuse autodetect` · `audit --fix` · `handoff` init 부재 경고 · `agents dispatch` 안전 규칙.
502
- - **1.9.34** — 방향키/스페이스 인터랙티브 multi-select · 256색 그라데이션 배너 · 3단계 sub-agent 오케스트레이션 검증 (2.2× 효율).
503
- - **1.9.33** — npx 캐시 옛 버전 자동 경고.
504
- - **1.9.32** — ASCII 배너 · `setup-agents` 인터랙티브 + 자동 설치.
505
- - **1.9.31** — `agents quota` (provider별 사용량 추정).
506
- - **1.9.30** — 외부 AI CLI 오케스트레이션 (claude/codex/gemini/copilot).
507
- - **1.9.29** — 페르소나 리뷰 (5종 내장).
508
- - **1.9.24** — `deps <capability>` 영향 추적 + 자동 회귀.
509
- - **1.9.22** — Ollama opt-in · `handoff --compact` · `llm-bench`.
510
- - **1.9.18** — `verify-claim` · `--strict-elements` · depends-on 그래프.
511
- - **1.9.17** — `--all-apps` 워크스페이스 모드.
512
- - ... (전체 [CHANGELOG.md](CHANGELOG.md) 참조)
513
-
514
- ---
343
+ ## 📜 Recent highlights / 최근 변경
515
344
 
516
- ## 기여
345
+ - **1.9.271** — README 한/영 이중 사용자 친화 재작성 / Bilingual KO-EN README rewrite.
346
+ - **1.9.270** — agent roles: 모델별 역할 부여 / per-model role assignment (`roles` CLI + `dispatch --role`).
347
+ - **1.9.269** — init 시 OS 시스템 언어 감지 / OS system-language detection on init.
348
+ - **1.9.268** — grok 정식 provider 승격 / grok promoted to a first-class provider.
349
+ - **1.9.265~267** — CLI 에이전트 슬래시 명령 레지스트리 + `--help` probe 자동 갱신.
517
350
 
518
- - **이슈**: https://github.com/gugu9999gu/leerness/issues
519
- - **PR**: e2e 통과 + 한국어 주석 + UTF-8 BOM 없음
351
+ > 전체 이력 / full history: [CHANGELOG.md](CHANGELOG.md)
520
352
 
521
353
  ---
522
354
 
523
- ## 라이선스
355
+ ## 🤝 Contributing / 기여
356
+
357
+ - Issues: https://github.com/gugu9999gu/leerness/issues
358
+ - PRs: e2e 통과 + 한국어 주석 + UTF-8 (no BOM) / pass e2e, Korean comments, UTF-8 without BOM.
359
+
360
+ ## 📄 License
524
361
 
525
362
  MIT — © leerness contributors
526
363
 
527
- > **AI 에이전트가 신뢰할 수 있게 일하도록 만드는 도구.**
528
- > 사용자 동의 없이 외부 LLM/API/CLI를 자동 호출하지 않습니다.
364
+ > **AI 에이전트가 신뢰할 수 있게 일하도록 만드는 도구. 사용자 동의 없이 외부 LLM/API/CLI를 자동 호출하지 않습니다.**
365
+ > **A tool that makes AI agents work reliably. It never auto-calls external LLMs/APIs/CLIs without your consent.**
529
366
 
530
367
  <!-- leerness:project-readme:start -->
531
368
  ## Leerness Project Harness
532
369
 
533
- 이 프로젝트는 Leerness v1.9.206 하네스를 사용합니다. AI 에이전트는 작업 전 `leerness handoff`로 컨텍스트를 적재하고, 작업 후 `leerness check`/`leerness audit`/`leerness session close`를 수행해야 합니다.
370
+ 이 프로젝트는 Leerness v1.9.271 하네스를 사용합니다. AI 에이전트는 작업 전 `leerness handoff`로 컨텍스트를 적재하고, 작업 후 `leerness check`/`leerness audit`/`leerness session close`를 수행해야 합니다.
534
371
 
535
372
  ### Core Commands
536
373
 
@@ -572,7 +409,7 @@ leerness memory restore decision <date|title>
572
409
 
573
410
  ### MCP server (외부 AI 통합)
574
411
 
575
- Leerness v1.9.206는 stdio JSON-RPC MCP server를 내장합니다 — Claude Code · Cursor · Codex CLI 등 외부 AI에 **42개 도구**를 노출:
412
+ Leerness v1.9.271는 stdio JSON-RPC MCP server를 내장합니다 — Claude Code · Cursor · Codex CLI 등 외부 AI에 **42개 도구**를 노출:
576
413
 
577
414
  ```jsonc
578
415
  // 카테고리별
@@ -593,7 +430,7 @@ Leerness v1.9.206는 stdio JSON-RPC MCP server를 내장합니다 — Claude Cod
593
430
  `<<autonomous-loop-dynamic>>` 신호만 보내면 AI가:
594
431
  1) 다음 라운드 후보 선정 → 2) 코드 변경 → 3) stress-v* 신규 작성 + 누적 회귀 → 4) e2e 219/219 → 5) npm pack + git tag + GitHub release → 6) main 자동 push (1.9.140+) → 7) session close → 8) 다음 라운드 예약.
595
432
 
596
- 현재 누적: **70 라운드 (1.9.40 → 1.9.206)** · 매 라운드 GitHub release/태그 생성 · _reports/는 비공개 보존.
433
+ 현재 누적: **70 라운드 (1.9.40 → 1.9.271)** · 매 라운드 GitHub release/태그 생성 · _reports/는 비공개 보존.
597
434
 
598
435
  ### 성능 가이드 (1.9.140 측정)
599
436
 
@@ -631,6 +468,6 @@ leerness release pack --close --auto-main-push
631
468
  - `.harness/session-handoff.md`: 다음 세션 인수인계 (자동 작성)
632
469
  - `.harness/lessons.md` / `decisions.md` / `rules.md`: 영구 메모리 (5 surface)
633
470
 
634
- Last synced by Leerness v1.9.206: 2026-05-22
471
+ Last synced by Leerness v1.9.271: 2026-06-03
635
472
  <!-- leerness:project-readme:end -->
636
473
 
package/bin/harness.js CHANGED
@@ -7,7 +7,7 @@ const cp = require('child_process');
7
7
  const os = require('os'); // 1.9.178: _publishToNpm 에서 os.tmpdir() 사용 (전역 import)
8
8
  const readline = require('readline');
9
9
 
10
- const VERSION = '1.9.270';
10
+ const VERSION = '1.9.271';
11
11
 
12
12
  // 1.9.184: DEP0190 (child_process shell: true) deprecation warning 억제 (사용자 명시).
13
13
  // leerness 는 cross-platform PATH resolution 을 위해 shell: true 를 의도적으로 사용 (claude.cmd / ollama.cmd 등 Windows .cmd 처리).
@@ -794,9 +794,9 @@ function syncReadme(root) {
794
794
  // e2e 배지: scripts/e2e.js의 출력 "E2E result: N/N passed" 추정 (직접 grep)
795
795
  const e2ePath = path.join(root, 'scripts', 'e2e.js');
796
796
  if (exists(e2ePath)) {
797
- // total++ 횟수 카운트 정확하진 않지만 추세 반영
797
+ // 1.9.271: e2e 테스트 수 = `total++;` 블록 + `run(...)` 호출 (run 헬퍼가 내부에서 total++ 수행) → 실제 결과와 일치.
798
798
  const body = read(e2ePath);
799
- const total = (body.match(/^total\+\+;/gm) || []).length;
799
+ const total = (body.match(/^total\+\+;/gm) || []).length + (body.match(/^run\(/gm) || []).length;
800
800
  if (total > 0) {
801
801
  updated = updated.replace(/badge\/e2e-(\d+)%2F(\d+)-success/g, `badge/e2e-${total}%2F${total}-success`);
802
802
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leerness",
3
- "version": "1.9.270",
3
+ "version": "1.9.271",
4
4
  "description": "Leerness: 비파괴 마이그레이션, 자동 버전 감지·업데이트, 계획/진행/핸드오프 자동화, 게으름·시크릿·인코딩 자동 가드, Claude Code 슬래시 통합을 갖춘 한국어 우선 AI 개발 하네스.",
5
5
  "keywords": [
6
6
  "leerness",