litclaude-ai 0.3.28 โ†’ 0.3.29

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 (43) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +37 -6
  3. package/README_ko-KR.md +35 -6
  4. package/RELEASE_CHECKLIST.md +38 -8
  5. package/bin/litclaude-ai.js +63 -2
  6. package/docs/hooks.md +20 -0
  7. package/docs/workflow-compatibility-audit.md +4 -0
  8. package/package.json +1 -1
  9. package/plugins/litclaude/.claude-plugin/plugin.json +1 -1
  10. package/plugins/litclaude/bin/litclaude-hook.js +55 -2
  11. package/plugins/litclaude/bin/litclaude-mcp.js +1 -1
  12. package/plugins/litclaude/bin/litclaude-scientific-visualization-doctor.js +135 -0
  13. package/plugins/litclaude/commands/lit-handoff.md +69 -0
  14. package/plugins/litclaude/commands/lit-scientific-visualization.md +65 -0
  15. package/plugins/litclaude/lib/bundled-skills-integrity.mjs +105 -0
  16. package/plugins/litclaude/skills/lit-handoff/SKILL.md +75 -0
  17. package/plugins/litclaude/skills/lit-scientific-visualization/SKILL.md +80 -0
  18. package/plugins/litclaude/vendor/022_handoff/SKILL.md +199 -0
  19. package/plugins/litclaude/vendor/022_handoff/evals/evals.json +154 -0
  20. package/plugins/litclaude/vendor/022_handoff/examples/HANDOFF-example-generic-auth-refactor.md +97 -0
  21. package/plugins/litclaude/vendor/022_handoff/templates/HANDOFF.md +121 -0
  22. package/plugins/litclaude/vendor/045_scientific-visualization/SKILL.md +283 -0
  23. package/plugins/litclaude/vendor/045_scientific-visualization/assets/color_palettes.py +197 -0
  24. package/plugins/litclaude/vendor/045_scientific-visualization/assets/nature.mplstyle +75 -0
  25. package/plugins/litclaude/vendor/045_scientific-visualization/assets/presentation.mplstyle +74 -0
  26. package/plugins/litclaude/vendor/045_scientific-visualization/assets/publication.mplstyle +78 -0
  27. package/plugins/litclaude/vendor/045_scientific-visualization/evals/evals.json +158 -0
  28. package/plugins/litclaude/vendor/045_scientific-visualization/references/color_palettes.md +380 -0
  29. package/plugins/litclaude/vendor/045_scientific-visualization/references/journal_requirements.md +359 -0
  30. package/plugins/litclaude/vendor/045_scientific-visualization/references/matplotlib_examples.md +608 -0
  31. package/plugins/litclaude/vendor/045_scientific-visualization/references/mdanalysis_martini_visualization.md +85 -0
  32. package/plugins/litclaude/vendor/045_scientific-visualization/references/publication_guidelines.md +217 -0
  33. package/plugins/litclaude/vendor/045_scientific-visualization/references/seaborn_for_publications.md +293 -0
  34. package/plugins/litclaude/vendor/045_scientific-visualization/scripts/figure_export.py +238 -0
  35. package/plugins/litclaude/vendor/045_scientific-visualization/scripts/style_presets.py +467 -0
  36. package/plugins/litclaude/vendor/045_scientific-visualization/tests/test_figure_export.py +51 -0
  37. package/plugins/litclaude/vendor/045_scientific-visualization/tests/test_style_presets.py +114 -0
  38. package/plugins/litclaude/vendor/NOTICE.md +8 -0
  39. package/plugins/litclaude/vendor/licenses/022_handoff-MIT.txt +21 -0
  40. package/plugins/litclaude/vendor/licenses/045_scientific-visualization-MIT.txt +21 -0
  41. package/plugins/litclaude/vendor/provenance/022_handoff.md +16 -0
  42. package/plugins/litclaude/vendor/provenance/045_scientific-visualization.md +34 -0
  43. package/scripts/doctor.mjs +18 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.29 - 2026-07-18 โ€” bundled handoff and scientific visualization
4
+
5
+ - Bundle the approved exact-source `022_handoff` and
6
+ `045_scientific-visualization` corpora with their licenses, provenance,
7
+ scripts, assets, and canonical-source integrity records.
8
+ - Add Claude-native command and exact-bare prompt-hook routes for `handoff` and
9
+ `lit-scientific-visualization`, including visible route-specific
10
+ `๐Ÿ”ฅ LITBURN IGNITED` banners and inert near-miss handling.
11
+ - Verify installed-package skill discovery, immutable payload checks, script and
12
+ asset path resolution, and honest read-only dependency diagnostics for the
13
+ scientific visualization workflow without silently installing Python packages.
14
+
3
15
  ## 0.3.28 - 2026-07-14 โ€” explicit start-work activation
4
16
 
5
17
  - Require the `$start-work` shorthand and natural `lit start work` activation
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.28-2ea44f" />
12
+ <img src="https://img.shields.io/badge/version-0.3.29-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,10 +22,10 @@
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.28` for personal install
25
+ This checkout is prepared as `litclaude-ai@0.3.29` 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.28 release material requires explicit leading start-work invocations so diagnostic or copied mentions remain inert. The v0.3.27 release material adds a structured, animated five-stage installer with a success or failure receipt while preserving deterministic automation output. The v0.3.26 release material adds adaptive objective-achievable planning, draft-plan review, and orchestration readiness hardening. The v0.3.25 release material aligns portable details, public-read, litgoal status JSON, and evidence wording. The v0.3.24 release material aligns auxiliary skill inventories and advisory probes. The v0.3.23
28
+ Future package releases still require explicit user approval. The v0.3.29 release material bundles exact-source `lit-handoff` and `lit-scientific-visualization` skills with Claude-native commands, exact-bare hook invocation, visible LITBURN banners, installed-payload integrity checks, and read-only scientific dependency diagnostics. The v0.3.28 release material requires explicit leading start-work invocations so diagnostic or copied mentions remain inert. The v0.3.27 release material adds a structured, animated five-stage installer with a success or failure receipt while preserving deterministic automation output. The v0.3.26 release material adds adaptive objective-achievable planning, draft-plan review, and orchestration readiness hardening. The v0.3.25 release material aligns portable details, public-read, litgoal status JSON, and evidence wording. The v0.3.24 release material aligns auxiliary skill inventories and advisory probes. The v0.3.23
29
29
  release materials inject the bundled skill bodies for bare `hyperplan`,
30
30
  `litresearch`, `lit research`, `init-deep`, and explicit `$start-work` prompt-hook routes while
31
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
@@ -78,7 +78,13 @@ activation/read-only polish, and installer permission-preference discipline.
78
78
  `korean-ai-slop-remover`, `review-work`, `frontend-ui-ux`,
79
79
  `git-master`, `comment-checker`, `rules`, `lsp`, `lsp-setup`, `litgoal`,
80
80
  `deep-interview`, `hyperplan`, `init-deep`, `litresearch`,
81
- `lit-plan`, `lit-recap`, `lit-loop`, `start-work`, and `visual-qa`
81
+ `lit-plan`, `lit-recap`, `lit-loop`, `start-work`, `lit-handoff`,
82
+ `lit-scientific-visualization`, and `visual-qa`
83
+ - **Bundled owner-authorized skills** - `lit-handoff` reads the complete immutable
84
+ four-file handoff source and supports the exact bare `handoff` prompt;
85
+ `lit-scientific-visualization` reads the complete immutable 16-file authored
86
+ source, resolves packaged scripts and assets, and reports missing Python or
87
+ matplotlib as `DEGRADED` without silently installing dependencies
82
88
  - **Auxiliary Skill-discovery entries** - `frontend-ui-ux`, `git-master`,
83
89
  `lsp-setup`, and `visual-qa` are shipped skill ids discoverable through
84
90
  Claude Code's native Skill discovery; they intentionally do not add extra
@@ -125,7 +131,7 @@ directory, the normal install command works:
125
131
 
126
132
  ```bash
127
133
  cd /tmp
128
- npx --yes litclaude-ai@0.3.28 install
134
+ npx --yes litclaude-ai@0.3.29 install
129
135
  ```
130
136
 
131
137
  Validate the installed plugin:
@@ -138,7 +144,7 @@ The installer also sets Claude Code's `statusLine` command to the packaged
138
144
  LitClaude HUD. A typical no-color render starts like:
139
145
 
140
146
  ```text
141
- [๐Ÿ”ฅLITCLAUDE v0.3.28] | O4.8 โ”‚ ctx [โ–Žโ–‘โ–‘] 9%/1000k โ”‚ 5h [โ–โ–‘] 4% โ†ป2h15m โ”‚ 1w [โ–Šโ–‘] 35% โ†ป3d6h โ”‚ git main +3 โœ“
147
+ [๐Ÿ”ฅLITCLAUDE v0.3.29] | O4.8 โ”‚ ctx [โ–Žโ–‘โ–‘] 9%/1000k โ”‚ 5h [โ–โ–‘] 4% โ†ป2h15m โ”‚ 1w [โ–Šโ–‘] 35% โ†ป3d6h โ”‚ git main +3 โœ“
142
148
  ```
143
149
 
144
150
  The `โ†ป` suffix is a compact rate-limit reset countdown. It is separated from
@@ -247,6 +253,10 @@ $litgoal <goal operation>
247
253
  /litgoal <goal operation>
248
254
  $start-work plans/example-plan.md
249
255
  /start-work plans/example-plan.md
256
+ handoff
257
+ /litclaude:lit-handoff
258
+ lit-scientific-visualization
259
+ /litclaude:lit-scientific-visualization <publication figure request>
250
260
  ```
251
261
 
252
262
  Expected behavior: LitClaude's prompt hook adds mode-specific `LITWORK MODE
@@ -407,6 +417,8 @@ namespaced commands when you want explicit LitClaude skill activation:
407
417
  /litclaude:review-work <scope to review>
408
418
  /litclaude:litgoal <goal operation>
409
419
  /litclaude:korean-ai-slop-remover <Korean prose or polish request>
420
+ /litclaude:lit-handoff
421
+ /litclaude:lit-scientific-visualization <publication figure request>
410
422
  /litclaude:start-work plans/example-plan.md
411
423
  ```
412
424
 
@@ -430,6 +442,25 @@ the prose being edited as data, preserve facts, numbers, names, quotes, claims,
430
442
  scope, and uncertainty, and avoid adding outside facts unless the user asks for
431
443
  research.
432
444
 
445
+ Use exact bare `handoff`, `/litclaude:lit-handoff`, or
446
+ `Skill(lit-handoff)` for a verified continuation packet. Only the standalone
447
+ bare word activates the prompt hook; mentions, quoted text, compound prompts,
448
+ and slash-command text remain inert. The route begins with
449
+ `๐Ÿ”ฅ LITBURN IGNITED ยท lit-handoff ๐Ÿ”ฅ` and reads the full packaged canonical
450
+ source before selecting a destination.
451
+
452
+ Use exact bare `lit-scientific-visualization`,
453
+ `/litclaude:lit-scientific-visualization`, or
454
+ `Skill(lit-scientific-visualization)` for publication-ready plotting. Only the
455
+ standalone bare token activates the prompt hook; generic visualization prose,
456
+ mentions, quoted or fenced text, mixed prompts, and slash-command text remain
457
+ inert at that hook. The exact-bare hook shows the banner as a visible system
458
+ message and injects the full adapter and canonical source. The route begins with
459
+ `๐Ÿ”ฅ LITBURN IGNITED ยท lit-scientific-visualization ๐Ÿ”ฅ`, resolves `scripts/` and
460
+ `assets/` from the installed package, and uses a read-only dependency preflight.
461
+ Python/matplotlib or optional scientific packages are never installed silently;
462
+ unavailable capabilities are reported as `DEGRADED` with the affected workflow.
463
+
433
464
  ## Commands
434
465
 
435
466
  | Command | Purpose |
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.28-2ea44f" />
12
+ <img src="https://img.shields.io/badge/version-0.3.29-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,11 +26,11 @@
26
26
  > ์„ค์น˜๋˜๋ฏ€๋กœ, ๋งค๋ฒˆ ๊ธด `--plugin-dir` ์—†์ด ์ผ๋ฐ˜ `claude` ์‹คํ–‰์—์„œ
27
27
  > LitClaude skill๊ณผ hook์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
28
28
 
29
- ํ˜„์žฌ checkout์€ `litclaude-ai@0.3.28` ๋ฐฐํฌ ์ค€๋น„์šฉ์œผ๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ์ ์€
29
+ ํ˜„์žฌ checkout์€ `litclaude-ai@0.3.29` ๋ฐฐํฌ ์ค€๋น„์šฉ์œผ๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ์ ์€
30
30
  ๋‹ค๋ฅธ PC์—์„œ๋„ ๋น ๋ฅด๊ฒŒ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ์ธ์šฉ package metadata๋ฅผ ๊ฐ–์ถ”๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
31
31
  npm package metadata๋ฅผ ์ค€๋น„ํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ํ™๋ณด, ๊ณต๊ฐœ ์ €์žฅ์†Œ ์šด์˜, Claude
32
32
  marketplace ๋“ฑ๋ก์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „ ๋ฐฐํฌ๋Š” ํ•ญ์ƒ ๋ณ„๋„์˜ ๋ช…์‹œ์ 
33
- ์Šน์ธ ํ›„์— ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. v0.3.28 release material์€ start-work ํ˜ธ์ถœ์„ prompt ์„ ๋‘์˜ ๋ช…์‹œ์  invocation์œผ๋กœ ์ œํ•œํ•ด ์ง„๋‹จ๋ฌธ์ด๋‚˜ ๋ณต์‚ฌ๋œ ์–ธ๊ธ‰์„ ๋น„ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. v0.3.27 release material์€ success/failure receipt์™€ deterministic automation output์„ ๊ฐ–์ถ˜ 5-stage animated installer๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. v0.3.26 release material์€ adaptive objective-achievable planning, draft-plan review, orchestration readiness hardening์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. v0.3.25 release material์€ portable details, public-read, litgoal status JSON, evidence wording์„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. v0.3.24 release material์€ auxiliary skill inventory์™€ advisory probe๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. v0.3.23 release material์€ bare `hyperplan`,
33
+ ์Šน์ธ ํ›„์— ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. v0.3.29 release material์€ exact-source `lit-handoff`์™€ `lit-scientific-visualization` skill, Claude-native command, exact-bare hook invocation, visible LITBURN banner, installed-payload integrity check, read-only scientific dependency diagnostic์„ ํ•จ๊ป˜ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. v0.3.28 release material์€ start-work ํ˜ธ์ถœ์„ prompt ์„ ๋‘์˜ ๋ช…์‹œ์  invocation์œผ๋กœ ์ œํ•œํ•ด ์ง„๋‹จ๋ฌธ์ด๋‚˜ ๋ณต์‚ฌ๋œ ์–ธ๊ธ‰์„ ๋น„ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. v0.3.27 release material์€ success/failure receipt์™€ deterministic automation output์„ ๊ฐ–์ถ˜ 5-stage animated installer๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. v0.3.26 release material์€ adaptive objective-achievable planning, draft-plan review, orchestration readiness hardening์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. v0.3.25 release material์€ portable details, public-read, litgoal status JSON, evidence wording์„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. v0.3.24 release material์€ auxiliary skill inventory์™€ advisory probe๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. v0.3.23 release material์€ bare `hyperplan`,
34
34
  `litresearch`, `lit research`, `init-deep`, explicit `$start-work` prompt-hook route์—
35
35
  bundled skill body๋ฅผ ์ฃผ์ž…ํ•˜๋ฉด์„œ, v0.3.19 adversarial planning
36
36
  skill, v0.3.18 read-only `lit-recap` session recap surface, v0.3.17 ๋ณ„๋„ worker ๊ธฐ๋ฐ˜ native `/goal`
@@ -82,7 +82,12 @@ litresearch activation/read-only polish๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
82
82
  `korean-ai-slop-remover`, `review-work`, `frontend-ui-ux`,
83
83
  `git-master`, `comment-checker`, `rules`, `lsp`, `lsp-setup`, `litgoal`,
84
84
  `deep-interview`, `hyperplan`, `init-deep`, `litresearch`,
85
- `lit-plan`, `lit-recap`, `lit-loop`, `start-work`, `visual-qa`
85
+ `lit-plan`, `lit-recap`, `lit-loop`, `start-work`, `lit-handoff`,
86
+ `lit-scientific-visualization`, `visual-qa`
87
+ - **์›๋ณธ ๋ณด์กด bundled skills** - `lit-handoff`๋Š” ์Šน์ธ๋œ 4๊ฐœ handoff ์›๋ณธ
88
+ ํŒŒ์ผ์„, `lit-scientific-visualization`์€ ์Šน์ธ๋œ authored ์›๋ณธ 16๊ฐœ๋ฅผ
89
+ byte-identicalํ•˜๊ฒŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. Python ๋˜๋Š” matplotlib์ด ์—†์œผ๋ฉด ์ž๋™
90
+ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‹น capability๋ฅผ `DEGRADED`๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.
86
91
  - **Auxiliary Skill-discovery entries** - `frontend-ui-ux`, `git-master`,
87
92
  `lsp-setup`, `visual-qa`๋Š” Claude Code native Skill discovery๋กœ ์ฐพ๋Š”
88
93
  shipped skill id์ž…๋‹ˆ๋‹ค. ๋ณ„๋„์˜ slash route๋‚˜ dollar prompt route๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€
@@ -126,7 +131,7 @@ checkout์„ ๋จผ์ € ํ•ด์„ํ•ด์„œ `sh: litclaude-ai: command not found`๋กœ ์‹คํŒจ
126
131
 
127
132
  ```bash
128
133
  cd /tmp
129
- npx --yes litclaude-ai@0.3.28 install
134
+ npx --yes litclaude-ai@0.3.29 install
130
135
  ```
131
136
 
132
137
  ์„ค์น˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
@@ -139,7 +144,7 @@ installer๋Š” Claude Code์˜ `statusLine` command๋„ packaged LitClaude HUD๋กœ
139
144
  ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ƒ‰์ƒ์„ ์ œ๊ฑฐํ•œ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
140
145
 
141
146
  ```text
142
- [๐Ÿ”ฅLITCLAUDE v0.3.28] | O4.8 โ”‚ ctx [โ–Žโ–‘โ–‘] 9%/1000k โ”‚ 5h [โ–โ–‘] 4% โ†ป2h15m โ”‚ 1w [โ–Šโ–‘] 35% โ†ป3d6h โ”‚ git main +3 โœ“
147
+ [๐Ÿ”ฅLITCLAUDE v0.3.29] | O4.8 โ”‚ ctx [โ–Žโ–‘โ–‘] 9%/1000k โ”‚ 5h [โ–โ–‘] 4% โ†ป2h15m โ”‚ 1w [โ–Šโ–‘] 35% โ†ป3d6h โ”‚ git main +3 โœ“
143
148
  ```
144
149
 
145
150
  `โ†ป` ํ‘œ์‹œ๋Š” rate-limit reset๊นŒ์ง€ ๋‚จ์€ ์‹œ๊ฐ„์„ ์งง๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” countdown์ž…๋‹ˆ๋‹ค.
@@ -240,6 +245,10 @@ $litgoal <goal operation>
240
245
  /litgoal <goal operation>
241
246
  $start-work plans/example-plan.md
242
247
  /start-work plans/example-plan.md
248
+ handoff
249
+ /litclaude:lit-handoff
250
+ lit-scientific-visualization
251
+ /litclaude:lit-scientific-visualization <์ถœํŒ์šฉ figure ์š”์ฒญ>
243
252
  ```
244
253
 
245
254
  ๊ธฐ๋Œ€ ๋™์ž‘์€ LitClaude prompt hook์ด ์ž์—ฐ์–ด LIT route๋ณ„ mode-specific
@@ -380,6 +389,8 @@ command๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
380
389
  /litclaude:review-work <๊ฒ€ํ† ํ•  ๋ฒ”์œ„>
381
390
  /litclaude:litgoal <goal operation>
382
391
  /litclaude:korean-ai-slop-remover <ํ•œ๊ตญ์–ด ๋ฌธ์žฅ ๋˜๋Š” ๋‹ค๋“ฌ๊ธฐ ์š”์ฒญ>
392
+ /litclaude:lit-handoff
393
+ /litclaude:lit-scientific-visualization <์ถœํŒ์šฉ figure ์š”์ฒญ>
383
394
  /litclaude:start-work plans/example-plan.md
384
395
  ```
385
396
 
@@ -403,6 +414,24 @@ mode์—์„œ ๋ฐ”๋กœ ๋‹ค๋“ฌ๊ณ , ๊ธธ๊ฑฐ๋‚˜ ๋ฏผ๊ฐํ•˜๊ฑฐ๋‚˜ review/redo/fidelity ํ™•
403
414
  ๋ฒ”์œ„, ๋ถˆํ™•์‹ค์„ฑ์„ ๋ณด์กดํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ research๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š์œผ๋ฉด ์™ธ๋ถ€ ์‚ฌ์‹ค์„
404
415
  ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
405
416
 
417
+ ์ •ํ™•ํžˆ `handoff` ํ•œ ๋‹จ์–ด๋งŒ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ `/litclaude:lit-handoff`,
418
+ `Skill(lit-handoff)`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒ€์ฆ๋œ continuation packet ํ๋ฆ„์ด
419
+ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์–ธ๊ธ‰, ์ธ์šฉ, compound prompt, slash-command ๋ฌธ์ž์—ด์€ hook์„
420
+ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฒซ ์ค„์€ `๐Ÿ”ฅ LITBURN IGNITED ยท lit-handoff ๐Ÿ”ฅ`์ด๊ณ ,
421
+ ํŒจํ‚ค์ง€์— ํฌํ•จ๋œ ์›๋ณธ์„ ์ „๋ถ€ ์ฝ์€ ๋’ค ๋ชฉ์ ์ง€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
422
+
423
+ ์ถœํŒ์šฉ figure์—๋Š” ์ •ํ™•ํ•œ bare `lit-scientific-visualization`,
424
+ `/litclaude:lit-scientific-visualization`, ๋˜๋Š”
425
+ `Skill(lit-scientific-visualization)`์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๊นฅ ๊ณต๋ฐฑ์„ ์ œ์™ธํ•œ ์ „์ฒด prompt๊ฐ€
426
+ ์ด bare token๊ณผ ์ผ์น˜ํ•  ๋•Œ๋งŒ prompt hook์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ visualize,
427
+ plot, chart ํ‘œํ˜„, ์–ธ๊ธ‰, ์ธ์šฉยทfence, mixed prompt, slash-command ๋ฌธ์ž์—ด์€
428
+ ๋น„ํ™œ์„ฑ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. exact-bare hook์€ ๋ฐฐ๋„ˆ๋ฅผ visible system message๋กœ ํ‘œ์‹œํ•˜๊ณ 
429
+ ์ „์ฒด adapter์™€ canonical source๋ฅผ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ์ค„์€
430
+ `๐Ÿ”ฅ LITBURN IGNITED ยท lit-scientific-visualization ๐Ÿ”ฅ`์ด๋ฉฐ ์„ค์น˜๋œ ํŒจํ‚ค์ง€์˜
431
+ `scripts/`์™€ `assets/`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Python, matplotlib, ์„ ํƒ scientific
432
+ package๋Š” ๋ชฐ๋ž˜ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ , ์—†์œผ๋ฉด ์˜ํ–ฅ๋ฐ›๋Š” workflow๋ฅผ `DEGRADED`๋กœ
433
+ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.
434
+
406
435
  ## ๋ช…๋ น์–ด
407
436
 
408
437
  | ๋ช…๋ น์–ด | ์šฉ๋„ |
@@ -1,7 +1,10 @@
1
1
  # LitClaude Release Checklist
2
2
 
3
- Status: `litclaude-ai@0.3.28` is the current release candidate โ€” explicit
4
- leading start-work activation guards plus a structured five-stage interactive
3
+ Status: `litclaude-ai@0.3.29` is the current release candidate โ€” bundled
4
+ exact-source `lit-handoff` and `lit-scientific-visualization` skills with
5
+ Claude-native command routes, exact-bare hook invocation, visible LITBURN
6
+ banners, payload integrity checks, and read-only scientific dependency
7
+ diagnostics, plus explicit leading start-work activation guards and a structured five-stage interactive
5
8
  installer with success/failure receipts and adaptive
6
9
  planning, draft-plan review, and orchestration-safety release on top of the portable
7
10
  details, public-read, litgoal-status, and evidence-wording release and the auxiliary
@@ -17,9 +20,9 @@ side-effect-free, the launcher starts only a separate Claude Code
17
20
  print/background worker, and the release preserves the Korean polishing
18
21
  command, strict multi-agent review pipeline, fidelity guardrails, package
19
22
  hygiene checks, native route gates, and safe start-work handoff behavior.
20
- `package.json` is aligned to `0.3.28`,
21
- `plugins/litclaude/.claude-plugin/plugin.json` is aligned to `0.3.28`, and the
22
- plugin-local MCP server reports `0.3.28`.
23
+ `package.json` is aligned to `0.3.29`,
24
+ `plugins/litclaude/.claude-plugin/plugin.json` is aligned to `0.3.29`, and the
25
+ plugin-local MCP server reports `0.3.29`.
23
26
 
24
27
  This release carries the v0.2.2 Dynamic workflow hardening surfaces:
25
28
  `/dynamic-workflow`, `workflow-check --json`, native `/goal` fallback guidance,
@@ -63,14 +66,41 @@ Use this track when testing from the current checkout:
63
66
 
64
67
  No npm publication is required for this track.
65
68
 
69
+ ## v0.3.29 Bundled Skill Gates
70
+
71
+ Before requesting publication approval, confirm these artifacts from the current
72
+ checkout and from an isolated install of the packed tarball:
73
+
74
+ - `lit-handoff` ships the approved exact four-file canonical corpus plus license
75
+ and provenance metadata, and exact bare `handoff` shows
76
+ `๐Ÿ”ฅ LITBURN IGNITED ยท lit-handoff ๐Ÿ”ฅ` while quoted, fenced, mixed, slash, and
77
+ explanatory near misses remain inert.
78
+ - `lit-scientific-visualization` ships the approved exact 16-file canonical
79
+ corpus plus license and provenance metadata, and exact bare
80
+ `lit-scientific-visualization` shows
81
+ `๐Ÿ”ฅ LITBURN IGNITED ยท lit-scientific-visualization ๐Ÿ”ฅ` while quoted, fenced,
82
+ mixed, slash, generic-visualization, and explanatory near misses remain inert.
83
+ - The scientific adapter reads the full canonical source, resolves packaged
84
+ `scripts/` and `assets/`, and exposes the shipped style presets, figure export
85
+ helpers, and color palettes from the installed package rather than checkout-only
86
+ paths.
87
+ - Installed-payload integrity checks compare the immutable source records and
88
+ fail closed on missing or changed bundled files.
89
+ - `litclaude-scientific-visualization-doctor.js --json` performs read-only
90
+ dependency checks, never installs Python packages, and reports unsupported
91
+ optional workflows as `DEGRADED` rather than claiming availability.
92
+ - `npm pack --dry-run --json` and an isolated consumer install include both
93
+ command routes, both adapted skills, both canonical-source trees, provenance,
94
+ licenses, scripts, assets, and the scientific dependency doctor.
95
+
66
96
  ## v0.2.2 Dynamic Workflow Hardening Gates
67
97
 
68
98
  Before requesting publication approval, confirm these artifacts from the current
69
99
  checkout:
70
100
 
71
- - `package.json` version is `0.3.28`.
72
- - `plugins/litclaude/.claude-plugin/plugin.json` version is `0.3.28`.
73
- - `plugins/litclaude/bin/litclaude-mcp.js` reports server version `0.3.28`.
101
+ - `package.json` version is `0.3.29`.
102
+ - `plugins/litclaude/.claude-plugin/plugin.json` version is `0.3.29`.
103
+ - `plugins/litclaude/bin/litclaude-mcp.js` reports server version `0.3.29`.
74
104
  - 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.
75
105
  - `lit search` and `lit query` route to `/litclaude:litresearch` without activating on slash mentions, code spans, or non-lit prompts.
76
106
  - Litresearch web lanes require public API/feed preference, validator-first checks, route traces, prompt-injection quarantine, and honest auth/paywall/private-data stop reasons.
@@ -17,6 +17,7 @@ import { createInterface } from "node:readline/promises";
17
17
  import { fileURLToPath } from "node:url";
18
18
  import { HUD_ACCENT_THEMES, normalizeHudAccent, themeForAccent } from "../plugins/litclaude/lib/hud-accent-palette.mjs";
19
19
  import { readPublicSource } from "../plugins/litclaude/lib/public-source-reader/reader.mjs";
20
+ import { verifyBundledSkillsIntegrity } from "../plugins/litclaude/lib/bundled-skills-integrity.mjs";
20
21
  import { runStartWorkContinuationCli } from "../plugins/litclaude/lib/start-work-continuation.mjs";
21
22
  import { runLitgoalCli } from "../plugins/litclaude/lib/litgoal/cli.mjs";
22
23
  import { runWorkflowCheckCli } from "../plugins/litclaude/lib/workflow-check.mjs";
@@ -563,6 +564,17 @@ const escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
563
564
 
564
565
  const assertCurrentPluginDetails = (detailsOutput) => {
565
566
  const missing = [];
567
+ const inventorySections = new Map();
568
+ let currentInventory;
569
+ for (const rawLine of detailsOutput.replace(/\u001b\[[0-?]*[ -/]*[@-~]/gu, "").split("\n")) {
570
+ const header = rawLine.trim().match(/^([A-Za-z][A-Za-z -]+)\s*\(\d+\)/u);
571
+ if (header) currentInventory = header[1].trim().toLowerCase();
572
+ if (currentInventory) {
573
+ inventorySections.set(currentInventory, `${inventorySections.get(currentInventory) ?? ""}\n${rawLine}`);
574
+ }
575
+ }
576
+ const skillsInventory = inventorySections.get("skills") ?? "";
577
+
566
578
  if (!new RegExp(`\\b${escapeRegex(version)}\\b`, "u").test(detailsOutput)) {
567
579
  missing.push(`expected version ${version}`);
568
580
  }
@@ -572,9 +584,12 @@ const assertCurrentPluginDetails = (detailsOutput) => {
572
584
  missing.push("expected nonzero Agents inventory with prometheus-planner");
573
585
  }
574
586
 
575
- if (!/\blit-loop\b/u.test(detailsOutput) || !/\blit-plan\b/u.test(detailsOutput)) {
587
+ if (!/\blit-loop\b/u.test(skillsInventory) || !/\blit-plan\b/u.test(skillsInventory)) {
576
588
  missing.push("expected lit-loop and lit-plan skills");
577
589
  }
590
+ if (!/\blit-handoff\b/u.test(skillsInventory) || !/\blit-scientific-visualization\b/u.test(skillsInventory)) {
591
+ missing.push("expected lit-handoff and lit-scientific-visualization skills");
592
+ }
578
593
 
579
594
  if (missing.length > 0) {
580
595
  fail(`Claude plugin details did not show current LitClaude agent inventory: ${missing.join("; ")}. Re-run litclaude install in the intended CLAUDE_CONFIG_DIR.`);
@@ -619,11 +634,27 @@ const resetCurrentPointer = (home, target) => {
619
634
  };
620
635
 
621
636
  const verifyInstalledPayload = ({ home, litClaudeHome, targetPlugin }) => {
622
- for (const relativePath of [".claude-plugin/plugin.json", "hooks/hooks.json", "bin/litclaude-hook.js"]) {
637
+ for (const relativePath of [
638
+ ".claude-plugin/plugin.json",
639
+ "hooks/hooks.json",
640
+ "bin/litclaude-hook.js",
641
+ "bin/litclaude-scientific-visualization-doctor.js",
642
+ "skills/lit-handoff/SKILL.md",
643
+ "commands/lit-handoff.md",
644
+ "vendor/022_handoff/SKILL.md",
645
+ "skills/lit-scientific-visualization/SKILL.md",
646
+ "commands/lit-scientific-visualization.md",
647
+ "vendor/045_scientific-visualization/SKILL.md",
648
+ "vendor/045_scientific-visualization/scripts/style_presets.py",
649
+ ]) {
623
650
  if (!existsSync(join(targetPlugin, relativePath))) {
624
651
  throw new Error(`installed plugin is missing ${relativePath}`);
625
652
  }
626
653
  }
654
+ const integrity = verifyBundledSkillsIntegrity(targetPlugin);
655
+ if (integrity.status !== "PASS") {
656
+ throw new Error(`installed bundled-skill integrity verification failed: ${JSON.stringify(integrity)}`);
657
+ }
627
658
  if (!readInstalledPlugins(home).plugins[pluginKey]?.length) {
628
659
  throw new Error(`Claude registry is missing ${pluginKey}`);
629
660
  }
@@ -747,6 +778,7 @@ const doctor = ({ dryRun }) => {
747
778
  process.stdout.write(`Would run: claude plugin validate ${pluginPath}\n`);
748
779
  process.stdout.write(`Would check Claude plugin registry: ${pluginKey}\n`);
749
780
  process.stdout.write(`Would check Claude statusLine HUD: ${hudCommandForPlugin(pluginPath)}\n`);
781
+ process.stdout.write(`Would run: node ${join(pluginPath, "bin", "litclaude-scientific-visualization-doctor.js")}\n`);
750
782
  return;
751
783
  }
752
784
 
@@ -763,6 +795,23 @@ const doctor = ({ dryRun }) => {
763
795
  "bin/litclaude-mcp.js",
764
796
  "skills/lit-loop/SKILL.md",
765
797
  "skills/lit-plan/SKILL.md",
798
+ "skills/lit-handoff/SKILL.md",
799
+ "commands/lit-handoff.md",
800
+ "vendor/022_handoff/SKILL.md",
801
+ "vendor/022_handoff/evals/evals.json",
802
+ "vendor/022_handoff/examples/HANDOFF-example-generic-auth-refactor.md",
803
+ "vendor/022_handoff/templates/HANDOFF.md",
804
+ "skills/lit-scientific-visualization/SKILL.md",
805
+ "commands/lit-scientific-visualization.md",
806
+ "bin/litclaude-scientific-visualization-doctor.js",
807
+ "vendor/045_scientific-visualization/SKILL.md",
808
+ "vendor/045_scientific-visualization/scripts/style_presets.py",
809
+ "vendor/045_scientific-visualization/scripts/figure_export.py",
810
+ "vendor/045_scientific-visualization/assets/color_palettes.py",
811
+ "vendor/provenance/022_handoff.md",
812
+ "vendor/provenance/045_scientific-visualization.md",
813
+ "vendor/licenses/022_handoff-MIT.txt",
814
+ "vendor/licenses/045_scientific-visualization-MIT.txt",
766
815
  ];
767
816
 
768
817
  for (const file of requiredFiles) {
@@ -772,6 +821,18 @@ const doctor = ({ dryRun }) => {
772
821
 
773
822
  printLspDiagnostics(pluginPath, registry);
774
823
 
824
+ const scientificVisualizationDoctor = spawnSync(
825
+ process.execPath,
826
+ [join(pluginPath, "bin", "litclaude-scientific-visualization-doctor.js")],
827
+ { encoding: "utf8" },
828
+ );
829
+ if (scientificVisualizationDoctor.stdout) process.stdout.write(scientificVisualizationDoctor.stdout);
830
+ if (scientificVisualizationDoctor.stderr) process.stderr.write(scientificVisualizationDoctor.stderr);
831
+ if (scientificVisualizationDoctor.status !== 0) {
832
+ fail("LitClaude bundled-skills payload is incomplete or hash-invalid. Run `litclaude install` again.");
833
+ }
834
+ process.stdout.write("BUNDLED_SKILLS_PAYLOAD_PASS\n");
835
+
775
836
  const claude = spawnSync("claude", ["--version"], { encoding: "utf8" });
776
837
  if (claude.error) {
777
838
  process.stdout.write("CLAUDE_WARNING: claude executable not found in PATH\n");
package/docs/hooks.md CHANGED
@@ -111,6 +111,8 @@ $dynamic-workflow
111
111
  $review-work
112
112
  $litgoal
113
113
  $start-work
114
+ handoff
115
+ lit-scientific-visualization
114
116
  ```
115
117
 
116
118
  When a LIT trigger is present, the hook returns additional context containing
@@ -125,6 +127,24 @@ switch Claude Code agents. The `$start-work` shorthand and natural start-work
125
127
  phrases activate only when they lead the prompt; diagnostic prose and copied or
126
128
  blockquoted mentions remain inert.
127
129
 
130
+ `handoff` is a separate exact-bare route: only the complete prompt `handoff`
131
+ after outer whitespace activates `Skill(lit-handoff)` and injects the complete
132
+ canonical bundled source. It shows
133
+ `๐Ÿ”ฅ LITBURN IGNITED ยท lit-handoff ๐Ÿ”ฅ`. Explanatory mentions, quoted or fenced
134
+ text, compound prompts, `/litclaude:lit-handoff`, and secret-bearing multiline
135
+ content do not activate the hook. The slash command remains a native Claude
136
+ Code command surface.
137
+
138
+ Scientific visualization has one exact-bare UserPromptSubmit route: only the
139
+ complete prompt `lit-scientific-visualization` after outer whitespace activates
140
+ `Skill(lit-scientific-visualization)`, injects the full adapter and canonical
141
+ source, and shows the exact
142
+ `๐Ÿ”ฅ LITBURN IGNITED ยท lit-scientific-visualization ๐Ÿ”ฅ` system banner.
143
+ Generic visualization, plot, chart, figure, and scientific visualization prose,
144
+ mentions, quoted or fenced text, mixed prompts, near misses, and
145
+ `/litclaude:lit-scientific-visualization` text do not activate the prompt hook.
146
+ The slash command remains a native Claude Code command surface.
147
+
128
148
  LitClaude follows the LitClaude goal pattern as an honest native-binding attempt,
129
149
  not as slash-command injection. If Claude Code exposes native goal tools, the
130
150
  guidance tells Claude to inspect `get_goal`, call `create_goal` only when no
@@ -16,6 +16,8 @@ make the missing LitClaude target obvious.
16
16
  | litgoal state/runtime | `commands/litgoal.md`, `skills/litgoal`, `plugins/litclaude/lib/litgoal/`, `.litclaude/litgoal/`, `bin/litclaude-ai.js litgoal ...` commands | Implemented | `litgoal` now has durable state, ledger, checkpoint, steering, quality gate, and review blocker commands through `litclaude litgoal create-goals`, `record-evidence`, `checkpoint`, `steer`, and `record-review-blockers`. |
17
17
  | LIT/start-work discipline | `commands/lit-loop.md`, `commands/lit-plan.md`, `commands/start-work.md`, `skills/lit-loop`, `skills/lit-plan`, `skills/start-work` | Implemented | Existing LIT/start-work surfaces require plan reading, ledger updates, publish boundary checks, verification, manual QA artifacts, cleanup receipts, resume checkpoints, and evidence artifacts. |
18
18
  | hook trigger safety | `hooks/hooks.json`, `bin/litclaude-hook.js`, `test/hooks.test.mjs`, `docs/hooks.md` | Implemented | Hooks use `UserPromptSubmit` trigger detection, exact workflow aliases, near-miss fixtures, prompt injection safe context, and no auto-type behavior for slash commands. |
19
+ | bundled handoff | `skills/lit-handoff`, `commands/lit-handoff.md`, `vendor/022_handoff`, exact-bare hook | Implemented | Four canonical files remain byte-identical; exact bare `handoff` injects the complete source while mentions, compounds, slash text, and secret-bearing prompts remain inert. |
20
+ | bundled scientific visualization | `skills/lit-scientific-visualization`, `commands/lit-scientific-visualization.md`, `vendor/045_scientific-visualization`, exact-bare hook, capability doctor | Implemented | Sixteen authored files remain byte-identical; the exact-bare hook displays the banner and injects the complete adapter/source while mixed and generic prompts stay inert; installed source-root path resolution, dependency DEGRADED status, Python source tests, and real figure export are covered without silent installation. |
19
21
  | agent/command routing | `agents/*.md`, `commands/*.md`, `.claude-plugin/plugin.json`, command discovery tests | Implemented | Agents and commands route planner, executor, verifier, reviewer, librarian, and QA responsibilities into Claude Code surfaces, including review-work and litgoal command files. |
20
22
  | docs/package payload | `README.md`, `README_ko-KR.md`, `docs/*.md`, `package.json`, `.claude-plugin/plugin.json`, `test/workspace-hygiene.test.mjs` | Implemented | Docs, package payload, manifest, install metadata, package file-list, and guarded-token gates are covered by tests; v0.2.0 docs describe local parity without implying publish completion. |
21
23
  | excluded/deferred telemetry | No runtime telemetry package; docs omission note | Omitted | Telemetry is omitted and any network telemetry remains deferred by reason: LitClaude should stay local and quiet unless the user explicitly requests an observable reporting feature. |
@@ -60,6 +62,8 @@ workflow additions:
60
62
  - `litgoal`
61
63
  - `lit-loop`
62
64
  - `lit-plan`
65
+ - `lit-handoff`
66
+ - `lit-scientific-visualization`
63
67
 
64
68
  Auxiliary Skill-discovery entries are part of the public inventory without adding
65
69
  new command routes:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "litclaude-ai",
3
- "version": "0.3.28",
3
+ "version": "0.3.29",
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.28",
4
+ "version": "0.3.29",
5
5
  "author": {
6
6
  "name": "LitClaude contributors"
7
7
  },
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { readFileSync } from "node:fs";
4
+ import { fileURLToPath } from "node:url";
4
5
  import { transcriptHasContextPressure } from "../lib/context-pressure.mjs";
5
6
  import { extractMutatedFilePaths } from "../lib/mutated-file-paths.mjs";
6
7
  import { litgoalGoalsPath } from "../lib/litgoal/paths.mjs";
@@ -93,6 +94,51 @@ ${body}
93
94
  }
94
95
  };
95
96
 
97
+ const isExactBareHandoff = (prompt) => /^\s*handoff\s*$/iu.test(prompt);
98
+ const isExactBareScientificVisualization = (prompt) => /^\s*lit-scientific-visualization\s*$/iu.test(prompt);
99
+
100
+ const handoffContext = () => {
101
+ let canonicalBody;
102
+ const canonicalRoot = fileURLToPath(new URL("../vendor/022_handoff/", import.meta.url));
103
+ try {
104
+ canonicalBody = readFileSync(new URL("SKILL.md", new URL("../vendor/022_handoff/", import.meta.url)), "utf8").trim();
105
+ } catch {
106
+ return "BLOCKED: Exact bare handoff was requested, but the canonical vendor/022_handoff/SKILL.md payload is unavailable. Run the installed LitClaude doctor and reinstall before retrying.";
107
+ }
108
+
109
+ return [
110
+ "HANDOFF MODE ENABLED: begin your reply with the exact banner line `๐Ÿ”ฅ LITBURN IGNITED ยท lit-handoff ๐Ÿ”ฅ` on its own line before anything else.",
111
+ "Treat this exact bare prompt as an explicit request for /litclaude:lit-handoff and Skill(lit-handoff).",
112
+ `Canonical source root: ${canonicalRoot}. Read and follow the complete canonical source body below; resolve its template, example, and eval resources relative to this absolute installed source root rather than the process cwd or ~/skills.`,
113
+ "Prompt safety: this route accepts only the exact bare word handoff after outer whitespace. Mentions, quoted or fenced text, compound prompts, slash commands, and secret-bearing material remain inert and are never echoed into hook context.",
114
+ `<litclaude-canonical-source name="022_handoff">
115
+ ${canonicalBody}
116
+ </litclaude-canonical-source>`,
117
+ ].join("\n\n");
118
+ };
119
+
120
+ const scientificVisualizationContext = () => {
121
+ let canonicalBody;
122
+ const canonicalRoot = fileURLToPath(new URL("../vendor/045_scientific-visualization/", import.meta.url));
123
+ try {
124
+ canonicalBody = readFileSync(new URL("SKILL.md", new URL("../vendor/045_scientific-visualization/", import.meta.url)), "utf8").trim();
125
+ } catch {
126
+ return "BLOCKED: Exact bare lit-scientific-visualization was requested, but the canonical vendor/045_scientific-visualization/SKILL.md payload is unavailable. Run the installed LitClaude doctor and reinstall before retrying.";
127
+ }
128
+
129
+ return [
130
+ "SCIENTIFIC VISUALIZATION MODE ENABLED: begin your reply with the exact banner line `๐Ÿ”ฅ LITBURN IGNITED ยท lit-scientific-visualization ๐Ÿ”ฅ` on its own line before anything else.",
131
+ "Treat this exact bare prompt as an explicit request for /litclaude:lit-scientific-visualization and Skill(lit-scientific-visualization).",
132
+ `Canonical source root: ${canonicalRoot}. Read and follow the complete canonical source body below; resolve its references, scripts, assets, evals, and tests relative to this absolute installed source root rather than the process cwd or ~/skills.`,
133
+ "Prompt safety: this route accepts only the exact bare token lit-scientific-visualization after outer whitespace. Generic visualization language, mentions, quoted or fenced text, mixed prompts, slash commands, and secret-bearing material remain inert and are never echoed into hook context.",
134
+ "Dependency safety: preflight the installed capability first. Never install Python, matplotlib, or optional packages silently; report the affected workflow as DEGRADED when required capabilities are unavailable.",
135
+ ...staticSkillBodyContext({ skillId: "lit-scientific-visualization" }),
136
+ `<litclaude-canonical-source name="045_scientific-visualization">
137
+ ${canonicalBody}
138
+ </litclaude-canonical-source>`,
139
+ ].join("\n\n");
140
+ };
141
+
96
142
  const withoutCode = (text) => text.replace(/```[\s\S]*?```/gu, " ").replace(/`[^`]*`/gu, " ");
97
143
  const rawTriggerText = (text) => withoutCode(text).toLowerCase();
98
144
  const normalizedTriggerText = (text) => rawTriggerText(text).replace(/[_-]+/gu, " ");
@@ -132,6 +178,7 @@ const slashCommandMentions = [
132
178
  "/litclaude:deep-interview",
133
179
  "/litclaude:dynamic-workflow",
134
180
  "/litclaude:init-deep",
181
+ "/litclaude:lit-handoff",
135
182
  "/litclaude:lit-loop",
136
183
  "/litclaude:lit-plan",
137
184
  "/litclaude:lit-recap",
@@ -312,8 +359,14 @@ switch (eventName) {
312
359
  }
313
360
  case "user-prompt-submit": {
314
361
  const prompt = typeof input.prompt === "string" ? input.prompt : "";
315
- const trigger = isDiagnosticLiteralPrompt(prompt) ? undefined : findWorkflowTrigger(prompt);
316
- if (trigger && trigger.discipline === "lit-recap") {
362
+ const exactBareHandoff = isExactBareHandoff(prompt);
363
+ const exactBareScientificVisualization = isExactBareScientificVisualization(prompt);
364
+ const trigger = exactBareHandoff || exactBareScientificVisualization || isDiagnosticLiteralPrompt(prompt) ? undefined : findWorkflowTrigger(prompt);
365
+ if (exactBareHandoff) {
366
+ writeContext(handoffContext(), "๐Ÿ”ฅ LITBURN IGNITED ยท lit-handoff ๐Ÿ”ฅ โ€” LitClaude handoff hook active.");
367
+ } else if (exactBareScientificVisualization) {
368
+ writeContext(scientificVisualizationContext(), "๐Ÿ”ฅ LITBURN IGNITED ยท lit-scientific-visualization ๐Ÿ”ฅ");
369
+ } else if (trigger && trigger.discipline === "lit-recap") {
317
370
  writeContext(recapContext(trigger), "LitClaude lit-recap active: read-only session recap guidance injected.");
318
371
  } else if (trigger) {
319
372
  const systemMessage = trigger.discipline === "deep-interview"
@@ -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.28";
6
+ const serverVersion = "0.3.29";
7
7
 
8
8
  const publicSourceReadTool = {
9
9
  name: "public_source_read",