@litfamily/lithermes 1.0.12 → 1.0.14
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.md +17 -33
- package/README_Ko-KR.md +16 -32
- package/assets/lithermes-plugin/README.md +29 -0
- package/assets/lithermes-plugin/__init__.py +24 -2
- package/assets/lithermes-plugin/auto_handoff.py +679 -0
- package/assets/lithermes-plugin/core.py +10 -0
- package/assets/lithermes-plugin/diagnostics.py +8 -0
- package/assets/lithermes-plugin/handoff.py +13 -2
- package/assets/lithermes-plugin/payload-version.json +15 -11
- package/assets/lithermes-plugin/plugin.yaml +1 -1
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/complete-contract.md +2 -2
- package/assets/lithermes-plugin/skills/lit-handoff/SKILL.md +7 -0
- package/assets/lithermes-plugin/skills/visual-qa/references/complete-contract.md +2 -2
- package/package.json +1 -1
- package/readme-assets/badge-version.svg +1 -1
- package/readme-assets/ab-simple/s11-ui-baseline-desktop.webp +0 -0
- package/readme-assets/ab-simple/s11-ui-lithermes-desktop.webp +0 -0
- package/readme-assets/ab-simple/s3-ui-baseline-desktop.webp +0 -0
- package/readme-assets/ab-simple/s3-ui-lithermes-desktop.webp +0 -0
- package/readme-assets/ab-simple/s4-ui-baseline-desktop.webp +0 -0
- package/readme-assets/ab-simple/s4-ui-lithermes-desktop.webp +0 -0
- package/readme-assets/ab-simple/s5-office-baseline-slides.webp +0 -0
- package/readme-assets/ab-simple/s5-office-lithermes-slides.webp +0 -0
- package/readme-assets/ab-simple/s7-lithermes-diagram.webp +0 -0
- package/readme-assets/ab-simple/s8-office-baseline-slides.webp +0 -0
- package/readme-assets/ab-simple/s8-office-lithermes-slides.webp +0 -0
- package/readme-assets/ab-simple/s9-office-lithermes-pages.webp +0 -0
package/README.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
1
|
+
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/cover-motion.webp" width="100%" alt="LitFamily motion cover: five armored robots power on one by one, the LitHermes robot wakes with glowing eyes and a lit frame, then LITFAMILY and KEEP THE WORK LIT. light up." /></picture></p>
|
|
2
2
|
|
|
3
|
-
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
3
|
+
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/ascii-readme.svg" width="480" alt="LIT ASCII B mark" /></p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<a href="#install"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
7
|
-
<a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
6
|
+
<a href="#install"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/badge-version.svg" alt="1.0.14" /></a>
|
|
7
|
+
<a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/badge-license.svg" alt="MIT license" /></a>
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
11
|
-
<a href="https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
12
|
-
<a href="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
13
|
-
<a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
11
|
+
<a href="https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/lucide-book-open.svg" width="16" alt="" /> Guide</a>
|
|
12
|
+
<a href="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/ignition-film.mp4"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/lucide-play.svg" width="16" alt="" /> Ignition film</a>
|
|
13
|
+
<a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/lucide-shield-check.svg" width="16" alt="" /> MIT</a>
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
# LitHermes
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
A plugin for **Hermes Agent**. Add `lit` to a request, and Hermes plans the task, does it, checks it, and leaves a note the next session can pick up.
|
|
21
21
|
|
|
22
|
-
**[Full guide
|
|
22
|
+
**[Full guide and skills gallery on GitHub](https://github.com/wjgoarxiv/lithermes#readme)** · [한국어](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/README_Ko-KR.md)
|
|
23
23
|
|
|
24
24
|
## Install
|
|
25
25
|
|
|
@@ -41,7 +41,7 @@ Restart the Hermes CLI or gateway, then type:
|
|
|
41
41
|
lit Build a to-do list in one HTML file without external dependencies. Implement add, complete, and delete; record what you checked and what remains.
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
The reply opens with a single `🔥 **LIT IGNITED · <discipline>** 🔥` line.
|
|
44
|
+
The reply opens with a single `🔥 **LIT IGNITED · <discipline>** 🔥` line. Once you see it, LitHermes has picked up the task and the work has started. When it finishes, open the file and try each action yourself, and ask Hermes to separate what it actually checked from what is still unverified. Then run `/lit-handoff`. A new session in the same project can read that handoff and continue from it.
|
|
45
45
|
|
|
46
46
|
The spark is that record. Once the session closes, nothing carries on in the background; the next session picks the work up from the handoff.
|
|
47
47
|
|
|
@@ -77,32 +77,16 @@ On a Telegram gateway, use `/lit_loop` and `/lit_plan`. Every skill also loads b
|
|
|
77
77
|
- Goals, plans and evidence are written to local records under `.hermes/lithermes/` in your project, where the next session can read them.
|
|
78
78
|
- The Hermes CLI gains the Ignition skin. Choose it with `/skin lithermes-ignition` and restart, or use `/skin lithermes-tokyonight-day` on a light terminal and `/skin lithermes-tokyonight` on a dark one. A fresh interactive, color-capable install run with `--yes` selects Ignition only when `display.skin` is absent, and existing skin files are kept.
|
|
79
79
|
- LitHermes updates itself, carefully. When you run `lithermes install`, `check` or `doctor` in a terminal, or send the first message of an interactive Hermes CLI session, it asks the npm registry for the latest stable release. If that one is newer, LitHermes backs up your plugin folder, `config.yaml`, install record and skins folder, installs it, and runs `doctor --offline`. If the install fails, takes longer than 30 seconds or does not pass that check, the backup goes back and you keep your version. Restart Hermes to load a new one.
|
|
80
|
-
- Each update leaves `auto-update-journal.json` and `auto-update-receipt.json` in `<Hermes home>/lithermes
|
|
80
|
+
- Each update leaves `auto-update-journal.json` and `auto-update-receipt.json` in `<Hermes home>/lithermes/`. Updates are skipped with `--offline`, `--json` or `--dry-run`, in CI, or with piped output.
|
|
81
81
|
- Separately, LitHermes looks for a newer release in the background at most once every 24 hours and saves the answer in `update-check.json`; any update notice is read from there. It suggests a command such as `npx --yes --package @litfamily/lithermes@<version> -- lithermes install --yes --no-hud`, and running it is up to you.
|
|
82
|
-
- To install new versions yourself and
|
|
82
|
+
- To install new versions yourself and still get the notice, set `LITHERMES_NO_AUTO_UPDATE=1`.
|
|
83
83
|
- To skip the update for one command, add `--no-auto-update` to `install`, `check` or `doctor`.
|
|
84
84
|
- To stop every version check, set `NO_UPDATE_NOTIFIER=1` or `LITHERMES_NO_UPDATE_CHECK=1`. Any value counts for these variables. The GitHub page explains the update step in full.
|
|
85
85
|
- LitHermes decides where a request goes; Hermes Agent still runs the model.
|
|
86
86
|
|
|
87
|
-
##
|
|
87
|
+
## Automatic handoff
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
| Task | Prompt | Final verdict | Blind judge (same round) |
|
|
92
|
-
|---|---|---|---|
|
|
93
|
-
| S1 · Terminal to-do CLI | 터미널에서 쓰는 할 일 관리 CLI 만들어줘 | Tie | Baseline won |
|
|
94
|
-
| S2 · API server bugs | 이 API 서버 가끔 이상하게 동작하는데 고쳐줘 | Tie | Tie |
|
|
95
|
-
| S3 · Budget dashboard (UI round) | 개인 가계부 대시보드 웹페이지 만들어줘 | **LitHermes won** | LitHermes won |
|
|
96
|
-
| S4 · Café landing page (UI round) | 동네 카페 브랜드 랜딩페이지 만들어줘 | **LitHermes won** | LitHermes won |
|
|
97
|
-
| S5 · Report and slides from sources (office round) | sources 폴더 자료로 보고서랑 발표자료 만들어줘 | **LitHermes won** | LitHermes won |
|
|
98
|
-
| S6 · Node 22→24 research | Node 22에서 24로 올릴 때 달라지는 거 조사해줘 | **LitHermes won** | Tie |
|
|
99
|
-
| S7 · Order, payment and shipping diagram | 주문-결제-배송 서비스 구조도 그려줘 | **LitHermes won** | LitHermes won |
|
|
100
|
-
| S8 · Quarterly results deck (office round) | 분기 실적 발표자료 만들어줘 | **LitHermes won** | Baseline won |
|
|
101
|
-
| S9 · New product plan (office round) | 신제품 기획서 써줘 | **LitHermes won** | LitHermes won |
|
|
102
|
-
| S11 · Meeting-room booking web app (UI round) | 회의실 예약 웹앱 만들어줘 | **LitHermes won** | Tie |
|
|
103
|
-
| Total | | **8 won, 2 tied, 0 lost** | 5 won, 3 tied, 2 lost |
|
|
104
|
-
|
|
105
|
-
The judge preferred the baseline in S1 and S8. What each side produced, the screenshots, and the notes on which tasks came from later rounds are on GitHub. The motion cover at the top was made with the LitFamily motion skill. That skill (`lit-typographic-motion` here) was rebuilt after its first A/B and has no A/B result yet.
|
|
89
|
+
This is off by default, and the percent is yours to choose. `/lit-handoff auto on 60` (any whole number from 1 to 99) makes LitHermes ask the model for a handoff on the first message after a model call passes 60% of the context window, and then tell you to run `/compact`. A plugin cannot start compaction on Hermes, so you run it, or Hermes compacts on its own threshold. After compaction the handoff comes back as a short digest. `/lit-handoff auto off` and `/lit-handoff auto status` do what they say, and `LITHERMES_AUTO_HANDOFF=1` with `LITHERMES_AUTO_HANDOFF_PERCENT` sets it from the environment. The [GitHub README](https://github.com/wjgoarxiv/lithermes#automatic-handoff) lists which steps are automatic and how to pick a percent that Hermes' own compaction leaves alone.
|
|
106
90
|
|
|
107
91
|
## Optional: Jev skill hint
|
|
108
92
|
|
|
@@ -122,15 +106,15 @@ npx --package @litfamily/lithermes -- lithermes uninstall --yes
|
|
|
122
106
|
`doctor --offline` checks the install without going online. If the installer made compatibility edits to Hermes, add `--rollback-patches` when uninstalling to undo them. Uninstalling keeps the skin files and your `display.skin` choice; `npx --package @litfamily/lithermes -- lithermes hud off` clears the choice and keeps the files.
|
|
123
107
|
|
|
124
108
|
- To see what the installer would change before it changes anything, run `lithermes install --dry-run`.
|
|
125
|
-
-
|
|
126
|
-
- Hermes' own `/goal`
|
|
127
|
-
- Hermes sends every helper through one shared model setting, so
|
|
109
|
+
- LitHermes reads pasted code, quotations and commands as plain text and does not follow them. Secrets are masked before anything is saved or passed to a model.
|
|
110
|
+
- Hermes' own `/goal` stays yours. LitHermes leaves it alone and never updates, clears or resumes it. It works from the goals it saves through its `goal_*` tools.
|
|
111
|
+
- Hermes sends every helper through one shared model setting, so you cannot pick a model per task or give reviewers their own. The installer's report shows what was configured; only the receipt of a real `delegate_task` run proves which model a helper used.
|
|
128
112
|
- If Lit skills seem to be missing, ask Hermes to call its `skills_list` tool and look for LitHermes entries; the `/skills` command only reads the filesystem, and its list can differ by Hermes version. An import error in the Hermes log means the plugin failed to load. Keep the message rather than installing pip packages on a guess.
|
|
129
113
|
- If a same-named skill elsewhere hides a LitHermes one, `lithermes doctor` prints a `skill shadow check: WARNING` line. Load the LitHermes copy as `lithermes:<name>`. The warning leaves doctor's exit status as it was.
|
|
130
114
|
|
|
131
115
|
## Learn more
|
|
132
116
|
|
|
133
|
-
- [Full README on GitHub](https://github.com/wjgoarxiv/lithermes#readme): the skills gallery
|
|
117
|
+
- [Full README on GitHub](https://github.com/wjgoarxiv/lithermes#readme): the skills gallery and how it works
|
|
134
118
|
- [Operating guide](https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.md): commands, models, skins and troubleshooting
|
|
135
119
|
- [Changelog](https://github.com/wjgoarxiv/lithermes/blob/main/CHANGELOG.md) · [Contributing](https://github.com/wjgoarxiv/lithermes/blob/main/CONTRIBUTING.md) · [Security](https://github.com/wjgoarxiv/lithermes/blob/main/SECURITY.md) · [Support](https://github.com/wjgoarxiv/lithermes/blob/main/SUPPORT.md)
|
|
136
120
|
|
package/README_Ko-KR.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
1
|
+
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/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.
|
|
3
|
+
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/ascii-readme.svg" width="480" alt="LIT ASCII B 마크" /></p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<a href="#설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
7
|
-
<a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
6
|
+
<a href="#설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/badge-version.svg" alt="1.0.14" /></a>
|
|
7
|
+
<a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/badge-license.svg" alt="MIT license" /></a>
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
11
|
-
<a href="https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.ko.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
12
|
-
<a href="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
13
|
-
<a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.
|
|
11
|
+
<a href="https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.ko.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/lucide-book-open.svg" width="16" alt="" /> 안내</a>
|
|
12
|
+
<a href="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/ignition-film.mp4"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/lucide-play.svg" width="16" alt="" /> Ignition 영상</a>
|
|
13
|
+
<a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/readme-assets/lucide-shield-check.svg" width="16" alt="" /> MIT</a>
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
# LitHermes
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
**Hermes Agent**용 플러그인입니다. 요청에 `lit`을 붙이면 Hermes가 작업을 계획하고, 실행하고, 확인한 뒤 다음 세션이 이어받을 기록을 남깁니다.
|
|
21
21
|
|
|
22
|
-
**[전체
|
|
22
|
+
**[전체 안내와 스킬 갤러리는 GitHub에서](https://github.com/wjgoarxiv/lithermes/blob/main/README_Ko-KR.md)** · [English](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.14/README.md)
|
|
23
23
|
|
|
24
24
|
## 설치
|
|
25
25
|
|
|
@@ -76,32 +76,16 @@ Telegram gateway에서는 `/lit_loop`와 `/lit_plan`을 쓰세요. 모든 스킬
|
|
|
76
76
|
- 목표·계획·근거는 프로젝트의 `.hermes/lithermes/` 아래 로컬 기록으로 남고, 다음 세션이 이 기록을 읽을 수 있습니다.
|
|
77
77
|
- Hermes CLI에 Ignition 스킨이 생깁니다. `/skin lithermes-ignition`을 고르고 다시 시작하세요. 밝은 터미널에는 `/skin lithermes-tokyonight-day`, 어두운 터미널에는 `/skin lithermes-tokyonight`가 맞습니다. 색상을 지원하는 대화형 환경에서 `--yes`로 처음 설치하면 설정에 `display.skin` 항목이 아예 없을 때만 Ignition을 고르고, 기존 스킨 파일은 보존합니다.
|
|
78
78
|
- LitHermes는 스스로, 그리고 조심스럽게 업데이트합니다. 터미널에서 `lithermes install`, `check`, `doctor`를 실행하거나 대화형 Hermes CLI 세션에서 첫 메시지를 보내면 npm 레지스트리에 최신 안정 버전을 물어봅니다. 더 새로운 버전이 있으면 플러그인 폴더, `config.yaml`, 설치 기록, 스킨 폴더를 백업한 뒤 설치하고 `doctor --offline`을 실행합니다. 설치가 실패하거나 30초를 넘기거나 이 점검을 통과하지 못하면 백업을 복원해서 쓰던 버전이 남습니다. 새 버전을 불러오려면 Hermes를 다시 시작하세요.
|
|
79
|
-
- 업데이트할 때마다 `<Hermes 홈>/lithermes/`에 `auto-update-journal.json`과 `auto-update-receipt.json`이 남아서 무슨 일이 있었는지 볼 수 있습니다. `--offline`, `--json`, `--dry-run`을 붙였거나 CI에서 돌거나 출력을 파이프로
|
|
79
|
+
- 업데이트할 때마다 `<Hermes 홈>/lithermes/`에 `auto-update-journal.json`과 `auto-update-receipt.json`이 남아서 무슨 일이 있었는지 볼 수 있습니다. `--offline`, `--json`, `--dry-run`을 붙였거나 CI에서 돌거나 출력을 파이프로 넘기면 업데이트를 건너뜁니다.
|
|
80
80
|
- 이와는 따로, LitHermes는 새 버전이 나왔는지 백그라운드에서 24시간에 한 번까지만 확인해 그 결과를 `update-check.json`에 저장해 둡니다. 안내할 때는 이 파일을 읽고, 안내에는 `npx --yes --package @litfamily/lithermes@<version> -- lithermes install --yes --no-hud` 같은 명령이 나옵니다. 실행할지는 직접 정하면 됩니다.
|
|
81
|
-
- 새
|
|
81
|
+
- 새 버전은 직접 설치하되 안내는 계속 받고 싶다면 `LITHERMES_NO_AUTO_UPDATE=1`을 설정하세요.
|
|
82
82
|
- 명령 한 번만 건너뛰려면 `install`, `check`, `doctor`에 `--no-auto-update`를 붙이세요.
|
|
83
83
|
- 버전 확인을 모두 멈추려면 `NO_UPDATE_NOTIFIER=1` 또는 `LITHERMES_NO_UPDATE_CHECK=1`을 설정하세요. 이 변수들은 어떤 값이든 똑같이 적용됩니다. 업데이트 과정의 자세한 설명은 GitHub 문서에 있습니다.
|
|
84
84
|
- 요청을 어디로 보낼지는 LitHermes가 정하고, 모델은 여전히 Hermes Agent가 돌립니다.
|
|
85
85
|
|
|
86
|
-
##
|
|
86
|
+
## 자동 핸드오프
|
|
87
87
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
| 작업 | 요청 | 최종 판정 | 블라인드 판정(같은 라운드) |
|
|
91
|
-
|---|---|---|---|
|
|
92
|
-
| S1 · 터미널 할 일 CLI | 터미널에서 쓰는 할 일 관리 CLI 만들어줘 | 무승부 | 기준선 승 |
|
|
93
|
-
| S2 · API 서버 버그 | 이 API 서버 가끔 이상하게 동작하는데 고쳐줘 | 무승부 | 무승부 |
|
|
94
|
-
| S3 · 가계부 대시보드 (UI 라운드) | 개인 가계부 대시보드 웹페이지 만들어줘 | **LitHermes 승** | LitHermes 승 |
|
|
95
|
-
| S4 · 카페 랜딩페이지 (UI 라운드) | 동네 카페 브랜드 랜딩페이지 만들어줘 | **LitHermes 승** | LitHermes 승 |
|
|
96
|
-
| S5 · 자료 기반 보고서와 발표자료 (오피스 라운드) | sources 폴더 자료로 보고서랑 발표자료 만들어줘 | **LitHermes 승** | LitHermes 승 |
|
|
97
|
-
| S6 · Node 22→24 조사 | Node 22에서 24로 올릴 때 달라지는 거 조사해줘 | **LitHermes 승** | 무승부 |
|
|
98
|
-
| S7 · 주문·결제·배송 구조도 | 주문-결제-배송 서비스 구조도 그려줘 | **LitHermes 승** | LitHermes 승 |
|
|
99
|
-
| S8 · 분기 실적 발표자료 (오피스 라운드) | 분기 실적 발표자료 만들어줘 | **LitHermes 승** | 기준선 승 |
|
|
100
|
-
| S9 · 신제품 기획서 (오피스 라운드) | 신제품 기획서 써줘 | **LitHermes 승** | LitHermes 승 |
|
|
101
|
-
| S11 · 회의실 예약 웹앱 (UI 라운드) | 회의실 예약 웹앱 만들어줘 | **LitHermes 승** | 무승부 |
|
|
102
|
-
| 합계 | | **8승 2무 0패** | 5승 3무 2패 |
|
|
103
|
-
|
|
104
|
-
판정자는 S1과 S8에서 기준선을 골랐습니다. 양쪽이 만든 결과물과 스크린샷, 그리고 각 작업이 어느 라운드에서 나왔는지는 GitHub에서 확인할 수 있습니다. 맨 위 모션 표지는 LitFamily 모션 스킬로 만들었습니다. 이 스킬(여기서는 `lit-typographic-motion`)은 첫 A/B 이후 다시 만들어졌고, 아직 A/B 결과가 없습니다.
|
|
88
|
+
기본값은 꺼짐이고, 퍼센트는 직접 고릅니다. `/lit-handoff auto on 60`(1에서 99 사이의 정수)을 실행하면, 모델 호출 하나가 컨텍스트 창의 60%를 넘은 뒤 첫 메시지에서 LitHermes가 모델에게 핸드오프를 요청하고 `/compact`를 실행하라고 알려 줍니다. Hermes에서는 플러그인이 압축을 시작할 수 없으므로, 사용자가 직접 실행하거나 Hermes가 자체 기준으로 압축합니다. 압축 뒤에는 핸드오프가 짧은 요약으로 돌아옵니다. `/lit-handoff auto off`와 `/lit-handoff auto status`는 이름 그대로 동작하고, 환경에서는 `LITHERMES_AUTO_HANDOFF=1`과 `LITHERMES_AUTO_HANDOFF_PERCENT`로 설정합니다. 어느 단계가 자동이고 Hermes 자체 압축과 겹치지 않는 퍼센트를 어떻게 고르는지는 [GitHub README](https://github.com/wjgoarxiv/lithermes/blob/main/README_Ko-KR.md#자동-핸드오프)에 있습니다.
|
|
105
89
|
|
|
106
90
|
## 선택 기능: Jev 스킬 힌트
|
|
107
91
|
|
|
@@ -121,15 +105,15 @@ npx --package @litfamily/lithermes -- lithermes uninstall --yes
|
|
|
121
105
|
`doctor --offline`은 인터넷에 나가지 않고 설치 상태를 확인합니다. 설치 프로그램이 Hermes에 호환성 수정을 했다면 삭제할 때 `--rollback-patches`를 붙여 되돌리세요. 삭제해도 스킨 파일과 `display.skin` 선택은 남습니다. `npx --package @litfamily/lithermes -- lithermes hud off`를 실행하면 선택만 지우고 파일은 그대로 둡니다.
|
|
122
106
|
|
|
123
107
|
- 설치 프로그램이 무엇을 바꿀지 미리 보고 싶다면 `lithermes install --dry-run`을 실행하세요.
|
|
124
|
-
- 붙여 넣은 코드, 인용문, 명령은 읽을
|
|
125
|
-
- Hermes에 원래 있는 `/goal`은 사용자가 직접 관리합니다. LitHermes는
|
|
126
|
-
- Hermes는 보조 작업을 모두 공통 모델 설정 하나로 보내므로, 작업마다 모델을 고르거나 리뷰 전용 모델을 둘 수 없습니다. 설치 보고서에는 설정한
|
|
108
|
+
- 붙여 넣은 코드, 인용문, 명령은 읽을 글로 다루고, 지시로 따르지는 않습니다. 비밀값은 저장하거나 모델에 넘기기 전에 가립니다.
|
|
109
|
+
- Hermes에 원래 있는 `/goal`은 사용자가 직접 관리합니다. LitHermes는 이 기능을 건드리지 않고, 갱신하거나 지우거나 다시 이어 주지도 않습니다. `goal_*` 도구로 저장한 자기 목표를 기준으로 삼습니다.
|
|
110
|
+
- Hermes는 보조 작업을 모두 공통 모델 설정 하나로 보내므로, 작업마다 모델을 고르거나 리뷰 전용 모델을 둘 수 없습니다. 설치 보고서에는 설정한 값이 나오고, 실제로 쓰인 모델은 실제 `delegate_task` 실행 기록으로만 확인됩니다.
|
|
127
111
|
- Lit 스킬이 보이지 않으면 Hermes에 `skills_list` 도구를 불러 LitHermes 항목을 찾아 달라고 하세요. `/skills` 명령은 파일시스템만 읽어서 Hermes 버전에 따라 목록이 다를 수 있습니다. Hermes 로그의 import 오류는 플러그인을 불러오지 못했다는 뜻입니다. 짐작으로 pip 패키지를 설치하기보다 오류 메시지를 보관해 두세요.
|
|
128
112
|
- 다른 곳의 같은 이름 스킬이 LitHermes 스킬을 가리면 `lithermes doctor`가 `skill shadow check: WARNING` 줄을 출력합니다. `lithermes:<name>`으로 불러오세요. 이 경고가 doctor의 종료 상태를 바꾸지는 않습니다.
|
|
129
113
|
|
|
130
114
|
## 더 알아보기
|
|
131
115
|
|
|
132
|
-
- [GitHub의 전체 README](https://github.com/wjgoarxiv/lithermes/blob/main/README_Ko-KR.md): 스킬
|
|
116
|
+
- [GitHub의 전체 README](https://github.com/wjgoarxiv/lithermes/blob/main/README_Ko-KR.md): 스킬 갤러리와 작동 방식
|
|
133
117
|
- [운영 안내](https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.ko.md): 명령, 모델, 스킨, 문제 해결
|
|
134
118
|
- [변경 기록](https://github.com/wjgoarxiv/lithermes/blob/main/CHANGELOG.md) · [기여](https://github.com/wjgoarxiv/lithermes/blob/main/CONTRIBUTING.md) · [보안](https://github.com/wjgoarxiv/lithermes/blob/main/SECURITY.md) · [지원](https://github.com/wjgoarxiv/lithermes/blob/main/SUPPORT.md)
|
|
135
119
|
|
|
@@ -135,6 +135,35 @@ CLI/plugin name, not the npm package name.
|
|
|
135
135
|
timestamp to Hermes home `lithermes/jev-last-<session hash>.json` (mode 0600,
|
|
136
136
|
atomic), one file per session, removed when the session ends. Neither file is
|
|
137
137
|
written through a symlink.
|
|
138
|
+
- Optional automatic handoff (`auto_handoff.py`), off by default. The user
|
|
139
|
+
switches it on with `/lit-handoff auto on <percent>` (plain text reply, no
|
|
140
|
+
model call; `auto off` and `auto status` likewise) or with
|
|
141
|
+
`LITHERMES_AUTO_HANDOFF=1` plus `LITHERMES_AUTO_HANDOFF_PERCENT`; the
|
|
142
|
+
environment wins over the saved value, any flag value other than `1` keeps it
|
|
143
|
+
off, and a percent that is not a whole number from 1 to 99 leaves it off with a
|
|
144
|
+
doctor warning. There is no built-in percent: `on` without a number reuses the
|
|
145
|
+
last saved one and asks when none exists. The switch is saved in Hermes home
|
|
146
|
+
`lithermes/auto-handoff.json` (mode 0600, atomic, never written through a
|
|
147
|
+
symlink). `post_api_request` reads the prompt size of each model call
|
|
148
|
+
(`usage.prompt_tokens`, else input plus cache read plus cache write) over the
|
|
149
|
+
model's context window (`model.context_length` from the Hermes config, else
|
|
150
|
+
the host's own lookup, bounded to 3 seconds) and keeps the latest reading per
|
|
151
|
+
session in memory. Crossing the percent marks one pending directive;
|
|
152
|
+
`pre_llm_call` delivers it on the next turn, merged through the post-edit
|
|
153
|
+
composition so the byte budget keeps it whole. The directive names the bundled
|
|
154
|
+
lit-handoff source, asks for an `auto-handoff-id:` line in the file and for
|
|
155
|
+
the one plain line `Handoff saved. Run /compact now.` (`/compress` on Hermes
|
|
156
|
+
0.17, which has no `/compact`). A plugin cannot start compaction here. After
|
|
157
|
+
the user compacts, or Hermes compacts on its own, the next `pre_llm_call`
|
|
158
|
+
sees a new `_compressed_summary` message, and loads a digest (Current State
|
|
159
|
+
and Next Steps, at most 1,400 bytes, redacted and escaped) of `HANDOFF.md` or
|
|
160
|
+
`.handoff/HANDOFF.md`, but only when the file carries this session's id, was
|
|
161
|
+
written after the directive and is a regular file. Anything else gets a
|
|
162
|
+
one-line refusal. It fires once per crossing, never for delegate children,
|
|
163
|
+
and forgets a session when it ends. Status and doctor print `Automatic
|
|
164
|
+
handoff: ...` and warn when the percent is at or above the estimate of
|
|
165
|
+
Hermes' own compaction point (the `compression` settings, the small-window
|
|
166
|
+
floor and the token cap when the running host has them).
|
|
138
167
|
- The `post_tool_call` hook is an observer — Hermes discards its return value — so
|
|
139
168
|
it records the paths a completed `write_file` / `patch` call mutated and
|
|
140
169
|
`pre_llm_call` renders them on the next turn. A source-code edit names
|
|
@@ -7,6 +7,7 @@ import re
|
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
from typing import Any
|
|
9
9
|
|
|
10
|
+
from . import auto_handoff
|
|
10
11
|
from . import core
|
|
11
12
|
from . import bounded_work
|
|
12
13
|
from . import bounded_work_tools
|
|
@@ -316,6 +317,23 @@ def _merge_knowledge(
|
|
|
316
317
|
return result
|
|
317
318
|
|
|
318
319
|
|
|
320
|
+
def _auto_handoff_block(kwargs: dict[str, Any]) -> str:
|
|
321
|
+
"""The opt-in automatic-handoff directive or reload for this turn, or an empty string.
|
|
322
|
+
|
|
323
|
+
It rides with the post-edit route so the bounded composition keeps it whole,
|
|
324
|
+
and a failure here never costs the turn its other context.
|
|
325
|
+
"""
|
|
326
|
+
try:
|
|
327
|
+
return auto_handoff.pre_llm_call(
|
|
328
|
+
session_id=kwargs.get("session_id"),
|
|
329
|
+
user_message=kwargs.get("user_message"),
|
|
330
|
+
conversation_history=kwargs.get("conversation_history"),
|
|
331
|
+
platform=kwargs.get("platform"),
|
|
332
|
+
)
|
|
333
|
+
except Exception: # noqa: BLE001 - advisory only
|
|
334
|
+
return ""
|
|
335
|
+
|
|
336
|
+
|
|
319
337
|
def _pre_llm_call(**kwargs: Any) -> dict[str, str] | None:
|
|
320
338
|
"""Compose the Litwork directive and the active-litgoal snapshot.
|
|
321
339
|
|
|
@@ -333,6 +351,9 @@ def _pre_llm_call(**kwargs: Any) -> dict[str, str] | None:
|
|
|
333
351
|
kwargs.get("session_id"), kwargs.get("user_message"), kwargs.get("turn_id")
|
|
334
352
|
)
|
|
335
353
|
post_edit = core.consume_rules_context(**kwargs)
|
|
354
|
+
auto_handoff_block = _auto_handoff_block(kwargs)
|
|
355
|
+
if auto_handoff_block:
|
|
356
|
+
post_edit = f"{auto_handoff_block}\n\n{post_edit}" if post_edit else auto_handoff_block
|
|
336
357
|
workspace = kwargs.get("workspace")
|
|
337
358
|
knowledge_context = knowledge.query(workspace, str(kwargs.get("user_message") or ""))
|
|
338
359
|
base = core.pre_llm_call(**kwargs)
|
|
@@ -593,6 +614,7 @@ def _release_bounded_session(**kwargs: Any) -> None:
|
|
|
593
614
|
session_id = raw_session_id if isinstance(raw_session_id, str) else ""
|
|
594
615
|
bounded_work.release_bounded_session(session_id)
|
|
595
616
|
jev_hint.release_session(session_id)
|
|
617
|
+
auto_handoff.release_session(session_id)
|
|
596
618
|
# A finalized/reset session must not leave its rule dedup ledger behind: the
|
|
597
619
|
# next session reusing the id would see every rule as "already injected".
|
|
598
620
|
core.release_rules_session(session_id)
|
|
@@ -708,8 +730,8 @@ def register(ctx) -> None:
|
|
|
708
730
|
ctx.register_command(
|
|
709
731
|
"lit-handoff",
|
|
710
732
|
_command_handler(ctx, handoff.command_lit_handoff),
|
|
711
|
-
description="Create or update a verified LitHermes continuation handoff",
|
|
712
|
-
args_hint="[focus]",
|
|
733
|
+
description="Create or update a verified LitHermes continuation handoff, or set the automatic handoff",
|
|
734
|
+
args_hint="[focus] | auto on <percent> | auto off | auto status",
|
|
713
735
|
)
|
|
714
736
|
ctx.register_command(
|
|
715
737
|
"lit-scientific-visualization",
|