litclaude-ai 0.3.20 → 0.3.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.22 - 2026-07-07 — full lit-family bare invocation release prep
4
+
5
+ - Prepare `litclaude-ai@0.3.22` for npm publication after extending bare lit-family prompt-hook routes to inject the installed `SKILL.md` body.
6
+ - Keep the safe natural-language `lit start work` BLOCKED handoff while explicit bare skill routes carry full prompt context.
7
+
8
+ ## 0.3.21 - 2026-07-07 — full bare skill-body routing
9
+
10
+ - Inject bundled `SKILL.md` bodies for bare `hyperplan`, `litresearch`, `lit research`, `init-deep`, and explicit `$start-work` prompt-hook routes so activation carries the same substantive skill contract as the installed payload.
11
+ - Add `/litclaude:init-deep` command coverage while preserving slash-command, code-span, fenced-code, near-miss, and natural-language `lit start work` BLOCKED handoff guards.
12
+
13
+ ## 0.3.20 - 2026-07-07 — bare hyperplan prompt routing
14
+
15
+ - Route bare `hyperplan` prompts into the planning-only Hyperplan surface while preserving slash-command, code-span, fenced-code, and near-miss trigger guards.
16
+ - Align README release badges, install examples, and release wording with the published `litclaude-ai@0.3.20` package.
17
+
3
18
  ## 0.3.19 - 2026-07-05 — hyperplan adversarial planning skill
4
19
 
5
20
  - Add the `hyperplan` skill for planning-only adversarial critique before implementation: independent read-only lanes, cross-review, defense/refinement, surviving insight bundle, and `lit-plan` handoff.
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  </p>
10
10
  <p align="center">
11
11
  <img src="https://img.shields.io/badge/npm-litclaude--ai-cb3837" />
12
- <img src="https://img.shields.io/badge/version-0.3.19-2ea44f" />
12
+ <img src="https://img.shields.io/badge/version-0.3.22-2ea44f" />
13
13
  <img src="https://img.shields.io/badge/Claude%20Code-plugin-blueviolet" />
14
14
  <img src="https://img.shields.io/badge/license-MIT-blue" />
15
15
  </p>
@@ -22,12 +22,13 @@
22
22
  > `litclaude@litclaude-ai`, so normal `claude` launches can load the
23
23
  > LitClaude skills and hooks without a long `--plugin-dir` command.
24
24
 
25
- This checkout is prepared as `litclaude-ai@0.3.19` for personal install
25
+ This checkout is prepared as `litclaude-ai@0.3.22` for personal install
26
26
  convenience. The repo can remain quiet; preparing npm package metadata here does
27
27
  not imply public repo promotion, marketplace publication, or advertisement.
28
- Future package releases still require explicit user approval. The v0.3.19
29
- release materials add the planning-only `hyperplan` adversarial planning skill while
30
- preserving the v0.3.18 read-only `lit-recap` session recap surface, the v0.3.17 separate-worker native `/goal` launcher, the v0.3.16
28
+ Future package releases still require explicit user approval. The v0.3.22
29
+ release materials inject the bundled skill bodies for bare `hyperplan`,
30
+ `litresearch`, `lit research`, `init-deep`, and explicit `$start-work` prompt-hook routes while
31
+ preserving the v0.3.19 adversarial planning skill, the v0.3.18 read-only `lit-recap` session recap surface, the v0.3.17 separate-worker native `/goal` launcher, the v0.3.16
31
32
  WSL2/Windows Terminal truecolor HUD gradient fix, the v0.3.15 Korean AI slop
32
33
  remover workflow, the v0.3.13 public-source reader runtime, litresearch
33
34
  activation/read-only polish, and installer permission-preference discipline.
@@ -112,7 +113,7 @@ directory, the normal install command works:
112
113
 
113
114
  ```bash
114
115
  cd /tmp
115
- npx --yes litclaude-ai@0.3.19 install
116
+ npx --yes litclaude-ai@0.3.22 install
116
117
  ```
117
118
 
118
119
  Validate the installed plugin:
@@ -125,7 +126,7 @@ The installer also sets Claude Code's `statusLine` command to the packaged
125
126
  LitClaude HUD. A typical no-color render starts like:
126
127
 
127
128
  ```text
128
- [🔥LITCLAUDE v0.3.19] | O4.8 │ ctx [▎░░] 9%/1000k │ 5h [▏░] 4% ↻2h15m │ 1w [▊░] 35% ↻3d6h │ git main +3 ✓
129
+ [🔥LITCLAUDE v0.3.22] | O4.8 │ ctx [▎░░] 9%/1000k │ 5h [▏░] 4% ↻2h15m │ 1w [▊░] 35% ↻3d6h │ git main +3 ✓
129
130
  ```
130
131
 
131
132
  The `↻` suffix is a compact rate-limit reset countdown. It is separated from
package/README_ko-KR.md CHANGED
@@ -9,7 +9,7 @@
9
9
  </p>
10
10
  <p align="center">
11
11
  <img src="https://img.shields.io/badge/npm-litclaude--ai-cb3837" />
12
- <img src="https://img.shields.io/badge/version-0.3.19-2ea44f" />
12
+ <img src="https://img.shields.io/badge/version-0.3.22-2ea44f" />
13
13
  <img src="https://img.shields.io/badge/Claude%20Code-plugin-blueviolet" />
14
14
  <img src="https://img.shields.io/badge/license-MIT-blue" />
15
15
  </p>
@@ -26,13 +26,14 @@
26
26
  > 설치되므로, 매번 긴 `--plugin-dir` 없이 일반 `claude` 실행에서
27
27
  > LitClaude skill과 hook을 불러올 수 있습니다.
28
28
 
29
- 현재 checkout은 `litclaude-ai@0.3.19` 배포 준비용으로 정리되어 있습니다. 목적은
29
+ 현재 checkout은 `litclaude-ai@0.3.22` 배포 준비용으로 정리되어 있습니다. 목적은
30
30
  다른 PC에서도 빠르게 설치하기 위한 개인용 package metadata를 갖추는 것입니다.
31
31
  npm package metadata를 준비했다고 해서 홍보, 공개 저장소 운영, Claude
32
32
  marketplace 등록을 의미하지는 않습니다. 새 버전 배포는 항상 별도의 명시적
33
- 승인 후에 진행합니다. v0.3.19 release material은 planning-only `hyperplan`
34
- adversarial planning skill을 추가하면서, v0.3.18 read-only `lit-recap`
35
- session recap surface와 v0.3.17 별도 worker 기반 native `/goal`
33
+ 승인 후에 진행합니다. v0.3.22 release material은 bare `hyperplan`,
34
+ `litresearch`, `lit research`, `init-deep`, explicit `$start-work` prompt-hook route에
35
+ bundled skill body를 주입하면서, v0.3.19 adversarial planning
36
+ skill, v0.3.18 read-only `lit-recap` session recap surface, v0.3.17 별도 worker 기반 native `/goal`
36
37
  launcher와 v0.3.16 WSL2/Windows Terminal truecolor HUD gradient fix, v0.3.15
37
38
  Korean AI slop remover workflow, v0.3.13 public-source reader runtime,
38
39
  litresearch activation/read-only polish를 유지합니다.
@@ -116,7 +117,7 @@ checkout을 먼저 해석해서 `sh: litclaude-ai: command not found`로 실패
116
117
 
117
118
  ```bash
118
119
  cd /tmp
119
- npx --yes litclaude-ai@0.3.19 install
120
+ npx --yes litclaude-ai@0.3.22 install
120
121
  ```
121
122
 
122
123
  설치 상태를 확인합니다.
@@ -129,7 +130,7 @@ installer는 Claude Code의 `statusLine` command도 packaged LitClaude HUD로
129
130
  설정합니다. 색상을 제거한 예시는 다음처럼 시작합니다.
130
131
 
131
132
  ```text
132
- [🔥LITCLAUDE v0.3.19] | O4.8 │ ctx [▎░░] 9%/1000k │ 5h [▏░] 4% ↻2h15m │ 1w [▊░] 35% ↻3d6h │ git main +3 ✓
133
+ [🔥LITCLAUDE v0.3.22] | O4.8 │ ctx [▎░░] 9%/1000k │ 5h [▏░] 4% ↻2h15m │ 1w [▊░] 35% ↻3d6h │ git main +3 ✓
133
134
  ```
134
135
 
135
136
  `↻` 표시는 rate-limit reset까지 남은 시간을 짧게 보여주는 countdown입니다.
@@ -1,7 +1,7 @@
1
1
  # LitClaude Release Checklist
2
2
 
3
- Status: `litclaude-ai@0.3.19` is the current release candidate — a planning-only
4
- `hyperplan` adversarial planning skill on top of the read-only `lit-recap`
3
+ Status: `litclaude-ai@0.3.22` is the current release candidate — a full bare
4
+ skill-body prompt-hook routing release on top of the planning-only Hyperplan skill and read-only `lit-recap`
5
5
  session recap surface (command, skill, and bounded hook routing
6
6
  including the Korean `리캡` trigger), the dry-run-first native `/goal`
7
7
  worker launcher, WSL2 HUD gradient hotfix, Korean AI-slop removal workflow
@@ -12,9 +12,9 @@ side-effect-free, the launcher starts only a separate Claude Code
12
12
  print/background worker, and the release preserves the Korean polishing
13
13
  command, strict multi-agent review pipeline, fidelity guardrails, package
14
14
  hygiene checks, native route gates, and safe start-work handoff behavior.
15
- `package.json` is aligned to `0.3.19`,
16
- `plugins/litclaude/.claude-plugin/plugin.json` is aligned to `0.3.19`, and the
17
- plugin-local MCP server reports `0.3.19`.
15
+ `package.json` is aligned to `0.3.22`,
16
+ `plugins/litclaude/.claude-plugin/plugin.json` is aligned to `0.3.22`, and the
17
+ plugin-local MCP server reports `0.3.22`.
18
18
 
19
19
  This release carries the v0.2.2 Dynamic workflow hardening surfaces:
20
20
  `/dynamic-workflow`, `workflow-check --json`, native `/goal` fallback guidance,
@@ -63,9 +63,10 @@ No npm publication is required for this track.
63
63
  Before requesting publication approval, confirm these artifacts from the current
64
64
  checkout:
65
65
 
66
- - `package.json` version is `0.3.19`.
67
- - `plugins/litclaude/.claude-plugin/plugin.json` version is `0.3.19`.
68
- - `plugins/litclaude/bin/litclaude-mcp.js` reports server version `0.3.19`.
66
+ - `package.json` version is `0.3.22`.
67
+ - `plugins/litclaude/.claude-plugin/plugin.json` version is `0.3.22`.
68
+ - `plugins/litclaude/bin/litclaude-mcp.js` reports server version `0.3.22`.
69
+ - Prompt-hook tests cover bundled `SKILL.md` body injection for bare `hyperplan`, `litresearch`, `lit research`, `init-deep`, and explicit `$start-work`, while natural-language `lit start work` stays BLOCKED.
69
70
  - `lit search` and `lit query` route to `/litclaude:litresearch` without activating on slash mentions, code spans, or non-lit prompts.
70
71
  - Litresearch web lanes require public API/feed preference, validator-first checks, route traces, prompt-injection quarantine, and honest auth/paywall/private-data stop reasons.
71
72
  - `node bin/litclaude-ai.js public-read <public-url> --json` exposes the guarded JS runtime reader.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "litclaude-ai",
3
- "version": "0.3.20",
3
+ "version": "0.3.22",
4
4
  "description": "Claude Code-native workflow distribution.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "litclaude",
3
3
  "description": "Claude Code-native workflow plugin.",
4
- "version": "0.3.20",
4
+ "version": "0.3.22",
5
5
  "author": {
6
6
  "name": "LitClaude contributors"
7
7
  },
@@ -48,17 +48,18 @@ const plainWordBoundary = /^[A-Za-z0-9]$/u;
48
48
  const compoundWordBoundary = /^[A-Za-z0-9_-]$/u;
49
49
 
50
50
  const triggerByToken = {
51
- "deep-interview": { command: "/litclaude:deep-interview", skill: "Skill(deep-interview)", discipline: "deep-interview" },
52
- "dynamic-workflow": { command: "/litclaude:dynamic-workflow", skill: "Skill(lit-loop)", discipline: "dynamic-workflow" },
53
- "agent-team": { command: "/litclaude:lit-loop", skill: "Skill(lit-loop)", discipline: "agent-team" },
54
- hyperplan: { command: "/litclaude:lit-plan", skill: "Skill(hyperplan)", discipline: "lit-plan" },
55
- "lit-plan": { command: "/litclaude:lit-plan", skill: "Skill(lit-plan)", discipline: "lit-plan" },
56
- "lit-recap": { command: "/litclaude:lit-recap", skill: "Skill(lit-recap)", discipline: "lit-recap" },
57
- "lit-loop": { command: "/litclaude:lit-loop", skill: "Skill(lit-loop)", discipline: "lit-loop" },
58
- "start-work": { command: "/litclaude:start-work", skill: "Skill(start-work)", discipline: "start-work" },
59
- "review-work": { command: "/litclaude:review-work", skill: "Skill(review-work)", discipline: "review-work" },
60
- litgoal: { command: "/litclaude:litgoal", skill: "Skill(litgoal)", discipline: "litgoal" },
61
- litresearch: { command: "/litclaude:litresearch", skill: "Skill(litresearch)", discipline: "litresearch" },
51
+ "deep-interview": { command: "/litclaude:deep-interview", skill: "Skill(deep-interview)", skillId: "deep-interview", discipline: "deep-interview" },
52
+ "dynamic-workflow": { command: "/litclaude:dynamic-workflow", skill: "Skill(lit-loop)", skillId: "lit-loop", discipline: "dynamic-workflow" },
53
+ "agent-team": { command: "/litclaude:lit-loop", skill: "Skill(lit-loop)", skillId: "lit-loop", discipline: "agent-team" },
54
+ hyperplan: { command: "/litclaude:lit-plan", skill: "Skill(hyperplan)", skillId: "hyperplan", discipline: "lit-plan" },
55
+ "init-deep": { command: "/litclaude:init-deep", skill: "Skill(init-deep)", skillId: "init-deep", discipline: "init-deep" },
56
+ "lit-plan": { command: "/litclaude:lit-plan", skill: "Skill(lit-plan)", skillId: "lit-plan", discipline: "lit-plan" },
57
+ "lit-recap": { command: "/litclaude:lit-recap", skill: "Skill(lit-recap)", skillId: "lit-recap", discipline: "lit-recap" },
58
+ "lit-loop": { command: "/litclaude:lit-loop", skill: "Skill(lit-loop)", skillId: "lit-loop", discipline: "lit-loop" },
59
+ "start-work": { command: "/litclaude:start-work", skill: "Skill(start-work)", skillId: "start-work", discipline: "start-work" },
60
+ "review-work": { command: "/litclaude:review-work", skill: "Skill(review-work)", skillId: "review-work", discipline: "review-work" },
61
+ litgoal: { command: "/litclaude:litgoal", skill: "Skill(litgoal)", skillId: "litgoal", discipline: "litgoal" },
62
+ litresearch: { command: "/litclaude:litresearch", skill: "Skill(litresearch)", skillId: "litresearch", discipline: "litresearch" },
62
63
  };
63
64
 
64
65
  const modeContracts = {
@@ -69,11 +70,27 @@ const modeContracts = {
69
70
  "review-work": "Mode contract: review-work runs a five-lane review: goal/constraints, real-surface QA, code quality, security, and docs/package/context readiness. PASS requires evidence from every applicable lane.",
70
71
  litresearch: "Mode contract: litresearch uses sourced evidence, separates verified facts from hypotheses, keeps a route trace for search/query lanes, cites the search/runtime surface used, and reports residual uncertainty. If the user asks for read-only or no-write research, ask before writing local journal files and use transcript-only tracking unless they approve disk writes.",
71
72
  litgoal: "Mode contract: litgoal binds one outcome-shaped objective plus checkable criteria, each with scenario, real surface, and observable evidence.",
73
+ "init-deep": "Mode contract: init-deep creates or refreshes sparse AGENTS.md guidance after reading existing guidance and real repo structure. Preserve local instructions and user changes; create child files only where directory-specific conventions justify them.",
72
74
  "deep-interview": "Mode contract: deep-interview clarifies vague requirements before planning or implementation, without inventing acceptance criteria.",
73
75
  "dynamic-workflow": "Mode contract: dynamic-workflow is opt-in orchestration for broad, risky, parallel, or long-running work; propose it first and only call Workflow after user opt-in or existing session permission.",
74
76
  "agent-team": "Mode contract: agent-team is setup-gated native Claude Code teammate orchestration. Spawn teammates only when experimental teams are enabled and the user approves roles, scope boundaries, acceptance criteria, wait, and synthesis instructions.",
75
77
  };
76
78
 
79
+ const staticSkillBodyContext = ({ skillId, safetyBlock }) => {
80
+ if (!skillId || safetyBlock) return [];
81
+ try {
82
+ const body = readFileSync(new URL(`../skills/${skillId}/SKILL.md`, import.meta.url), "utf8").trim();
83
+ if (!body) return [];
84
+ return [
85
+ `<litclaude-skill-body name="${skillId}">
86
+ ${body}
87
+ </litclaude-skill-body>`,
88
+ ];
89
+ } catch {
90
+ return [`WARNING: Skill(${skillId}) was requested, but the bundled SKILL.md body could not be loaded from the LitClaude plugin payload.`];
91
+ }
92
+ };
93
+
77
94
  const withoutCode = (text) => text.replace(/```[\s\S]*?```/gu, " ").replace(/`[^`]*`/gu, " ");
78
95
  const rawTriggerText = (text) => withoutCode(text).toLowerCase();
79
96
  const normalizedTriggerText = (text) => rawTriggerText(text).replace(/[_-]+/gu, " ");
@@ -106,11 +123,13 @@ const slashCommandMentions = [
106
123
  "/dynamic-workflow",
107
124
  "/goal",
108
125
  "/hyperplan",
126
+ "/init-deep",
109
127
  "/lit-loop",
110
128
  "/lit-plan",
111
129
  "/lit-recap",
112
130
  "/litclaude:deep-interview",
113
131
  "/litclaude:dynamic-workflow",
132
+ "/litclaude:init-deep",
114
133
  "/litclaude:lit-loop",
115
134
  "/litclaude:lit-plan",
116
135
  "/litclaude:lit-recap",
@@ -136,11 +155,17 @@ const slashLitPhrasePattern = /(^|\s)\/lit(?:work)?\s+(?:plan|recap|review|resea
136
155
  const containsSlashCommandMention = (text) => slashCommandMentionPattern.test(text) || slashLitPhrasePattern.test(text);
137
156
 
138
157
  const findDollarCommandTrigger = (raw) => {
139
- const match = /(?:^|\s)\$(deep-interview|dynamic-workflow|lit-plan|lit-recap|lit-loop|start-work|review-work|litgoal|litresearch)(?=$|[^\w-])/u.exec(raw);
158
+ const match = /(?:^|\s)\$(deep-interview|dynamic-workflow|init-deep|lit-plan|lit-recap|lit-loop|start-work|review-work|litgoal|litresearch)(?=$|[^\w-])/u.exec(raw);
140
159
  if (!match) return undefined;
141
160
  return { ...triggerByToken[match[1]], source: "dollar-command" };
142
161
  };
143
162
 
163
+ const findLeadingBareCommandTrigger = (raw) => {
164
+ const match = /^\s*(deep-interview|init-deep|lit-plan|lit-recap|lit-loop|start-work|review-work|litgoal|litresearch)(?=$|[^\w-])/u.exec(raw);
165
+ if (!match) return undefined;
166
+ return { ...triggerByToken[match[1]], source: "bare-command" };
167
+ };
168
+
144
169
  const hasLitTrigger = (raw) => containsCompoundBoundedWord(raw, "lit") || containsCompoundBoundedWord(raw, "litwork");
145
170
 
146
171
  const hangulSyllable = /^[가-힣]$/u;
@@ -192,7 +217,10 @@ const findWorkflowTrigger = (prompt) => {
192
217
  const dollarTrigger = findDollarCommandTrigger(raw);
193
218
  if (dollarTrigger) return dollarTrigger;
194
219
  if (containsSlashCommandMention(raw)) return undefined;
220
+ const bareCommandTrigger = findLeadingBareCommandTrigger(raw);
221
+ if (bareCommandTrigger) return bareCommandTrigger;
195
222
  if (containsCompoundBoundedWord(raw, "hyperplan")) return { ...triggerByToken.hyperplan, source: "bare-command" };
223
+ if (containsCompoundBoundedWord(raw, "init-deep")) return { ...triggerByToken["init-deep"], source: "bare-command" };
196
224
  const recapTrigger = findRecapTrigger(raw);
197
225
  if (recapTrigger) return recapTrigger;
198
226
  return findNaturalLitTrigger(prompt);
@@ -230,15 +258,16 @@ const teamGateContext = (discipline) => {
230
258
  return ["Native agent team setup gate: CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is not set, so do not claim a teammate launch. To enable native teams, launch with `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 claude --teammate-mode auto` or set `env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` plus optional `teammateMode: auto`; fallback to subagent delegation or Dynamic workflow meanwhile."];
231
259
  };
232
260
 
233
- const recapContext = ({ command, skill, discipline, source }) => [
261
+ const recapContext = ({ command, skill, skillId, discipline, source }) => [
234
262
  `Treat this prompt as an explicit request to use LitClaude ${discipline} discipline now; load or follow ${command} / ${skill} semantics before ordinary task execution.`,
235
263
  modeContracts[discipline],
236
264
  "Read-only recap surfaces: read .litclaude/litgoal/goals.json, .litclaude/litgoal/ledger.jsonl, and .litclaude/litgoal/brief.md when present (plus repo-level evidence/ paths), and combine them with current-session context. The read-only `litclaude-ai litgoal status --json` and `criteria` subcommands are the only litgoal CLI reads allowed.",
237
265
  "Output contract: reply in Korean by default using the fixed lit-recap headers from Skill(lit-recap); switch the body to English only when the user asks (--en / in English / 영어); produce the brief `## ⚡ 요약` digest on --brief / 짧게; keep technical tokens (paths, commands, identifiers) verbatim.",
238
266
  `Activation source: ${source ?? "legacy"}. Slash commands and slash-command mentions are handled by Claude Code's native command surface and do not activate this prompt hook. Code spans, code fences, substrings, and compound tokens are ignored. Secret-bearing prompt material is never persisted raw; recap output may only reference redacted summaries and evidence paths.`,
267
+ ...staticSkillBodyContext({ skillId }),
239
268
  ].join(" ");
240
269
 
241
- const litworkContext = ({ command, skill, discipline, softConfirm, safetyBlock, source }, input) => [
270
+ const litworkContext = ({ command, skill, skillId, discipline, softConfirm, safetyBlock, source }, input) => [
242
271
  ...(safetyBlock
243
272
  ? ["BLOCKED: Natural-language start-work activation cannot switch the active Claude Code agent. Run `/start-work` (or `/litclaude:start-work`) with the approved plan so Claude Code can use the correct execution surface; do not continue implementation from this prompt hook."]
244
273
  : []),
@@ -258,6 +287,7 @@ const litworkContext = ({ command, skill, discipline, softConfirm, safetyBlock,
258
287
  "Dynamic worktree integration: when Claude Code exposes EnterWorktree and isolated edits are needed, use EnterWorktree for the selected lane; otherwise use or recommend claude --worktree <short-name> --tmux. Never mutate unrelated user state.",
259
288
  "Subagent delegation: route planning to litclaude:prometheus-planner, implementation to litclaude:boulder-executor, verification to litclaude:oracle-verifier, hands-on QA to litclaude:qa-runner, code/security review to litclaude:quality-reviewer, and local-first research to litclaude:librarian-researcher when Claude Code subagents or Dynamic workflow lanes are available. LitClaude subagents are exposed under the litclaude: namespace, so pass the exact namespaced id (e.g. litclaude:boulder-executor) as the Agent/Task tool subagent_type, not the bare name.",
260
289
  "Subagent reliability: each child assignment starts with TASK: and includes DELIVERABLE, SCOPE, and VERIFY; use short wait cycles, treat timeouts as no-update signals, and fallback only after a missing deliverable, acknowledgement-only reply, or BLOCKED: report.",
290
+ ...staticSkillBodyContext({ skillId, safetyBlock }),
261
291
  ...(softConfirm ? ["Soft-confirm: the bare keyword 'lit' activated this hook. Before committing to the full lit-loop, briefly confirm with the user that they intended to start a litwork execution loop (a stray English 'lit' is recoverable)."] : []),
262
292
  ].join(" ");
263
293
 
@@ -3,7 +3,7 @@
3
3
  import { readPublicSource } from "../lib/public-source-reader/reader.mjs";
4
4
 
5
5
  const protocolVersion = "2024-11-05";
6
- const serverVersion = "0.3.20";
6
+ const serverVersion = "0.3.22";
7
7
 
8
8
  const publicSourceReadTool = {
9
9
  name: "public_source_read",
@@ -0,0 +1,19 @@
1
+ ---
2
+ description: Create or refresh sparse AGENTS.md guidance with the LitClaude init-deep discipline.
3
+ argument-hint: '[--create-new] [--max-depth=N]'
4
+ ---
5
+
6
+ Use the `init-deep` skill for repository guidance initialization.
7
+
8
+ Read existing `AGENTS.md`, `CLAUDE.md`, README files, package manifests,
9
+ handoffs, and the real directory structure before proposing edits. Preserve local
10
+ instructions, secrets boundaries, ignored runtime state, and user changes.
11
+
12
+ Only create child `AGENTS.md` files where a directory has distinct conventions,
13
+ entry points, test/build commands, or ownership rules future agents would
14
+ otherwise rediscover. Keep each file concise: what differs from the parent,
15
+ where to look, what not to touch, and which commands verify changes.
16
+
17
+ Before editing, state success criteria and choose the minimum-first guidance
18
+ hierarchy that satisfies them. After editing, report files created, files
19
+ updated, directories skipped, evidence used, and verification commands.