@litfamily/lithermes 1.0.9 → 1.0.10

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/README_Ko-KR.md CHANGED
@@ -1,6 +1,6 @@
1
- <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/cover-motion.webp" width="100%" alt="LitFamily 모션 커버: 다섯 로봇 패널이 차례로 켜지고, LitHermes 로봇의 눈과 테두리가 빛난 뒤 LITFAMILY와 KEEP THE WORK LIT. 문구가 밝아지는 영상" /></picture></p>
1
+ <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/cover-motion.webp" width="100%" alt="LitFamily 모션 커버: 다섯 로봇 패널이 차례로 켜지고, LitHermes 로봇의 눈과 테두리가 빛난 뒤 LITFAMILY와 KEEP THE WORK LIT. 문구가 밝아지는 영상" /></picture></p>
2
2
 
3
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ascii-readme.svg" width="480" alt="LIT ASCII B 마크" /></p>
3
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ascii-readme.svg" width="480" alt="LIT ASCII B 마크" /></p>
4
4
 
5
5
  <details>
6
6
  <summary>ASCII 로고 복사</summary>
@@ -30,19 +30,19 @@
30
30
 
31
31
  </details>
32
32
 
33
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/lithermes-wordmark.svg" width="480" alt="LITHERMES 디스플레이 서체" /></p>
34
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/lithermes-clay-icon.png" width="160" alt="LitHermes 클레이 마크" /></p>
33
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/lithermes-wordmark.svg" width="480" alt="LITHERMES 디스플레이 서체" /></p>
34
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/lithermes-clay-icon.png" width="160" alt="LitHermes 클레이 마크" /></p>
35
35
 
36
36
  <p align="center">
37
- <a href="#설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/badge-version.svg" alt="1.0.9" /></a>
38
- <a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/badge-license.svg" alt="MIT license" /></a>
37
+ <a href="#설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/badge-version.svg" alt="1.0.10" /></a>
38
+ <a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/badge-license.svg" alt="MIT license" /></a>
39
39
  </p>
40
40
 
41
41
  <p align="center">
42
- <a href="https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.ko.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/lucide-book-open.svg" width="16" alt="" /> 문서</a> &nbsp;
42
+ <a href="https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.ko.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/lucide-book-open.svg" width="16" alt="" /> 문서</a> &nbsp;
43
43
  <a href="#설치">설치</a> &nbsp;
44
- <a href="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ignition-film.mp4"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/lucide-play.svg" width="16" alt="" /> Ignition</a> &nbsp;
45
- <a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/lucide-shield-check.svg" width="16" alt="" /> MIT</a>
44
+ <a href="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ignition-film.mp4"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/lucide-play.svg" width="16" alt="" /> Ignition</a> &nbsp;
45
+ <a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/lucide-shield-check.svg" width="16" alt="" /> MIT</a>
46
46
  </p>
47
47
 
48
48
  # LitHermes
@@ -51,11 +51,11 @@
51
51
 
52
52
  무엇인가요: LitHermes는 **Hermes Agent**에서 계획, 실행, 검토, 인계를 이어갑니다.
53
53
 
54
- [English](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/README.md) · [npm](https://www.npmjs.com/package/@litfamily/lithermes) · [GitHub](https://github.com/wjgoarxiv/lithermes)
54
+ [English](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/README.md) · [npm](https://www.npmjs.com/package/@litfamily/lithermes) · [GitHub](https://github.com/wjgoarxiv/lithermes)
55
55
 
56
56
  ## 설치
57
57
 
58
- 소스 기준 버전은 `@litfamily/lithermes@1.0.9`입니다. Hermes Agent와 Node.js 18+가 필요하며, Hermes 홈(기본 `~/.hermes`)에 쓰기 권한이 있어야 합니다.
58
+ 소스 기준 버전은 `@litfamily/lithermes@1.0.10`입니다. Hermes Agent와 Node.js 18+가 필요하며, Hermes 홈(기본 `~/.hermes`)에 쓰기 권한이 있어야 합니다.
59
59
 
60
60
  설치기는 Hermes 홈을 대상으로 합니다. 별도 체험을 하려면 설치 전에 `HERMES_HOME`을 새 빈 디렉터리로 지정하고 Hermes를 시작할 때도 같은 값을 사용하세요. 기존 홈과 설정은 보관합니다. `--no-patch-installed-hermes`는 해당 프로필 밖에서 감지된 호스트 설치본에 호환성 패치를 적용하지 못하게 합니다.
61
61
 
@@ -153,182 +153,182 @@ LitHermes에서 부를 수 있는 모든 스킬과 그 스킬을 시작하는
153
153
  <table>
154
154
  <tr><th>이렇게 됩니다</th><th>스킬</th><th>얻는 것</th></tr>
155
155
  <tr>
156
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/litwork.webp" width="240" alt="요청에 lit만 붙이세요. 노트를 열고, 기준마다 실패 테스트·통과·실제 확인·정리 순서를 엄격히 지킵니다." /></td>
156
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/litwork.webp" width="240" alt="요청에 lit만 붙이세요. 노트를 열고, 기준마다 실패 테스트·통과·실제 확인·정리 순서를 엄격히 지킵니다." /></td>
157
157
  <td><code>litwork</code><br /><sub><code>lit &lt;task&gt;</code> · <code>litwork &lt;task&gt;</code></sub></td>
158
158
  <td>요청에 <code>lit</code>만 붙이세요. 노트를 열고, 기준마다 실패 테스트·통과·실제 확인·정리 순서를 엄격히 지킵니다.</td>
159
159
  </tr>
160
160
  <tr>
161
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-plan.webp" width="240" alt="start-work가 그대로 실행할 수 있는 번호 붙은 작업 목록이 파일로 나옵니다. 코드는 아직 건드리지 않습니다." /></td>
161
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-plan.webp" width="240" alt="start-work가 그대로 실행할 수 있는 번호 붙은 작업 목록이 파일로 나옵니다. 코드는 아직 건드리지 않습니다." /></td>
162
162
  <td><code>lit-plan</code><br /><sub><code>lit plan &lt;what&gt;</code> · <code>/lit-plan</code></sub></td>
163
163
  <td><code>start-work</code>가 그대로 실행할 수 있는 번호 붙은 작업 목록이 파일로 나옵니다. 코드는 아직 건드리지 않습니다.</td>
164
164
  </tr>
165
165
  <tr>
166
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/start-work.webp" width="240" alt="계획을 한 줄씩 실행합니다. 다섯 관문을 모두 통과해야 체크 표시가 붙습니다." /></td>
166
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/start-work.webp" width="240" alt="계획을 한 줄씩 실행합니다. 다섯 관문을 모두 통과해야 체크 표시가 붙습니다." /></td>
167
167
  <td><code>start-work</code><br /><sub><code>/start-work &lt;approved-plan&gt;</code></sub></td>
168
168
  <td>계획을 한 줄씩 실행합니다. 다섯 관문을 모두 통과해야 체크 표시가 붙습니다.</td>
169
169
  </tr>
170
170
  <tr>
171
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/review-work.webp" width="240" alt="다섯 갈래 리뷰가 같은 변경을 따로 읽고, 발견한 문제부터 보고합니다." /></td>
171
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/review-work.webp" width="240" alt="다섯 갈래 리뷰가 같은 변경을 따로 읽고, 발견한 문제부터 보고합니다." /></td>
172
172
  <td><code>review-work</code><br /><sub><code>lit review &lt;scope&gt;</code> · <code>/review-work</code></sub></td>
173
173
  <td>다섯 갈래 리뷰가 같은 변경을 따로 읽고, 발견한 문제부터 보고합니다.</td>
174
174
  </tr>
175
175
  <tr>
176
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/litgoal.webp" width="240" alt="목표 하나와 확인 가능한 기준을 디스크에 남겨, 다음 세션이 이어받을 수 있습니다." /></td>
176
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/litgoal.webp" width="240" alt="목표 하나와 확인 가능한 기준을 디스크에 남겨, 다음 세션이 이어받을 수 있습니다." /></td>
177
177
  <td><code>litgoal</code><br /><sub><code>lit goal &lt;outcome&gt;</code> · <code>/litgoal</code></sub></td>
178
178
  <td>목표 하나와 확인 가능한 기준을 디스크에 남겨, 다음 세션이 이어받을 수 있습니다.</td>
179
179
  </tr>
180
180
  <tr>
181
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-recap.webp" width="240" alt="읽기 전용 요약입니다. 끝난 일, 진행 중인 일, 막힌 곳, 증거 위치, 다음 단계를 보여줍니다." /></td>
181
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-recap.webp" width="240" alt="읽기 전용 요약입니다. 끝난 일, 진행 중인 일, 막힌 곳, 증거 위치, 다음 단계를 보여줍니다." /></td>
182
182
  <td><code>lit-recap</code><br /><sub><code>lit-recap</code></sub></td>
183
183
  <td>읽기 전용 요약입니다. 끝난 일, 진행 중인 일, 막힌 곳, 증거 위치, 다음 단계를 보여줍니다.</td>
184
184
  </tr>
185
185
  <tr>
186
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-handoff.webp" width="240" alt="handoff라고 치면 다음 세션이 읽고 이어갈 인수인계 파일이 생깁니다." /></td>
186
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-handoff.webp" width="240" alt="handoff라고 치면 다음 세션이 읽고 이어갈 인수인계 파일이 생깁니다." /></td>
187
187
  <td><code>lit-handoff</code><br /><sub><code>handoff</code> · <code>/lit-handoff</code></sub></td>
188
188
  <td><code>handoff</code>라고 치면 다음 세션이 읽고 이어갈 인수인계 파일이 생깁니다.</td>
189
189
  </tr>
190
190
  <tr>
191
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/deep-interview.webp" width="240" alt="한 번에 한 질문씩 물어 아이디어를 만들 수 있을 만큼 분명하게 다듬습니다. 남은 모호함은 게이지로 보입니다." /></td>
191
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/deep-interview.webp" width="240" alt="한 번에 한 질문씩 물어 아이디어를 만들 수 있을 만큼 분명하게 다듬습니다. 남은 모호함은 게이지로 보입니다." /></td>
192
192
  <td><code>deep-interview</code><br /><sub><code>deep-interview &lt;idea&gt;</code> · <code>/deep-interview</code></sub></td>
193
193
  <td>한 번에 한 질문씩 물어 아이디어를 만들 수 있을 만큼 분명하게 다듬습니다. 남은 모호함은 게이지로 보입니다.</td>
194
194
  </tr>
195
195
  <tr>
196
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/litresearch.webp" width="240" alt="조사 질문을 잘게 나누고 여러 검색을 동시에 돌려, 단서를 끝까지 따라간 뒤 출처와 함께 답합니다." /></td>
196
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/litresearch.webp" width="240" alt="조사 질문을 잘게 나누고 여러 검색을 동시에 돌려, 단서를 끝까지 따라간 뒤 출처와 함께 답합니다." /></td>
197
197
  <td><code>litresearch</code><br /><sub><code>lit research &lt;question&gt;</code></sub></td>
198
198
  <td>조사 질문을 잘게 나누고 여러 검색을 동시에 돌려, 단서를 끝까지 따라간 뒤 출처와 함께 답합니다.</td>
199
199
  </tr>
200
200
  <tr>
201
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-crucible.webp" width="240" alt="계획 전에 요구사항을 반박해 봅니다. 반박을 견딘 위험만 계획으로 넘어갑니다." /></td>
201
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-crucible.webp" width="240" alt="계획 전에 요구사항을 반박해 봅니다. 반박을 견딘 위험만 계획으로 넘어갑니다." /></td>
202
202
  <td><code>lit-crucible</code><br /><sub><code>lit-crucible &lt;brief&gt;</code></sub></td>
203
203
  <td>계획 전에 요구사항을 반박해 봅니다. 반박을 견딘 위험만 계획으로 넘어갑니다.</td>
204
204
  </tr>
205
205
  <tr>
206
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-init.webp" width="240" alt="저장소를 훑어 루트 AGENTS.md와, 필요한 폴더에만 짧은 안내서를 만듭니다." /></td>
206
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-init.webp" width="240" alt="저장소를 훑어 루트 AGENTS.md와, 필요한 폴더에만 짧은 안내서를 만듭니다." /></td>
207
207
  <td><code>lit-init</code><br /><sub><code>lit-init</code></sub></td>
208
208
  <td>저장소를 훑어 루트 AGENTS.md와, 필요한 폴더에만 짧은 안내서를 만듭니다.</td>
209
209
  </tr>
210
210
  <tr>
211
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-comprehend.webp" width="240" alt="에이전트가 쓴 작업을 이해하도록 돕는 설명 페이지입니다. 직관, 흐름 설명, 짧은 퀴즈 순서입니다." /></td>
211
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-comprehend.webp" width="240" alt="에이전트가 쓴 작업을 이해하도록 돕는 설명 페이지입니다. 직관, 흐름 설명, 짧은 퀴즈 순서입니다." /></td>
212
212
  <td><code>lit-comprehend</code><br /><sub><code>lit-comprehend</code> · <code>comprehend &lt;range&gt;</code></sub></td>
213
213
  <td>에이전트가 쓴 작업을 이해하도록 돕는 설명 페이지입니다. 직관, 흐름 설명, 짧은 퀴즈 순서입니다.</td>
214
214
  </tr>
215
215
  <tr>
216
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-humanizer.webp" width="240" alt="딱딱한 AI 문장을 한국어나 영어로 다시 씁니다. 사실과 단서는 남기고, 파일을 멋대로 고치지 않습니다." /></td>
216
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-humanizer.webp" width="240" alt="딱딱한 AI 문장을 한국어나 영어로 다시 씁니다. 사실과 단서는 남기고, 파일을 멋대로 고치지 않습니다." /></td>
217
217
  <td><code>lit-humanizer</code><br /><sub><code>humanizer &lt;text&gt;</code> · <code>/lit-humanizer</code></sub></td>
218
218
  <td>딱딱한 AI 문장을 한국어나 영어로 다시 씁니다. 사실과 단서는 남기고, 파일을 멋대로 고치지 않습니다.</td>
219
219
  </tr>
220
220
  <tr>
221
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-diagram-drawer.webp" width="240" alt="슬라이드와 문서에 넣을 다이어그램을 편집 가능한 형태로 그리고, 검사한 뒤 PNG와 SVG로 내보냅니다." /></td>
221
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-diagram-drawer.webp" width="240" alt="슬라이드와 문서에 넣을 다이어그램을 편집 가능한 형태로 그리고, 검사한 뒤 PNG와 SVG로 내보냅니다." /></td>
222
222
  <td><code>lit-diagram-drawer</code><br /><sub><code>lit-diagram-drawer &lt;brief&gt;</code> · <code>/lit-diagram-drawer</code></sub></td>
223
223
  <td>슬라이드와 문서에 넣을 다이어그램을 편집 가능한 형태로 그리고, 검사한 뒤 PNG와 SVG로 내보냅니다.</td>
224
224
  </tr>
225
225
  <tr>
226
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-pptx.webp" width="240" alt="lit으로 발표자료를 요청하면 편집 가능한 PowerPoint 파일과 원고 Markdown이 나옵니다. 기본은 AZURE-PRO와 Pretendard이고, 완성된 파일로 품질 검사와 무결성 검사를 돌립니다." /></td>
226
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-pptx.webp" width="240" alt="lit으로 발표자료를 요청하면 편집 가능한 PowerPoint 파일과 원고 Markdown이 나옵니다. 기본은 AZURE-PRO와 Pretendard이고, 완성된 파일로 품질 검사와 무결성 검사를 돌립니다." /></td>
227
227
  <td><code>lit-pptx</code><br /><sub><code>lit-pptx &lt;brief&gt;</code> · <code>/lit-pptx</code></sub></td>
228
228
  <td><code>lit</code>으로 발표자료를 요청하면 편집 가능한 PowerPoint 파일과 원고 Markdown이 나옵니다. 기본은 AZURE-PRO와 Pretendard이고, 완성된 파일로 품질 검사와 무결성 검사를 돌립니다.</td>
229
229
  </tr>
230
230
  <tr>
231
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-docx.webp" width="240" alt="lit으로 보고서를 요청하면 서식을 갖춘 Word 파일과 원고 Markdown이 나옵니다. 한국어는 korean-generic 서식을 쓰고, 문체 검사와 렌더링된 페이지 확인이 뒤따릅니다." /></td>
231
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-docx.webp" width="240" alt="lit으로 보고서를 요청하면 서식을 갖춘 Word 파일과 원고 Markdown이 나옵니다. 한국어는 korean-generic 서식을 쓰고, 문체 검사와 렌더링된 페이지 확인이 뒤따릅니다." /></td>
232
232
  <td><code>lit-docx</code><br /><sub><code>lit-docx &lt;brief&gt;</code> · <code>/lit-docx</code></sub></td>
233
233
  <td><code>lit</code>으로 보고서를 요청하면 서식을 갖춘 Word 파일과 원고 Markdown이 나옵니다. 한국어는 korean-generic 서식을 쓰고, 문체 검사와 렌더링된 페이지 확인이 뒤따릅니다.</td>
234
234
  </tr>
235
235
  <tr>
236
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/frontend-ui-ux.webp" width="240" alt="실제로 동작하는 화면을 만들고, 설치된 측정 프로브로 일곱 가지 보기를 렌더링합니다. 네 가지 폭, 다크 모드, 모션 줄이기, 200% 확대입니다." /></td>
236
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/frontend-ui-ux.webp" width="240" alt="실제로 동작하는 화면을 만들고, 설치된 측정 프로브로 일곱 가지 보기를 렌더링합니다. 네 가지 폭, 다크 모드, 모션 줄이기, 200% 확대입니다." /></td>
237
237
  <td><code>frontend-ui-ux</code><br /><sub><code>lit design &lt;target&gt;</code> · <code>frontend-ui-ux &lt;target&gt;</code></sub></td>
238
238
  <td>실제로 동작하는 화면을 만들고, 설치된 측정 프로브로 일곱 가지 보기를 렌더링합니다. 네 가지 폭, 다크 모드, 모션 줄이기, 200% 확대입니다.</td>
239
239
  </tr>
240
240
  <tr>
241
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/readme-studio.webp" width="240" alt="사실에 맞는 README와 움직이는 커버를 만들고, 휴대폰과 데스크톱 폭, 라이트와 다크 모드에서 확인합니다." /></td>
241
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/readme-studio.webp" width="240" alt="사실에 맞는 README와 움직이는 커버를 만들고, 휴대폰과 데스크톱 폭, 라이트와 다크 모드에서 확인합니다." /></td>
242
242
  <td><code>readme-studio</code><br /><sub><code>readme-studio &lt;scope&gt;</code></sub></td>
243
243
  <td>사실에 맞는 README와 움직이는 커버를 만들고, 휴대폰과 데스크톱 폭, 라이트와 다크 모드에서 확인합니다.</td>
244
244
  </tr>
245
245
  <tr>
246
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-typographic-motion.webp" width="240" alt="lit으로 영상을 요청하면 트리트먼트를 먼저 쓰고, 장면을 그리거나 글자를 움직이고, 사운드를 만든 뒤 검사를 거쳐 영상을 넘깁니다." /></td>
246
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-typographic-motion.webp" width="240" alt="lit으로 영상을 요청하면 트리트먼트를 먼저 쓰고, 장면을 그리거나 글자를 움직이고, 사운드를 만든 뒤 검사를 거쳐 영상을 넘깁니다." /></td>
247
247
  <td><code>lit-typographic-motion</code><br /><sub><code>lit-typographic-motion &lt;request&gt;</code> · <code>/lit-typographic-motion</code></sub></td>
248
248
  <td><code>lit</code>으로 영상을 요청하면 트리트먼트를 먼저 쓰고, 장면을 그리거나 글자를 움직이고, 사운드를 만든 뒤 검사를 거쳐 영상을 넘깁니다.</td>
249
249
  </tr>
250
250
  <tr>
251
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-scientific-visualization.webp" width="240" alt="학술지 규격 그림을 벡터와 600 DPI로 내보냅니다. 그래프 종류는 데이터 성격에 맞춰 고릅니다." /></td>
251
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-scientific-visualization.webp" width="240" alt="학술지 규격 그림을 벡터와 600 DPI로 내보냅니다. 그래프 종류는 데이터 성격에 맞춰 고릅니다." /></td>
252
252
  <td><code>lit-scientific-visualization</code><br /><sub><code>lit-scientific-visualization</code> · <code>/lit-scientific-visualization</code></sub></td>
253
253
  <td>학술지 규격 그림을 벡터와 600 DPI로 내보냅니다. 그래프 종류는 데이터 성격에 맞춰 고릅니다.</td>
254
254
  </tr>
255
255
  <tr>
256
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/visual-qa.webp" width="240" alt="실제 화면을 폭별로 확인해 결과를 정직하게 돌려줍니다. 막히면 무엇이 막았는지 정확히 알려줍니다." /></td>
256
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/visual-qa.webp" width="240" alt="실제 화면을 폭별로 확인해 결과를 정직하게 돌려줍니다. 막히면 무엇이 막았는지 정확히 알려줍니다." /></td>
257
257
  <td><code>visual-qa</code><br /><sub><code>visual-qa &lt;target&gt;</code></sub></td>
258
258
  <td>실제 화면을 폭별로 확인해 결과를 정직하게 돌려줍니다. 막히면 무엇이 막았는지 정확히 알려줍니다.</td>
259
259
  </tr>
260
260
  <tr>
261
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/browser-drive.webp" width="240" alt="브라우저 드라이버를 먼저 확인한 뒤 실제 페이지를 조작합니다. 드라이버가 없으면 그렇다고 말합니다." /></td>
261
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/browser-drive.webp" width="240" alt="브라우저 드라이버를 먼저 확인한 뒤 실제 페이지를 조작합니다. 드라이버가 없으면 그렇다고 말합니다." /></td>
262
262
  <td><code>browser-drive</code><br /><sub><code>browser-drive &lt;task&gt;</code></sub></td>
263
263
  <td>브라우저 드라이버를 먼저 확인한 뒤 실제 페이지를 조작합니다. 드라이버가 없으면 그렇다고 말합니다.</td>
264
264
  </tr>
265
265
  <tr>
266
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/structural-search.webp" width="240" alt="글자 대신 문법 구조로 코드를 찾고, 바꾸기 전에 결과를 미리 보여줍니다." /></td>
266
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/structural-search.webp" width="240" alt="글자 대신 문법 구조로 코드를 찾고, 바꾸기 전에 결과를 미리 보여줍니다." /></td>
267
267
  <td><code>structural-search</code><br /><sub><code>lit structural &lt;pattern&gt;</code> · <code>structural-search &lt;pattern&gt;</code></sub></td>
268
268
  <td>글자 대신 문법 구조로 코드를 찾고, 바꾸기 전에 결과를 미리 보여줍니다.</td>
269
269
  </tr>
270
270
  <tr>
271
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/wikify.webp" width="240" alt="검토를 거친 프로젝트 지식을 디스크에 두고, 나중 질문에 출처와 함께 답합니다." /></td>
271
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/wikify.webp" width="240" alt="검토를 거친 프로젝트 지식을 디스크에 두고, 나중 질문에 출처와 함께 답합니다." /></td>
272
272
  <td><code>wikify</code><br /><sub><code>wikify &lt;mode&gt;</code> · <code>lit wikify &lt;mode&gt;</code></sub></td>
273
273
  <td>검토를 거친 프로젝트 지식을 디스크에 두고, 나중 질문에 출처와 함께 답합니다.</td>
274
274
  </tr>
275
275
  <tr>
276
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/debugging.webp" width="240" alt="버그를 재현하고, 가설을 세 개 이상 세워 확인한 뒤, 확인된 원인만 고칩니다." /></td>
276
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/debugging.webp" width="240" alt="버그를 재현하고, 가설을 세 개 이상 세워 확인한 뒤, 확인된 원인만 고칩니다." /></td>
277
277
  <td><code>debugging</code><br /><sub><code>lit debug &lt;symptom&gt;</code> · <code>debugging &lt;symptom&gt;</code></sub></td>
278
278
  <td>버그를 재현하고, 가설을 세 개 이상 세워 확인한 뒤, 확인된 원인만 고칩니다.</td>
279
279
  </tr>
280
280
  <tr>
281
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/refactor.webp" width="240" alt="동작을 테스트로 고정한 채 코드 구조를 바꿉니다. 단계마다 확인합니다." /></td>
281
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/refactor.webp" width="240" alt="동작을 테스트로 고정한 채 코드 구조를 바꿉니다. 단계마다 확인합니다." /></td>
282
282
  <td><code>refactor</code><br /><sub><code>lit refactor &lt;target&gt;</code> · <code>refactor &lt;target&gt;</code></sub></td>
283
283
  <td>동작을 테스트로 고정한 채 코드 구조를 바꿉니다. 단계마다 확인합니다.</td>
284
284
  </tr>
285
285
  <tr>
286
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-burnoff.webp" width="240" alt="테스트로 동작을 먼저 묶어 두고, 변경분에 붙은 AI식 군더더기를 걷어냅니다." /></td>
286
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-burnoff.webp" width="240" alt="테스트로 동작을 먼저 묶어 두고, 변경분에 붙은 AI식 군더더기를 걷어냅니다." /></td>
287
287
  <td><code>lit-burnoff</code><br /><sub><code>lit slop &lt;scope&gt;</code></sub></td>
288
288
  <td>테스트로 동작을 먼저 묶어 두고, 변경분에 붙은 AI식 군더더기를 걷어냅니다.</td>
289
289
  </tr>
290
290
  <tr>
291
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-burnoff-file.webp" width="240" alt="파일 하나만 정리합니다. 설명조 주석과 과한 방어 코드를 줄이고 중첩을 펴줍니다." /></td>
291
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-burnoff-file.webp" width="240" alt="파일 하나만 정리합니다. 설명조 주석과 과한 방어 코드를 줄이고 중첩을 펴줍니다." /></td>
292
292
  <td><code>lit-burnoff-file</code><br /><sub><code>ask to clean one file</code></sub></td>
293
293
  <td>파일 하나만 정리합니다. 설명조 주석과 과한 방어 코드를 줄이고 중첩을 펴줍니다.</td>
294
294
  </tr>
295
295
  <tr>
296
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-code.webp" width="240" alt="엄격한 구현 규칙입니다. 테스트 먼저, 경계에서 타입 확인, 작은 파일." /></td>
296
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-code.webp" width="240" alt="엄격한 구현 규칙입니다. 테스트 먼저, 경계에서 타입 확인, 작은 파일." /></td>
297
297
  <td><code>lit-code</code><br /><sub><code>ask for strict implementation</code></sub></td>
298
298
  <td>엄격한 구현 규칙입니다. 테스트 먼저, 경계에서 타입 확인, 작은 파일.</td>
299
299
  </tr>
300
300
  <tr>
301
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lit-commit.webp" width="240" alt="변경을 저장소 스타일에 맞는 작은 커밋으로 나눕니다. 관계없는 작업은 건드리지 않습니다." /></td>
301
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lit-commit.webp" width="240" alt="변경을 저장소 스타일에 맞는 작은 커밋으로 나눕니다. 관계없는 작업은 건드리지 않습니다." /></td>
302
302
  <td><code>lit-commit</code><br /><sub><code>lit git &lt;task&gt;</code></sub></td>
303
303
  <td>변경을 저장소 스타일에 맞는 작은 커밋으로 나눕니다. 관계없는 작업은 건드리지 않습니다.</td>
304
304
  </tr>
305
305
  <tr>
306
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lsp-setup.webp" width="240" alt="사용하는 언어의 언어 서버를 설치하고, 진단이 실제로 도는지 확인합니다." /></td>
306
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lsp-setup.webp" width="240" alt="사용하는 언어의 언어 서버를 설치하고, 진단이 실제로 도는지 확인합니다." /></td>
307
307
  <td><code>lsp-setup</code><br /><sub><code>lsp-setup &lt;language&gt;</code></sub></td>
308
308
  <td>사용하는 언어의 언어 서버를 설치하고, 진단이 실제로 도는지 확인합니다.</td>
309
309
  </tr>
310
310
  <tr>
311
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/lsp.webp" width="240" alt="요청할 때 Hermes 언어 서버로 진단, 참조, 이름 바꾸기 안전성을 확인합니다." /></td>
311
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/lsp.webp" width="240" alt="요청할 때 Hermes 언어 서버로 진단, 참조, 이름 바꾸기 안전성을 확인합니다." /></td>
312
312
  <td><code>lsp</code><br /><sub><code>lsp &lt;request&gt;</code></sub></td>
313
313
  <td>요청할 때 Hermes 언어 서버로 진단, 참조, 이름 바꾸기 안전성을 확인합니다.</td>
314
314
  </tr>
315
315
  <tr>
316
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/rules.webp" width="240" alt="Hermes가 어떤 규칙 파일을 언제 읽는지 설명합니다." /></td>
316
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/rules.webp" width="240" alt="Hermes가 어떤 규칙 파일을 언제 읽는지 설명합니다." /></td>
317
317
  <td><code>rules</code><br /><sub><code>rules &lt;question&gt;</code></sub></td>
318
318
  <td>Hermes가 어떤 규칙 파일을 언제 읽는지 설명합니다.</td>
319
319
  </tr>
320
320
  <tr>
321
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/comment-checker.webp" width="240" alt="수정으로 추가된 주석을 검토합니다. 이유는 남기고, 되풀이하는 주석은 뺍니다. 소스 파일을 고친 뒤에도 알아서 돕니다." /></td>
321
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/comment-checker.webp" width="240" alt="수정으로 추가된 주석을 검토합니다. 이유는 남기고, 되풀이하는 주석은 뺍니다. 소스 파일을 고친 뒤에도 알아서 돕니다." /></td>
322
322
  <td><code>comment-checker</code><br /><sub><code>comment-checker</code></sub></td>
323
323
  <td>수정으로 추가된 주석을 검토합니다. 이유는 남기고, 되풀이하는 주석은 뺍니다. 소스 파일을 고친 뒤에도 알아서 돕니다.</td>
324
324
  </tr>
325
325
  <tr>
326
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/autoresearch.webp" width="240" alt="승인된 예산 안에서 실험을 반복합니다. 한 번에 하나만 바꾸고, 결과에 따라 남기거나 되돌립니다." /></td>
326
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/autoresearch.webp" width="240" alt="승인된 예산 안에서 실험을 반복합니다. 한 번에 하나만 바꾸고, 결과에 따라 남기거나 되돌립니다." /></td>
327
327
  <td><code>autoresearch</code><br /><sub><code>autoresearch &lt;mode&gt;</code></sub></td>
328
328
  <td>승인된 예산 안에서 실험을 반복합니다. 한 번에 하나만 바꾸고, 결과에 따라 남기거나 되돌립니다.</td>
329
329
  </tr>
330
330
  <tr>
331
- <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/skills/autoconference.webp" width="240" alt="예산을 정한 연구 회의입니다. 연구자와 리뷰어가 따로 일하고, 종합에는 반대 의견도 남깁니다." /></td>
331
+ <td><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/skills/autoconference.webp" width="240" alt="예산을 정한 연구 회의입니다. 연구자와 리뷰어가 따로 일하고, 종합에는 반대 의견도 남깁니다." /></td>
332
332
  <td><code>autoconference</code><br /><sub><code>autoconference &lt;mode&gt;</code></sub></td>
333
333
  <td>예산을 정한 연구 회의입니다. 연구자와 리뷰어가 따로 일하고, 종합에는 반대 의견도 남깁니다.</td>
334
334
  </tr>
@@ -366,23 +366,23 @@ S3·S4·S11은 이후의 UI 라운드, S5·S8·S9는 `lit-pptx`와 `lit-docx`를
366
366
 
367
367
  | 기준선 | LitHermes |
368
368
  |---|---|
369
- | ![S3 기준선 가계부 대시보드, 데스크톱](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ab-simple/s3-ui-baseline-desktop.webp) | ![S3 LitHermes 가계부 대시보드, 데스크톱](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ab-simple/s3-ui-lithermes-desktop.webp) |
369
+ | ![S3 기준선 가계부 대시보드, 데스크톱](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ab-simple/s3-ui-baseline-desktop.webp) | ![S3 LitHermes 가계부 대시보드, 데스크톱](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ab-simple/s3-ui-lithermes-desktop.webp) |
370
370
 
371
371
  **S4 · LitHermes 승.** LitHermes는 품목과 가격이 있는 탭 메뉴, 서로 다른 사진 6장, 아치형 첫 화면을 만들었습니다. 기준선 메뉴는 분위기 카드 3장이었고 같은 실내 사진을 두 번 썼습니다. 위치와 영업시간은 기준선에만 있었고, 페이지 검사에서 잘리거나 화면 밖으로 나간 글자 상자가 LitHermes 쪽에서 7개, 기준선에서 0개 나왔습니다.
372
372
 
373
373
  | 기준선 | LitHermes |
374
374
  |---|---|
375
- | ![S4 기준선 카페 랜딩페이지, 데스크톱](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ab-simple/s4-ui-baseline-desktop.webp) | ![S4 LitHermes 카페 랜딩페이지, 데스크톱](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ab-simple/s4-ui-lithermes-desktop.webp) |
375
+ | ![S4 기준선 카페 랜딩페이지, 데스크톱](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ab-simple/s4-ui-baseline-desktop.webp) | ![S4 LitHermes 카페 랜딩페이지, 데스크톱](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ab-simple/s4-ui-lithermes-desktop.webp) |
376
376
 
377
377
  **S5 · LitHermes 승.** 두 쪽 모두 확인 대상 사실 12개를 모두 맞혔습니다. LitHermes는 2026년 점검과 의회 보고 기한이 이미 지났다는 점을 짚었고, 기준선은 이를 앞으로 할 일로 적었습니다. LitHermes는 주말 거점과 평일 승합차 이용의 차이처럼 자료가 뒷받침하는 분석도 더했습니다. 슬라이드 디자인은 기준선이 낫고, LitHermes 발표자료는 기본 템플릿 그대로입니다.
378
378
 
379
379
  기준선:
380
380
 
381
- ![S5 기준선 발표자료 슬라이드](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ab-simple/s5-office-baseline-slides.webp)
381
+ ![S5 기준선 발표자료 슬라이드](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ab-simple/s5-office-baseline-slides.webp)
382
382
 
383
383
  LitHermes:
384
384
 
385
- ![S5 LitHermes 발표자료 슬라이드](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ab-simple/s5-office-lithermes-slides.webp)
385
+ ![S5 LitHermes 발표자료 슬라이드](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ab-simple/s5-office-lithermes-slides.webp)
386
386
 
387
387
  **S6 · LitHermes 승 (판정자: 무승부).** LitHermes는 기준 사실 10개 중 3개를 찾았고(기준선 1개), 링크는 모두 공식 출처였습니다(기준선은 4분의 1). npm 11에서 `--ignore-scripts`가 `prepare`에도 적용되는 점, Undici 7, ARMv7 빌드 중단도 다뤘습니다. 기준선은 API 세부 사항을 더 많이 적었지만 권한 플래그 이름 변경을 24의 새 변화처럼 소개해, 판정자가 오해 소지가 있다고 봤습니다.
388
388
 
@@ -390,29 +390,29 @@ LitHermes:
390
390
 
391
391
  | 기준선 | LitHermes |
392
392
  |---|---|
393
- | 채팅 속 ASCII 상자만 있고 렌더링된 파일 없음 | ![S7 LitHermes 주문·결제·배송 구조도](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ab-simple/s7-lithermes-diagram.webp) |
393
+ | 채팅 속 ASCII 상자만 있고 렌더링된 파일 없음 | ![S7 LitHermes 주문·결제·배송 구조도](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ab-simple/s7-lithermes-diagram.webp) |
394
394
 
395
395
  **S8 · LitHermes 승 (판정자: 기준선 승).** 요청에는 회사도 실적 수치도 없었습니다. 기준선은 빈칸을 둔 7장짜리 템플릿을, LitHermes는 가상 기업의 8장짜리 발표자료와 차트 3개를 만들고 모든 수치에 가정 예시라고 표시했습니다. 판정자는 바로 채워 쓸 수 있는 기준선 템플릿을 골랐고, LitHermes 차트는 데이터 라벨이 없어 빈약하다고 봤습니다. 메인테이너는 LitHermes 발표자료를 골랐습니다.
396
396
 
397
397
  기준선:
398
398
 
399
- ![S8 기준선 발표자료 슬라이드](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ab-simple/s8-office-baseline-slides.webp)
399
+ ![S8 기준선 발표자료 슬라이드](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ab-simple/s8-office-baseline-slides.webp)
400
400
 
401
401
  LitHermes:
402
402
 
403
- ![S8 LitHermes 발표자료 슬라이드](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ab-simple/s8-office-lithermes-slides.webp)
403
+ ![S8 LitHermes 발표자료 슬라이드](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ab-simple/s8-office-lithermes-slides.webp)
404
404
 
405
405
  **S9 · LitHermes 승.** 기준선은 어떤 제품인지 되묻기만 하고 문서를 쓰지 않았습니다. LitHermes는 가상의 모듈형 책상 정리 트레이를 대상으로 고객 문제, 가격 가정, 검증 일정, 생산 결정 기준을 담은 3쪽짜리 Word 기획서를 썼고, 판정자는 손익분기 계산이 맞다고 봤습니다.
406
406
 
407
407
  | 기준선 | LitHermes |
408
408
  |---|---|
409
- | 문서 없음. 어떤 제품인지 되물음 | ![S9 LitHermes 신제품 기획서 첫 페이지들](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ab-simple/s9-office-lithermes-pages.webp) |
409
+ | 문서 없음. 어떤 제품인지 되물음 | ![S9 LitHermes 신제품 기획서 첫 페이지들](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ab-simple/s9-office-lithermes-pages.webp) |
410
410
 
411
411
  **S11 · LitHermes 승 (판정자: 무승부).** LitHermes는 날짜별 현황, 인원 필터와 검색, 30분 단위 예약을 갖추고 로직 테스트 4개가 통과하는 앱을 냈습니다. 판정자는 모든 회의실을 한 타임라인에 보여 주는 기준선이 더 알아보기 쉽고 `index.html`만 열면 된다고 봤습니다. LitHermes 앱은 npm과 로컬 서버가 필요하고, 일러스트 배너가 일정표 위를 차지합니다. 메인테이너는 LitHermes 앱을 골랐습니다.
412
412
 
413
413
  | 기준선 | LitHermes |
414
414
  |---|---|
415
- | ![S11 기준선 회의실 예약 앱, 데스크톱](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ab-simple/s11-ui-baseline-desktop.webp) | ![S11 LitHermes 회의실 예약 앱, 데스크톱](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.9/readme-assets/ab-simple/s11-ui-lithermes-desktop.webp) |
415
+ | ![S11 기준선 회의실 예약 앱, 데스크톱](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ab-simple/s11-ui-baseline-desktop.webp) | ![S11 LitHermes 회의실 예약 앱, 데스크톱](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.10/readme-assets/ab-simple/s11-ui-lithermes-desktop.webp) |
416
416
 
417
417
  그림 URL은 현재 후보 버전에 고정된 출시 대상 경로이며, 별도 승인된 패키지 배포 전에는 공개 접근을 뜻하지 않습니다.
418
418
 
@@ -439,6 +439,19 @@ LitHermes:
439
439
 
440
440
  Telegram gateway에서는 `/lit_loop`와 `/lit_plan` 별칭을 사용합니다. 전체 명령 예시와 훅 동작은 [운영 안내](https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.ko.md)에 있습니다. 경로 확인 메시지는 호스트 메시지이며 작업이나 화면 검토가 끝났다는 증거가 아닙니다.
441
441
 
442
+ ### Jev 스킬 힌트(선택)
443
+
444
+ LitHermes는 TypeSafe가 호스팅하는 결정 모델 Jev에게 평범한 프롬프트에 맞는 LitHermes 스킬을 물어볼 수 있습니다. 답은 그 턴의 컨텍스트에 조언 한 줄로만 들어갑니다. 스킬을 불러올지는 여전히 Hermes 모델이 정하며, 힌트는 권한을 주거나 도구를 실행하지 않습니다. 슬래시 명령과 기존 LitHermes 경로가 이미 처리하는 프롬프트에는 관여하지 않습니다.
445
+
446
+ 기본값은 꺼짐입니다. 켜려면 Hermes가 실행되는 환경에 두 변수를 모두 설정하고, 키는 본인의 TypeSafe 키를 사용하세요.
447
+
448
+ ```sh
449
+ export LITHERMES_JEV=1
450
+ export TYPESAFE_API_KEY=<your key>
451
+ ```
452
+
453
+ 켜 두면 조건에 맞는 프롬프트마다 2,000자로 자르고 홈 경로, 이메일 주소, 토큰 형태의 문자열을 가린 뒤 TypeSafe(typesafe.ai)로 보냅니다. 토큰 형태가 아닌 내용은 쓴 그대로 전송됩니다. 호스트 이름, 고객 이름, `password=...` 형식이 아닌 비밀번호가 그렇습니다. Hermes 게이트웨이 모드에서는 대화방의 다른 참여자가 보낸 메시지도 전송 대상입니다. 세션의 다른 내용은 보내지 않습니다. `TYPESAFE_API_KEY`는 Hermes를 시작하는 셸에 export되어 있으므로 에이전트의 도구도 이 값을 읽을 수 있습니다. 이 기능 전용 키를 쓰고 사용 한도를 낮게 잡으세요. 비용은 TypeSafe가 본인 계정에 청구하며, 입력 토큰 100만 개당 약 0.04달러입니다. 요청마다 1.5초 제한이 있고 재시도하지 않습니다. 실패하면 턴은 그대로 진행되고, 짧은 안내가 세션마다 한 번만 표시됩니다. 켜져 있는 동안에는 세션의 첫 답변 맨 위에 `✦ Jev skill hint ON` 한 줄이 표시되어, 기능이 켜져 있다는 것을 바로 알 수 있습니다. 힌트는 `hermes lithermes status`와 `hermes lithermes doctor`에서 확인합니다. `Jev skill hint: on — last hint lit-humanizer (0.43s)`는 마지막으로 힌트한 스킬과 Jev의 응답 시간을, `on — no hint yet`은 아직 힌트가 없다는 뜻이며, 그 밖에는 `off` 또는 `flag on but TYPESAFE_API_KEY missing`이 표시됩니다. 끄려면 `LITHERMES_JEV`를 해제하거나 `1`이 아닌 값으로 바꾸세요.
454
+
442
455
  ## 문제 해결
443
456
 
444
457
  ### 안전 모델과 호스트 한계
@@ -110,6 +110,29 @@ CLI/plugin name, not the npm package name.
110
110
  path. Noninteractive, CI, JSON, dry-run, HUD/help/version/uninstall, and
111
111
  delegate sessions remain no-op. The update bridge never receives npm
112
112
  credentials and never uses the unsupported `--home` option.
113
+ - Optional Jev skill hint (`jev_hint.py`), off by default. When
114
+ `LITHERMES_JEV=1` and `TYPESAFE_API_KEY` are both set in the environment,
115
+ `pre_llm_call` sends a top-level prompt that no LitHermes route claimed (not a
116
+ slash command, not a command envelope, at least 4 non-space characters) to
117
+ TypeSafe's Jev: one POST that refuses redirects, redacted over an
118
+ 8,000-character window and then cut to 2,000, with the `PORTED_SKILLS`
119
+ catalog plus `none`, a 1.5 s deadline and no retry. A hook failure there
120
+ never costs the turn its other context. Only an exact catalog id
121
+ at confidence 0.35 or higher becomes one fixed advisory line naming
122
+ `lithermes:<id>`; response text never enters context. Failures leave the turn
123
+ unchanged, and `transform_llm_output` prefixes one short note per session.
124
+ While both switches are on, the same transform also opens the first reply of
125
+ each session with the plain line `✦ Jev skill hint ON` (banner first, note on
126
+ the next line when both are due); it is released with the session.
127
+ `LITHERMES_JEV_MODEL`, `_TIMEOUT_MS` (max 3000), `_MAX_CALLS` (default 200
128
+ per session) and `_MIN_CONFIDENCE` tune it; `LITHERMES_JEV_TRACE=1` appends
129
+ the redacted prompt's hash, ids and timings (no text, key or body) to Hermes home
130
+ `lithermes/jev-trace.jsonl`. Status and doctor print `Jev skill hint: ...`;
131
+ when on, they add the last hinted skill id and latency (`on — last hint
132
+ lit-humanizer (0.43s)`) or `on — no hint yet`. The CLI runs in its own
133
+ process, so an accepted hint also writes only that id, the latency and a
134
+ timestamp to Hermes home `lithermes/jev-last.json` (mode 0600, atomic).
135
+ Neither file is written through a symlink.
113
136
  - The `post_tool_call` hook is an observer — Hermes discards its return value — so
114
137
  it records the paths a completed `write_file` / `patch` call mutated and
115
138
  `pre_llm_call` renders them on the next turn. A source-code edit names
@@ -12,6 +12,7 @@ from . import bounded_work
12
12
  from . import bounded_work_tools
13
13
  from . import deliverable_hedge_guard
14
14
  from . import handoff
15
+ from . import jev_hint
15
16
  from . import knowledge
16
17
  from . import knowledge_tools
17
18
  from . import scientific_visualization
@@ -367,9 +368,24 @@ def _pre_llm_call(**kwargs: Any) -> dict[str, str] | None:
367
368
  parts.append(str(base["context"]))
368
369
  elif isinstance(base, str) and base.strip():
369
370
  parts.append(base)
371
+ routed = bool(parts)
370
372
  snapshot = litgoal_hook.snapshot_context(**kwargs)
371
373
  if snapshot:
372
374
  parts.append(snapshot)
375
+ if not routed:
376
+ # No deterministic route claimed this turn; the optional Jev hint may
377
+ # add one advisory line. It is inert unless LITHERMES_JEV and the key are set,
378
+ # and an unexpected failure there never costs the turn its other context.
379
+ try:
380
+ skill_hint = jev_hint.pre_llm_call(
381
+ session_id=str(kwargs.get("session_id") or ""),
382
+ user_message=str(kwargs.get("user_message") or ""),
383
+ catalog=PORTED_SKILLS,
384
+ )
385
+ except Exception: # noqa: BLE001 - advisory only
386
+ skill_hint = ""
387
+ if skill_hint:
388
+ parts.append(skill_hint)
373
389
  if not parts:
374
390
  return _merge_knowledge(_merge_post_edit(None, post_edit), knowledge_context)
375
391
  return _merge_knowledge(
@@ -527,12 +543,20 @@ def _command_handler(ctx, handler, route=None):
527
543
 
528
544
  def _transform_llm_output(**kwargs: Any) -> str | None:
529
545
  named = handoff.transform_llm_output(**kwargs)
530
- if named is not None:
531
- return named
532
- named = scientific_visualization.transform_llm_output(**kwargs)
533
- if named is not None:
546
+ if named is None:
547
+ named = scientific_visualization.transform_llm_output(**kwargs)
548
+ if named is None:
549
+ named = core.transform_llm_output(**kwargs)
550
+ # The reply transform is the plugin's only user-visible channel, so the
551
+ # once-per-session Jev banner and fallback note are prefixed here, banner
552
+ # first; the reply stays intact.
553
+ session_id = str(kwargs.get("session_id") or "")
554
+ lines = (jev_hint.consume_banner(session_id), jev_hint.consume_note(session_id))
555
+ prefix = "\n".join(line for line in lines if line)
556
+ if not prefix:
534
557
  return named
535
- return core.transform_llm_output(**kwargs)
558
+ reply = named if named is not None else str(kwargs.get("response_text") or "")
559
+ return f"{prefix}\n\n{reply}"
536
560
 
537
561
 
538
562
  def _pre_tool_call(**kwargs: Any) -> dict[str, str] | None:
@@ -568,6 +592,7 @@ def _release_bounded_session(**kwargs: Any) -> None:
568
592
  core.release_browser_drive_state(raw_session_id)
569
593
  session_id = raw_session_id if isinstance(raw_session_id, str) else ""
570
594
  bounded_work.release_bounded_session(session_id)
595
+ jev_hint.release_session(session_id)
571
596
  # A finalized/reset session must not leave its rule dedup ledger behind: the
572
597
  # next session reusing the id would see every rule as "already injected".
573
598
  core.release_rules_session(session_id)
@@ -21,6 +21,11 @@ try:
21
21
  except (ImportError, ModuleNotFoundError):
22
22
  import provider_metrics as _provider_metrics # type: ignore
23
23
 
24
+ try:
25
+ from . import jev_hint as _jev_hint
26
+ except (ImportError, ModuleNotFoundError):
27
+ import jev_hint as _jev_hint # type: ignore
28
+
24
29
  try:
25
30
  from .core_contract import KOREAN_PROSE_ALIASES, KOREAN_PROSE_COMMANDS
26
31
  except (ImportError, ModuleNotFoundError):
@@ -477,6 +482,7 @@ def status_report(host_version: str | None = None) -> str:
477
482
  "litgoal state: .hermes/lithermes/litgoal/ (drive via: hermes lithermes goal status)",
478
483
  _knowledge.status_line(Path.cwd()),
479
484
  _provider_metrics.capability_line(),
485
+ _jev_hint.status_line(),
480
486
  f"litgoal evidence kinds: {', '.join(_evidence_kinds())}",
481
487
  f"scientific visualization: {_science.dependency_summary()}",
482
488
  *_motion_runtime_lines(),
@@ -562,6 +568,9 @@ def doctor_report(host_version: str | None = None) -> tuple[list[str], int]:
562
568
  )
563
569
  healthy = healthy and knowledge_ok
564
570
  lines.append(f"[NOTE] {_provider_metrics.capability_line()}")
571
+ jev_state = _jev_hint.status()
572
+ jev_tag = {"on": "OK", "off": "NOTE"}.get(jev_state, "WARN")
573
+ lines.append(f"[{jev_tag}] {_jev_hint.status_line()}")
565
574
  if version != "unknown":
566
575
  lines.append(f"[OK] Hermes host detected (v{version})")
567
576
  else: