@litfamily/litgrok 1.0.2 → 1.0.3
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/.grok/hooks/session-start.mjs +0 -16
- package/.grok/hooks/stop.mjs +18 -26
- package/.grok/skills/litgoal/SKILL.md +1 -1
- package/.grok/skills/litgrok/SKILL.md +1 -1
- package/.grok/skills/litwork/SKILL.md +1 -1
- package/.grok-plugin/plugin.json +1 -2
- package/CHANGELOG.md +9 -0
- package/README.md +11 -11
- package/README_ko-KR.md +11 -11
- package/bin/litgrok.mjs +33 -14
- package/docs/assets/cover-motion.webp +0 -0
- package/docs/assets/readme/badge-version.svg +1 -1
- package/docs/privacy.md +1 -3
- package/docs/reference.md +7 -25
- package/docs/reference_ko-KR.md +7 -24
- package/package.json +3 -1
- package/plugin.json +1 -1
- package/.grok/skills/skill-observer/SKILL.md +0 -78
- package/.grok/skills/skill-observer/references/review-contract.md +0 -77
- package/.grok/skills/skill-observer/scripts/curator.mjs +0 -121
- package/.grok/skills/skill-observer/scripts/review.mjs +0 -347
- package/.grok/skills/skill-observer/scripts/skill-loop.mjs +0 -2087
- package/.grok/skills/skill-observer/scripts/validate-skills.mjs +0 -83
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { pendingReviewState } from '../skills/skill-observer/scripts/skill-loop.mjs';
|
|
4
3
|
import { renderMark } from './lit-mark.mjs';
|
|
5
4
|
import { claimSessionIgnition } from './record-passive-event.mjs';
|
|
6
5
|
|
|
@@ -20,18 +19,3 @@ try {
|
|
|
20
19
|
}
|
|
21
20
|
|
|
22
21
|
process.stdout.write('LitGrok payload present: skills, project rules, hooks, and the npx installer.\n');
|
|
23
|
-
|
|
24
|
-
try {
|
|
25
|
-
const sessionId = process.env.GROK_SESSION_ID || event.sessionId;
|
|
26
|
-
const workspaceRoot = process.env.GROK_WORKSPACE_ROOT || event.workspaceRoot;
|
|
27
|
-
if (!process.exitCode && sessionId && workspaceRoot && event.sessionId === sessionId && event.workspaceRoot === workspaceRoot) {
|
|
28
|
-
const state = pendingReviewState({
|
|
29
|
-
cwd: workspaceRoot,
|
|
30
|
-
env: { ...process.env, LITGROK_WORKSPACE_ROOT: workspaceRoot },
|
|
31
|
-
sessionId,
|
|
32
|
-
});
|
|
33
|
-
if (state.pending) process.stdout.write(`LitGrok: pending review for session ${sessionId} — run /skill-observer review\n`);
|
|
34
|
-
}
|
|
35
|
-
} catch {
|
|
36
|
-
// The installed-payload banner is still useful when optional event state is unavailable.
|
|
37
|
-
}
|
package/.grok/hooks/stop.mjs
CHANGED
|
@@ -2,35 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
// No completion-summary field is documented, so this records only the documented turn-end event and identity.
|
|
4
4
|
import { appendSessionRecord, recordPassiveEvent } from './record-passive-event.mjs';
|
|
5
|
-
import { recordTurnEnded } from '../skills/skill-observer/scripts/skill-loop.mjs';
|
|
6
5
|
import { PLAN_GATE_SIGNAL, evaluatePlanGate } from './plan-gate.mjs';
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
const observed = await recordPassiveEvent('Stop');
|
|
8
|
+
if (observed) {
|
|
9
|
+
// Plan gate: a planning turn must persist plans/<slug>.md; evaluated after the ledger record so a block is counted.
|
|
10
|
+
let gate;
|
|
11
|
+
try {
|
|
12
|
+
gate = evaluatePlanGate({
|
|
13
|
+
event: observed.event,
|
|
14
|
+
workspaceRoot: observed.environment.realWorkspaceRoot,
|
|
14
15
|
sessionId: observed.environment.sessionId,
|
|
16
|
+
ledgerFile: observed.ledgerFile,
|
|
15
17
|
});
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
} catch (error) {
|
|
26
|
-
process.stderr.write(`LitGrok plan gate: PLAN_GATE_FAILED ${error instanceof Error ? error.message : String(error)}\n`);
|
|
27
|
-
gate = { block: false };
|
|
28
|
-
}
|
|
29
|
-
if (gate.block) {
|
|
30
|
-
appendSessionRecord(observed.ledgerFile, observed.record, { signal: PLAN_GATE_SIGNAL, reason: gate.reason });
|
|
31
|
-
process.stdout.write(`${JSON.stringify({ decision: 'block', reason: gate.reason })}\n`);
|
|
32
|
-
} else if (gate.warning) {
|
|
33
|
-
process.stderr.write(`${gate.warning}\n`);
|
|
34
|
-
}
|
|
18
|
+
} catch (error) {
|
|
19
|
+
process.stderr.write(`LitGrok plan gate: PLAN_GATE_FAILED ${error instanceof Error ? error.message : String(error)}\n`);
|
|
20
|
+
gate = { block: false };
|
|
21
|
+
}
|
|
22
|
+
if (gate.block) {
|
|
23
|
+
appendSessionRecord(observed.ledgerFile, observed.record, { signal: PLAN_GATE_SIGNAL, reason: gate.reason });
|
|
24
|
+
process.stdout.write(`${JSON.stringify({ decision: 'block', reason: gate.reason })}\n`);
|
|
25
|
+
} else if (gate.warning) {
|
|
26
|
+
process.stderr.write(`${gate.warning}\n`);
|
|
35
27
|
}
|
|
36
28
|
}
|
|
@@ -48,7 +48,7 @@ A useful objective answers:
|
|
|
48
48
|
|
|
49
49
|
Example:
|
|
50
50
|
|
|
51
|
-
/goal Make the release check pass in
|
|
51
|
+
/goal Make the release check pass in this package checkout without changing the package version; done when npm test and npm pack --dry-run --json --ignore-scripts both exit 0 and the pack list contains only the approved payload.
|
|
52
52
|
|
|
53
53
|
The example is a command for the operator to run. It is not an invocation performed by this skill.
|
|
54
54
|
|
|
@@ -22,7 +22,7 @@ reader_projection: shared_rule
|
|
|
22
22
|
|
|
23
23
|
LitGrok is a dependency-free package containing:
|
|
24
24
|
|
|
25
|
-
-
|
|
25
|
+
- 33 Grok-native skill folders under `.grok/skills/`, including their owned references;
|
|
26
26
|
- a root-level `plugin.json` manifest declaring the shipped skill, agent, and hook surfaces;
|
|
27
27
|
- 11 Grok-native agent definitions under `.grok/agents/`;
|
|
28
28
|
- one project rule under `.grok/rules/`;
|
|
@@ -88,7 +88,7 @@ A working note can use this compact shape:
|
|
|
88
88
|
|
|
89
89
|
Use the ledger only for chronology and identity checks. Confirm that the record's schema, session id, workspace root, hook name, and event name match the session being reviewed. Treat tool input hashes as identifiers, not as recoverable command text. A Stop record means a turn ended; it is not a completion receipt. A SubagentStop record means a boundary was observed; inspect the agent's own artifact before classifying its result.
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
Older LitGrok versions may have left skill-review state under .grok/litgrok. Current hooks leave those files untouched; do not present them as a work ledger.
|
|
92
92
|
|
|
93
93
|
## Native features and explicit limits
|
|
94
94
|
|
package/.grok-plugin/plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "litgrok",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Grok Build skills, project rules, and bounded lifecycle hooks for evidence-first lit work.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "LitGrok contributors"
|
|
@@ -39,7 +39,6 @@
|
|
|
39
39
|
"./.grok/skills/refactor",
|
|
40
40
|
"./.grok/skills/review-work",
|
|
41
41
|
"./.grok/skills/rules",
|
|
42
|
-
"./.grok/skills/skill-observer",
|
|
43
42
|
"./.grok/skills/start-work",
|
|
44
43
|
"./.grok/skills/structural-search",
|
|
45
44
|
"./.grok/skills/visual-qa",
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 1.0.3
|
|
6
|
+
|
|
7
|
+
- Add an animated README cover with a static option for reduced motion.
|
|
8
|
+
- Remove automatic skill review because it never completed a review in practice. Leftover `pending-review.json` and `skill-loop-state.json` files are inactive and may be deleted; no other state is affected.
|
|
9
|
+
- Refuse to publish when the test suite fails.
|
|
10
|
+
- Remove the retired `skill-observer` skill and its empty directories during upgrades while preserving user-owned files. If a user-owned file is inside the retired directory, installation refuses and names its path.
|
|
11
|
+
- List all 33 skills, 11 agents, and 11 hooks in the marketplace manifest so plugin scanners can find every component.
|
|
12
|
+
- Remove the private checkout path from the `litgoal` example.
|
|
13
|
+
|
|
5
14
|
## 1.0.2
|
|
6
15
|
|
|
7
16
|
- Add an explicit marketplace scanner manifest that enumerates all 34 skills, 11 agents, and the native hook manifest while preserving the existing Grok payload manifest.
|
package/README.md
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
1
|
+
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/cover.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/cover-motion.webp" width="100%" alt="LitGrok cover art. An orange signal moves through orbital paths above the GROK BUILD wordmark. The static family cover appears for reduced-motion preference." /></picture></p>
|
|
2
|
+
<p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/cover.webp">View the static cover</a></p>
|
|
2
3
|
|
|
3
4
|
<h1 align="center">LitGrok</h1>
|
|
4
5
|
<p align="center"><strong>Keep the work lit.</strong></p>
|
|
5
|
-
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
6
|
-
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
6
|
+
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/litgrok-wordmark.svg" width="480" alt="LITGROK display type" /></p>
|
|
7
|
+
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/litgrok-clay-icon.png" width="160" alt="LitGrok clay mark" /></p>
|
|
7
8
|
|
|
8
9
|
Make something useful in Grok Build. Leave the checked result and the next step with your project.
|
|
9
10
|
|
|
10
11
|
[한국어](./README_ko-KR.md) · [Install](#install-in-30-seconds) · [First use](#first-lit-use) · [Reference](./docs/reference.md)
|
|
11
12
|
|
|
12
13
|
<p align="center">
|
|
13
|
-
<a href="#install-in-30-seconds"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
14
|
-
<a href="./LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
14
|
+
<a href="#install-in-30-seconds"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/readme/badge-version.svg" alt="1.0.3" /></a>
|
|
15
|
+
<a href="./LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
|
|
15
16
|
</p>
|
|
16
17
|
|
|
17
18
|
<p align="center">
|
|
@@ -26,9 +27,9 @@ Make something useful in Grok Build. Leave the checked result and the next step
|
|
|
26
27
|
>
|
|
27
28
|
> **Leave something the next session can pick up.**
|
|
28
29
|
|
|
29
|
-
It ships
|
|
30
|
+
It ships 33 skills, 11 agents, one project rule, and eleven hook registrations. The installer copies the complete payload into your project; Grok Build runs the session and owns model selection.
|
|
30
31
|
|
|
31
|
-
Package: **@litfamily/litgrok** · Version: **1.0.
|
|
32
|
+
Package: **@litfamily/litgrok** · Version: **1.0.3** · [MIT](./LICENSE)
|
|
32
33
|
|
|
33
34
|
The scientific visualization corpus is packaged at `.grok/vendor/scientific-visualization/`; the numeric `045_scientific-visualization` label remains only in license and provenance filenames.
|
|
34
35
|
|
|
@@ -52,7 +53,7 @@ Grok Build uses the explicit `/litwork` route for a bounded task. It owns model
|
|
|
52
53
|
|
|
53
54
|
In Grok Build, `/litwork` starts the bounded work checklist; `handoff` or `/lit-handoff` carries the checked result and next step; `/lit-plan` records a plan with checks; `/start-work <approved-plan>` executes that plan; `/review-work` inspects the change and its evidence; and `/litresearch` runs bounded, source-traceable research. The expected effect is a resumable, checked project record. The host limit is explicit: Grok Build owns execution and model selection, while LitGrok installs the `.grok` payload; hooks require a trusted Git root and a plain folder may load skills and rules without hooks. These images are static route cues, not proof of live host behavior.
|
|
54
55
|
|
|
55
|
-
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
56
|
+
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/litgrok-ignition-1600.webp" width="48%" alt="LitGrok ignition apparatus" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/litgrok-continuity-1600.webp" width="48%" alt="LitGrok continuity apparatus" /></p>
|
|
56
57
|
|
|
57
58
|
<p align="center"><a href="./docs/assets/readme/ignition-film.mp4"><img src="./docs/assets/readme/ignition-poster.png" width="720" alt="Ignition motion poster" /></a></p>
|
|
58
59
|
|
|
@@ -75,7 +76,7 @@ LITGROK_PACK='/absolute/path/to/the-provided-package.tgz'
|
|
|
75
76
|
npm exec --yes --package "$LITGROK_PACK" -- litgrok install
|
|
76
77
|
```
|
|
77
78
|
|
|
78
|
-
The default destination is `<project>/.grok/`. Use `--package @litfamily/litgrok@1.0.
|
|
79
|
+
The default destination is `<project>/.grok/`. Use `--package @litfamily/litgrok@1.0.3` for a pinned install, or add `--user` to install under `~/.grok/`. [Install and upgrade details](./docs/reference.md#install).
|
|
79
80
|
|
|
80
81
|
Project hooks need a trusted Git project root in Grok Build. A plain folder can still load the installed skills and rules while hooks remain unavailable. For a new disposable project, run `git init` yourself before trusting it; for an existing repository, open Grok Build from its actual root. The installer never runs `git init` or changes trust. In the observed Grok Build 1.0.23 host, `grok --trust inspect --json` accepted the trust-and-inspect route even though `--trust` was omitted from `grok --help`; this is version-specific behavior.
|
|
81
82
|
|
|
@@ -142,7 +143,7 @@ The hooks' `.grok/litgrok/session-ledger/` records event order. Judge success fr
|
|
|
142
143
|
| Review a change and its evidence | [`/review-work`](./.grok/skills/review-work/SKILL.md) |
|
|
143
144
|
| Leave a resumable handoff | [`/lit-handoff`](./.grok/skills/lit-handoff/SKILL.md) |
|
|
144
145
|
|
|
145
|
-
Use `/skills` for all
|
|
146
|
+
Use `/skills` for all 33 skills. [Rename compatibility](./docs/reference.md#skill-rename-compatibility) covers the one-release aliases; old slash routes are not guaranteed.
|
|
146
147
|
|
|
147
148
|
## Safety and uninstall
|
|
148
149
|
|
|
@@ -172,7 +173,6 @@ Match the scope used for installation. Re-run `install` to update. The installer
|
|
|
172
173
|
## Documentation
|
|
173
174
|
|
|
174
175
|
- [Operational reference](./docs/reference.md): installation, hooks, terminal output, payload checks, and source provenance.
|
|
175
|
-
- [Skill learning loop](./docs/reference.md#skill-learning-loop): proposal review, explicit apply, rollback, and macOS/Linux support. Windows learning-loop commands are unsupported.
|
|
176
176
|
- [Project rule](./.grok/rules/00-litgrok.md) and [skill catalog](./.grok/skills/).
|
|
177
177
|
- [Changelog](./CHANGELOG.md) and [license](./LICENSE).
|
|
178
178
|
|
package/README_ko-KR.md
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
1
|
+
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/cover.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/cover-motion.webp" width="100%" alt="LitGrok cover art. An orange signal moves through orbital paths above the GROK BUILD wordmark. The static family cover appears for reduced-motion preference." /></picture></p>
|
|
2
|
+
<p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/cover.webp">정지 표지 보기</a></p>
|
|
2
3
|
|
|
3
4
|
<h1 align="center">LitGrok</h1>
|
|
4
5
|
<p align="center"><strong>Keep the work lit.</strong></p>
|
|
5
|
-
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
6
|
-
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
6
|
+
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/litgrok-wordmark.svg" width="480" alt="LITGROK 디스플레이 타입" /></p>
|
|
7
|
+
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/litgrok-clay-icon.png" width="160" alt="LitGrok 클레이 마크" /></p>
|
|
7
8
|
|
|
8
9
|
Grok Build에서 작은 결과물을 만들고, 확인한 내용과 다음 할 일을 프로젝트에 남기세요.
|
|
9
10
|
|
|
10
11
|
[English](./README.md) · [설치](#30초-설치) · [처음 사용하기](#첫-lit-작업) · [상세 안내](./docs/reference_ko-KR.md)
|
|
11
12
|
|
|
12
13
|
<p align="center">
|
|
13
|
-
<a href="#30초-설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
14
|
-
<a href="./LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
14
|
+
<a href="#30초-설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/readme/badge-version.svg" alt="1.0.3" /></a>
|
|
15
|
+
<a href="./LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/readme/badge-license.svg" alt="MIT 라이선스" /></a>
|
|
15
16
|
</p>
|
|
16
17
|
|
|
17
18
|
<p align="center">
|
|
@@ -26,9 +27,9 @@ Grok Build에서 작은 결과물을 만들고, 확인한 내용과 다음 할
|
|
|
26
27
|
>
|
|
27
28
|
> **대화가 끝난 자리에서, 다음 작업이 시작되도록.**
|
|
28
29
|
|
|
29
|
-
skill
|
|
30
|
+
skill 33개, agent 11개, project rule 하나, hook 등록 열한 개를 제공합니다. Installer가 프로젝트에 전체 파일을 복사하고, 세션 실행과 모델 선택은 Grok Build가 담당합니다.
|
|
30
31
|
|
|
31
|
-
패키지: **@litfamily/litgrok** · 버전: **1.0.
|
|
32
|
+
패키지: **@litfamily/litgrok** · 버전: **1.0.3** · [MIT](./LICENSE)
|
|
32
33
|
|
|
33
34
|
과학 시각화 corpus는 `.grok/vendor/scientific-visualization/`에 포함되며, 숫자 `045_scientific-visualization` 표기는 라이선스와 provenance 파일명에만 남습니다.
|
|
34
35
|
|
|
@@ -52,7 +53,7 @@ Grok Build에서는 명시적인 `/litwork` 경로로 작은 작업을 시작합
|
|
|
52
53
|
|
|
53
54
|
Grok Build에서 `/litwork`는 범위를 정한 작업 체크리스트를 시작하고, `handoff` 또는 `/lit-handoff`는 확인한 결과와 다음 단계를 건네며, `/lit-plan`은 확인 기준이 있는 계획을 남기고, `/start-work <승인된 계획>`은 그 계획을 실행하며, `/review-work`는 변경과 근거를 검토하고, `/litresearch`는 출처를 추적할 수 있는 범위 있는 조사를 합니다. 기대하는 효과는 확인 결과를 남기고 다음 세션에서 이어갈 수 있는 프로젝트 기록입니다. 호스트 제약도 분명합니다. 실행과 모델 선택은 Grok Build가 담당하고 LitGrok은 `.grok` payload를 설치합니다. Hook은 신뢰한 Git root에서만 제공되며, 일반 폴더에서는 skill과 rule만 로드되고 hook은 없을 수 있습니다. 이 이미지는 실제 호스트 동작을 증명하지 않는 정적 경로 안내입니다.
|
|
54
55
|
|
|
55
|
-
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
56
|
+
<p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/litgrok-ignition-1600.webp" width="48%" alt="LitGrok 점화 장치" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.3/docs/assets/litgrok-continuity-1600.webp" width="48%" alt="LitGrok 연속 장치" /></p>
|
|
56
57
|
|
|
57
58
|
<p align="center"><a href="./docs/assets/readme/ignition-film.mp4"><img src="./docs/assets/readme/ignition-poster.png" width="720" alt="Ignition 모션 포스터" /></a></p>
|
|
58
59
|
|
|
@@ -75,7 +76,7 @@ LITGROK_PACK='/absolute/path/to/the-provided-package.tgz'
|
|
|
75
76
|
npm exec --yes --package "$LITGROK_PACK" -- litgrok install
|
|
76
77
|
```
|
|
77
78
|
|
|
78
|
-
기본 설치 위치는 `<project>/.grok/`입니다. 버전을 고정하려면 `--package @litfamily/litgrok@1.0.
|
|
79
|
+
기본 설치 위치는 `<project>/.grok/`입니다. 버전을 고정하려면 `--package @litfamily/litgrok@1.0.3`를 사용하세요. `--user`를 붙이면 `~/.grok/`에 설치합니다. [설치·업데이트 상세 안내](./docs/reference_ko-KR.md#설치).
|
|
79
80
|
|
|
80
81
|
Project hook은 Grok Build에서 신뢰한 Git 프로젝트 루트가 있어야 발견됩니다. 일반 폴더에서도 설치된 skill과 rule은 로드될 수 있지만 hook은 0개로 남을 수 있습니다. 새 disposable project라면 사용자가 직접 `git init`을 실행한 뒤 trust를 허용하세요. 기존 저장소라면 실제 root에서 Grok Build를 여세요. Installer는 `git init`을 실행하거나 trust를 바꾸지 않습니다. 관찰된 Grok Build 1.0.23에서는 `grok --trust inspect --json`이 동작했지만 `grok --help`에는 global `--trust`가 표시되지 않았습니다. 이는 이 버전에서 확인한 동작입니다.
|
|
81
82
|
|
|
@@ -142,7 +143,7 @@ Hook의 `.grok/litgrok/session-ledger/`는 이벤트가 발생한 순서를 남
|
|
|
142
143
|
| 변경 내용과 근거 검토 | [`/review-work`](./.grok/skills/review-work/SKILL.md) |
|
|
143
144
|
| 다음 세션을 위한 인수인계 | [`/lit-handoff`](./.grok/skills/lit-handoff/SKILL.md) |
|
|
144
145
|
|
|
145
|
-
전체 skill
|
|
146
|
+
전체 skill 33개는 `/skills`에서 확인하세요. 이전 이름을 한 릴리스 동안 별칭으로 유지하는 정책은 [이름 변경과 호환성](./docs/reference_ko-KR.md#skill-이름-변경과-호환성)을 보세요. 이전 slash 경로는 보장되지 않습니다.
|
|
146
147
|
|
|
147
148
|
## 안전과 제거
|
|
148
149
|
|
|
@@ -172,7 +173,6 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok uninstall --user
|
|
|
172
173
|
## 문서
|
|
173
174
|
|
|
174
175
|
- [상세 안내](./docs/reference_ko-KR.md): 설치, hook, 터미널 출력, 패키지 검증, 출처.
|
|
175
|
-
- [Skill learning loop](./docs/reference_ko-KR.md#skill-learning-loop): proposal 검토, 명시적 적용, rollback, macOS/Linux 지원. Windows의 learning-loop 명령은 지원하지 않습니다.
|
|
176
176
|
- [Project rule](./.grok/rules/00-litgrok.md)과 [skill 목록](./.grok/skills/).
|
|
177
177
|
- [변경 이력](./CHANGELOG.md)과 [라이선스](./LICENSE).
|
|
178
178
|
|
package/bin/litgrok.mjs
CHANGED
|
@@ -46,6 +46,7 @@ const PRE_MANIFEST_PAYLOAD_HASHES = Object.freeze({
|
|
|
46
46
|
'agents/litgrok-quality-reviewer.md': 'ed6f2687770f0f31c6821f0ad49d717362807f0bb5f4f27cf4d36be1e7dfd5a2',
|
|
47
47
|
'hooks/record-passive-event.mjs': '9f5bd1d6c8b8e6c0be4cc61cf31f0e26f4f8a41fceb826e88567f22efa2b0090',
|
|
48
48
|
'hooks/session-start.mjs': '5706ccce58340e78e435b9c1fd2224e101872ce1d0f51a9d187feb31b67c3b5d',
|
|
49
|
+
'hooks/stop.mjs': 'c796f02ac3dc99716d0c2f478bf93ec35cd8a9c725de18d12895957ee261b9c3',
|
|
49
50
|
'rules/00-litgrok.md': 'd46d1672e80250c8748458afa9b0fc1a46c2a318d31c4d58ab1ebc3f8f2eb804',
|
|
50
51
|
'skills/autoconference/SKILL.md': '025e9420ed9986b0466a8d660a4ed7f3e2d2243051ed3622be8ca87cbeba9458',
|
|
51
52
|
'skills/autoconference/references/_canonical-corpus/manifest.json': '4554ee4041b73577a844abc27a97db91e941b8412f1888209203251dc1fee500',
|
|
@@ -59,6 +60,7 @@ const PRE_MANIFEST_PAYLOAD_HASHES = Object.freeze({
|
|
|
59
60
|
'skills/lit-handoff/SKILL.md': '7152d6399fd778ab3d16e1abad2ec97e2f4be4350cd3993cdde038cc1211dd80',
|
|
60
61
|
'skills/lit-scientific-visualization/SKILL.md': 'ffc3b2ea49dd7e7c4c7d4568f289df294a3a30f953c11039f98aaf6f8fb983ee',
|
|
61
62
|
'skills/lit-scientific-visualization/scripts/verify-canonical-corpus.mjs': 'a1cfe0578195098dc4afc2d25f0d391f38aeaa57cd3970fa7dca51e20cbf929d',
|
|
63
|
+
'skills/litgoal/SKILL.md': 'e3fd76a8f4c91903ab85073b492f3981f76cb17644b840ba22d2a1c5e82178a9',
|
|
62
64
|
'skills/litgrok/SKILL.md': '6ea1fb66d5a1458e182cff5808ccc416487dbbad0341988bcda0f247645081e2',
|
|
63
65
|
'skills/litwork/SKILL.md': '771b7cead03c0d1d1e67af82e308ea0980b8ab18474026516798f559048beda7',
|
|
64
66
|
'skills/lsp-setup/SKILL.md': '313ffd924f00a1523905d2588e0812c8edcaec84b114d2d487506bd905e5376d',
|
|
@@ -66,8 +68,6 @@ const PRE_MANIFEST_PAYLOAD_HASHES = Object.freeze({
|
|
|
66
68
|
'skills/refactor/SKILL.md': '5fd2df1a36eae216f8af4db09e7e7d26231b167907ad19c49465153a1dcadde0',
|
|
67
69
|
'skills/review-work/SKILL.md': 'acfef3ff9c6e243cb9b88169a67e749e27a2e530af09aed07a2d66dd932c3b5d',
|
|
68
70
|
'skills/rules/SKILL.md': 'b880136962faeb3dea93cc42e30f5d3cc461a03fe71f7ff908d4b09170c38c5f',
|
|
69
|
-
'skills/skill-observer/scripts/skill-loop.mjs': '3f3f5265928c0d71175b0f23f71b836d1dc05e7efba407bfdc2d263c6aaed0ce',
|
|
70
|
-
'skills/skill-observer/scripts/validate-skills.mjs': 'cd71e88c45e57869114305f048257f3da7ec1dfa66f70d9529314defb5fa1a97',
|
|
71
71
|
'skills/start-work/SKILL.md': 'ddc7357f99c78cd3405c1cb0202f9b13871efbe59f365e9f39727c429791028b',
|
|
72
72
|
'skills/structural-search/SKILL.md': '3bbc13b5d0df58fbae07dd53e7ecbf13f311f12311cc3bd313803d63bd331ee0',
|
|
73
73
|
'skills/visual-qa/references/complete-contract.md': '9562a993b9fc75f8cda5e5f810ff534590f4ace36e696bf60119c0b27ba19cd5',
|
|
@@ -152,13 +152,19 @@ const PRE_MANIFEST_LEGACY_PAYLOAD_HASHES = Object.freeze({
|
|
|
152
152
|
'skills/programming/references/typescript/type-patterns.md': 'a21e27706f5d1e60be8f37d2d47949d0759158c999c4a08628f5f925b184d946',
|
|
153
153
|
'skills/programming/references/worked-cases.md': 'ccb6fb8011cda2391d73c4f85ffc3b8038486d77134b986b046d1f62a2f7a9d2',
|
|
154
154
|
'skills/remove-ai-slops/SKILL.md': 'db2f9e91dfd70a2077a091d1c422cba9f6d576af58868df4279d0e7542c29380',
|
|
155
|
+
'skills/skill-observer/SKILL.md': '1edf489673d958b3a7c60c5e1a036498510a02859dcf32e68a6d50b21f2fa344',
|
|
156
|
+
'skills/skill-observer/references/review-contract.md': 'f55dc8334f3b8d8498c84d57725fa03af8fbd689b2dd7cce25e49931629ee54f',
|
|
157
|
+
'skills/skill-observer/scripts/curator.mjs': '07f48d2160ba64584acd17ae9bd55efd6272546722576c288725b8850e3f0455',
|
|
158
|
+
'skills/skill-observer/scripts/review.mjs': '5b79fedae7f7c4d2b6d898717ae427bae1bd6d2c7f9f4bbc2f410f86468f7691',
|
|
159
|
+
'skills/skill-observer/scripts/skill-loop.mjs': '3f3f5265928c0d71175b0f23f71b836d1dc05e7efba407bfdc2d263c6aaed0ce',
|
|
160
|
+
'skills/skill-observer/scripts/validate-skills.mjs': 'cd71e88c45e57869114305f048257f3da7ec1dfa66f70d9529314defb5fa1a97',
|
|
155
161
|
'skills/teammode/SKILL.md': '23db7152e2ce65cb5f7c52455d6cbd122485bb0fdb13813a8a54b824e8e44f08',
|
|
156
162
|
'skills/teammode/references/explore-packet.md': 'c419c1c84783ddfae272e378c4f7e623ec4fbb437168d2d5cb8436baf4c14e30',
|
|
157
163
|
'skills/teammode/references/general-purpose-packet.md': '45ad9cf82157563ebb20af360bb0b09d7afd7aa0fe114a91816523475ebdc88c',
|
|
158
164
|
'skills/teammode/references/plan-packet.md': '68e292f9a6dc64f7e87a45417d5f92688aac9c2ffb7b519f9e2cab10b5ef4759',
|
|
159
165
|
'skills/text-naturalization/SKILL.md': 'aa1ff8f68ab0bf71cb47818b536c4a2934da65adb413ee43ec5839b540b2df8e',
|
|
160
166
|
});
|
|
161
|
-
const USAGE = 'Usage: litgrok [install|uninstall] [--user|--project] [--dry-run] [--no-color] [--yes]\n
|
|
167
|
+
const USAGE = 'Usage: litgrok [install|uninstall] [--user|--project] [--dry-run] [--no-color] [--yes]\n';
|
|
162
168
|
const BRAILLE_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
163
169
|
const SPINNER_INTERVAL_MS = 80;
|
|
164
170
|
const CLEAR_LINE = '\r\u001b[2K';
|
|
@@ -324,7 +330,7 @@ function receiptCard(options, root, colors, { status, written, current }) {
|
|
|
324
330
|
].join('\n');
|
|
325
331
|
}
|
|
326
332
|
|
|
327
|
-
function failureCard(options, root, colors, step, message) {
|
|
333
|
+
function failureCard(options, root, colors, step, message, { showHookTrust = true } = {}) {
|
|
328
334
|
return [
|
|
329
335
|
'',
|
|
330
336
|
` ${paint('╭─ INSTALL FAILED', '38;2;230;60;60', colors)}`,
|
|
@@ -332,9 +338,11 @@ function failureCard(options, root, colors, step, message) {
|
|
|
332
338
|
` │ Scope: ${scopeDescription(options, root)}`,
|
|
333
339
|
` │ Step: ${step}`,
|
|
334
340
|
` │ Reason: ${message}`,
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
341
|
+
...(showHookTrust ? [
|
|
342
|
+
' │ Hooks: project hooks require trust from a Git project root',
|
|
343
|
+
' │ Trust: use /hooks-trust or, on Grok Build 1.0.13, grok --trust inspect --json',
|
|
344
|
+
' │ Installer never runs git init or changes trust',
|
|
345
|
+
] : []),
|
|
338
346
|
' │ Next: resolve the issue and rerun the install',
|
|
339
347
|
` ${paint('╰─', '38;2;230;60;60', colors)}`,
|
|
340
348
|
'',
|
|
@@ -348,7 +356,9 @@ function errorText(error) {
|
|
|
348
356
|
function reportFailure(error, { stderr, stdout, options, root, colors, step }) {
|
|
349
357
|
const lines = Array.isArray(error?.stderrLines) ? error.stderrLines : [`litgrok: ${errorText(error)}`];
|
|
350
358
|
for (const line of lines) stderr.write(`${line}\n`);
|
|
351
|
-
stdout.write(failureCard(options, root, colors, error?.step ?? step, errorText(error)
|
|
359
|
+
stdout.write(failureCard(options, root, colors, error?.step ?? step, errorText(error), {
|
|
360
|
+
showHookTrust: error?.legacyOwnershipConflict !== true,
|
|
361
|
+
}));
|
|
352
362
|
}
|
|
353
363
|
|
|
354
364
|
function normalizedRelativePath(relativePath) {
|
|
@@ -489,6 +499,12 @@ function retiredPayload(root, files, manifest) {
|
|
|
489
499
|
const hashes = new Map([...previous].filter(([path]) => !currentPaths.has(path) && retiredPath(path)));
|
|
490
500
|
for (const path of agentPaths) if (!hashes.has(path)) hashes.set(path, undefined);
|
|
491
501
|
const directories = [];
|
|
502
|
+
const retiredSkillRoots = new Set(
|
|
503
|
+
[...hashes.keys()]
|
|
504
|
+
.filter((path) => path.startsWith('skills/'))
|
|
505
|
+
.map((path) => path.split('/').slice(0, 2).join('/'))
|
|
506
|
+
.filter((path) => !currentPaths.has(`${path}/SKILL.md`)),
|
|
507
|
+
);
|
|
492
508
|
|
|
493
509
|
function visit(path) {
|
|
494
510
|
const target = join(root, path);
|
|
@@ -511,7 +527,7 @@ function retiredPayload(root, files, manifest) {
|
|
|
511
527
|
}
|
|
512
528
|
directories.push(target);
|
|
513
529
|
}
|
|
514
|
-
for (const path of skillRoots) visit(path);
|
|
530
|
+
for (const path of new Set([...skillRoots, ...retiredSkillRoots])) visit(path);
|
|
515
531
|
for (const path of vendorRoots) visit(path);
|
|
516
532
|
const entries = [...hashes].map(([relativePath, expectedHash]) => ({ root, relativePath, expectedHash, target: join(root, relativePath) }));
|
|
517
533
|
return { entries, directories };
|
|
@@ -690,10 +706,6 @@ export async function run(args, context = {}) {
|
|
|
690
706
|
stdout.write(`${renderMark({ size: 'banner', productName: `grok v${packageVersion()}`, env, isTTY: stdout.isTTY, args }).join('\n')}\n\n${USAGE}`);
|
|
691
707
|
return 0;
|
|
692
708
|
}
|
|
693
|
-
if (args[0] === 'skill-loop') {
|
|
694
|
-
const { runSkillLoop } = await import('../.grok/skills/skill-observer/scripts/skill-loop.mjs');
|
|
695
|
-
return runSkillLoop(args.slice(1), { cwd, env, stderr, stdout });
|
|
696
|
-
}
|
|
697
709
|
const options = parseInstall(args);
|
|
698
710
|
if (!options) {
|
|
699
711
|
stderr.write(USAGE);
|
|
@@ -792,7 +804,13 @@ export async function run(args, context = {}) {
|
|
|
792
804
|
if (owned[index] === 'conflict') stderrLines.push(`Refusing to ${options.command === 'install' ? 'overwrite' : 'remove'} different existing file: ${files[index].target}`);
|
|
793
805
|
}
|
|
794
806
|
for (let index = 0; index < legacyEntries.length; index += 1) {
|
|
795
|
-
if (legacyStates[index]
|
|
807
|
+
if (legacyStates[index] !== 'conflict') continue;
|
|
808
|
+
const entry = legacyEntries[index];
|
|
809
|
+
const retiredSkill = retiredDirectories.some((directory) => (
|
|
810
|
+
directory.startsWith(`${join(root, 'skills')}${sep}`) && entry.target.startsWith(`${directory}${sep}`)
|
|
811
|
+
));
|
|
812
|
+
const retiredDirectory = retiredSkill ? 'the retired skill directory' : 'the retired payload directory';
|
|
813
|
+
stderrLines.push(`Refusing legacy conflict: ${entry.target} is not package-owned. Move it out of ${retiredDirectory} or remove it yourself, then rerun the install so the directory can be cleaned.`);
|
|
796
814
|
}
|
|
797
815
|
const legacyDetail = legacyEntries.length === 0
|
|
798
816
|
? ''
|
|
@@ -800,6 +818,7 @@ export async function run(args, context = {}) {
|
|
|
800
818
|
const error = new Error(`${counts.missing} missing · ${counts.current} already-current · ${counts.owned} owned · ${counts.conflicts} conflicts${legacyDetail}`);
|
|
801
819
|
error.step = 'OWNERSHIP';
|
|
802
820
|
error.stderrLines = stderrLines;
|
|
821
|
+
error.legacyOwnershipConflict = legacyCounts.conflicts > 0;
|
|
803
822
|
throw error;
|
|
804
823
|
}
|
|
805
824
|
const legacyDetail = legacyEntries.length === 0
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="local: 1.0.
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="local: 1.0.3"><title>local: 1.0.3</title><g shape-rendering="crispEdges"><rect width="49" height="20" fill="#080d14"/><rect x="49" width="97" height="20" fill="#ff6337"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text x="255" y="140" textLength="290" transform="scale(.1)">local</text><text x="965" y="140" textLength="870" transform="scale(.1)" fill="#080D14">1.0.3</text></g></svg>
|
package/docs/privacy.md
CHANGED
|
@@ -4,9 +4,7 @@ This describes package source behavior, not Grok or a model provider's privacy p
|
|
|
4
4
|
|
|
5
5
|
Passive hooks in `.grok/hooks/record-passive-event.mjs` read hook JSON and record session identity, cwd/workspace paths, event names and time, optional prompt IDs, and tool names with input digests. They inspect optional prompt text for planning activation without persisting raw prompt/tool input in those passive records. Hashed filenames do not anonymize the JSON: records retain the session ID. The hedge guard examines proposed paths and content; Stop may record a plan-gate reason.
|
|
6
6
|
|
|
7
|
-
Project `.grok/litgrok/`
|
|
8
|
-
|
|
9
|
-
An explicitly requested `skill-loop review` runs `grok export`, scrubs known secret patterns, bounds the transcript excerpt to 64 KiB, and passes it with eligible skill content and session/root references to `grok --single`. This source path is in `.grok/skills/skill-observer/scripts/review.mjs`. Grok may send that input to its configured provider. The prompt is also passed as a command-line argument and may be visible to local process inspection. Pattern-based scrubbing is not a guarantee that all sensitive information is removed. Inspect the source and data before requesting a review of sensitive work. Disabled review tools and web search do not imply offline model execution.
|
|
7
|
+
Project `.grok/litgrok/` contains package-owned session ledgers and may contain other generated data from installed or older package versions. Older skill-review state is no longer read, migrated, rewritten, or deleted by LitGrok; it remains inert for the owner to manage.
|
|
10
8
|
|
|
11
9
|
Optional helpers may invoke Grok or external scientific tools; their behavior and dependencies remain separate. No blanket claim that all package-guided work stays offline is made.
|
|
12
10
|
|
package/docs/reference.md
CHANGED
|
@@ -35,7 +35,7 @@ flowchart TD
|
|
|
35
35
|
|
|
36
36
|
## What it is
|
|
37
37
|
|
|
38
|
-
-
|
|
38
|
+
- 33 Grok-native skill documents at `.grok/skills/<name>/SKILL.md`.
|
|
39
39
|
- A project rule at `.grok/rules/00-litgrok.md`.
|
|
40
40
|
- A bounded `SessionStart` hook that prints the standard mark once per validated session and announces the installed payload.
|
|
41
41
|
- A `PreToolUse` hook that rejects hedge phrasing in pending reader-facing writes while skipping quoted state enums, JSON/YAML scalars, fenced code, and status tables. The host treats only an explicit deny with exit 2 as blocking; exit 0 allows, while timeouts, crashes, and malformed output fail-open and the write proceeds.
|
|
@@ -62,10 +62,10 @@ flowchart LR
|
|
|
62
62
|
HK --> PLAN --> LEDGER
|
|
63
63
|
HK --> HEDGE
|
|
64
64
|
RL --> LG
|
|
65
|
-
LG --> S["
|
|
65
|
+
LG --> S["33 skills · 11 agents"]
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
> **A narrow host boundary.** `plugin.json` exposes the package, hooks feed the plan gate and hedge guard, and rules provide project guidance while the session ledger records bounded state. Together these surfaces carry LitGrok’s
|
|
68
|
+
> **A narrow host boundary.** `plugin.json` exposes the package, hooks feed the plan gate and hedge guard, and rules provide project guidance while the session ledger records bounded state. Together these surfaces carry LitGrok’s 33 skills and 11 agents into Grok Build.
|
|
69
69
|
|
|
70
70
|
## Install
|
|
71
71
|
|
|
@@ -76,7 +76,7 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
|
|
|
76
76
|
Pin a version when you need a reproducible install:
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
npm exec --yes --package @litfamily/litgrok@1.0.
|
|
79
|
+
npm exec --yes --package @litfamily/litgrok@1.0.3 -- litgrok install
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
Preview without writing files:
|
|
@@ -201,8 +201,7 @@ ls ~/.grok/hooks/session-start.json ~/.grok/hooks/deliverable-hedge-guard.json
|
|
|
201
201
|
|
|
202
202
|
The session mark uses an atomic, empty `.ignited` marker beside the package-owned
|
|
203
203
|
session ledger under `.grok/litgrok/session-ledger/`. Replayed or concurrent
|
|
204
|
-
SessionStart events keep the presence
|
|
205
|
-
the mark. Invalid session identity or unsafe marker state fails before mark output.
|
|
204
|
+
SessionStart events keep the presence notice without repeating the mark. Invalid session identity or unsafe marker state fails before mark output.
|
|
206
205
|
Grok has no per-activation logo hook. The five existing skill activation contracts
|
|
207
206
|
ask the model to begin with exactly one `▲ LIT · <discipline>` probe line; `litwork`
|
|
208
207
|
declares the same advisory line with explicit once-per-request and quoted-content
|
|
@@ -210,26 +209,9 @@ exclusions. The SessionStart script writes its standard mark to stdout; this
|
|
|
210
209
|
prompt requirement is separate from that script output. No hook or parser
|
|
211
210
|
deterministically routes bare `lit`, and native host display remains unverified.
|
|
212
211
|
|
|
213
|
-
##
|
|
212
|
+
## Previous review state
|
|
214
213
|
|
|
215
|
-
LitGrok
|
|
216
|
-
|
|
217
|
-
The learning loop is currently supported on macOS and Linux. On Windows, `/skill-observer review` and every `skill-loop` command fail before subprocess launch, project learning-state access, or user-skill access with `WINDOWS_SKILL_LOOP_UNSUPPORTED`. The passive hooks and installer remain available; native Windows learning-loop support requires a dedicated ACL and process-job helper and is not claimed by this release.
|
|
218
|
-
|
|
219
|
-
Review is proposal-only. `autoApply` is always false, transcript text is inert data, and nothing changes until the user explicitly runs `apply <proposal-id>`. Pending proposals, content-addressed ledger entries, and rollback blobs stay in the installed project's `.grok/litgrok/` state. An approved skill is created or patched only under `$HOME/.grok/skills/<name>/` and carries `metadata: { litgrokAgentGenerated: "true" }`. Packaged skills, project payload targets, symlinks, and existing user skills without that marker are protected.
|
|
220
|
-
|
|
221
|
-
From an installed project, use the package CLI directly when you want a replayable foreground command:
|
|
222
|
-
|
|
223
|
-
```bash
|
|
224
|
-
npm exec --yes --package @litfamily/litgrok@1.0.2 -- litgrok skill-loop review <session-id>
|
|
225
|
-
npm exec --yes --package @litfamily/litgrok@1.0.2 -- litgrok skill-loop list
|
|
226
|
-
npm exec --yes --package @litfamily/litgrok@1.0.2 -- litgrok skill-loop apply <proposal-id>
|
|
227
|
-
npm exec --yes --package @litfamily/litgrok@1.0.2 -- litgrok skill-loop reject <proposal-id>
|
|
228
|
-
npm exec --yes --package @litfamily/litgrok@1.0.2 -- litgrok skill-loop rollback <ledger-id>
|
|
229
|
-
npm exec --yes --package @litfamily/litgrok@1.0.2 -- litgrok skill-loop curator
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
`apply` prints the ledger id needed for rollback. The deterministic curator is also user-invoked: by default it runs at most once every seven days, requires at least two idle hours, marks eligible unpinned agent-owned skills stale after 30 idle days, and archives them outside discovery after 90 idle days. It makes a full backup before a transition and never deletes a skill package; `--force` bypasses only the seven-day run interval for an explicit test or maintenance invocation.
|
|
214
|
+
LitGrok no longer schedules skill reviews or reads, migrates, rewrites, or deletes their old project or user state. Existing review files remain inert and are left for their owners to manage.
|
|
233
215
|
|
|
234
216
|
## Verify
|
|
235
217
|
|
package/docs/reference_ko-KR.md
CHANGED
|
@@ -35,7 +35,7 @@ flowchart TD
|
|
|
35
35
|
|
|
36
36
|
## 무엇을 제공하나요?
|
|
37
37
|
|
|
38
|
-
- `.grok/skills/<name>/SKILL.md`에 Grok-native skill 문서
|
|
38
|
+
- `.grok/skills/<name>/SKILL.md`에 Grok-native skill 문서 33개
|
|
39
39
|
- `.grok/rules/00-litgrok.md` project rule
|
|
40
40
|
- 설치된 payload를 짧게 알리는 `SessionStart` hook
|
|
41
41
|
- reader-facing write의 hedge 표현을 차단하되 quoted state enum, JSON/YAML scalar, fenced code, status table은 제외하는 `PreToolUse` hook. Host는 명시적인 deny와 exit 2만 차단으로 처리합니다. exit 0은 허용이고 timeout, crash, malformed output은 fail-open이므로 write가 진행됩니다.
|
|
@@ -62,10 +62,10 @@ flowchart LR
|
|
|
62
62
|
HK --> PLAN --> LEDGER
|
|
63
63
|
HK --> HEDGE
|
|
64
64
|
RL --> LG
|
|
65
|
-
LG --> S["
|
|
65
|
+
LG --> S["33 skills · 11 agents"]
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
> **Host 경계는 좁고 명확합니다.** `plugin.json`이 package를 노출하고, hook은 plan gate와 hedge guard로 연결되며, rule은 project guidance가 됩니다. session ledger에는 bounded state를 기록하고, 이 표면들이
|
|
68
|
+
> **Host 경계는 좁고 명확합니다.** `plugin.json`이 package를 노출하고, hook은 plan gate와 hedge guard로 연결되며, rule은 project guidance가 됩니다. session ledger에는 bounded state를 기록하고, 이 표면들이 33개 skill과 11개 agent를 Grok Build에서 사용할 수 있게 합니다.
|
|
69
69
|
|
|
70
70
|
## 설치
|
|
71
71
|
|
|
@@ -76,7 +76,7 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
|
|
|
76
76
|
재현 가능한 설치는 버전을 고정합니다.
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
npm exec --yes --package @litfamily/litgrok@1.0.
|
|
79
|
+
npm exec --yes --package @litfamily/litgrok@1.0.3 -- litgrok install
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
파일을 쓰지 않고 미리보기:
|
|
@@ -197,7 +197,7 @@ mark나 lockup 배열을 복사해 색을 입혀도 글리프와 이름을 보
|
|
|
197
197
|
|
|
198
198
|
SessionStart 스크립트는 검증된 세션마다 표준 mark를 stdout에 한 번 씁니다.
|
|
199
199
|
`.grok/litgrok/session-ledger/`의 빈 `.ignited` 파일을 원자적으로 생성해 중복·동시
|
|
200
|
-
이벤트에서도 mark를 반복하지 않습니다. 기존 payload
|
|
200
|
+
이벤트에서도 mark를 반복하지 않습니다. 기존 payload 안내는 유지합니다.
|
|
201
201
|
잘못된 세션 정보나 안전하지 않은 marker가 있으면 mark 출력 전에 실패합니다.
|
|
202
202
|
Grok에는 activation별 logo hook이 없습니다. 기존 다섯 skill의 응답 시작 규약은 모델이
|
|
203
203
|
`▲ LIT · <discipline>` 한 줄로 답변을 시작하도록 요청합니다. `litwork`도
|
|
@@ -206,26 +206,9 @@ advisory 계약을 선언하며, 그 스크립트 stdout과 구분됩니다. bar
|
|
|
206
206
|
결정적으로 라우팅하거나 passive hook 출력으로 활성화를 보장하지 않으며,
|
|
207
207
|
native host의 실제 표시는 검증하지 않았습니다.
|
|
208
208
|
|
|
209
|
-
##
|
|
209
|
+
## 이전 review state
|
|
210
210
|
|
|
211
|
-
LitGrok은
|
|
212
|
-
|
|
213
|
-
현재 learning loop는 macOS와 Linux에서 지원합니다. Windows에서는 `/skill-observer review`와 모든 `skill-loop` command가 subprocess, project learning state, user skill에 접근하기 전에 `WINDOWS_SKILL_LOOP_UNSUPPORTED`로 중단됩니다. Passive hook과 installer는 계속 사용할 수 있습니다. Native Windows learning loop에는 전용 ACL 및 process-job helper가 필요하며, 이번 release는 그 지원을 주장하지 않습니다.
|
|
214
|
-
|
|
215
|
-
Review는 proposal만 만듭니다. `autoApply`는 항상 false이고 transcript text는 inert data입니다. 사용자가 `apply <proposal-id>`를 명시적으로 실행하기 전에는 아무것도 바뀌지 않습니다. Pending proposal, content-addressed ledger, rollback blob은 설치된 project의 `.grok/litgrok/` state에 저장됩니다. 승인된 skill은 `$HOME/.grok/skills/<name>/` 아래에서만 생성하거나 수정하며 `metadata: { litgrokAgentGenerated: "true" }` marker를 가집니다. Packaged skill, project payload target, symlink, marker가 없는 기존 user skill은 보호됩니다.
|
|
216
|
-
|
|
217
|
-
설치된 project에서는 다음 package CLI를 foreground command로 실행할 수 있습니다.
|
|
218
|
-
|
|
219
|
-
```bash
|
|
220
|
-
npm exec --yes --package @litfamily/litgrok@1.0.2 -- litgrok skill-loop review <session-id>
|
|
221
|
-
npm exec --yes --package @litfamily/litgrok@1.0.2 -- litgrok skill-loop list
|
|
222
|
-
npm exec --yes --package @litfamily/litgrok@1.0.2 -- litgrok skill-loop apply <proposal-id>
|
|
223
|
-
npm exec --yes --package @litfamily/litgrok@1.0.2 -- litgrok skill-loop reject <proposal-id>
|
|
224
|
-
npm exec --yes --package @litfamily/litgrok@1.0.2 -- litgrok skill-loop rollback <ledger-id>
|
|
225
|
-
npm exec --yes --package @litfamily/litgrok@1.0.2 -- litgrok skill-loop curator
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
`apply`는 rollback에 필요한 ledger id를 출력합니다. Deterministic curator도 user-invoked입니다. 기본적으로 7일에 한 번만 실행되고, 마지막 activity 뒤 최소 2시간이 지나야 하며, pin되지 않은 agent-owned skill을 30일 idle 뒤 stale로 표시하고 90일 idle 뒤 discovery 밖으로 archive합니다. Transition 전에는 전체 backup을 만들고 skill package를 삭제하지 않습니다. `--force`는 명시적인 test 또는 maintenance 실행에서 7일 interval만 건너뜁니다.
|
|
211
|
+
LitGrok은 더 이상 skill review를 예약하지 않으며, 기존 project/user review state를 읽거나 이전·수정·삭제하지 않습니다. 남아 있는 review 파일은 inert 상태로 두며 소유자가 직접 관리합니다.
|
|
229
212
|
|
|
230
213
|
## 검증
|
|
231
214
|
|