lithermes-ai 0.5.1 → 0.6.0

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/README.md CHANGED
@@ -57,12 +57,13 @@ Restart any running Hermes CLI or Hermes gateway process. Then open Hermes and t
57
57
  - Interactive install spinner keeps terminal installs lively while redirected or scripted installs stay plain; use `npx lithermes-ai install --yes --no-spinner` for quiet terminal installs.
58
58
  - `start-work`: open or dry-run a LitHermes plan inside Hermes.
59
59
  - LitHermes workflow skill set: `ai-slop-remover`, `comment-checker`,
60
- `debugging`, `frontend-ui-ux`, `lsp`, `programming`, `refactor`,
60
+ `debugging`, `deep-interview`, `frontend-ui-ux`, `lsp`, `programming`, `refactor`,
61
61
  `remove-ai-slops`, `review-work`, `rules`, `start-work`, `lit-plan`,
62
62
  `litgoal`, and `litwork` are installed as `lithermes:*` skills.
63
- - The full plugin payload — the `pre_llm_call` / `subagent_stop` /
64
- `on_session_start` hooks, every skill, and the durable goal tooling — ships in
65
- the bundle exactly as installed, so each release is reproducible and auditable.
63
+ - The full plugin payload — the `pre_llm_call` / `subagent_stop` hooks, every
64
+ skill, and the durable goal tooling — ships in the bundle exactly as installed,
65
+ so each release is reproducible and auditable. Repo-rule loading is handled by
66
+ Hermes' native context-files feature, not a LitHermes hook.
66
67
 
67
68
  ## Requirements
68
69
 
package/README_Ko-KR.md CHANGED
@@ -57,10 +57,10 @@ npx lithermes-ai install --yes
57
57
  - interactive install spinner가 terminal 설치는 더 생동감 있게 보여주고, redirect/script 설치는 기존처럼 plain output을 유지합니다. 조용한 terminal 설치가 필요하면 `npx lithermes-ai install --yes --no-spinner`를 사용합니다.
58
58
  - `start-work`: LitHermes plan을 Hermes 작업으로 엽니다.
59
59
  - LitHermes workflow skill set: `ai-slop-remover`, `comment-checker`,
60
- `debugging`, `frontend-ui-ux`, `lsp`, `programming`, `refactor`,
60
+ `debugging`, `deep-interview`, `frontend-ui-ux`, `lsp`, `programming`, `refactor`,
61
61
  `remove-ai-slops`, `review-work`, `rules`, `start-work`, `lit-plan`,
62
62
  `litgoal`, `litwork`가 `lithermes:*` skill로 함께 설치됩니다.
63
- - 전체 plugin payload — `pre_llm_call` / `subagent_stop` / `on_session_start`
63
+ - 전체 plugin payload — `pre_llm_call` / `subagent_stop`
64
64
  hook, 모든 skill, durable goal tooling — 이 설치 상태 그대로 번들에 들어가므로,
65
65
  각 릴리스는 재현 가능하고 감사할 수 있습니다.
66
66
 
@@ -14,7 +14,8 @@ first-class Hermes skills:
14
14
  session goal manager; criteria + evidence use the durable `goal_*` tools.
15
15
  - Explicit skills are available as:
16
16
  `lithermes:ai-slop-remover`, `lithermes:comment-checker`,
17
- `lithermes:debugging`, `lithermes:frontend-ui-ux`, `lithermes:lsp`,
17
+ `lithermes:debugging`, `lithermes:deep-interview`,
18
+ `lithermes:frontend-ui-ux`, `lithermes:lsp`,
18
19
  `lithermes:programming`, `lithermes:refactor`,
19
20
  `lithermes:remove-ai-slops`, `lithermes:review-work`,
20
21
  `lithermes:rules`, `lithermes:start-work`, `lithermes:lit-plan`,
@@ -36,5 +37,6 @@ plugins:
36
37
  The bundled workflow reference is adapted for LitHermes command names and
37
38
  Hermes gateway behavior. LitHermes runs entirely on Hermes-native primitives
38
39
  (`delegate_task`, the durable `goal_*` tools, and the `pre_llm_call` /
39
- `subagent_stop` / `on_session_start` hooks) and ships no external
40
- prompt-runtime installer in the plugin payload.
40
+ `subagent_stop` hooks) and ships no external
41
+ prompt-runtime installer in the plugin payload. Repo-rule loading is handled by
42
+ Hermes' native context-files feature, not a LitHermes hook.
@@ -22,6 +22,10 @@ PORTED_SKILLS = [
22
22
  "debugging",
23
23
  "Run the LitHermes hypothesis-driven debugging workflow.",
24
24
  ),
25
+ (
26
+ "deep-interview",
27
+ "Run the LitHermes Socratic deep-interview clarity gate before planning.",
28
+ ),
25
29
  (
26
30
  "frontend-ui-ux",
27
31
  "Apply the LitHermes frontend UI/UX review discipline.",
@@ -170,6 +174,12 @@ def register(ctx) -> None:
170
174
  description="Open or dry-run a LitHermes plan against a workspace",
171
175
  args_hint="[plan-name] [--worktree PATH] [--dry-run]",
172
176
  )
177
+ ctx.register_command(
178
+ "deep-interview",
179
+ core.command_deep_interview,
180
+ description="Run the LitHermes Socratic clarity gate before planning/execution",
181
+ args_hint="[--quick|--standard|--deep] <idea>",
182
+ )
173
183
 
174
184
  for name, description in PORTED_SKILLS:
175
185
  ctx.register_skill(
@@ -805,6 +805,46 @@ def command_litgoal(raw_args: str) -> dict[str, str]:
805
805
  }
806
806
 
807
807
 
808
+ def command_deep_interview(raw_args: str) -> dict[str, str]:
809
+ args = parse_args(raw_args)
810
+ workspace = workspace_from_option(args.options.get("worktree"))
811
+ # `--quick|--standard|--deep` are bare profile flags, but parse_args greedily
812
+ # binds the next bare word as a flag value — so `--quick build a widget` would
813
+ # consume "build". Recover any such word back into the idea text.
814
+ profile = "standard"
815
+ for flag in ("deep", "quick", "standard"):
816
+ value = args.options.get(flag)
817
+ if value:
818
+ profile = flag
819
+ if isinstance(value, str):
820
+ args.positional.insert(0, value)
821
+ break
822
+ idea = _join_positional(args.positional)
823
+ agent_lines = [
824
+ idea or "Run a deep-interview clarification pass before planning.",
825
+ "",
826
+ "<lithermes-deep-interview-command>",
827
+ f"workspace: {workspace}",
828
+ f"profile: {profile}",
829
+ "Run the LitHermes deep-interview clarity gate — load the lithermes:deep-interview skill",
830
+ "and follow it. This is a requirements mode, NOT implementation:",
831
+ "- one Socratic question per round, intent before detail; re-score ambiguity each round;",
832
+ "- gather repo facts with read-only search / delegate_task before asking the user;",
833
+ "- keep Non-goals + Decision Boundaries explicit and run one pressure pass before crystallizing;",
834
+ "- persist state under .hermes/lithermes/deep-interview/<slug>-state.json so it can resume.",
835
+ "When the spec is ready, do NOT build here — hand off: /lit-plan to plan it, or /lit-loop to",
836
+ "execute it, carrying the non-goals, decision boundaries, and acceptance criteria forward.",
837
+ "</lithermes-deep-interview-command>",
838
+ ]
839
+ return {
840
+ "display": (
841
+ f"Opened the LitHermes deep-interview clarity gate ({profile} profile).\n"
842
+ "Requirements mode — clarifies, then hands off to /lit-plan or /lit-loop."
843
+ ),
844
+ "agent_message": "\n".join(agent_lines),
845
+ }
846
+
847
+
808
848
  def command_start_work(raw_args: str) -> str | dict[str, str]:
809
849
  args = parse_args(raw_args)
810
850
  workspace = workspace_from_option(args.options.get("worktree"))
@@ -1,15 +1,23 @@
1
1
  {
2
- "syncedAt": "2026-06-13T16:58:49.114Z",
2
+ "syncedAt": "2026-06-14T02:25:40.475Z",
3
3
  "source": "source-reference",
4
- "sourceHash": "367df25c50e5d54bb516cda93fe453be2ec0821924be0136dfbb9e24b117494a",
4
+ "sourceHash": "09f07fa73866ccb4c0a7dc271d4d1ce45a9ac662ff911fab6f4a6d6e7db73c07",
5
5
  "files": [
6
+ {
7
+ "path": "NOTICE.md",
8
+ "sha256": "452ad24ca1ecd65e2f2ab0f21ff6c1cefb13aacf0db875f327b62027106685ab"
9
+ },
10
+ {
11
+ "path": "README.md",
12
+ "sha256": "32bbef20afd99f774502c2b4cbf2e2326d40c4e4cd71108645849dddcc2608c4"
13
+ },
6
14
  {
7
15
  "path": "__init__.py",
8
- "sha256": "3e6b2e469e0ff805391ee741e640274e58e15da330f6d7eec4b0e06618755cfd"
16
+ "sha256": "e545ac92efb1a8d50c467b21b180eb41dad5e9a19379a8cbe5086956c21c3654"
9
17
  },
10
18
  {
11
19
  "path": "core.py",
12
- "sha256": "8fa2e7263e99c16fbb337df468d769890df1d98e2683614646b243dbd23c3ff2"
20
+ "sha256": "c8cac49c17e573dabc59c4d5aa56402a71320f62145fabf9552e7fdb648f340a"
13
21
  },
14
22
  {
15
23
  "path": "litgoal/__init__.py",
@@ -39,17 +47,9 @@
39
47
  "path": "litgoal/tools.py",
40
48
  "sha256": "2e12124666c4dab32087af11c76c970656077e449cca1dbb4f299bab2efdd24a"
41
49
  },
42
- {
43
- "path": "NOTICE.md",
44
- "sha256": "452ad24ca1ecd65e2f2ab0f21ff6c1cefb13aacf0db875f327b62027106685ab"
45
- },
46
50
  {
47
51
  "path": "plugin.yaml",
48
- "sha256": "a0410a79f149a0c6b3a8de49bc2c19a1b73123e4a272390f2f4bceafe0df4bb2"
49
- },
50
- {
51
- "path": "README.md",
52
- "sha256": "d67b9f8d74aa861483cc28144eefc417493a3d2ac3cf6a6204c77235886b6d6c"
52
+ "sha256": "e90d47b24dc2cb5340d9485929ba40e62b2b5d6858951992c414701f015286fe"
53
53
  },
54
54
  {
55
55
  "path": "skills/ai-slop-remover/SKILL.md",
@@ -57,7 +57,11 @@
57
57
  },
58
58
  {
59
59
  "path": "skills/comment-checker/SKILL.md",
60
- "sha256": "5e87a8f2b11f2a2068297cf77a1690b2eb9bc8ab45c4106668f2bdca1ca2f6db"
60
+ "sha256": "2fb1c4de76d1cc340b63f92141d36d0a351325d9c9411b9af622dd8b6fca5567"
61
+ },
62
+ {
63
+ "path": "skills/debugging/SKILL.md",
64
+ "sha256": "aff2ca5765f490ed1e45d2eaa77c48db3ef98cec12fa10ebff3f91b82eab1254"
61
65
  },
62
66
  {
63
67
  "path": "skills/debugging/references/methodology/00-setup.md",
@@ -132,8 +136,8 @@
132
136
  "sha256": "0123de928e1e88186487adfee0b69d7a886c596fdd0c5132256cf9319fea466e"
133
137
  },
134
138
  {
135
- "path": "skills/debugging/SKILL.md",
136
- "sha256": "aff2ca5765f490ed1e45d2eaa77c48db3ef98cec12fa10ebff3f91b82eab1254"
139
+ "path": "skills/deep-interview/SKILL.md",
140
+ "sha256": "4f8e7217b72724921cdc68b5214cc99d7b45ec51fd05b237fac20c75fc35988c"
137
141
  },
138
142
  {
139
143
  "path": "skills/frontend-ui-ux/SKILL.md",
@@ -159,6 +163,14 @@
159
163
  "path": "skills/lsp/SKILL.md",
160
164
  "sha256": "3e793aaa158156dd60ec11add7375050bbeeb7b3eb77497f1c432d0842abff5c"
161
165
  },
166
+ {
167
+ "path": "skills/programming/SKILL.md",
168
+ "sha256": "ffb201197e7386c848f8efb9b90d0a024d7b8000e8bea1b13b0ed7a83627a56b"
169
+ },
170
+ {
171
+ "path": "skills/programming/references/go/README.md",
172
+ "sha256": "faedb8ab4e13f4ff03ad3497f3ed44df1b5b71463b741a58ee61b60ddb68b188"
173
+ },
162
174
  {
163
175
  "path": "skills/programming/references/go/backend-stack.md",
164
176
  "sha256": "1ba7769bfe7cd7a001251fabf01133a9df7eaae700705eecb3261955e4cfbfa9"
@@ -203,10 +215,6 @@
203
215
  "path": "skills/programming/references/go/one-liners.md",
204
216
  "sha256": "ff354a8700a9987ad21f4fb0cf4d5695857cae093c42358bc3eef13826f8ddfb"
205
217
  },
206
- {
207
- "path": "skills/programming/references/go/README.md",
208
- "sha256": "faedb8ab4e13f4ff03ad3497f3ed44df1b5b71463b741a58ee61b60ddb68b188"
209
- },
210
218
  {
211
219
  "path": "skills/programming/references/go/sqlc-pgx.md",
212
220
  "sha256": "26243d7b26e3ffadce87b4f78739e6582c69d5c144af89f2ef55c076b5e1b399"
@@ -219,6 +227,10 @@
219
227
  "path": "skills/programming/references/go/type-patterns.md",
220
228
  "sha256": "87d930ed6cdc57b3c20aae802679a4f419f77b5fcf4a630a6973271cc62545c7"
221
229
  },
230
+ {
231
+ "path": "skills/programming/references/python/README.md",
232
+ "sha256": "23ef4282a10fce99de314ddc3c8d93eca79c92f256c87cf8caa54a2ee703e738"
233
+ },
222
234
  {
223
235
  "path": "skills/programming/references/python/async-anyio.md",
224
236
  "sha256": "26e069cfc9debf45ff1629d0246a6831c64a33f8e595976f8cb19d4b5647ca95"
@@ -263,10 +275,6 @@
263
275
  "path": "skills/programming/references/python/pyproject-strict.md",
264
276
  "sha256": "655eb106a165d3730d656a9689ac98a00abf7d32cc89f2decaf33ddf43ac0e45"
265
277
  },
266
- {
267
- "path": "skills/programming/references/python/README.md",
268
- "sha256": "23ef4282a10fce99de314ddc3c8d93eca79c92f256c87cf8caa54a2ee703e738"
269
- },
270
278
  {
271
279
  "path": "skills/programming/references/python/textual-tui.md",
272
280
  "sha256": "bf59c001a76b30777882b2c729321d809a2a81bf75b720e72da1c38a3e7708d9"
@@ -275,18 +283,22 @@
275
283
  "path": "skills/programming/references/python/type-patterns.md",
276
284
  "sha256": "4fa0bf3c7e82c6a7141c54aac9e1703cd9ce86122903dbe2fe00700930ca4626"
277
285
  },
278
- {
279
- "path": "skills/programming/references/rust-ub/miri-sanitizers-loom.md",
280
- "sha256": "b3b56208978286dd975440fa1f28d01b9ed05b23d33a1faaa904e62ca310c4e8"
281
- },
282
286
  {
283
287
  "path": "skills/programming/references/rust-ub/README.md",
284
288
  "sha256": "25300ebe1a467f47695959b00964ded8c560e51bb5d92dffe178f9d3f24b87a9"
285
289
  },
290
+ {
291
+ "path": "skills/programming/references/rust-ub/miri-sanitizers-loom.md",
292
+ "sha256": "b3b56208978286dd975440fa1f28d01b9ed05b23d33a1faaa904e62ca310c4e8"
293
+ },
286
294
  {
287
295
  "path": "skills/programming/references/rust-ub/ub-taxonomy.md",
288
296
  "sha256": "7c0b369732920f6e59e67fa2f7a9a10fa4ba5b0a23b95ddd1aa2c4011a661326"
289
297
  },
298
+ {
299
+ "path": "skills/programming/references/rust/README.md",
300
+ "sha256": "7502ee277c86df00388ea7cdbc5b54fc743d4eacab8b4015cd00ad0483ead727"
301
+ },
290
302
  {
291
303
  "path": "skills/programming/references/rust/async-tokio.md",
292
304
  "sha256": "48e54d0b4be71fe1765e9bc62e0073a767abd966e29d4b456ae1326d0dc7b760"
@@ -319,10 +331,6 @@
319
331
  "path": "skills/programming/references/rust/proptest-insta.md",
320
332
  "sha256": "be787a4e174f55062931b70c53027a6c46423e3473608b315ac800b52325c3d1"
321
333
  },
322
- {
323
- "path": "skills/programming/references/rust/README.md",
324
- "sha256": "7502ee277c86df00388ea7cdbc5b54fc743d4eacab8b4015cd00ad0483ead727"
325
- },
326
334
  {
327
335
  "path": "skills/programming/references/rust/type-state.md",
328
336
  "sha256": "3dc21686fa0b2f1cb0c6206e38b800aa8b9ecf482d02faa9c1c4fd925da051e5"
@@ -335,6 +343,10 @@
335
343
  "path": "skills/programming/references/rust/zero-cost-safety.md",
336
344
  "sha256": "a03623f9e0d80cdb5c2addddb97b27932c84adb5232b2d659442ba5e74e37bbb"
337
345
  },
346
+ {
347
+ "path": "skills/programming/references/typescript/README.md",
348
+ "sha256": "c54f997b70659b574ce805196aefd9978354da5f73d5fdb6defbce1abf11041e"
349
+ },
338
350
  {
339
351
  "path": "skills/programming/references/typescript/backend-hono.md",
340
352
  "sha256": "7df19dd33da142423412ad4a0fa67a8b800e79d200adc62e20d05bcb15ff8e4f"
@@ -351,10 +363,6 @@
351
363
  "path": "skills/programming/references/typescript/error-handling.md",
352
364
  "sha256": "5d99ea45d454723b1d8292357a7a20b434801101336863df89e000c67bf1e807"
353
365
  },
354
- {
355
- "path": "skills/programming/references/typescript/README.md",
356
- "sha256": "c54f997b70659b574ce805196aefd9978354da5f73d5fdb6defbce1abf11041e"
357
- },
358
366
  {
359
367
  "path": "skills/programming/references/typescript/tsconfig-strict.md",
360
368
  "sha256": "e844903aa4dcf9c5e45592eccbbf04d6146c602c70067c72be74f523b0e2134d"
@@ -383,6 +391,14 @@
383
391
  "path": "skills/programming/scripts/go/templates/AGENTS.md.tmpl",
384
392
  "sha256": "ac81f2614b1417dfc5b0ca21c40ee74c357b55a97c92cb02db84ac418587c744"
385
393
  },
394
+ {
395
+ "path": "skills/programming/scripts/go/templates/README.md.tmpl",
396
+ "sha256": "b0780490defb300a8ec5cd46555074ab58f9147d298964ff5ce2a40d24dde066"
397
+ },
398
+ {
399
+ "path": "skills/programming/scripts/go/templates/Taskfile.yml",
400
+ "sha256": "eb59766ea776398a4109383dc279c13673dbad3645f1a2a4f70da92bd08f48b6"
401
+ },
386
402
  {
387
403
  "path": "skills/programming/scripts/go/templates/ci.yml",
388
404
  "sha256": "8403a5a4dd6d55773aa651600dc95d01bfc2462ce6756903ec3d2a4330371df7"
@@ -399,18 +415,10 @@
399
415
  "path": "skills/programming/scripts/go/templates/main.go.tmpl",
400
416
  "sha256": "de00e3621a5e9e7c4639936f3822bdffc512c7fd04bc089144f0e3f49c8e31a5"
401
417
  },
402
- {
403
- "path": "skills/programming/scripts/go/templates/README.md.tmpl",
404
- "sha256": "b0780490defb300a8ec5cd46555074ab58f9147d298964ff5ce2a40d24dde066"
405
- },
406
418
  {
407
419
  "path": "skills/programming/scripts/go/templates/run.go",
408
420
  "sha256": "b59b73b7d0fe0122531d4523b8d72be3517bee015af41358e18edb18f183823f"
409
421
  },
410
- {
411
- "path": "skills/programming/scripts/go/templates/Taskfile.yml",
412
- "sha256": "eb59766ea776398a4109383dc279c13673dbad3645f1a2a4f70da92bd08f48b6"
413
- },
414
422
  {
415
423
  "path": "skills/programming/scripts/python/check-no-excuse-rules.py",
416
424
  "sha256": "2b2f629dcbbf05f2ab533d23ecab0825d5c6d091e5a5837090200e93afdc0767"
@@ -443,10 +451,6 @@
443
451
  "path": "skills/programming/scripts/typescript/new-project.ts",
444
452
  "sha256": "495e5add86f0ca9819f537e51083c34b6480e1f7d147ded7c9cf93fdbe48ccc5"
445
453
  },
446
- {
447
- "path": "skills/programming/SKILL.md",
448
- "sha256": "ffb201197e7386c848f8efb9b90d0a024d7b8000e8bea1b13b0ed7a83627a56b"
449
- },
450
454
  {
451
455
  "path": "skills/refactor/SKILL.md",
452
456
  "sha256": "d4e160e256b5a5e1fae4170edeee7a6bc8e2338bbebec797e24f07ea70687a10"
@@ -461,7 +465,7 @@
461
465
  },
462
466
  {
463
467
  "path": "skills/rules/SKILL.md",
464
- "sha256": "7c56770fb7e62260c90db6d1d934a2c858e75418b8785f9eee031f0c8630c39f"
468
+ "sha256": "bc0a046745c455b5abb5ff8966d1d19245bf41576a44ed9be2c7917198ddbc03"
465
469
  },
466
470
  {
467
471
  "path": "skills/start-work/SKILL.md",
@@ -1,5 +1,5 @@
1
1
  name: lithermes
2
- version: 0.5.1
2
+ version: 0.6.0
3
3
  description: "Hermes-native workflow toolkit: litgoal durable runtime, 5-lane review orchestrator, Litwork commands, skills, and prompt steering."
4
4
  author: "Hermes Agent"
5
5
  kind: standalone
@@ -5,9 +5,9 @@ description: Use after edits to self-review the comments you just wrote or touch
5
5
 
6
6
  # Comment Checker
7
7
 
8
- Hermes plugins expose only `pre_llm_call`, `subagent_stop`, and `on_session_start`
9
- hooks there is **no** per-edit hook that fires after a write or edit. So this is not
10
- an automatic gate; it is a discipline **you self-apply** immediately after you change a
8
+ The LitHermes plugin registers only the `pre_llm_call` and `subagent_stop` hooks —
9
+ it wires **no** per-edit hook that fires after a write or edit. So this is not an
10
+ automatic gate; it is a discipline **you self-apply** immediately after you change a
11
11
  file. Treat every successful write/edit/patch as the trigger to run the checklist below
12
12
  on the comments in that diff before you move on.
13
13
 
@@ -0,0 +1,307 @@
1
+ ---
2
+ name: deep-interview
3
+ description: Socratic deep-interview loop that turns a vague idea into an execution-ready spec, using a quantitative ambiguity score to gate when requirements are clear enough to build. Use this BEFORE planning or implementation whenever a request is broad, underspecified, or missing acceptance criteria — or when the user says "interview me", "ask me everything", "don't assume", or "deep interview". Invoke directly with /deep-interview.
4
+ argument-hint: "[--quick|--standard|--deep] <idea or vague description>"
5
+ ---
6
+
7
+ <Purpose>
8
+ Deep Interview is an intent-first Socratic clarification loop that runs before planning or implementation. It turns vague ideas into execution-ready specifications by asking targeted questions about why the user wants a change, how far it should go, what should stay out of scope, and what the implementer may decide without confirmation. In LitHermes it is the clarity gate that feeds `/lit-plan` and then `/lit-loop`.
9
+ </Purpose>
10
+
11
+ <Use_When>
12
+ - The request is broad, ambiguous, or missing concrete acceptance criteria
13
+ - The user says "deep interview", "interview me", "ask me everything", or "don't assume"
14
+ - The user wants to avoid misaligned implementation from underspecified requirements
15
+ - You need a clear requirements artifact before handing off to planning or implementation
16
+ </Use_When>
17
+
18
+ <Do_Not_Use_When>
19
+ - The request already has concrete file/symbol targets and clear acceptance criteria
20
+ - The user explicitly asks to skip planning/interview and execute immediately
21
+ - The user asks for lightweight, open-ended brainstorming only
22
+ - A complete spec/plan already exists and execution should start
23
+ </Do_Not_Use_When>
24
+
25
+ <Why_This_Exists>
26
+ Execution quality is usually bottlenecked by intent clarity, not just missing implementation detail. A single expansion pass often misses why the user wants a change, where the scope should stop, which tradeoffs are unacceptable, and which decisions still require user approval. This workflow applies Socratic pressure + quantitative ambiguity scoring so downstream planning and execution begin with an explicit, testable, intent-aligned spec.
27
+ </Why_This_Exists>
28
+
29
+ <Depth_Profiles>
30
+ | Profile | Flag | Target ambiguity | Max rounds | Use for |
31
+ |---------|------|-----------------:|-----------:|---------|
32
+ | Quick | `--quick` | ≤ 30% | 5 | Fast pre-spec pass |
33
+ | Standard *(default)* | `--standard` | ≤ 20% | 12 | Full requirement interview |
34
+ | Deep | `--deep` | ≤ 15% | 20 | High-rigor exploration |
35
+
36
+ If no flag is provided, use **Standard**.
37
+ </Depth_Profiles>
38
+
39
+ <Execution_Policy>
40
+ - Ask ONE question per round (never batch)
41
+ - Ask about intent and boundaries before implementation detail
42
+ - Target the weakest clarity dimension each round after applying the stage-priority rules below
43
+ - Treat every answer as a claim to pressure-test before moving on: the next question should usually demand evidence or examples, expose a hidden assumption, force a tradeoff or boundary, or reframe root cause vs symptom
44
+ - Do not rotate to a new clarity dimension just for coverage when the current answer is still vague; stay on the same thread until one layer deeper, one assumption clearer, or one boundary tighter
45
+ - Before crystallizing, complete at least one explicit pressure pass that revisits an earlier answer with a deeper, assumption-focused, or tradeoff-focused follow-up
46
+ - Gather codebase facts with read-only search tools (or a read-only `delegate_task` exploration child) before asking the user about internals
47
+ - Keep exploration prompts narrow and concrete; fall back to the user only for facts that can't be discovered directly
48
+ - Always run a preflight context intake before the first interview question
49
+ - Reduce user effort: ask only the highest-leverage unresolved question, and never ask the user for codebase facts you can discover yourself
50
+ - For brownfield work, prefer evidence-backed confirmation questions such as "I found X in Y. Should this change follow that pattern?"
51
+ - Ask each round as one concise plain-text question (the Hermes reply channel has no structured multiple-choice prompt); render the ambiguity meter immediately above it
52
+ - Re-score ambiguity after each answer and show progress transparently
53
+ - Do not hand off to execution while ambiguity remains above threshold unless the user explicitly opts to proceed with warning
54
+ - Do not crystallize or hand off while `Non-goals` or `Decision Boundaries` remain unresolved, even if the weighted ambiguity threshold is met
55
+ - Treat early exit as a safety valve, not the default success path
56
+ - Persist progress to a state file after each round so the interview can resume if interrupted
57
+ </Execution_Policy>
58
+
59
+ <Steps>
60
+
61
+ ## Phase 0: Preflight Context Intake
62
+
63
+ 1. Parse `{{ARGUMENTS}}` and derive a short task slug.
64
+ 2. Attempt to load the latest relevant context snapshot from `.hermes/lithermes/deep-interview/{slug}-context.md`.
65
+ 3. If no snapshot exists, create a minimum context snapshot with:
66
+ - Task statement
67
+ - Desired outcome
68
+ - Stated solution (what the user asked for)
69
+ - Probable intent hypothesis (why they likely want it)
70
+ - Known facts/evidence
71
+ - Constraints
72
+ - Unknowns/open questions
73
+ - Decision-boundary unknowns
74
+ - Likely codebase touchpoints
75
+ 4. Save the snapshot to `.hermes/lithermes/deep-interview/{slug}-context.md` and reference it in the state file.
76
+
77
+ ## Phase 1: Initialize
78
+
79
+ 1. Parse `{{ARGUMENTS}}` and depth profile (`--quick|--standard|--deep`).
80
+ 2. Detect project context:
81
+ - Classify **brownfield** (existing codebase target) vs **greenfield** using read-only search.
82
+ - For brownfield, collect relevant codebase context before questioning.
83
+ 3. Initialize the state file at `.hermes/lithermes/deep-interview/{slug}-state.json`. Set `threshold` and `max_rounds` from the chosen profile (see the Depth Profiles table) — the values below are illustrative:
84
+
85
+ ```json
86
+ {
87
+ "active": true,
88
+ "current_phase": "deep-interview",
89
+ "state": {
90
+ "interview_id": "<uuid>",
91
+ "profile": "quick|standard|deep",
92
+ "type": "greenfield|brownfield",
93
+ "initial_idea": "<user input>",
94
+ "rounds": [],
95
+ "current_ambiguity": 1.0,
96
+ "threshold": 0.2,
97
+ "max_rounds": 12,
98
+ "challenge_modes_used": [],
99
+ "codebase_context": null,
100
+ "current_stage": "intent-first",
101
+ "current_focus": "intent",
102
+ "context_snapshot_path": ".hermes/lithermes/deep-interview/<slug>-context.md"
103
+ }
104
+ }
105
+ ```
106
+
107
+ 4. Announce kickoff with a compact banner so the user immediately understands the contract (profile, target, budget, starting point). Render it before the first question:
108
+
109
+ ```
110
+ 🎯 Deep Interview · {Quick|Standard|Deep} · {greenfield|brownfield}
111
+ Goal turn "{short initial idea}" into an execution-ready spec
112
+ Target ambiguity ≤ {threshold}% · Budget up to {max_rounds} rounds
113
+ Starting ambiguity {score}% · One question per round, intent before detail
114
+ ```
115
+
116
+ ## Phase 2: Socratic Interview Loop
117
+
118
+ Repeat until ambiguity `<= threshold`, the pressure pass is complete, the readiness gates are explicit, the user exits with warning, or max rounds are reached.
119
+
120
+ ### 2a) Generate next question
121
+ Use:
122
+ - Original idea
123
+ - Prior Q&A rounds
124
+ - Current dimension scores
125
+ - Brownfield context (if any)
126
+ - Activated challenge mode injection (Phase 3)
127
+
128
+ Target the lowest-scoring dimension, but respect stage priority:
129
+ - **Stage 1 — Intent-first:** Intent, Outcome, Scope, Non-goals, Decision Boundaries
130
+ - **Stage 2 — Feasibility:** Constraints, Success Criteria
131
+ - **Stage 3 — Brownfield grounding:** Context Clarity (brownfield only)
132
+
133
+ Follow-up pressure ladder after each answer:
134
+ 1. Ask for a concrete example, counterexample, or evidence signal behind the latest claim
135
+ 2. Probe the hidden assumption, dependency, or belief that makes the claim true
136
+ 3. Force a boundary or tradeoff: what would you explicitly not do, defer, or reject?
137
+ 4. If the answer still describes symptoms, reframe toward essence / root cause before moving on
138
+
139
+ Prefer staying on the same thread for multiple rounds when it has the highest leverage. Breadth without pressure is not progress.
140
+
141
+ Detailed dimensions:
142
+ - Intent Clarity — why the user wants this
143
+ - Outcome Clarity — what end state they want
144
+ - Scope Clarity — how far the change should go
145
+ - Constraint Clarity — technical or business limits that must hold
146
+ - Success Criteria Clarity — how completion will be judged
147
+ - Context Clarity — existing codebase understanding (brownfield only)
148
+
149
+ `Non-goals` and `Decision Boundaries` are mandatory readiness gates. Ask about them early and keep revisiting them until they are explicit.
150
+
151
+ ### 2b) Ask the question
152
+ Lead with a one-glance ambiguity meter so the user always sees how close the spec is to ready and how much budget remains. The meter is a *draining gauge*: the filled cells represent the ambiguity that still remains, and a `┊` tick marks the target — the job each round is to drain the filled edge down to or under the tick.
153
+
154
+ ```
155
+ Round {n}/{max_rounds} · Stage {1-3}: {stage name} · Focus: {weakest_dimension}
156
+ Ambiguity {score}% [███████░░░░░░░░░░░░░░░] target ≤ {threshold}%
157
+ ```
158
+
159
+ Then ask exactly one plain-text question.
160
+
161
+ ### 2c) Score ambiguity
162
+ Score each weighted dimension in `[0.0, 1.0]` with justification + gap.
163
+
164
+ Greenfield: `ambiguity = 1 - (intent × 0.30 + outcome × 0.25 + scope × 0.20 + constraints × 0.15 + success × 0.10)`
165
+
166
+ Brownfield: `ambiguity = 1 - (intent × 0.25 + outcome × 0.20 + scope × 0.20 + constraints × 0.15 + success × 0.10 + context × 0.10)`
167
+
168
+ Readiness gate:
169
+ - `Non-goals` must be explicit
170
+ - `Decision Boundaries` must be explicit
171
+ - A pressure pass must be complete: at least one earlier answer has been revisited with an evidence, assumption, or tradeoff follow-up
172
+ - If either gate is unresolved, or the pressure pass is incomplete, continue interviewing even when weighted ambiguity is below threshold
173
+
174
+ ### 2d) Report progress
175
+ After scoring, show a compact breakdown so the user sees *what moved* and *what's still blocking readiness*. The readiness gates are shown every round (not just at the end), because they can block crystallization even when the weighted score is already under threshold.
176
+
177
+ ```
178
+ Clarity
179
+ Intent ▓▓▓▓▓▓▓▓░░ 0.80 why they want it — clear
180
+ Outcome ▓▓▓▓▓▓░░░░ 0.60 end state — partially defined
181
+ Scope ▓▓▓▓░░░░░░ 0.40 ← weakest, next focus
182
+ Constraints ▓▓▓▓▓▓▓░░░ 0.70 limits mostly known
183
+ Success ▓▓▓░░░░░░░ 0.30 no acceptance criteria yet
184
+ (Context) ▓▓▓▓▓░░░░░ 0.50 brownfield only
185
+
186
+ Readiness gates
187
+ ✅ Non-goals explicit ⬜ Decision Boundaries ✅ Pressure pass done
188
+ → blocked by: Decision Boundaries (not yet explicit)
189
+
190
+ Ambiguity {prev}% → {new}% · Next: {weakest_dimension}
191
+ ```
192
+
193
+ Use `✅` for met gates and `⬜` for open ones, and name what's blocking. If all gates are met and ambiguity is under threshold, say so plainly: "All gates met — ready to crystallize."
194
+
195
+ ### 2e) Persist state
196
+ Append the round result and updated scores to the state file.
197
+
198
+ ### 2f) Round controls
199
+ - Do not offer early exit before the first explicit assumption probe and one persistent follow-up have happened
200
+ - Round 4+: allow explicit early exit with risk warning. Make it visible once available — add a quiet footer line, e.g. `(You can say "good enough" to stop early and crystallize with the current clarity.)`
201
+ - Soft warning at profile midpoint (e.g., round 3/6/10 depending on profile): surface remaining budget, e.g. `⚠️ Round {n}/{max_rounds} — {remaining} rounds left before the cap.`
202
+ - Hard cap at profile `max_rounds`
203
+
204
+ ## Phase 3: Challenge Modes (assumption stress tests)
205
+
206
+ Use each mode once when applicable. These are normal escalation tools, not rare rescue moves:
207
+
208
+ - **Contrarian** (round 2+ or immediately when an answer rests on an untested assumption): challenge core assumptions
209
+ - **Simplifier** (round 4+ or when scope expands faster than outcome clarity): probe minimal viable scope
210
+ - **Essence** (round 5+ and ambiguity > 0.25, or when the user keeps describing symptoms): ask for essence-level reframing
211
+
212
+ Track used modes in the state file to prevent repetition.
213
+
214
+ ## Phase 4: Crystallize Artifacts
215
+
216
+ When threshold is met (or user exits with warning / hard cap):
217
+
218
+ 1. Write the interview transcript summary to `.hermes/lithermes/deep-interview/{slug}-transcript.md`.
219
+ 2. Write the execution-ready spec to `.hermes/lithermes/deep-interview/{slug}-spec.md`.
220
+
221
+ Spec should include:
222
+ - Metadata (profile, rounds, final ambiguity, threshold, context type)
223
+ - Context snapshot reference/path (for downstream reuse)
224
+ - Clarity breakdown table
225
+ - Intent (why the user wants this)
226
+ - Desired Outcome
227
+ - In-Scope
228
+ - Out-of-Scope / Non-goals
229
+ - Decision Boundaries (what the implementer may decide without confirmation)
230
+ - Constraints
231
+ - Testable acceptance criteria
232
+ - Assumptions exposed + resolutions
233
+ - Pressure-pass findings (which answer was revisited, and what changed)
234
+ - Brownfield evidence vs inference notes for any repository-grounded confirmation questions
235
+ - Technical context findings
236
+ - Full or condensed transcript
237
+
238
+ ## Phase 5: Handoff
239
+
240
+ Deep-interview is a requirements mode. When the spec is ready, hand off to planning or implementation — do **not** implement directly here. The spec is the requirements source of truth: preserve intent, non-goals, decision boundaries, acceptance criteria, and any residual-risk warning across the handoff.
241
+
242
+ Present a short menu of next steps and let the user choose:
243
+
244
+ ```
245
+ Spec ready → .hermes/lithermes/deep-interview/{slug}-spec.md · final ambiguity {score}%{ · residual risk: <reason>}
246
+
247
+ 1. Plan /lit-plan — turn the spec into a detailed implementation/architecture plan first
248
+ 2. Build /lit-loop — implement directly; the spec is strong enough to start
249
+ 3. Refine keep interviewing — ambiguity or boundaries are still too loose
250
+ ```
251
+
252
+ When handing the spec to `/lit-plan` or `/lit-loop`:
253
+ - Pass the spec file as the requirements source of truth; don't re-run the interview unless the user asks to refine.
254
+ - Carry the non-goals, decision boundaries, and acceptance criteria forward as binding constraints.
255
+
256
+ **Residual-Risk Rule:** if the interview ended via early exit, hard-cap completion, or proceed-with-warning, state that residual risk explicitly in the handoff so the downstream step knows it inherited a partially clarified brief.
257
+
258
+ </Steps>
259
+
260
+ <Tool_Usage>
261
+ - Use read-only search tools (or a read-only `delegate_task` exploration child) for codebase fact gathering
262
+ - Ask each interview round as a single concise plain-text question; keep the same stage order
263
+ - Persist round state to `.hermes/lithermes/deep-interview/{slug}-state.json` for resumability; read it back to resume
264
+ - Read/write the context snapshot at `.hermes/lithermes/deep-interview/{slug}-context.md`
265
+ - Save transcript and spec artifacts to `.hermes/lithermes/deep-interview/{slug}-transcript.md` and `.hermes/lithermes/deep-interview/{slug}-spec.md`
266
+ </Tool_Usage>
267
+
268
+ <Escalation_And_Stop_Conditions>
269
+ - User says stop/cancel/abort -> persist state and stop
270
+ - Ambiguity stalls for 3 rounds (+/- 0.05) -> force Essence mode once
271
+ - Max rounds reached -> proceed with explicit residual-risk warning
272
+ - All dimensions >= 0.9 -> allow early crystallization even before max rounds
273
+ </Escalation_And_Stop_Conditions>
274
+
275
+ <Final_Checklist>
276
+ - [ ] Preflight context snapshot exists at `.hermes/lithermes/deep-interview/{slug}-context.md`
277
+ - [ ] Progress strip (round budget + ambiguity bar) shown each round
278
+ - [ ] Readiness-gate status (`Non-goals`, `Decision Boundaries`, pressure pass) shown each round with what's blocking
279
+ - [ ] Intent-first stage priority used before implementation detail
280
+ - [ ] Weakest-dimension targeting used within the active stage
281
+ - [ ] At least one explicit assumption probe happened before crystallization
282
+ - [ ] At least one persistent follow-up / pressure pass deepened a prior answer
283
+ - [ ] Challenge modes triggered at thresholds (when applicable)
284
+ - [ ] Transcript written to `.hermes/lithermes/deep-interview/{slug}-transcript.md`
285
+ - [ ] Spec written to `.hermes/lithermes/deep-interview/{slug}-spec.md`
286
+ - [ ] Brownfield questions use evidence-backed confirmation when applicable
287
+ - [ ] Next-step handoff menu presented (`/lit-plan` / `/lit-loop` / Refine)
288
+ - [ ] No direct implementation performed in this mode
289
+ </Final_Checklist>
290
+
291
+ <Advanced>
292
+ ## Resume
293
+
294
+ If interrupted, rerun the skill. Resume by reading the persisted state file (`.hermes/lithermes/deep-interview/{slug}-state.json`) and continuing from the last completed round.
295
+
296
+ ## Recommended pipeline
297
+
298
+ ```
299
+ deep-interview → /lit-plan → /lit-loop
300
+ ```
301
+
302
+ - Stage 1 (deep-interview): clarity gate — this skill
303
+ - Stage 2 (`/lit-plan`): feasibility + architecture gate
304
+ - Stage 3 (`/lit-loop`): build + QA + validation gate
305
+ </Advanced>
306
+
307
+ Task: {{ARGUMENTS}}
@@ -1,41 +1,45 @@
1
1
  ---
2
2
  name: rules
3
- description: Use when the user asks about LitHermes repo-rule loading, injected project rules, supported rule file locations, matching, or environment configuration.
3
+ description: Use when the user asks about LitHermes/Hermes repo-rule loading, injected project context files, supported file locations, discovery order, or how repository instructions reach the model.
4
4
  ---
5
5
 
6
6
  # Repo Rules
7
7
 
8
- Repo Rules is automatic once the LitHermes plugin is enabled. It loads project
9
- instructions from your repository and surfaces them to the model as context:
8
+ Repo-rule loading in a LitHermes workspace is provided by **Hermes' native
9
+ context-files feature**, not by a LitHermes plugin engine. Hermes discovers and
10
+ injects your repository instruction files automatically; the LitHermes plugin
11
+ does not register its own rules hook (it registers only `pre_llm_call` and
12
+ `subagent_stop`) and does not re-implement rule loading. This skill documents how
13
+ the native behavior works so you can rely on it and apply matched guidance.
10
14
 
11
- - static project instructions are injected on `on_session_start` and on `pre_llm_call`
12
- - file-specific rules are surfaced as guidance the model self-applies whenever it
13
- edits a matching file (there is no per-edit plugin hook in Hermes; the matching
14
- rule text is treated as a standing instruction the model checks before/after edits)
15
+ ## What Hermes loads
15
16
 
16
- Loaded rule text is injected as additional context and is deduplicated per session.
17
- Repo Rules never rewrites tool output it only adds context.
17
+ At session start Hermes loads the project context file from your working
18
+ directory into the system prompt. As the agent reads files in subdirectories
19
+ during the session, it **progressively discovers** context files there and
20
+ injects them when they become relevant — so subdirectory guidance appears only
21
+ when needed and the system prompt stays cache-stable.
18
22
 
19
- Supported project sources:
23
+ Only **one** project context type is loaded per session (first match wins):
20
24
 
21
- - `AGENTS.md`
22
- - `CLAUDE.md`
23
- - `CONTEXT.md`
24
- - `.hermes/rules/**/*.md`
25
- - `.claude/rules/**/*.md`
26
- - `.cursor/rules/**/*.md`
27
- - `.github/instructions/**/*.md`
28
- - `.github/copilot-instructions.md`
25
+ 1. `.hermes.md` / `HERMES.md` — project instructions (highest priority)
26
+ 2. `AGENTS.md` — primary project conventions / architecture
27
+ 3. `CLAUDE.md` — Claude Code context files (also detected)
28
+ 4. `.cursorrules` — Cursor IDE conventions
29
+ 5. `.cursor/rules/*.mdc` — Cursor IDE rule modules
29
30
 
30
- Supported environment knobs:
31
+ `SOUL.md` is loaded independently as the agent identity and is global to the
32
+ Hermes instance (read from `HERMES_HOME/SOUL.md` only), not per-project.
31
33
 
32
- - `HERMES_RULES_DISABLED=1`
33
- - `HERMES_RULES_MODE=both|static|dynamic|off`
34
- - `HERMES_RULES_MAX_RULE_CHARS=<number>`
35
- - `HERMES_RULES_MAX_RESULT_CHARS=<number>`
36
- - `HERMES_RULES_ENABLED_SOURCES=AGENTS.md,.hermes/rules`
34
+ Discovered context files go through Hermes' security scan, so malicious or
35
+ prompt-injecting files are blocked before they reach the model.
37
36
 
38
- Static mode loads only repo-root instruction files; dynamic mode loads only the
39
- file-specific rules matched against the current edit target; `both` (the default)
40
- loads each as appropriate. State and dedupe bookkeeping live under
41
- `.hermes/lithermes/`.
37
+ ## How LitHermes uses it
38
+
39
+ - There is no per-edit plugin hook in Hermes' LitHermes plugin, so file-specific
40
+ guidance you read from a discovered `AGENTS.md`/`CLAUDE.md` is a **standing
41
+ instruction you self-apply** before and after edits to matching files.
42
+ - Repo rules only add context; they never rewrite tool output.
43
+
44
+ For the authoritative, version-specific details (priority, subdirectory
45
+ discovery, and the security scan) see the Hermes "Context Files" documentation.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lithermes-ai",
3
- "version": "0.5.1",
3
+ "version": "0.6.0",
4
4
  "description": "npx/bunx installer for the LitHermes Hermes plugin",
5
5
  "license": "MIT",
6
6
  "repository": {