litclaude-ai 0.4.0 → 0.4.4

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.
Files changed (58) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +132 -6
  3. package/README_ko-KR.md +114 -6
  4. package/RELEASE_CHECKLIST.md +22 -14
  5. package/bin/litclaude-ai.js +101 -4
  6. package/bin/litfamily-banner.mjs +32 -0
  7. package/docs/hooks.md +9 -9
  8. package/docs/rules.md +13 -11
  9. package/docs/workflow-compatibility-audit.md +1 -1
  10. package/package.json +1 -1
  11. package/plugins/litclaude/.claude-plugin/plugin.json +1 -1
  12. package/plugins/litclaude/bin/litclaude-hook.js +114 -35
  13. package/plugins/litclaude/bin/litclaude-mcp.js +1 -1
  14. package/plugins/litclaude/hooks/hooks.json +4 -17
  15. package/plugins/litclaude/lib/canonical-frontend-commitments.mjs +4 -4
  16. package/plugins/litclaude/lib/canonical-skill-resources.mjs +32 -11
  17. package/plugins/litclaude/lib/lit-plan-persistence.mjs +133 -0
  18. package/plugins/litclaude/lib/owner-lock.mjs +78 -17
  19. package/plugins/litclaude/lib/rules/engine.mjs +2 -2
  20. package/plugins/litclaude/lib/rules/session-state.mjs +2 -2
  21. package/plugins/litclaude/lib/secure-path-read.mjs +18 -0
  22. package/plugins/litclaude/lib/skill-loop/apply.mjs +391 -0
  23. package/plugins/litclaude/lib/skill-loop/authority.mjs +129 -0
  24. package/plugins/litclaude/lib/skill-loop/cli.mjs +67 -0
  25. package/plugins/litclaude/lib/skill-loop/common.mjs +280 -0
  26. package/plugins/litclaude/lib/skill-loop/config.mjs +91 -0
  27. package/plugins/litclaude/lib/skill-loop/curator.mjs +670 -0
  28. package/plugins/litclaude/lib/skill-loop/hook-runtime.mjs +174 -0
  29. package/plugins/litclaude/lib/skill-loop/hook-state.mjs +484 -0
  30. package/plugins/litclaude/lib/skill-loop/ledger.mjs +834 -0
  31. package/plugins/litclaude/lib/skill-loop/mutation-transaction.mjs +529 -0
  32. package/plugins/litclaude/lib/skill-loop/proposal-reader.mjs +26 -0
  33. package/plugins/litclaude/lib/skill-loop/proposal-record.mjs +104 -0
  34. package/plugins/litclaude/lib/skill-loop/proposal-store.mjs +187 -0
  35. package/plugins/litclaude/lib/skill-loop/proposals.mjs +26 -0
  36. package/plugins/litclaude/lib/skill-loop/review-runner.mjs +13 -0
  37. package/plugins/litclaude/lib/skill-loop/review-transaction.mjs +358 -0
  38. package/plugins/litclaude/lib/skill-loop/review.mjs +223 -0
  39. package/plugins/litclaude/lib/skill-loop/usage.mjs +218 -0
  40. package/plugins/litclaude/lib/skill-observer.mjs +127 -35
  41. package/plugins/litclaude/lib/start-work-lifecycle.mjs +2 -2
  42. package/plugins/litclaude/lib/wikify-knowledge.mjs +44 -16
  43. package/plugins/litclaude/scripts/scaffold-plan.mjs +259 -41
  44. package/plugins/litclaude/skills/browser-drive/scripts/capability-probe.mjs +24 -3
  45. package/plugins/litclaude/skills/frontend-ui-ux/references/_canonical-corpus/legal/frontend-ATTRIBUTION.md +5 -6
  46. package/plugins/litclaude/skills/frontend-ui-ux/references/_canonical-corpus/manifest.json +2 -2
  47. package/plugins/litclaude/skills/lit-handoff/SKILL.md +4 -4
  48. package/plugins/litclaude/skills/lit-plan/SKILL.md +5 -2
  49. package/plugins/litclaude/skills/rules/SKILL.md +8 -1
  50. package/plugins/litclaude/skills/skill-observer/SKILL.md +42 -7
  51. package/plugins/litclaude/skills/skill-observer/references/review-contract.md +77 -0
  52. package/plugins/litclaude/skills/skill-observer/scripts/skill-loop.mjs +10 -0
  53. package/plugins/litclaude/skills/teammode/scripts/team.mjs +2 -2
  54. package/scripts/qa-claude-plugin-smoke.sh +36 -8
  55. package/scripts/qa-portable-install.sh +38 -15
  56. package/scripts/qa-real-surface-behaviors.mjs +1 -1
  57. package/scripts/qa-real-surface-lib.mjs +4 -1
  58. package/scripts/validate-plugin.mjs +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,66 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.4 - 2026-09-02 — inode-reuse hardening and Linux rotation safety
4
+
5
+ - Bind regular-file reads and state transitions to ctime/birthtime-aware identities,
6
+ and quarantine/content-check destructive cleanup across owner locks, rule/session/team
7
+ state, skill-loop records, knowledge, observer, review, and scaffold paths. Add
8
+ deterministic inode-reuse regression coverage for the affected readers and cleanup.
9
+ - Make directory pins Linux-safe: directory identity excludes mutable child-driven ctime
10
+ and retained descriptors are compared with final pathname samples. Quarantine short-lived
11
+ scaffold locks so a legitimate next owner can rotate in without being mistaken for residue.
12
+ - Keep browser-drive teardown fail-closed around process-group reuse while accepting
13
+ already-gone or non-owned groups, and add regression coverage for concurrent observer
14
+ first-use writers and normal rotation. Regenerate canonical resource hashes for the
15
+ changed runtime assets so installer integrity checks cover the hardening.
16
+ - During convergence, three Linux-only false-denial cases were captured and resolved:
17
+ directory ctime churn, process-group ID reuse, and lock rotation. Regular files pin
18
+ ctime/birthtime; directories do not, because child creation legitimately changes
19
+ directory ctime. This is a local release candidate only; no publish, tag, or push
20
+ was performed.
21
+
22
+ ## 0.4.3 - 2026-08-31 — packed-payload integrity and channel routing
23
+
24
+ - Add packed-payload substance, cross-product parity, and referenced-path checks so
25
+ installed skills cannot silently lose the material they reference.
26
+ - Route post-compact rule re-injection through the channel Claude Code actually reads,
27
+ so compacted sessions receive the intended rules again.
28
+ - Refresh the canonical legal attribution metadata without changing the four upstream
29
+ attributions it records. This is a local release candidate only; no publish, tag, or
30
+ push was performed.
31
+
32
+ ## 0.4.2 - 2026-08-30 — coordinated major-update-v2 patch release
33
+
34
+ - Require `lit-plan` to persist `plans/<slug>.md` with executable checkbox tasks
35
+ before a planning turn ends; approval gates execution after the plan exists.
36
+ - Add the shared installer frame, `--yes` path, and explicit host-owned model
37
+ selection notice while preserving Claude's host routing authority.
38
+ - Remove the retired handoff name from model-facing guidance and keep the
39
+ native handoff route available without a legacy user-skill path.
40
+ - This is a local release candidate only; no publish, tag, or push was performed.
41
+
42
+ ## 0.4.1 - 2026-08-29 — approval-gated skill learning loop
43
+
44
+ - Observe validated skill consultations, bounded user corrections, tool
45
+ iteration signals, and coverage gaps without persisting raw transcripts. A
46
+ detached Stop review may queue at most three schema-valid pending proposals;
47
+ it never applies them.
48
+ - Add explicit list, apply, reject, rollback, and curator commands. Apply is the
49
+ only approval transition and may mutate only project
50
+ `.claude/skills/<name>/SKILL.md` packages marked
51
+ `litclaudeAgentGenerated: "true"`; bundled and unmarked user skills remain
52
+ protected.
53
+ - Record exact before/after snapshots in the project-local decision ledger and
54
+ content-addressed blob store. Rollback uses ownership, identity, and byte
55
+ checks and fails closed on conflicts.
56
+ - Add a deterministic SessionStart curator for projects that already have
57
+ skill-loop usage state. The default seven-day/two-hour schedule marks
58
+ eligible skills stale after 30 days and archives them after 90 days only
59
+ after backup; deletion, consolidation, and automatic apply remain disabled.
60
+ - Pin the complete skill-loop runtime and observer resources in the canonical
61
+ manifest, keep local `.litclaude` state out of the package, and reject
62
+ unpinned bundled-skill payload additions.
63
+
3
64
  ## 0.4.0 - 2026-08-27 — output-channel enforcement
4
65
 
5
66
  - Add a standalone `#contract.output_channels` declaration to every shipped
package/README.md CHANGED
@@ -1,4 +1,17 @@
1
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/litclaude-ai@0.4.0/cover.png" width="100%" alt="LitClaude — Claude Code-native workflow package" /></p>
1
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/litclaude-ai@0.4.4/cover.png" width="100%" alt="LitClaude — Claude Code-native workflow package" /></p>
2
+
3
+ ```text
4
+ ██╗ ██╗████████╗
5
+ ██║ ██║╚══██╔══╝
6
+ ██║ ██║ ██║
7
+ ███████╗██║ ██║
8
+ ╚══════╝╚═╝ ╚═╝
9
+ ██████╗██╗ █████╗ ██╗ ██╗██████╗ ███████╗
10
+ ██╔════╝██║ ██╔══██╗██║ ██║██╔══██╗██╔════╝
11
+ ██║ ██║ ███████║██║ ██║██║ ██║█████╗
12
+ ╚██████╗███████╗██╔══██║╚██████╔╝██████╔╝███████╗
13
+ ╚═════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝
14
+ ```
2
15
 
3
16
  <h1 align="center">LitClaude</h1>
4
17
  <p align="center">
@@ -9,7 +22,7 @@
9
22
  </p>
10
23
  <p align="center">
11
24
  <img src="https://img.shields.io/badge/npm-litclaude--ai-cb3837" alt="npm: litclaude-ai" />
12
- <img src="https://img.shields.io/badge/version-0.4.0-2ea44f" alt="version 0.4.0" />
25
+ <img src="https://img.shields.io/badge/version-0.4.4-2ea44f" alt="version 0.4.4" />
13
26
  <img src="https://img.shields.io/badge/Claude%20Code-plugin-blueviolet" alt="Claude Code plugin" />
14
27
  <img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT license" />
15
28
  </p>
@@ -39,6 +52,35 @@ ordinary `claude` sessions.
39
52
  - Local MCP/LSP helpers, structured Wikify knowledge, and a managed HUD that
40
53
  can be safely removed with `uninstall`.
41
54
 
55
+ **The workflow closes on evidence.** A plan remains open until each item has a binary check, and a slice closes only after its real Claude surface produces evidence and its temporary QA resources are gone. A passing test is necessary, but it is not the finish line.
56
+
57
+ ```mermaid
58
+ flowchart TD
59
+ R["a request<br/>make it better"] --> DI["<b>deep-interview</b><br/>turn it into a decision-complete brief"]
60
+ DI --> P["<b>lit-plan</b><br/>objective · non-goals<br/>action / output / <b>binary verification</b>"]
61
+ P --> GATE{"user approves?"}
62
+ GATE -->|no| P
63
+ GATE -->|yes| SW["<b>start-work</b><br/>execute one slice"]
64
+
65
+ subgraph LOOP["each slice: RED to GREEN to SURFACE to CLEAN"]
66
+ SW --> RED["failing test first"]
67
+ RED --> GREEN["smallest change that passes"]
68
+ GREEN --> SURF["exercise the <b>real surface</b><br/>not just the test"]
69
+ SURF --> CLEAN["tear down · cleanup receipt"]
70
+ end
71
+
72
+ CLEAN --> EV{"evidence complete?"}
73
+ EV -->|"tests only"| SW
74
+ EV -->|"artifact + receipt"| RW["<b>review-work</b><br/>scope · evidence · payload<br/>security · real surface"]
75
+ RW -->|findings| SW
76
+ RW -->|clean| HO["<b>lit-handoff</b><br/>resumable packet"]
77
+
78
+ style GATE fill:#fff3cd,stroke:#856404
79
+ style EV fill:#fff3cd,stroke:#856404
80
+ style SURF fill:#d4edda,stroke:#155724
81
+ style RW fill:#d1ecf1,stroke:#0c5460
82
+ ```
83
+
42
84
  ## Install
43
85
 
44
86
  For the current published package:
@@ -50,13 +92,13 @@ npx --yes litclaude-ai@latest install
50
92
  For a reproducible install, pin the current package version:
51
93
 
52
94
  ```bash
53
- npm view litclaude-ai@0.4.0 version
95
+ npm view litclaude-ai@0.4.4 version
54
96
  ```
55
97
 
56
- If that lookup returns `0.4.0`, the exact install is available:
98
+ If that lookup returns `0.4.4`, the exact install is available:
57
99
 
58
100
  ```bash
59
- npx --yes litclaude-ai@0.4.0 install
101
+ npx --yes litclaude-ai@0.4.4 install
60
102
  ```
61
103
 
62
104
  Otherwise, wait for explicit human publication before using that pin. Check the
@@ -78,6 +120,24 @@ npx --yes litclaude-ai@latest install --yolo
78
120
  `safe` adds no permission rules. `balanced` adds bounded read/search and routine
79
121
  Git, npm, and Node rules. `yolo` adds broader edit/write patterns. These modes
80
122
  write bounded entries under Claude's `permissions.allow` and `permissions.deny`.
123
+
124
+ ### Install-time questions
125
+
126
+ On a TTY the installer asks two questions: the HUD brand color and the LitClaude
127
+ output style. The output-style question offers `None / keep current`,
128
+ ASD-STE100, and ELI5 (each in English and 한국어); a LitClaude style is written to
129
+ Claude's global `outputStyle` only when you pick one, never over a value you set
130
+ yourself, and `uninstall` removes it again only if it is still the LitClaude-written
131
+ value. `LITCLAUDE_OUTPUT_STYLE` and `LITCLAUDE_HUD_ACCENT` answer the questions
132
+ non-interactively, and `--yes` skips every question with today's shipped defaults:
133
+
134
+ ```bash
135
+ npx --yes litclaude-ai@latest install --yes
136
+ ```
137
+
138
+ The installer never asks for a model or reasoning effort: model selection is
139
+ host-owned — Claude Code picks its own models — and the summary prints
140
+ `Model selection: host-owned`.
81
141
  Existing settings are preserved; LitClaude tracks and removes only rules it
82
142
  inserted.
83
143
 
@@ -107,6 +167,30 @@ the hook; namespaced slash commands use Claude Code's native command surface and
107
167
  do not double-activate the hook. For an explicit skill invocation, use a route
108
168
  such as `/litclaude:lit-loop`.
109
169
 
170
+ **Where Claude Code hands control to LitClaude.** Session and tool events feed the rules, routing, authority, and ledger surfaces; together they expose the package's 34 skills, 17 commands, and 11 agents without hiding the host boundary.
171
+
172
+ ```mermaid
173
+ flowchart LR
174
+ subgraph CC["Claude Code"]
175
+ H1["SessionStart"]; H2["UserPromptSubmit"]; H3["PreToolUse"]
176
+ H4["PostToolUse"]; H5["Stop"]; H6["SubagentStart / SubagentStop"]; H7["SessionEnd"]
177
+ end
178
+ subgraph LC["LitClaude plugin"]
179
+ RULES["rules engine<br/>project rules into context"]
180
+ ROUTE["trigger routing<br/><code>lit</code> · <code>/litclaude:*</code>"]
181
+ AUTH["bounded authority<br/>pause on a new boundary"]
182
+ LEDGER[("durable ledger<br/><code>.litclaude/</code>")]
183
+ end
184
+ H1 --> RULES --> LEDGER
185
+ H2 --> ROUTE --> LEDGER
186
+ H3 --> AUTH
187
+ H4 --> LEDGER
188
+ H5 --> LEDGER
189
+ H6 --> LEDGER
190
+ H7 --> LEDGER
191
+ LC --> S["34 skills · 17 commands · 11 agents"]
192
+ ```
193
+
110
194
  ## Core routes
111
195
 
112
196
  | Type this | Purpose |
@@ -126,7 +210,49 @@ such as `/litclaude:lit-loop`.
126
210
  | `lit-scientific-visualization` | Prepare publication figures; also `/litclaude:lit-scientific-visualization` |
127
211
  | `litclaude wikify <capture/save/review/query/config>` | Manage reviewed local structured knowledge |
128
212
  | `browser-drive`, `$browser-drive` | Drive a real page only after a capability probe verifies an external driver; never substitute a fetch, use credentials, or install without approval |
129
- | `skill-observer`, `$skill-observer` | Record bounded skill proposals only; never edit a skill file, and every record stays `applied: false` |
213
+ | `skill-observer`, `$skill-observer` | Review bounded learning signals and manage pending proposals; only an explicit foreground `apply <proposal-id>` may change an eligible agent-owned skill |
214
+
215
+ ## Skill learning loop
216
+
217
+ LitClaude records bounded learning signals only after a validated `SKILL.md`
218
+ consultation: user corrections, repeated tool iterations, and coverage gaps. A
219
+ Stop review treats the bounded, secret-scrubbed transcript excerpt as inert data
220
+ and may queue schema-valid proposals, but it never stores that excerpt or edits a
221
+ skill. Automatic application is disabled (`autoApply: false`); a proposal remains
222
+ `pending` until the user explicitly applies or rejects its exact id.
223
+
224
+ Use `/litclaude:skill-observer list`, `apply <proposal-id>`, `reject
225
+ <proposal-id>`, `rollback <ledger-id>`, `curator status`, or `curator run` from
226
+ the project whose state you want to manage. Apply can write only an eligible
227
+ project `.claude/skills/<name>/SKILL.md` carrying
228
+ `metadata.litclaudeAgentGenerated: "true"`. Bundled skill ids, paths outside
229
+ that root, and existing unmarked user skills are protected. Every mutation is
230
+ recorded in `.litclaude/skill-ledger.jsonl` with content-addressed blobs under
231
+ `.litclaude/skill-ledger-blobs/`; rollback verifies current bytes and restores
232
+ the exact recorded snapshot or fails closed.
233
+
234
+ The deterministic curator runs no more often than every seven days and only
235
+ after two idle hours. By default it marks unused eligible skills stale after 30
236
+ days and archives them after 90 days, taking a backup first. It never deletes or
237
+ consolidates skills. SessionStart runs this maintenance only when project-local
238
+ skill-loop usage state already exists; untouched projects receive no new
239
+ `.litclaude` state.
240
+
241
+ **Why a fresh install can still execute the skills.** A self-contained skill needs an explicit allowlist reason, while a skill that names a corpus must carry that corpus inside the packed tarball. These payload gates prevent a checkout-only reference from becoming a user's runtime failure.
242
+
243
+ ```mermaid
244
+ flowchart LR
245
+ SK["a skill"] --> Q{"does it declare<br/>a capability?"}
246
+ Q -->|"self-contained<br/>procedure"| AL["explicit allowlist entry<br/>with a written reason"]
247
+ Q -->|"needs a corpus"| C["corpus must resolve<br/>inside the <b>packed payload</b>"]
248
+ AL --> G1
249
+ C --> G1["<b>payload-substance</b>"]
250
+ G1 --> G2["<b>cross-product parity</b><br/>one product cannot ship a stub<br/>where the family ships substance"]
251
+ G2 --> G3["<b>referenced-path resolution</b><br/>every path in a SKILL.md<br/>must exist in the tarball"]
252
+ G3 --> OK["installs and works<br/>on a machine that has<br/>nothing else"]
253
+ style C fill:#d4edda,stroke:#155724
254
+ style OK fill:#d4edda,stroke:#155724
255
+ ```
130
256
 
131
257
  `lit start work <plan>` is intentionally a `BLOCKED:` handoff. Use
132
258
  `/start-work` or `/litclaude:start-work` with the approved plan. `lit workflow`
package/README_ko-KR.md CHANGED
@@ -1,4 +1,17 @@
1
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/litclaude-ai@0.4.0/cover.png" width="100%" alt="LitClaude — Claude Code-native workflow package" /></p>
1
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/litclaude-ai@0.4.4/cover.png" width="100%" alt="LitClaude — Claude Code-native workflow package" /></p>
2
+
3
+ ```text
4
+ ██╗ ██╗████████╗
5
+ ██║ ██║╚══██╔══╝
6
+ ██║ ██║ ██║
7
+ ███████╗██║ ██║
8
+ ╚══════╝╚═╝ ╚═╝
9
+ ██████╗██╗ █████╗ ██╗ ██╗██████╗ ███████╗
10
+ ██╔════╝██║ ██╔══██╗██║ ██║██╔══██╗██╔════╝
11
+ ██║ ██║ ███████║██║ ██║██║ ██║█████╗
12
+ ╚██████╗███████╗██╔══██║╚██████╔╝██████╔╝███████╗
13
+ ╚═════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝
14
+ ```
2
15
 
3
16
  <h1 align="center">LitClaude</h1>
4
17
  <p align="center">
@@ -9,7 +22,7 @@
9
22
  </p>
10
23
  <p align="center">
11
24
  <img src="https://img.shields.io/badge/npm-litclaude--ai-cb3837" alt="npm: litclaude-ai" />
12
- <img src="https://img.shields.io/badge/version-0.4.0-2ea44f" alt="version 0.4.0" />
25
+ <img src="https://img.shields.io/badge/version-0.4.4-2ea44f" alt="version 0.4.4" />
13
26
  <img src="https://img.shields.io/badge/Claude%20Code-plugin-blueviolet" alt="Claude Code plugin" />
14
27
  <img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT license" />
15
28
  </p>
@@ -40,6 +53,35 @@ state route, compact status-line HUD를 제공합니다. 한 번 설치하면
40
53
  - local MCP/LSP helper, 구조화된 Wikify knowledge, 안전하게 제거할 수 있는
41
54
  managed HUD
42
55
 
56
+ **이 workflow가 닫히는 조건을 한눈에 보세요.** 각 계획 항목에 binary check가 있어야 다음 단계로 갈 수 있고, 실제 Claude surface에서 evidence를 남기고 임시 QA resource까지 정리해야 하나의 slice가 끝납니다. Test가 통과했다는 사실만으로는 충분하지 않습니다.
57
+
58
+ ```mermaid
59
+ flowchart TD
60
+ R["a request<br/>make it better"] --> DI["<b>deep-interview</b><br/>turn it into a decision-complete brief"]
61
+ DI --> P["<b>lit-plan</b><br/>objective · non-goals<br/>action / output / <b>binary verification</b>"]
62
+ P --> GATE{"user approves?"}
63
+ GATE -->|no| P
64
+ GATE -->|yes| SW["<b>start-work</b><br/>execute one slice"]
65
+
66
+ subgraph LOOP["each slice: RED to GREEN to SURFACE to CLEAN"]
67
+ SW --> RED["failing test first"]
68
+ RED --> GREEN["smallest change that passes"]
69
+ GREEN --> SURF["exercise the <b>real surface</b><br/>not just the test"]
70
+ SURF --> CLEAN["tear down · cleanup receipt"]
71
+ end
72
+
73
+ CLEAN --> EV{"evidence complete?"}
74
+ EV -->|"tests only"| SW
75
+ EV -->|"artifact + receipt"| RW["<b>review-work</b><br/>scope · evidence · payload<br/>security · real surface"]
76
+ RW -->|findings| SW
77
+ RW -->|clean| HO["<b>lit-handoff</b><br/>resumable packet"]
78
+
79
+ style GATE fill:#fff3cd,stroke:#856404
80
+ style EV fill:#fff3cd,stroke:#856404
81
+ style SURF fill:#d4edda,stroke:#155724
82
+ style RW fill:#d1ecf1,stroke:#0c5460
83
+ ```
84
+
43
85
  ## 설치
44
86
 
45
87
  현재 공개된 package를 설치합니다.
@@ -52,13 +94,13 @@ npx --yes litclaude-ai@latest install
52
94
  뒤 고정합니다.
53
95
 
54
96
  ```bash
55
- npm view litclaude-ai@0.4.0 version
97
+ npm view litclaude-ai@0.4.4 version
56
98
  ```
57
99
 
58
- 조회 결과가 `0.4.0`이면 exact install을 사용할 수 있습니다.
100
+ 조회 결과가 `0.4.4`이면 exact install을 사용할 수 있습니다.
59
101
 
60
102
  ```bash
61
- npx --yes litclaude-ai@0.4.0 install
103
+ npx --yes litclaude-ai@0.4.4 install
62
104
  ```
63
105
 
64
106
  그렇지 않으면 명시적인 human publication을 기다립니다. Pin은 그 뒤에 사용합니다.
@@ -109,6 +151,30 @@ namespaced slash command는 Claude Code native command surface에서 처리되
109
151
  hook을 중복 활성화하지 않습니다. 명시적으로 skill을 실행하려면
110
152
  `/litclaude:lit-loop` 같은 route를 사용하세요.
111
153
 
154
+ **Claude Code와 LitClaude가 만나는 지점입니다.** Session과 tool event는 rules, routing, authority, ledger surface로 들어가며, 그 결과 34개 skill·17개 command·11개 agent가 host 경계를 넘지 않고 연결됩니다.
155
+
156
+ ```mermaid
157
+ flowchart LR
158
+ subgraph CC["Claude Code"]
159
+ H1["SessionStart"]; H2["UserPromptSubmit"]; H3["PreToolUse"]
160
+ H4["PostToolUse"]; H5["Stop"]; H6["SubagentStart / SubagentStop"]; H7["SessionEnd"]
161
+ end
162
+ subgraph LC["LitClaude plugin"]
163
+ RULES["rules engine<br/>project rules into context"]
164
+ ROUTE["trigger routing<br/><code>lit</code> · <code>/litclaude:*</code>"]
165
+ AUTH["bounded authority<br/>pause on a new boundary"]
166
+ LEDGER[("durable ledger<br/><code>.litclaude/</code>")]
167
+ end
168
+ H1 --> RULES --> LEDGER
169
+ H2 --> ROUTE --> LEDGER
170
+ H3 --> AUTH
171
+ H4 --> LEDGER
172
+ H5 --> LEDGER
173
+ H6 --> LEDGER
174
+ H7 --> LEDGER
175
+ LC --> S["34 skills · 17 commands · 11 agents"]
176
+ ```
177
+
112
178
  ## 주요 라우트
113
179
 
114
180
  | 입력 | 용도 |
@@ -128,7 +194,49 @@ hook을 중복 활성화하지 않습니다. 명시적으로 skill을 실행하
128
194
  | `lit-scientific-visualization` | 출판용 figure를 준비합니다. `/litclaude:lit-scientific-visualization`도 지원합니다. |
129
195
  | `litclaude wikify <capture/save/review/query/config>` | 검토 기반 local structured knowledge를 관리합니다. |
130
196
  | `browser-drive`, `$browser-drive` | 외부 driver capability probe가 확인된 뒤에만 실제 page를 조작합니다. fetch로 대체하지 않으며 credential 사용과 승인 없는 설치를 하지 않습니다. |
131
- | `skill-observer`, `$skill-observer` | 제한된 skill proposal만 기록합니다. skill file은 수정하지 않으며 모든 기록은 `applied: false`로 남습니다. |
197
+ | `skill-observer`, `$skill-observer` | 제한된 learning signal을 검토하고 pending proposal을 관리합니다. 명시적인 foreground `apply <proposal-id>`만 eligible agent-owned skill을 변경할 수 있습니다. |
198
+
199
+ ## Skill learning loop
200
+
201
+ LitClaude는 검증된 `SKILL.md` consultation 뒤에만 user correction, 반복된 tool
202
+ iteration, coverage gap을 제한된 learning signal로 기록합니다. Stop review는
203
+ secret을 제거한 bounded transcript excerpt를 inert data로 다루며 schema-valid
204
+ proposal을 queue할 수 있지만, excerpt 자체를 저장하거나 skill을 수정하지
205
+ 않습니다. 자동 적용은 꺼져 있고(`autoApply: false`), 사용자가 정확한 id를
206
+ 명시해 apply 또는 reject하기 전까지 proposal은 `pending`입니다.
207
+
208
+ 관리할 state가 있는 project에서 `/litclaude:skill-observer list`, `apply
209
+ <proposal-id>`, `reject <proposal-id>`, `rollback <ledger-id>`, `curator
210
+ status`, `curator run`을 사용합니다. Apply는
211
+ `metadata.litclaudeAgentGenerated: "true"`를 가진 eligible project
212
+ `.claude/skills/<name>/SKILL.md`에만 쓸 수 있습니다. Bundled skill id, 이 root
213
+ 밖의 path, marker가 없는 기존 user skill은 보호됩니다. 모든 mutation은
214
+ `.litclaude/skill-ledger.jsonl`에 기록되고 content-addressed blob은
215
+ `.litclaude/skill-ledger-blobs/`에 저장됩니다. Rollback은 현재 byte를 검증한
216
+ 뒤 기록된 exact snapshot을 복원하며, 검증할 수 없으면 fail closed합니다.
217
+
218
+ Deterministic curator는 7일보다 자주 실행되지 않고 2시간 idle 뒤에만
219
+ 실행됩니다. 기본값은 eligible skill을 30일 뒤 stale로 표시하고 90일 뒤 먼저
220
+ backup한 다음 archive하는 것입니다. Skill을 delete하거나 consolidate하지
221
+ 않습니다. SessionStart maintenance는 project-local skill-loop usage state가 이미
222
+ 있을 때만 실행되므로 untouched project에 새 `.litclaude` state를 만들지
223
+ 않습니다.
224
+
225
+ **아무것도 남아 있지 않은 machine에서도 skill이 작동하는 이유입니다.** Self-contained skill은 allowlist에 명시적인 근거가 있어야 하고, corpus를 참조하는 skill은 packed tarball 안에서 그 corpus를 찾아야 합니다. 이 payload gate가 checkout에만 남은 reference를 설치 후 장애로 만들지 않습니다.
226
+
227
+ ```mermaid
228
+ flowchart LR
229
+ SK["a skill"] --> Q{"does it declare<br/>a capability?"}
230
+ Q -->|"self-contained<br/>procedure"| AL["explicit allowlist entry<br/>with a written reason"]
231
+ Q -->|"needs a corpus"| C["corpus must resolve<br/>inside the <b>packed payload</b>"]
232
+ AL --> G1
233
+ C --> G1["<b>payload-substance</b>"]
234
+ G1 --> G2["<b>cross-product parity</b><br/>one product cannot ship a stub<br/>where the family ships substance"]
235
+ G2 --> G3["<b>referenced-path resolution</b><br/>every path in a SKILL.md<br/>must exist in the tarball"]
236
+ G3 --> OK["installs and works<br/>on a machine that has<br/>nothing else"]
237
+ style C fill:#d4edda,stroke:#155724
238
+ style OK fill:#d4edda,stroke:#155724
239
+ ```
132
240
 
133
241
  `lit start work <plan>`은 의도적으로 `BLOCKED:` handoff를 반환합니다. 승인된
134
242
  plan과 함께 `/start-work` 또는 `/litclaude:start-work`를 사용하세요. `lit
@@ -1,6 +1,6 @@
1
1
  # LitClaude Release Checklist
2
2
 
3
- Status: `litclaude-ai@0.4.0` is the current release candidate — exact canonical
3
+ Status: `litclaude-ai@0.4.4` is the current release candidate — exact canonical
4
4
  frontend corpus plus Claude-native `autoresearch`, `autoconference`, and `wikify`
5
5
  workflow-family integration. It byte-pins the frontend library, legal companions,
6
6
  family source closures, and adapters through independent commitments and package
@@ -45,16 +45,24 @@ side-effect-free, the launcher starts only a separate Claude Code
45
45
  print/background worker, and the release preserves the Korean polishing
46
46
  command, strict multi-agent review pipeline, fidelity guardrails, package
47
47
  hygiene checks, native route gates, and safe start-work handoff behavior.
48
- `package.json` is aligned to `0.4.0`,
49
- `plugins/litclaude/.claude-plugin/plugin.json` is aligned to `0.4.0`, and the
50
- plugin-local MCP server reports `0.4.0`.
51
-
52
- This candidate adds machine-readable output-channel declarations across the
53
- shipped skill corpus and a `PostToolUse` hedge-feedback path that consumes those
54
- declarations after reader-facing writes. Two isolated A/B experiments found no
55
- measurable behavior change from the declaration prose alone; this release
56
- therefore treats the declaration as guard metadata, not as evidence that prose
57
- instructions by themselves make generated documents cleaner.
48
+ `package.json` is aligned to `0.4.4`,
49
+ `plugins/litclaude/.claude-plugin/plugin.json` is aligned to `0.4.4`, and the
50
+ plugin-local MCP server reports `0.4.4`.
51
+
52
+ This candidate adds an approval-gated skill learning loop. Validated
53
+ consultations, bounded corrections, iteration signals, and coverage gaps may
54
+ produce pending proposals, but hooks and model reviews never apply them.
55
+ Foreground apply is restricted to marked agent-owned project skills, with
56
+ byte-exact ledger-backed rollback. The deterministic curator backs up and
57
+ archives eligible skills on its bounded schedule, never deletes or consolidates,
58
+ and runs at SessionStart only when project-local usage state already exists.
59
+ Automatic apply remains disabled.
60
+
61
+ The 0.4.0 release added machine-readable output-channel declarations across the
62
+ shipped skill corpus and a `PostToolUse` hedge-feedback path. Two isolated A/B
63
+ experiments found no measurable behavior change from declaration prose alone,
64
+ so the declaration remains guard metadata rather than evidence that prose
65
+ instructions by themselves improve generated documents.
58
66
 
59
67
  This release carries the v0.2.2 Dynamic workflow hardening surfaces:
60
68
  `/dynamic-workflow`, `workflow-check --json`, native `/goal` fallback guidance,
@@ -287,9 +295,9 @@ checkout and from an isolated install of the packed tarball:
287
295
  Before requesting publication approval, confirm these artifacts from the current
288
296
  checkout:
289
297
 
290
- - `package.json` version is `0.4.0`.
291
- - `plugins/litclaude/.claude-plugin/plugin.json` version is `0.4.0`.
292
- - `plugins/litclaude/bin/litclaude-mcp.js` reports server version `0.4.0`.
298
+ - `package.json` version is `0.4.4`.
299
+ - `plugins/litclaude/.claude-plugin/plugin.json` version is `0.4.4`.
300
+ - `plugins/litclaude/bin/litclaude-mcp.js` reports server version `0.4.4`.
293
301
  - Prompt-hook tests cover bundled `SKILL.md` body injection for bare `hyperplan`, `litresearch`, `lit research`, `init-deep`, and explicit leading `$start-work`; diagnostic/copy mentions stay inert while leading natural-language `lit start work` stays BLOCKED.
294
302
  - `lit search` and `lit query` route to `/litclaude:litresearch` without activating on slash mentions, code spans, or non-lit prompts.
295
303
  - Litresearch web lanes require public API/feed preference, validator-first checks, route traces, prompt-injection quarantine, and honest auth/paywall/private-data stop reasons.