@litfamily/litgrok 1.0.29 → 1.0.30
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/rules/00-litgrok.md +13 -0
- package/.grok/skills/lit-adhd/SKILL.md +10 -4
- package/.grok/skills/lit-adhd/scripts/lib/brief.mjs +4 -1
- package/.grok/skills/lit-adhd/scripts/lib/collect.mjs +14 -1
- package/.grok/skills/lit-adhd/scripts/lib/next-step.mjs +46 -5
- package/.grok/skills/lit-init/SKILL.md +4 -0
- package/.grok/skills/lit-typographic-motion/requirements-audio.txt +92 -89
- package/.grok/skills/readme-studio/templates/remotion/package-lock.json +3 -3
- package/.grok/skills/readme-studio/templates/remotion/package.json +3 -0
- package/.grok-plugin/plugin.json +1 -1
- package/CHANGELOG.md +7 -0
- package/README.md +8 -8
- package/README_ko-KR.md +8 -8
- package/bin/ground-rule.mjs +573 -0
- package/bin/litgrok.mjs +42 -5
- package/docs/assets/readme/badge-version.svg +1 -1
- package/docs/reference.md +2 -2
- package/docs/reference_ko-KR.md +2 -2
- package/package.json +1 -1
- package/plugin.json +1 -1
|
@@ -202,3 +202,16 @@ An old agent name, prefixed or not, selects the renamed agent and prints that ro
|
|
|
202
202
|
| `oracle-verifier` | `litgrok-verifier` | Note: `oracle-verifier` was renamed to `litgrok-verifier`; the old name is removed in the next minor. |
|
|
203
203
|
|
|
204
204
|
These rows are prompt guidance, not a router: old slash routes are not guaranteed; never create old skill directories or invent command metadata.
|
|
205
|
+
|
|
206
|
+
<!-- litfamily:litgrok:start v=1.0.30 pre=0a -->
|
|
207
|
+
## LitGrok ground rules
|
|
208
|
+
|
|
209
|
+
Grok Build reads this file on every turn. These lines are the working agreement. The sections above still choose the skill.
|
|
210
|
+
|
|
211
|
+
- A prompt that starts with `lit` is LitGrok's activation word.
|
|
212
|
+
- Plans live in `plans/`. The session handoff lives in `.handoff/HANDOFF.md`, or in `HANDOFF.md` outside a Git repo. Run notes live in `.grok/litgrok/`. Read the handoff and the active plan before resuming.
|
|
213
|
+
- Never push, publish, tag or bump a version unless the user explicitly says yes to that action.
|
|
214
|
+
- Call work done only after its tests pass and the changed surface was checked for real.
|
|
215
|
+
- In a new repo, an approved lit-init places the short project rule by running `litgrok ground project`.
|
|
216
|
+
- Turn these lines off with `litgrok ground off`. `litgrok ground on` brings them back.
|
|
217
|
+
<!-- litfamily:litgrok:end -->
|
|
@@ -101,7 +101,7 @@ The collector (`scripts/lib/collect.mjs`, served as `scripts/rewind.mjs`) reads,
|
|
|
101
101
|
|
|
102
102
|
Plans and handoffs are read first, so a run whose transcripts spend the budget still shows what is left. Session files are read head (64 KiB) and tail (256 KiB) only, under one 8 MiB budget for the whole run, through descriptors opened without following links. The store format is private and may move, so every field is read defensively and anything missing reads as unknown. Only the session's own project folder is ever listed: the store is never scanned blindly. Every string is redacted before it leaves the collector: credential shapes, `NAME=value` with a secret-like name, URI userinfo, any current environment value of eight or more characters, and the home directory (shown as `~`).
|
|
103
103
|
|
|
104
|
-
Grok Build keeps no litgoal ledger, workflow stack or start-work state file, so those
|
|
104
|
+
Grok Build keeps no litgoal ledger, workflow stack or start-work state file, so those lists stay empty unless a record already carries a frame or a boundary. A paused workflow or a start-work boundary also shows in the waiting reason when the transcript itself says so.
|
|
105
105
|
|
|
106
106
|
## Status taxonomy
|
|
107
107
|
|
|
@@ -116,10 +116,16 @@ Sessions waiting on the user come first, then active, idle, done and ended ones,
|
|
|
116
116
|
|
|
117
117
|
## The next step
|
|
118
118
|
|
|
119
|
-
`next` is chosen by code, in this priority order, and the brief offers exactly that one:
|
|
119
|
+
`next` is chosen by code, in this priority order, and the brief offers exactly that one. Other work is counted first: another live session, or a herdr agent that is working or blocked in another pane. While that work runs, this session is not told to `lit continue` or `go`, and its own card does not offer the resume command. An approval is still offered.
|
|
120
120
|
|
|
121
|
-
1.
|
|
122
|
-
2.
|
|
121
|
+
1. This session's paused frame, and no other work running: resume it. Say `lit continue`.
|
|
122
|
+
2. A start-work boundary waiting on the user: say `lit approve`. It is not automatic.
|
|
123
|
+
3. Other work still running: `none`. The card says to leave this session until it finishes.
|
|
124
|
+
4. This session's own running start-work: continue it. Say `go`.
|
|
125
|
+
5. Exactly one open plan in this worktree and nothing else running: start it. Say `go`. With several open, the one saved in the last 30 minutes wins.
|
|
126
|
+
6. Otherwise `none`: say so.
|
|
127
|
+
|
|
128
|
+
Grok Build keeps no workflow stack on disk. The collector leaves those lists empty unless a record supplies them. Herdr's agent list is read when `HERDR_ENV=1`.
|
|
123
129
|
|
|
124
130
|
`go` (also `lit go`, `ㄱㄱ`, `고`, `진행`, as the whole prompt) continues the step the brief offered: re-collect first, then continue the step the fresh brief offers, which the live records derive the same way again. The collector writes no session record, so there is nothing to go stale. A start-work boundary approval still needs the typed words (`lit approve` / `lit deny`) and is never automatic. Anything else typed after the brief is an ordinary prompt.
|
|
125
131
|
|
|
@@ -46,6 +46,7 @@ const WORDS = {
|
|
|
46
46
|
self: "this session",
|
|
47
47
|
answer: (q) => `answer its question: “${q}”`,
|
|
48
48
|
resume: (skill, stage, self) => `resume ${skill} at ${stage} (\`lit continue\`${self ? "" : " there"})`,
|
|
49
|
+
lanesAtWork: (n) => `${n} other ${n === 1 ? "piece of work is" : "pieces of work are"} still running. Leave this session until ${n === 1 ? "it finishes" : "they finish"}.`,
|
|
49
50
|
approve: "approve or deny the start-work boundary (`lit approve` / `lit deny`)",
|
|
50
51
|
planNow: (plan, item) => `${plan} → ${item}`,
|
|
51
52
|
nothing: "nothing pending on record",
|
|
@@ -115,6 +116,7 @@ const WORDS = {
|
|
|
115
116
|
self: "이 세션",
|
|
116
117
|
answer: (q) => `질문에 답하기: “${q}”`,
|
|
117
118
|
resume: (skill, stage, self) => `${skill}(${stage}) 이어가기 (${self ? "" : "그 세션에서 "}\`lit continue\`)`,
|
|
119
|
+
lanesAtWork: (n) => `다른 작업 ${n}건이 아직 진행 중입니다. 끝날 때까지 이 세션은 이어가지 않습니다.`,
|
|
118
120
|
approve: "start-work 경계 승인 또는 거절 (`lit approve` / `lit deny`)",
|
|
119
121
|
planNow: (plan, item) => `${plan} → ${item}`,
|
|
120
122
|
nothing: "기록된 남은 일 없음",
|
|
@@ -218,6 +220,7 @@ const actionOf = (session, escape = plain) => {
|
|
|
218
220
|
const nextOf = (session, data, w) => {
|
|
219
221
|
const frames = (data.workflows ?? []).filter((frame) => frame.id8 === session.id8);
|
|
220
222
|
const paused = frames.find((frame) => frame.status === "paused");
|
|
223
|
+
if (paused && session.self && data.next?.wait?.lanes) return w.lanesAtWork(data.next.wait.lanes);
|
|
221
224
|
if (paused) return w.resume(paused.skill, paused.stage, session.self);
|
|
222
225
|
if (session.waitingReason === "start-work boundary") return w.approve;
|
|
223
226
|
if (session.status === "waiting-on-user") {
|
|
@@ -287,7 +290,7 @@ const suggestion = (data, w) => {
|
|
|
287
290
|
if (waiting) return w.suggest.answer({ id8: waiting.id8, where: where(waiting), question: lastQuestion(waiting.result, bare) });
|
|
288
291
|
const paused = (data.workflows ?? []).find((frame) => frame.status === "paused");
|
|
289
292
|
const owner = paused ? sessions.find((session) => session.id8 === paused.id8) : null;
|
|
290
|
-
if (paused) return w.suggest.resume({ id8: paused.id8, skill: paused.skill, stage: paused.stage, where: owner ? where(owner) : basename(String(paused.worktree)) });
|
|
293
|
+
if (paused && !data.next?.wait?.lanes) return w.suggest.resume({ id8: paused.id8, skill: paused.skill, stage: paused.stage, where: owner ? where(owner) : basename(String(paused.worktree)) });
|
|
291
294
|
// A plan in the worktree of a live session comes first, then this worktree's, then the newest.
|
|
292
295
|
const liveTrees = new Set(sessions.filter((session) => session.status !== "ended").map((session) => session.worktree));
|
|
293
296
|
const open = (data.roadmap?.plans ?? []).filter((item) => item.current && !item.complete);
|
|
@@ -189,11 +189,24 @@ const commitsOf = (root, sinceMs, now, exec, redact) => {
|
|
|
189
189
|
}
|
|
190
190
|
};
|
|
191
191
|
|
|
192
|
+
const herdrAgent = (agent, env, redact) => ({
|
|
193
|
+
status: typeof agent?.agent_status === "string" ? agent.agent_status : "unknown",
|
|
194
|
+
pane: typeof agent?.pane_id === "string" ? clipToWidth(redact(agent.pane_id), 40) : "unknown",
|
|
195
|
+
id8: typeof agent?.agent_session?.value === "string" ? agent.agent_session.value.slice(0, 8) : null,
|
|
196
|
+
self: Boolean(env.HERDR_PANE_ID) && agent?.pane_id === env.HERDR_PANE_ID,
|
|
197
|
+
});
|
|
198
|
+
|
|
192
199
|
const herdrOf = (env, exec, redact) => {
|
|
193
200
|
if (env.HERDR_ENV !== "1") return { status: "unknown", agents: [] };
|
|
194
201
|
try {
|
|
195
202
|
const out = exec("herdr", ["agent", "list"], { timeout: HERDR_TIMEOUT_MS });
|
|
196
|
-
|
|
203
|
+
try {
|
|
204
|
+
const listed = JSON.parse(out)?.result?.agents;
|
|
205
|
+
if (!Array.isArray(listed)) throw new Error("not a list");
|
|
206
|
+
return { status: "ok", agents: listed.slice(0, 20).map((agent) => herdrAgent(agent, env, redact)) };
|
|
207
|
+
} catch {
|
|
208
|
+
return { status: "ok", agents: out.split("\n").filter((line) => line.trim()).slice(0, 20).map((line) => clipToWidth(redact(line.trim()), 120)) };
|
|
209
|
+
}
|
|
197
210
|
} catch {
|
|
198
211
|
return { status: "unknown", agents: [] };
|
|
199
212
|
}
|
|
@@ -1,16 +1,57 @@
|
|
|
1
1
|
// The one next step a lit-adhd brief offers, chosen by a fixed priority over the collected
|
|
2
|
-
// records
|
|
3
|
-
//
|
|
2
|
+
// records. Other work is counted first. While it is still running, this session is not told to
|
|
3
|
+
// resume itself or to continue on `go`. An approval is still offered: that decision is the user's.
|
|
4
|
+
// 1. this session's paused frame, and no other work running -> resume (`lit continue`)
|
|
5
|
+
// 2. a start-work boundary waiting on the user -> approve (`lit approve`, not automatic)
|
|
6
|
+
// 3. other work still running -> none, with `wait`
|
|
7
|
+
// 4. this session's own running start-work -> continue (`go`)
|
|
8
|
+
// 5. one open plan and nothing else running -> start-plan (`go`)
|
|
4
9
|
// (with several open, the one plan saved in the last 30 minutes wins)
|
|
5
|
-
//
|
|
6
|
-
// A paused start-work boundary is shown as the session's waiting reason, never as an automatic
|
|
7
|
-
// step: Grok Build has no hook that can consume a typed approval, so the model reads the box.
|
|
10
|
+
// 6. otherwise -> none
|
|
8
11
|
// `go` re-collects the brief and continues the offered step: no record is written, because the
|
|
9
12
|
// model has no documented way to learn its session id and no hook could hand a record back to it.
|
|
10
13
|
|
|
11
14
|
const JUST_SAVED_MS = 30 * 60_000;
|
|
12
15
|
|
|
16
|
+
// Another live session, or a herdr agent that is working or blocked and is not this pane.
|
|
17
|
+
const busyLanes = (data) => {
|
|
18
|
+
const lanes = new Set((data.sessions ?? [])
|
|
19
|
+
.filter((session) => !session.self && (session.status === "active" || session.status === "waiting-on-user"))
|
|
20
|
+
.map((session) => session.id8));
|
|
21
|
+
for (const [index, agent] of (data.herdr?.agents ?? []).entries()) {
|
|
22
|
+
if (!agent || typeof agent === "string" || agent.self) continue;
|
|
23
|
+
if (agent.status === "working" || agent.status === "blocked") lanes.add(agent.id8 || agent.pane || `herdr-${index}`);
|
|
24
|
+
}
|
|
25
|
+
return lanes.size;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const selfId8 = (data, sessionId) => {
|
|
29
|
+
const self = (data.sessions ?? []).find((session) => session.self);
|
|
30
|
+
if (self?.id8) return self.id8;
|
|
31
|
+
return typeof sessionId === "string" ? sessionId.slice(0, 8) : null;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const isOwn = (item, sessionId, id8) => Boolean(item) && (item.sessionId === sessionId || item.id8 === id8 || item.id8 === sessionId);
|
|
35
|
+
|
|
13
36
|
export const chooseNextStep = (data, sessionId) => {
|
|
37
|
+
const lanes = busyLanes(data);
|
|
38
|
+
const id8 = selfId8(data, sessionId);
|
|
39
|
+
const ownPaused = (data.workflows ?? []).find((frame) => frame.status === "paused" && isOwn(frame, sessionId, id8));
|
|
40
|
+
if (sessionId && ownPaused && !lanes) {
|
|
41
|
+
return { kind: "resume-frame", target: { skill: ownPaused.skill, stage: ownPaused.stage }, say: "lit continue" };
|
|
42
|
+
}
|
|
43
|
+
const approval = (data.startWork ?? []).find((work) => work.pendingBoundary);
|
|
44
|
+
if (approval) {
|
|
45
|
+
return {
|
|
46
|
+
kind: "approve-boundary",
|
|
47
|
+
target: { plan: approval.plan, ...approval.pendingBoundary },
|
|
48
|
+
say: "lit approve",
|
|
49
|
+
automatic: false,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (lanes) return { kind: "none", target: null, wait: { lanes } };
|
|
53
|
+
const ownRun = (data.startWork ?? []).find((work) => work.status === "active" && sessionId && isOwn(work, sessionId, id8));
|
|
54
|
+
if (ownRun) return { kind: "continue-work", target: { plan: ownRun.plan }, say: "go" };
|
|
14
55
|
const open = data.roadmap.plans.filter((plan) => plan.local && plan.progress.total !== null && plan.progress.done < plan.progress.total);
|
|
15
56
|
const running = (data.workflows ?? []).some((frame) => frame.status === "active" || frame.status === "paused")
|
|
16
57
|
|| data.sessions.some((session) => session.status === "active" || session.status === "waiting-on-user");
|
|
@@ -177,6 +177,10 @@ The internal analysis should contain:
|
|
|
177
177
|
Keep proposed wording separate from observed current wording.
|
|
178
178
|
Label every new policy choice that needs user approval.
|
|
179
179
|
|
|
180
|
+
## Project ground rules
|
|
181
|
+
|
|
182
|
+
When the user approves the exact files to create, and this agreement is not already in the repo, place it by running `litgrok ground project` with the repository root as the working directory. The command writes one project rule and no other file. That rule keeps plans in the plans directory, the handoff beside the repo or in a handoff directory, and run notes in LitGrok's state directory, out of commits. A push, publish, tag or version bump waits for an explicit yes. It refuses a symlink, a path that is not a directory, or an existing file it does not own. Do not write that rule by hand, and do not run the command before the user approves that target. If the command refuses, stop and report the path it printed.
|
|
183
|
+
|
|
180
184
|
## Mutation gate
|
|
181
185
|
|
|
182
186
|
Do not create an instruction file merely because none exists.
|
|
@@ -392,95 +392,98 @@ llvmlite==0.49.0 \
|
|
|
392
392
|
--hash=sha256:ee81e96c15a6f870918f1eb60c913551c16aa23defb4f5f1acfa660d6a0aaac2 \
|
|
393
393
|
--hash=sha256:f3f2ff0aeb17d34fcce9f79b99baac441cfd3efa41b83e233ca4530a72381f72
|
|
394
394
|
# via numba
|
|
395
|
-
msgpack==1.2.
|
|
396
|
-
--hash=sha256:
|
|
397
|
-
--hash=sha256:
|
|
398
|
-
--hash=sha256:
|
|
399
|
-
--hash=sha256:
|
|
400
|
-
--hash=sha256:
|
|
401
|
-
--hash=sha256:
|
|
402
|
-
--hash=sha256:
|
|
403
|
-
--hash=sha256:
|
|
404
|
-
--hash=sha256:
|
|
405
|
-
--hash=sha256:
|
|
406
|
-
--hash=sha256:
|
|
407
|
-
--hash=sha256:
|
|
408
|
-
--hash=sha256:
|
|
409
|
-
--hash=sha256:
|
|
410
|
-
--hash=sha256:
|
|
411
|
-
--hash=sha256:
|
|
412
|
-
--hash=sha256:
|
|
413
|
-
--hash=sha256:
|
|
414
|
-
--hash=sha256:
|
|
415
|
-
--hash=sha256:
|
|
416
|
-
--hash=sha256:
|
|
417
|
-
--hash=sha256:
|
|
418
|
-
--hash=sha256:
|
|
419
|
-
--hash=sha256:
|
|
420
|
-
--hash=sha256:
|
|
421
|
-
--hash=sha256:
|
|
422
|
-
--hash=sha256:
|
|
423
|
-
--hash=sha256:
|
|
424
|
-
--hash=sha256:
|
|
425
|
-
--hash=sha256:
|
|
426
|
-
--hash=sha256:
|
|
427
|
-
--hash=sha256:
|
|
428
|
-
--hash=sha256:
|
|
429
|
-
--hash=sha256:
|
|
430
|
-
--hash=sha256:
|
|
431
|
-
--hash=sha256:
|
|
432
|
-
--hash=sha256:
|
|
433
|
-
--hash=sha256:
|
|
434
|
-
--hash=sha256:
|
|
435
|
-
--hash=sha256:
|
|
436
|
-
--hash=sha256:
|
|
437
|
-
--hash=sha256:
|
|
438
|
-
--hash=sha256:
|
|
439
|
-
--hash=sha256:
|
|
440
|
-
--hash=sha256:
|
|
441
|
-
--hash=sha256:
|
|
442
|
-
--hash=sha256:
|
|
443
|
-
--hash=sha256:
|
|
444
|
-
--hash=sha256:
|
|
445
|
-
--hash=sha256:
|
|
446
|
-
--hash=sha256:
|
|
447
|
-
--hash=sha256:
|
|
448
|
-
--hash=sha256:
|
|
449
|
-
--hash=sha256:
|
|
450
|
-
--hash=sha256:
|
|
451
|
-
--hash=sha256:
|
|
452
|
-
--hash=sha256:
|
|
453
|
-
--hash=sha256:
|
|
454
|
-
--hash=sha256:
|
|
455
|
-
--hash=sha256:
|
|
456
|
-
--hash=sha256:
|
|
457
|
-
--hash=sha256:
|
|
458
|
-
--hash=sha256:
|
|
459
|
-
--hash=sha256:
|
|
460
|
-
--hash=sha256:
|
|
461
|
-
--hash=sha256:
|
|
462
|
-
--hash=sha256:
|
|
463
|
-
--hash=sha256:
|
|
464
|
-
--hash=sha256:
|
|
465
|
-
--hash=sha256:
|
|
466
|
-
--hash=sha256:
|
|
467
|
-
--hash=sha256:
|
|
468
|
-
--hash=sha256:
|
|
469
|
-
--hash=sha256:
|
|
470
|
-
--hash=sha256:
|
|
471
|
-
--hash=sha256:
|
|
472
|
-
--hash=sha256:
|
|
473
|
-
--hash=sha256:
|
|
474
|
-
--hash=sha256:
|
|
475
|
-
--hash=sha256:
|
|
476
|
-
--hash=sha256:
|
|
477
|
-
--hash=sha256:
|
|
478
|
-
--hash=sha256:
|
|
479
|
-
--hash=sha256:
|
|
480
|
-
--hash=sha256:
|
|
481
|
-
--hash=sha256:
|
|
482
|
-
--hash=sha256:
|
|
483
|
-
--hash=sha256:
|
|
395
|
+
msgpack==1.2.3 \
|
|
396
|
+
--hash=sha256:07c9733089d1b176c3dd2f7fa268452f9d5d784d076473499d754a58e8d1fbbb \
|
|
397
|
+
--hash=sha256:0955b9000725573d1457c1676944b370dd9643c8d18f25bda5ac72913f850949 \
|
|
398
|
+
--hash=sha256:0c91762c48cd686dc9cf2b142c0bc544083952de32f5853d6624c956e54b85e5 \
|
|
399
|
+
--hash=sha256:0ed5823c4efc20fe87d3530665f40ec18a002be003114814c21235cc8d256207 \
|
|
400
|
+
--hash=sha256:13221a6c81ebb8e43ea63a7251c35d54e4175cea37ebf3a62e911bdf42562a3c \
|
|
401
|
+
--hash=sha256:186e6c602b8a9968b8e864c67d622a69279f7d1e55ae25f40e3bff7e815b2b62 \
|
|
402
|
+
--hash=sha256:18a6ed513023001b28dcd3ba54966f6bb90a38274ba8d2640464bcab3a1b81d4 \
|
|
403
|
+
--hash=sha256:1d6bcec3dbbdb89ca385d3a73e63ceae7b841fa0d7ca7c676f1a7bfe7fb2cdb8 \
|
|
404
|
+
--hash=sha256:1f4ae8bd4ad9ba085fde95e95d055a896d19210238a4199a771a3cf36dceed49 \
|
|
405
|
+
--hash=sha256:1f585407f740a9eac04a3bb82c61d68a0ea78f90e29e670bfb086b9ce3a518dd \
|
|
406
|
+
--hash=sha256:21bfa4d2aa0b04c1806ef778a1199e9e53ea2441bcbf284420a32083896320b8 \
|
|
407
|
+
--hash=sha256:2487453ca1b6104442c6442f9a1a8fee1fe8f428a70d99d4cba799108b304150 \
|
|
408
|
+
--hash=sha256:2574ef81c1c8c38b10e330f3f9406fd09198a776b002030fafcf8e7647e9e06e \
|
|
409
|
+
--hash=sha256:30e1522e4173230dca4d9ad896f038f73c0da6c1edd42f4dbad88ac583cf5d46 \
|
|
410
|
+
--hash=sha256:32edb81a2b5eb7cd7c9d941b2bfbbb082fd2cd09e0e725930316af6b708db186 \
|
|
411
|
+
--hash=sha256:3372475211a9ce1a23acefe512cb3e121d18c95dc74ed56cb1819ef40836ebf4 \
|
|
412
|
+
--hash=sha256:382b219de3d436de3baba0f4b0c6d4336e8f5858d0eb047918b13b69a71c6c55 \
|
|
413
|
+
--hash=sha256:382bc88fe90f29f5ac8a0b65c7046ff255356f2f2f3186c30e370215736fa1dc \
|
|
414
|
+
--hash=sha256:39b6986c19e1f2dfa549d185dba6ccf1de2e4c0ba10d8cfc0048935b1c5f9109 \
|
|
415
|
+
--hash=sha256:3a31905206722103a84c1f72633fe30692cff6732c9d262e09a27dbc468797c8 \
|
|
416
|
+
--hash=sha256:3d4c807ed050fe3ddbea5ba7e9f63d7136871ce42861be1f50ff739f0e91047a \
|
|
417
|
+
--hash=sha256:3ec409b0d6aa8e9eec6eaf881b893caa215dbe68c5319ca96e8a271d81bb111d \
|
|
418
|
+
--hash=sha256:471e12a6a42498a31490c206e0069e343b6a7c35db540be73a879eb06f5be047 \
|
|
419
|
+
--hash=sha256:4c0780095871ecc49a58b2ff6b1b43b25214704da67646557ca287a3f49fb2dd \
|
|
420
|
+
--hash=sha256:59612b4ed48a04cf024584218e813562f3b30a3bafa5f55abe300b15da314751 \
|
|
421
|
+
--hash=sha256:5bd5f91ea75c45cafcc5433ba8fae59b708b736ec178d2441c40c499e9e079db \
|
|
422
|
+
--hash=sha256:5bf390259cb25a6a1cd197c65810999b811f64cd38683251538bcc5a1e41f7d3 \
|
|
423
|
+
--hash=sha256:5c1efdd9181cb1b719ee46865f368a927f1c0c65d577798340b1194545b7515a \
|
|
424
|
+
--hash=sha256:5e0d7950ca3c1bbae291d0552dd3bb2792fc680629c4c0d44e47e5bab969f3ca \
|
|
425
|
+
--hash=sha256:5f304123b90e8b2e49867981b7f6061612c39f50cca51ee88de007c084cf68d3 \
|
|
426
|
+
--hash=sha256:62cc1a4ef0e553bac32c8342e1f04834aca7de276b92744eb7307db77759b890 \
|
|
427
|
+
--hash=sha256:63bb7448a1e9111319ae2430c09a5596140c160422830d6271bc75730ff2ff9a \
|
|
428
|
+
--hash=sha256:6576f348ed6cc4f31db6fd915a8e94245f042f50eae08d48732425e70638ea37 \
|
|
429
|
+
--hash=sha256:666ef5601ab0e6e345e47febc96aa81143cc932201543480cbb9499164f05ffb \
|
|
430
|
+
--hash=sha256:6707d2fa2aa1bb5424ea0b05f44ffc989b15ab41a73ff5855bff4944fec7c8ac \
|
|
431
|
+
--hash=sha256:69ad12cedb674c73527bed869cddb42b742cac79a207a614202a4abaa24ea173 \
|
|
432
|
+
--hash=sha256:6a834097144aabe948b8ca9020a833e8026f7d0abbd0ec54bc7e50f45a8ce012 \
|
|
433
|
+
--hash=sha256:6df430419f2338cb71e4a34d6e64f83c88ccd321f91f40ba4513400b36d864ec \
|
|
434
|
+
--hash=sha256:700bc0fc9e968a292b9137ee70e7a012f7e115bf0107ce45e3a88202788dfc1e \
|
|
435
|
+
--hash=sha256:7013534a7163aa4f213c4d9864f1a8a7555daac6fcd48f699a198e29b436bfab \
|
|
436
|
+
--hash=sha256:7995a7c6a62a1d6e7df211b4a16de513bd99fd053525050a319f80f44fb8015e \
|
|
437
|
+
--hash=sha256:79dfa38faf92f804aa61beec140d70b18418e1dde1778dbb77a87a4cce85aa8a \
|
|
438
|
+
--hash=sha256:7a003b02c6ee2eea6dfe0bb08818631e3597e69f0131f2a8250488a1cc553290 \
|
|
439
|
+
--hash=sha256:7c047250096f9fc19dba26e3d1639b5e7a84114003605c94def667149a70ced1 \
|
|
440
|
+
--hash=sha256:84a6616d396ec1bc18a1e83e67c96a393ec35dfe5e17434a5be7b9aa0fe988ab \
|
|
441
|
+
--hash=sha256:87cf2ef05ff2f2493ba29fcdaef27e960ca64dacfd13460ae29e6f92e0ed05bb \
|
|
442
|
+
--hash=sha256:89c930aece4e972b208ba589c8410b4167b05e411a5ea2cb25fd96f8bc47ee43 \
|
|
443
|
+
--hash=sha256:8ca67f77938ea6a3663aa9bd22b3e031f6da84d665be850abab910ee90728dfd \
|
|
444
|
+
--hash=sha256:8e51eca14fbb65c4e0a5a9657346962bd3dca78c08e04e3d4dee70ef48687d30 \
|
|
445
|
+
--hash=sha256:8ec7a1d49ca6c2569d722ab5ec86e90089b0713900aa31905b47b4c4d9e78ce0 \
|
|
446
|
+
--hash=sha256:902f3490db0e07a7d40b48536a85c9b28fbf1397e7e1658a45a55f958e303620 \
|
|
447
|
+
--hash=sha256:905a189853d6bdb204c7ae5f4ab77fb857448abfff574d3d93c62e2815b24b4f \
|
|
448
|
+
--hash=sha256:9276ba88891338f2617044429dfd080ae008c9868a25f6f1a7d004a35dc9ac0a \
|
|
449
|
+
--hash=sha256:9324c54995641c3d1f92a9d55093c8cde0ffa2fbc87a467a688ef60428393220 \
|
|
450
|
+
--hash=sha256:968583e956d0427878050b371308c5f8647088732ef3e66a117dbe1192ec91e0 \
|
|
451
|
+
--hash=sha256:9d7e9cbb0998bbfd363fd9a09c330520d5e9cb323c05b5a1a05865d23ccf2226 \
|
|
452
|
+
--hash=sha256:a393e428f6ffb0dcb73308c1fff5593041c16ff42da66e5bac8a83a6107a54b0 \
|
|
453
|
+
--hash=sha256:a6b63917d60d6df451f328bd6afba8565e33c4afe1f62ec4ad758b78731c827b \
|
|
454
|
+
--hash=sha256:b1631e12fe572e181cd77e831f69335d6cd5278eac22e3db3f33cf264ac2ac18 \
|
|
455
|
+
--hash=sha256:b774ff994d844e541439ac5d2d49a14def4104830c3465e9394c153f86200ffb \
|
|
456
|
+
--hash=sha256:b949cc25e4a09252cbcc54e66e507de914d0e94a3a7039bd54c299bf7037c098 \
|
|
457
|
+
--hash=sha256:bb89b5dc30469c84bbf8684826eb851d82412ca95690e111b9ac5e8fb343961a \
|
|
458
|
+
--hash=sha256:bfe7d5b62cbe7aa664f0b3e2c49077f10fcdd06183d3014f8271ff3c5edbfbf9 \
|
|
459
|
+
--hash=sha256:c309a7abae1d14ba29a8bd0ddbd704a5e469d8e9bd9c3dee0e4ff53d7ae01d56 \
|
|
460
|
+
--hash=sha256:c77e27790ad72989db783d5303825fba0b71550f00a490efba35cde7dc4b719f \
|
|
461
|
+
--hash=sha256:c942c21a93f36b3a69e828c8945bb72c94dc2ffe488a2086950c812f3edf046c \
|
|
462
|
+
--hash=sha256:ccea05b5542f6d283fef3f0a8e93a7f0be90af0ddeeef84c25c0216ba76dcae1 \
|
|
463
|
+
--hash=sha256:cd5a9f9f86a52c24713679aa2631956835f3842512964ff93f736ff76f1f530d \
|
|
464
|
+
--hash=sha256:d0238cd05dec9ffbe0de1071df685ba63e30a36ac155285b1a094e727c38cbe9 \
|
|
465
|
+
--hash=sha256:d1c1e8989a855b7f1f2a64ec4a80b23a631822903952770813857b2e4f460471 \
|
|
466
|
+
--hash=sha256:d2f9c4f85e47a44d26d5baf3b041eef23436e224d44eed273f01bd8a12048d9f \
|
|
467
|
+
--hash=sha256:d31864ba3933a589b6a00249f89c0eb422197f49128fc10da550e57e9cb0f377 \
|
|
468
|
+
--hash=sha256:d8ef3a66e4b52d2d7fdd90df2984670124b2ff7546d76bb25dcf68ef47f7df58 \
|
|
469
|
+
--hash=sha256:db84203b13aecc222f465061397fdd5b53b7ae73d2c95ffc1c8dc5be0153a709 \
|
|
470
|
+
--hash=sha256:db9fb67a3a2e75247bae569d34ebb5ff61c0448a4f0d6dbf991dae68af39b007 \
|
|
471
|
+
--hash=sha256:e0bd394e999949c814f7912284243298de1b5a17b6a3dcb6cc8a79b156ffc4fa \
|
|
472
|
+
--hash=sha256:e15f70588f4db8cd10df0930145b186de70feb9db51710cd378b1399009655bd \
|
|
473
|
+
--hash=sha256:e54394b7dbe2e12ab032d9d21feef7bb61a90a150a2623633ba3781ba69dcb1f \
|
|
474
|
+
--hash=sha256:eaf7e82249837e3aa97297b34a0bb9ff562027381631e057cea6e1367f10b438 \
|
|
475
|
+
--hash=sha256:ec0030361cc861ac699b2ef1c695b741fa145c88f8667fa3d7e3f73deeb648a3 \
|
|
476
|
+
--hash=sha256:ec90a9ae3e1169fa1171147340f0e97d941aa19fcd3b34e8339a55933ed042af \
|
|
477
|
+
--hash=sha256:ed899d73a22f286a72bd9528d63f2ab3030dbad8bf1527fc249319a50d61fb9d \
|
|
478
|
+
--hash=sha256:ede33b2892ceb976283e009ad12fa1834cfdf1f9c43ee9c97849fc588d00a618 \
|
|
479
|
+
--hash=sha256:f24a43b3560e20f825b807fe1e874bd73d53abaf8bbdcf258a6eb152cddbc1f5 \
|
|
480
|
+
--hash=sha256:f3d7b3d0018746b5997dd6b14a1870b07cc4c327d9101145d94a1fc264a51a06 \
|
|
481
|
+
--hash=sha256:f41ca154b7737b11893cdce3c78c61d703398a1cd54d4297bdad908392338a8e \
|
|
482
|
+
--hash=sha256:f42f146752eedb6765f07dcc04d72dab0a25779ec8d4a88c0085263ce114f22c \
|
|
483
|
+
--hash=sha256:f56fba61b2516be7917cb00151f0d060b5b21184e3499bb57f0f7d9259bea124 \
|
|
484
|
+
--hash=sha256:f9ddd28d3e9bbc602a9dced1591882c7fb9ab776eef8837da2c326fde19e2853 \
|
|
485
|
+
--hash=sha256:fafc3b8898b432b841d30a61082c599fa7f4d06885f9dc58ad72259e12059fa6 \
|
|
486
|
+
--hash=sha256:fcc6800daac4922960f6eeb7a0dda3dd4105e0bf7bce0e83ebc465a78cb7bdba
|
|
484
487
|
# via librosa
|
|
485
488
|
narwhals==2.26.0 \
|
|
486
489
|
--hash=sha256:29326d74f107c347fd1009bd58e38d9f7c7c5b51e6de97bc93dbc325d9038b54 \
|
|
@@ -3773,9 +3773,9 @@
|
|
|
3773
3773
|
"license": "ISC"
|
|
3774
3774
|
},
|
|
3775
3775
|
"node_modules/zod": {
|
|
3776
|
-
"version": "4.
|
|
3777
|
-
"resolved": "https://registry.npmjs.org/zod/-/zod-4.
|
|
3778
|
-
"integrity": "sha512-
|
|
3776
|
+
"version": "4.6.6",
|
|
3777
|
+
"resolved": "https://registry.npmjs.org/zod/-/zod-4.6.6.tgz",
|
|
3778
|
+
"integrity": "sha512-4UmzQUF5fxvfcYHlbjBmejU+w+hbDnWFx4aS8kBx7nPBHcO2SqPbpAG8snbdg+Xse4pRefR98hgjFgIMCI/UhA==",
|
|
3779
3779
|
"license": "MIT",
|
|
3780
3780
|
"funding": {
|
|
3781
3781
|
"url": "https://github.com/sponsors/colinhacks"
|
package/.grok-plugin/plugin.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 1.0.30 — 2026-10-31
|
|
6
|
+
|
|
7
|
+
- `lit-adhd` counts other work before it tells this session what to do. A paused frame here is not resumed, and this session's own run is not continued with `go`, while another session or a herdr agent is still working. A start-work approval is still offered. The session's own card does not show `lit continue` while that work runs.
|
|
8
|
+
- The user rule `~/.grok/rules/00-litgrok.md` now ends with a short ground-rules section: a prompt that starts with `lit` is LitGrok's activation word, plans live in `plans/`, the handoff lives in `.handoff/HANDOFF.md`, and a push, publish, tag or version bump waits for an explicit yes. `litgrok doctor` and `litgrok ground status` print whether that section is present and which version it is. `litgrok ground off` removes it and leaves it off; `litgrok ground on` restores it. `install --no-ground` skips it for that run. An approved lit-init can place the project copy with `litgrok ground project`, which writes `.grok/rules/10-litgrok-ground.md` and refuses a symlink, a non-directory path, or a file LitGrok does not own.
|
|
9
|
+
- Dependency alerts cleared: the audio runtime pins msgpack 1.2.3 (was 1.2.2) and the Remotion cover template pins zod 4.6.6 (was 4.5.4). The HyperFrames cover template still resolves zod 3.25.76 through its pinned browser-driver chain; that needs a HyperFrames upgrade, so it is left for a separate change.
|
|
10
|
+
- Releases are faster: the publish workflow no longer runs the test suite again. It checks with GitHub that CI already passed on the exact commit being released and stops if it did not. A publish from your own machine still runs the full suite first.
|
|
11
|
+
|
|
5
12
|
## 1.0.29 — 2026-10-28
|
|
6
13
|
|
|
7
14
|
- Releases are now built and published from GitHub Actions with npm trusted publishing, so each version carries a signed provenance statement that links the package to this repository and commit. Check it on the npm page (the green check by the version) or with `npm audit signatures`.
|
package/README.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="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.30/docs/assets/cover-motion-still.webp" /><source media="(prefers-reduced-motion: no-preference)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/cover-motion.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/cover-motion.webp" width="100%" alt="LitFamily motion cover: seven armored robots power on one by one, the LitGrok robot wakes with glowing eyes and a lit frame, then LITFAMILY and KEEP THE WORK LIT. light up." /></picture></p>
|
|
2
2
|
|
|
3
3
|
<h1 align="center">LitGrok</h1>
|
|
4
4
|
<p align="center"><strong>Keep the work lit.</strong></p>
|
|
5
5
|
|
|
6
6
|
LitGrok gives xAI's Grok Build the habit of planning before it edits, checking what it built, and leaving a handoff, so tomorrow's session starts where today's stopped. One npm command adds its skills, project rule and hooks to your project.
|
|
7
7
|
|
|
8
|
-
**[Full README on GitHub](https://github.com/wjgoarxiv/litgrok#readme)** · [Guide](https://github.com/wjgoarxiv/litgrok/blob/main/docs/guide.md) · [All skills](https://github.com/wjgoarxiv/litgrok/blob/main/docs/skills.md) · [한국어](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md) · [Install](#install-in-30-seconds) · [Reference](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
8
|
+
**[Full README on GitHub](https://github.com/wjgoarxiv/litgrok#readme)** · [Guide](https://github.com/wjgoarxiv/litgrok/blob/main/docs/guide.md) · [All skills](https://github.com/wjgoarxiv/litgrok/blob/main/docs/skills.md) · [한국어](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md) · [Install](#install-in-30-seconds) · [Reference](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/reference.md)
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
11
|
-
<a href="#install-in-30-seconds"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
12
|
-
<a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
11
|
+
<a href="#install-in-30-seconds"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/readme/badge-version.svg" alt="1.0.30" /></a>
|
|
12
|
+
<a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
|
-
<p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
15
|
+
<p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/reference.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/readme/lucide-book-open.svg" width="16" alt="" /> Docs</a> <a href="#install-in-30-seconds">Install</a> <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/cover-motion.webp"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/readme/lucide-play.svg" width="16" alt="" /> Cover motion</a> <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/readme/lucide-shield-check.svg" width="16" alt="" /> MIT</a></p>
|
|
16
16
|
|
|
17
17
|
Long Grok Build sessions get compacted, a new session starts without what the last one knew, and "done" often just means the model said so. LitGrok gives each session a routine to follow: a written plan before the first edit, checks against that plan, and a handoff file the next session can read. It ships 42 skills, 11 agents, one project rule, and twelve hook registrations. Grok Build still runs the session and chooses the model. It suits work that runs longer than one sitting, such as a feature spread over a few days or a report someone else will read.
|
|
18
18
|
|
|
@@ -24,7 +24,7 @@ You need Node.js and Grok Build. In an interactive terminal, from the project yo
|
|
|
24
24
|
npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
The files land in `<project>/.grok/`. Add `--user` to install under `~/.grok/` instead, or use `--package @litfamily/litgrok@1.0.
|
|
27
|
+
The files land in `<project>/.grok/`. Add `--user` to install under `~/.grok/` instead, or use `--package @litfamily/litgrok@1.0.30` to pin this release. Add `--dry-run` to see every destination before anything is written.
|
|
28
28
|
|
|
29
29
|
Trying a local package instead? Put its real absolute path in a variable, then run these two lines separately:
|
|
30
30
|
|
|
@@ -73,7 +73,7 @@ Beyond code, `lit-pptx` makes slide decks and `lit-docx` makes reports and Word
|
|
|
73
73
|
|
|
74
74
|
## What changes after install
|
|
75
75
|
|
|
76
|
-
The installer copies the skills, agents, project rule, and hooks into `.grok/`. The twelve hook registrations in [`hooks/hooks.json`](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
76
|
+
The installer copies the skills, agents, project rule, and hooks into `.grok/`. The twelve hook registrations in [`hooks/hooks.json`](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/hooks/hooks.json) run only in a trusted Git root, and they log the order of events in `.grok/litgrok/session-ledger/`. Everything runs inside your Grok session, and nothing runs in the background; when the session ends, the work waits for the next one.
|
|
77
77
|
|
|
78
78
|
If you'd like a status row showing the active LitGrok skill, the model and how much context is used, add it with `install --user --status-line`. It writes `[ui.status_line]` into `~/.grok/config.toml` and backs up an existing file first. Once a prompt starts a workflow skill, the row also shows the workflow stage, the tool running now and the last test result. Add `--notify` for Grok's terminal notification when a turn finishes.
|
|
79
79
|
|
|
@@ -112,6 +112,6 @@ If the status row is missing, add it with `install --user --status-line`. Grok r
|
|
|
112
112
|
|
|
113
113
|
If LitGrok saves you some re-explaining, a [star on GitHub](https://github.com/wjgoarxiv/litgrok) helps other Grok Build users find it.
|
|
114
114
|
|
|
115
|
-
[Reference](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
115
|
+
[Reference](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/reference.md) · [Changelog](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/CHANGELOG.md) · [Privacy](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/privacy.md) · [MIT license](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/LICENSE) · [Trademark policy](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/TRADEMARK.md)
|
|
116
116
|
|
|
117
117
|
The cover is brand motion made with the LitFamily motion skill: animated artwork, with no Grok session recorded in it.
|
package/README_ko-KR.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="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.30/docs/assets/cover-motion-still.webp" /><source media="(prefers-reduced-motion: no-preference)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/cover-motion.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/cover-motion.webp" width="100%" alt="LitFamily 모션 커버: 일곱 로봇 패널이 차례로 켜지고, LitGrok 로봇의 눈과 테두리가 빛난 뒤 LITFAMILY와 KEEP THE WORK LIT. 문구가 밝아지는 영상" /></picture></p>
|
|
2
2
|
|
|
3
3
|
<h1 align="center">LitGrok</h1>
|
|
4
4
|
<p align="center"><strong>Keep the work lit.</strong></p>
|
|
5
5
|
|
|
6
6
|
LitGrok은 xAI Grok Build가 코드를 고치기 전에 계획부터 세우고, 만든 결과를 확인하고, 인수인계 문서를 남기게 합니다. 그러면 내일 세션이 오늘 멈춘 자리에서 이어집니다. npm 명령 한 줄이면 스킬과 프로젝트 규칙, 훅이 프로젝트에 들어갑니다.
|
|
7
7
|
|
|
8
|
-
**[GitHub에서 README 전체 보기](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md)** · [안내서](https://github.com/wjgoarxiv/litgrok/blob/main/docs/guide_ko-KR.md) · [전체 스킬](https://github.com/wjgoarxiv/litgrok/blob/main/docs/skills_ko-KR.md) · [English](https://github.com/wjgoarxiv/litgrok#readme) · [설치](#30초-설치) · [상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
8
|
+
**[GitHub에서 README 전체 보기](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md)** · [안내서](https://github.com/wjgoarxiv/litgrok/blob/main/docs/guide_ko-KR.md) · [전체 스킬](https://github.com/wjgoarxiv/litgrok/blob/main/docs/skills_ko-KR.md) · [English](https://github.com/wjgoarxiv/litgrok#readme) · [설치](#30초-설치) · [상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/reference_ko-KR.md)
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
11
|
-
<a href="#30초-설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
12
|
-
<a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
11
|
+
<a href="#30초-설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/readme/badge-version.svg" alt="1.0.30" /></a>
|
|
12
|
+
<a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/readme/badge-license.svg" alt="MIT 라이선스" /></a>
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
|
-
<p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
15
|
+
<p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/reference_ko-KR.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/readme/lucide-book-open.svg" width="16" alt="" /> 상세 안내</a> <a href="#30초-설치">설치</a> <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/cover-motion.webp"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/readme/lucide-play.svg" width="16" alt="" /> 커버 모션</a> <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/assets/readme/lucide-shield-check.svg" width="16" alt="" /> MIT</a></p>
|
|
16
16
|
|
|
17
17
|
Grok Build 세션이 길어지면 대화가 압축되고, 새 세션은 앞 세션이 알던 내용을 모른 채 시작하며, "다 됐다"는 말도 모델이 그렇게 말했다는 뜻일 때가 많습니다. LitGrok은 세션마다 따라갈 순서를 줍니다. 첫 수정 전에 계획을 글로 남기고, 그 계획에 비추어 확인하고, 다음 세션이 읽을 인수인계 문서를 남깁니다. 스킬 42개, 에이전트 11개, 프로젝트 규칙 하나, 훅 등록 열두 개가 들어 있고, 세션 실행과 모델 선택은 계속 Grok Build가 맡습니다. 며칠에 걸쳐 만드는 기능이나 다른 사람이 읽을 보고서처럼, 한 번 앉은 자리에서 끝나지 않는 일에 잘 맞습니다.
|
|
18
18
|
|
|
@@ -24,7 +24,7 @@ Node.js와 Grok Build가 있으면 됩니다. 써 보고 싶은 프로젝트에
|
|
|
24
24
|
npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
파일은 `<project>/.grok/`에 들어갑니다. `~/.grok/`에 설치하려면 `--user`를, 이 릴리스로 고정하려면 `--package @litfamily/litgrok@1.0.
|
|
27
|
+
파일은 `<project>/.grok/`에 들어갑니다. `~/.grok/`에 설치하려면 `--user`를, 이 릴리스로 고정하려면 `--package @litfamily/litgrok@1.0.30`을 쓰세요. `--dry-run`을 붙이면 파일을 쓰기 전에 들어갈 경로를 모두 보여 줍니다.
|
|
28
28
|
|
|
29
29
|
로컬 패키지로 써 보려면 실제 절대 경로를 변수에 넣고 두 줄을 따로 실행하세요.
|
|
30
30
|
|
|
@@ -73,7 +73,7 @@ npm exec --yes --package "$LITGROK_PACK" -- litgrok install
|
|
|
73
73
|
|
|
74
74
|
## 설치하면 달라지는 것
|
|
75
75
|
|
|
76
|
-
설치 프로그램이 스킬, 에이전트, 프로젝트 규칙, 훅을 `.grok/`에 복사합니다. [`hooks/hooks.json`](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
76
|
+
설치 프로그램이 스킬, 에이전트, 프로젝트 규칙, 훅을 `.grok/`에 복사합니다. [`hooks/hooks.json`](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/hooks/hooks.json)에 있는 훅 등록 열두 개는 신뢰한 Git 루트에서만 동작하고, `.grok/litgrok/session-ledger/`에 이벤트 순서를 남깁니다. 모든 작업은 Grok 세션 안에서 돌고 백그라운드 작업은 없습니다. 세션이 끝나면 다음 세션이 이어받을 때까지 그 자리에 멈춰 있습니다.
|
|
77
77
|
|
|
78
78
|
지금 어떤 LitGrok 스킬이 동작 중인지, 어떤 모델을 쓰는지, 컨텍스트를 얼마나 썼는지 보고 싶으면 `install --user --status-line`으로 상태 행을 켜세요. `~/.grok/config.toml`에 `[ui.status_line]`을 넣고, 파일이 이미 있으면 먼저 백업합니다. 프롬프트가 작업 흐름 스킬을 시작하면 지금 단계, 돌고 있는 도구, 마지막 테스트 결과도 함께 보입니다. 턴이 끝날 때 Grok의 터미널 알림을 받으려면 `--notify`를 붙이세요.
|
|
79
79
|
|
|
@@ -112,6 +112,6 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok uninstall --user
|
|
|
112
112
|
|
|
113
113
|
LitGrok 덕분에 같은 설명을 덜 반복하게 됐다면, [GitHub 스타](https://github.com/wjgoarxiv/litgrok) 하나가 다른 Grok Build 사용자에게 이 프로젝트를 알리는 데 도움이 됩니다.
|
|
114
114
|
|
|
115
|
-
[상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
115
|
+
[상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/reference_ko-KR.md) · [변경 이력](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/CHANGELOG.md) · [개인정보](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/docs/privacy.md) · [MIT 라이선스](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/LICENSE) · [상표 정책](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.30/TRADEMARK.md)
|
|
116
116
|
|
|
117
117
|
커버의 모션은 LitFamily 모션 스킬로 만든 브랜드 연출입니다. 그려서 움직인 그림이라 실제 Grok 세션을 녹화한 장면은 들어 있지 않습니다.
|