ll-skills 2.0.2 → 3.1.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.
Files changed (125) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +42 -20
  3. package/agents/ll-executor.md +2 -1
  4. package/agents/ll-verifier.md +1 -0
  5. package/assets/preamble.md +27 -39
  6. package/bin/install.js +4 -1
  7. package/hooks/ll-precompact.js +29 -1
  8. package/hooks/ll-skills-check-update.js +6 -6
  9. package/hooks/ll-state.js +30 -2
  10. package/package.json +3 -2
  11. package/scripts/evals/README.md +81 -0
  12. package/scripts/evals/cases/auto-dry-run/assert.sh +35 -0
  13. package/scripts/evals/cases/auto-dry-run/case.json +8 -0
  14. package/scripts/evals/cases/auto-dry-run/prompt.txt +1 -0
  15. package/scripts/evals/cases/auto-empty-repo/assert.sh +25 -0
  16. package/scripts/evals/cases/auto-empty-repo/case.json +8 -0
  17. package/scripts/evals/cases/auto-empty-repo/fixture/.gitkeep +0 -0
  18. package/scripts/evals/cases/auto-empty-repo/prompt.txt +1 -0
  19. package/scripts/evals/cases/decide-final-round/assert.sh +45 -0
  20. package/scripts/evals/cases/decide-final-round/case.json +8 -0
  21. package/scripts/evals/cases/decide-final-round/fixture/README.md +3 -0
  22. package/scripts/evals/cases/decide-final-round/prompt.txt +1 -0
  23. package/scripts/evals/cases/executor-block/assert.sh +33 -0
  24. package/scripts/evals/cases/executor-block/case.json +8 -0
  25. package/scripts/evals/cases/executor-block/prompt.txt +14 -0
  26. package/scripts/evals/cases/goal-autonomous/assert.sh +35 -0
  27. package/scripts/evals/cases/goal-autonomous/case.json +8 -0
  28. package/scripts/evals/cases/goal-autonomous/fixture/PLAN.md +42 -0
  29. package/scripts/evals/cases/goal-autonomous/fixture/PROGRESS.md +20 -0
  30. package/scripts/evals/cases/goal-autonomous/fixture/ROADMAP.md +29 -0
  31. package/scripts/evals/cases/goal-autonomous/fixture/package.json +8 -0
  32. package/scripts/evals/cases/goal-autonomous/fixture/src/money.js +6 -0
  33. package/scripts/evals/cases/goal-autonomous/fixture/test/reconcile.test.js +8 -0
  34. package/scripts/evals/cases/goal-autonomous/prompt.txt +1 -0
  35. package/scripts/evals/cases/implement-review-gate/assert.sh +37 -0
  36. package/scripts/evals/cases/implement-review-gate/case.json +8 -0
  37. package/scripts/evals/cases/implement-review-gate/prompt.txt +1 -0
  38. package/scripts/evals/cases/implement-stops-at-next/assert.sh +121 -0
  39. package/scripts/evals/cases/implement-stops-at-next/case.json +9 -0
  40. package/scripts/evals/cases/implement-stops-at-next/prompt.txt +1 -0
  41. package/scripts/evals/cases/preamble-no-ritual/assert.sh +17 -0
  42. package/scripts/evals/cases/preamble-no-ritual/case.json +8 -0
  43. package/scripts/evals/cases/preamble-no-ritual/fixture/README.md +3 -0
  44. package/scripts/evals/cases/preamble-no-ritual/fixture/src/a.ts +3 -0
  45. package/scripts/evals/cases/preamble-no-ritual/prompt.txt +1 -0
  46. package/scripts/evals/cases/router-no-skill/assert.sh +33 -0
  47. package/scripts/evals/cases/router-no-skill/case.json +8 -0
  48. package/scripts/evals/cases/router-no-skill/fixture/PLAN.md +21 -0
  49. package/scripts/evals/cases/router-no-skill/fixture/README.md +7 -0
  50. package/scripts/evals/cases/router-no-skill/fixture/decisions/README.md +3 -0
  51. package/scripts/evals/cases/router-no-skill/prompt.txt +1 -0
  52. package/scripts/evals/cases/router-small/assert.sh +21 -0
  53. package/scripts/evals/cases/router-small/case.json +8 -0
  54. package/scripts/evals/cases/router-small/fixture/README.md +17 -0
  55. package/scripts/evals/cases/router-small/prompt.txt +1 -0
  56. package/scripts/evals/cases/scout-no-plan/assert.sh +41 -0
  57. package/scripts/evals/cases/scout-no-plan/case.json +8 -0
  58. package/scripts/evals/cases/scout-no-plan/prompt.txt +8 -0
  59. package/scripts/evals/cases/verifier-weakened-test/assert.sh +19 -0
  60. package/scripts/evals/cases/verifier-weakened-test/case.json +8 -0
  61. package/scripts/evals/cases/verifier-weakened-test/prompt.txt +13 -0
  62. package/scripts/evals/cases/verifier-weakened-test/setup.sh +19 -0
  63. package/scripts/evals/fixtures/manual-contract/out.json +29 -0
  64. package/scripts/evals/fixtures/manual-contract/out.txt +5 -0
  65. package/scripts/evals/fixtures/manual-contract/with-skill.json +46 -0
  66. package/scripts/evals/fixtures/router-no-skill/fail.txt +5 -0
  67. package/scripts/evals/fixtures/router-no-skill/out.json +27 -0
  68. package/scripts/evals/fixtures/router-no-skill/pass.txt +4 -0
  69. package/scripts/evals/lib/assert.sh +107 -0
  70. package/scripts/evals/lib/extract.js +73 -0
  71. package/scripts/evals/run.sh +369 -0
  72. package/scripts/fixtures/auto-closed/PLAN.md +5 -0
  73. package/scripts/fixtures/auto-closed/PROGRESS.md +20 -0
  74. package/scripts/fixtures/auto-closed/ROADMAP.md +6 -0
  75. package/scripts/fixtures/auto-closed/docs/DELIVERY.md +3 -0
  76. package/scripts/fixtures/auto-decisions/decisions/DEC-0001-taken-alone.md +13 -0
  77. package/scripts/fixtures/auto-decisions/decisions/DEC-0002-owner.md +13 -0
  78. package/scripts/fixtures/auto-noroadmap/PLAN.md +20 -0
  79. package/scripts/fixtures/auto-noroadmap/PROGRESS.md +11 -0
  80. package/scripts/fixtures/auto-verify-next/PLAN.md +5 -0
  81. package/scripts/fixtures/auto-verify-next/PROGRESS.md +18 -0
  82. package/scripts/fixtures/auto-verify-next/ROADMAP.md +5 -0
  83. package/scripts/fixtures/auto-verify-next/phases/01/PLAN.md +6 -0
  84. package/scripts/fixtures/evals-auto/auto-dry-run/pass.txt +18 -0
  85. package/scripts/fixtures/evals-auto/auto-empty-repo/pass.txt +2 -0
  86. package/scripts/fixtures/evals-auto/goal-autonomous/pass.txt +29 -0
  87. package/scripts/fixtures/lint-bad/folded-description/SKILL.md +13 -0
  88. package/scripts/fixtures/lint-bad/jargon-in-questions/SKILL.md +36 -0
  89. package/scripts/fixtures/lint-bad/model-invocation-false/SKILL.md +10 -0
  90. package/scripts/fixtures/next-bad/skills/ll-bad/SKILL.md +30 -0
  91. package/scripts/fixtures/next-good/skills/ll-good/SKILL.md +26 -0
  92. package/scripts/fixtures/project/BACKLOG.md +6 -5
  93. package/scripts/fixtures/project/PROGRESS.md +4 -0
  94. package/scripts/lint-contract.cjs +495 -0
  95. package/scripts/lint-prompts.sh +443 -0
  96. package/scripts/ll-tools.js +497 -450
  97. package/scripts/smoke-test.sh +481 -4
  98. package/skills/ll-auto/SKILL.md +74 -0
  99. package/skills/ll-auto/references/run.md +75 -0
  100. package/skills/ll-auto/references/stages.md +66 -0
  101. package/skills/ll-auto/scripts/ll-auto.js +345 -0
  102. package/skills/ll-brainstorm/SKILL.md +14 -12
  103. package/skills/ll-brainstorm/references/decision-policy.md +22 -12
  104. package/skills/ll-close/SKILL.md +8 -7
  105. package/skills/ll-close/references/delivery.md +3 -1
  106. package/skills/ll-decide/SKILL.md +21 -19
  107. package/skills/ll-decide/references/decision-policy.md +22 -12
  108. package/skills/ll-decide/references/decision-room.md +5 -3
  109. package/skills/ll-decide/references/interview.md +29 -13
  110. package/skills/ll-decide/references/plan-skeleton.md +14 -14
  111. package/skills/ll-decide/references/premise-gate.md +34 -20
  112. package/skills/ll-goal/SKILL.md +22 -4
  113. package/skills/ll-goal/references/goal-template.md +57 -0
  114. package/skills/ll-implement/SKILL.md +25 -22
  115. package/skills/ll-implement/references/briefs.md +2 -1
  116. package/skills/ll-implement/references/decision-policy.md +22 -12
  117. package/skills/ll-implement/references/phase-conversation.md +20 -12
  118. package/skills/ll-implement/references/phase-plan.md +23 -0
  119. package/skills/ll-oncall/SKILL.md +3 -2
  120. package/skills/ll-refine/SKILL.md +3 -2
  121. package/skills/ll-research/SKILL.md +3 -2
  122. package/skills/ll-resume/SKILL.md +9 -4
  123. package/skills/ll-update/SKILL.md +6 -1
  124. package/skills/ll-verify/SKILL.md +2 -1
  125. package/skills/ll-verify/references/verifier-briefs.md +3 -0
@@ -34,6 +34,10 @@ inside one plan only, so a milestone of another phase has no collision check her
34
34
  `sonnet/medium` for a mechanical one; PLAN §7 overrides.
35
35
  - `verification: external` when presence plus wiring cannot prove the criterion (provider
36
36
  callback, email, deploy): the verifier then requires a test exercising the transition.
37
+ - A committed acceptance script under `phases/NN/` derives the repository root with `git rev-parse
38
+ --show-toplevel`, binds its own port and, when it stops a process, kills only the PID it started.
39
+ A hardcoded `/home/…` path, a literal `REPO=/abs/...`, `pkill` or `killall` in a committed script
40
+ is a plan defect, not a style note — a verifier disconfirmation about it is a BLOCK.
37
41
 
38
42
  ## TDD by milestone type
39
43
 
@@ -109,3 +113,22 @@ not in PLAN §1; skipped without a project PLAN.md). Warnings: `block-too-long`
109
113
  `files-too-many` (>5), `acceptance-not-command` (no npm/node/pytest/make/… prefix), `model-format`
110
114
  (`opus/high`), `truths-missing`, `body-section-missing` (block id without a `### M<n>` body). Then
111
115
  `waves --json` reports `file_overlap`, `exclusive_conflict`, `unknown_depends_on`, `cycle` (→ `unscheduled`).
116
+
117
+ ## Helper contract
118
+
119
+ One row per `ll-tools.js` command this skill calls, with its output fields — read here, the
120
+ helper itself is called, never read.
121
+
122
+ | Command | Output fields |
123
+ |---|---|
124
+ | `ll-tools.js state` | `phase`, `milestones.{total,passed,list}`, `last_commit`, `waiting`, `epilogue_present`, `active_phase_plan` |
125
+ | `ll-tools.js plan-lint phases/NN/PLAN.md` | `verdict` (pass\|warn\|fail), `defects[]`, `summary.{error,warn}`, `skipped[]` |
126
+ | `ll-tools.js waves phases/NN/PLAN.md --json` | `waves[].{wave,milestones,builds,blocked}`, `defects[]`, `blocked_by`, `unscheduled` |
127
+ | `ll-tools.js board-switch NN --milestones <ids>` | `phase`, seeded `M<n>: {passes:false}` lines; idempotent when the phase already matches |
128
+ | `ll-tools.js dec-reserve <n>` | `ids[]`, `files[]`, `prefix`, `width` |
129
+ | `ll-tools.js spot-check <M> --files <list>` | `verdict` (pass\|fail), `files.{expected,found,missing}`, `commits.{count,shas}` |
130
+ | `ll-tools.js tdd-gate <M> --since <sha>` | `tdd` (pass\|fail), `test`, `feat`, `reason` |
131
+ | `ll-tools.js passes <M> true\|false --phase NN [--commit <sha7> \| --reason <text> --state <…>]` | `passes`, `milestone`, `line`, `created`, `board.{passed,total}` |
132
+ | `ll-tools.js heartbeat "<text>"` | `file`, `line`, `text` |
133
+ | `ll-tools.js backlog-reconcile [--run]` | `items[].{id,state,condition,ran,exit,result}`, `closed[]`, `open` |
134
+ | `ll-tools.js epilogue NN --json` | `phase`, `passed[]`, `left[].{id,why}`, `waiting`, `new_backlog[]`, `dirty`, `head`, `blocked_by`, `next_command` |
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  name: ll-oncall
3
- description: Runs a session that holds a role instead of a task — writes the `## Federation` contract into the project CLAUDE.md, resolves peers by prefix before every send, answers in the 4-field DONE/EVIDENCE/REFERENCE/PENDING block, and keeps a numbered request log; `watch` turns a vigil into a 5-element brief with a baseline and a degradation rule, `ops` runs a capability pre-flight and a pre-deploy that exercises the exact operation. Use when the request is "Você é o agente responsável por…", when the session was opened as `claude -n <role>`, when it is "a cada 1h verifique…", "vigie…", "monitore…", or when the action is a deploy, apply, cutover, IP change, credential, "avisa a infra", "peça para o agente de infra" — the OPS regime. For planning work, a spec or a roadmap use ll-decide; for a refinement round on a running product use ll-refine.
3
+ description: Runs a session that holds a role instead of a task, writing the Federation contract into the project CLAUDE.md and keeping a numbered request log; watch builds a vigil brief, ops runs a deploy pre-flight.
4
4
  argument-hint: "[role <name> | watch [<slug>] | ops]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  # On call
@@ -113,7 +114,7 @@ delivery answered in 4 fields to the peer and to the owner; `docs/REQUESTS.md` c
113
114
  entries with their responses; a `watch` with brief, baseline and probe committed; an `ops` with its
114
115
  pre-flight output pasted.
115
116
 
116
- `▶ Next — /clear then ll-resume` in a new session of the same role, or the command the round names.
117
+ `▶ Next — /clear, then ll-resume (in a new session of the same role, or the command the round names)`
117
118
 
118
119
  ## References
119
120
 
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  name: ll-refine
3
- description: Runs one refinement round on a product that already runs — a production review by ll-reviewer, an impact-ordered decision battery, sliced work with a per-coder file allowlist, a deterministic gate that only blocks new errors, and the round recorded in PROGRESS.md; in `visual` mode it drives the reference → calibrated gate → clean-context validator → area-owner loop until the verdict is FIEL. Use when the product is already running and the request is "melhorar as telas", "refino", "rodada", "fiel ao protótipo", "valide visualmente", "outra rodada", "improve the screens", "make it match the prototype" — the REFINE regime. External written feedback (docx, pdf, spreadsheet) is ingested by ll-decide in feedback mode, not here; to audit a finished delivery use ll-verify.
3
+ description: Runs one refinement round on a product already in production, from a review and an impact-ordered decision battery to sliced work with a per-coder file allowlist and a gate that blocks only new errors.
4
4
  argument-hint: "[product | visual] [--round N]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  # Refine
@@ -107,7 +108,7 @@ last output line pasted into the round record; every finding is fixed, deferred
107
108
  `BACKLOG` with an executable closing condition; `visual` mode has `validation/E<n>/REPORT.md` with every
108
109
  element `FIEL`; `PROGRESS.md` has `### Round N — <date>`; `git status --porcelain` is empty.
109
110
 
110
- `▶ Next — /clear then ll-verify` when the round is the last one, or `/clear then ll-refine --round N+1`.
111
+ `▶ Next — /clear, then ll-verify (or ll-refine --round N+1, when the round is not the last one)`
111
112
 
112
113
  ## References
113
114
 
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  name: ll-research
3
- description: Researches a topic with clean-context fronts and web search, delivering `docs/research-<topic>/` in two layers — a SUMMARY.md that separates what to apply from what only the owner can decide and what gates it, plus the per-front evidence trail and a dated, liveness-checked source list. Use when the request is "pesquise", "faça uma pesquisa profunda", "compare A e B", "veja se alguém já resolveu", "docs oficiais de…", "research X", "compare A vs B", "check if anyone already solved this", or when a declared constraint has not been validated by whoever decides. For a market, competitor, pricing or sizing question add `--market`; to turn the findings into a plan, the next command is `ll-decide project`.
3
+ description: Researches a topic with clean-context fronts and web search, delivering a SUMMARY.md that separates what to apply from what only the owner can decide, plus the evidence trail and a dated source list.
4
4
  argument-hint: <topic> [--market] [--constraints "…"]
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  # Research
@@ -78,7 +79,7 @@ Report in Portuguese: where the files are, the short answer with numbers, the op
78
79
 
79
80
  Done when `SUMMARY.md` carries `## Apply`, `## Discuss`, `## Gates` and `## What the evidence does NOT cover`; every claim under `## Apply` names a source labelled `[VERIFIED]` in `sources.md`; every front has its note under `evidence/`; and every declared constraint appears either as validated or as a dated premise. Anything left out is said out loud, with the reason.
80
81
 
81
- ▶ Next — `/clear` then `ll-decide project` reading `docs/research-<topic>/SUMMARY.md`.
82
+ ▶ Next — /clear, then ll-decide project (reading docs/research-<topic>/SUMMARY.md)
82
83
 
83
84
  ## References
84
85
 
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  name: ll-resume
3
- description: Reconstructs where a project stands in a fixed reading order and answers with a briefing of at most 20 lines — where we are, what changed since the owner last took part, what it cost, what is blocked, what waits on him, and the next command. Use when it is the first turn in a repo that has PROGRESS.md, or when the owner asks "Como está o status e qual o próximo passo?", "Qual o estado atual?", "O que tenho pra decidir?", "onde paramos?", "what is the status", "where did we stop", "what do I have to decide" — the RESUME regime. It does not write anything; for closing a phase and recording the delivery use ll-close.
3
+ description: Reconstructs where a project stands in a fixed reading order and answers with a briefing of at most 20 lines - state, cost, blockers, what waits on the owner and the next command. It writes no file.
4
4
  argument-hint: "[--decisions]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  # Resume
@@ -47,13 +48,15 @@ Custo — <days with work · span · commits · agent runs, only where measurabl
47
48
  Bloqueado — <M<n>> por <cause, with evidence> | nada
48
49
  Espera por você — <n> decisões WAITING: <ID> <one line each> | nada
49
50
  Não verificado — <stale memory of N days, orphan worktree, phantom goal, absent verification>
50
- ▶ Next — <the command the epilogue names>
51
+ ▶ Next — /clear, then <the command the epilogue names>
51
52
  ```
52
53
 
53
54
  Every claim carries its evidence — sha, `file:line`, or date; a green milestone with no commit
54
55
  behind it is an orphan, not a delivery. If there are WAITING decisions, offer them after the
55
56
  briefing in one `AskUserQuestion` with at most 4, ordered by what they block, each stating the cost
56
- of waiting — never before it, never twice in a turn. Answers stay in the conversation.
57
+ of waiting — never before it, never twice in a turn. When the owner picks an option, append
58
+ `status: DECIDED — "<option>" (owner, <date>, ll-resume)` to that `decisions/DEC-*.md` — one write,
59
+ that file only.
57
60
 
58
61
  ## Legacy names
59
62
 
@@ -72,4 +75,6 @@ Projects not yet migrated keep the Portuguese names — read them, rename nothin
72
75
 
73
76
  ## Completion criterion
74
77
 
75
- Briefing in ≤20 lines, ≤5 tool calls, 0–1 questions, zero files touched, last line `▶ Next — <cmd>`.
78
+ Briefing in ≤20 lines, ≤5 tool calls, 0–1 questions, zero files touched (one write to a
79
+ `decisions/DEC-*.md` only when the owner answers a WAITING decision), last line
80
+ `▶ Next — /clear, then <cmd>`.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ll-update
3
- description: Updates the installed ll-skills package to the latest published version — reads the installed and published versions, shows the CHANGELOG entries between them before touching anything, asks once, runs the installer and reports which skills changed. Use when the owner says "atualiza o ll-skills", "atualizar as skills", "tem versão nova do ll-skills?", or when the session warning says "ll-skills desatualizado (instalado X, disponível Y) — rode /ll-update". It installs nothing else — every mutation goes through the package installer, and no project file is touched.
3
+ description: Updates the installed ll-skills package to the latest published version, showing the CHANGELOG entries between the two, asking once, running the installer and reporting which skills changed.
4
4
  argument-hint: "[--no-preamble]"
5
5
  disable-model-invocation: true
6
6
  ---
@@ -66,6 +66,11 @@ carries the old skills — new or renamed skills appear after restarting Claude
66
66
  content of an existing skill is read on its next invocation. If `VERSION` did not change, say
67
67
  that instead of declaring success.
68
68
 
69
+ ## Completion criterion
70
+
71
+ The installed `VERSION` equals the published one (or the owner declined the update) and the report above was printed.
72
+ ▶ Next — /clear, then ll-resume (the running session keeps the old skill texts until it restarts)
73
+
69
74
  ## Migration from 1.x
70
75
 
71
76
  The first 2.x install removes the eight Portuguese skills — `ll-orquestrar`, `ll-pesquisar`,
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  name: ll-verify
3
- description: Audits a finished phase or delivery in clean context — three layers (mechanical, contract, integrity) that never saw the implementation reasoning, a per-criterion ledger with file:line and FRESH/STALE hashes, and a VERIFICATION.md carrying a verdict, two seals and the blocks. Use when the request is "verifica a entrega", "audita isso", "confere se terminou de verdade", "revisa a implementação", when the /goal text cites this skill, at the end of a phase that touches a public contract, money or customer data, and before and after a push that deploys. Findings are findings — the session decides what to fix; to close the delivery, write DELIVERY.md and archive, use ll-close.
3
+ description: Audits a finished phase or delivery in clean context, in three layers that never saw the implementation reasoning, and writes VERIFICATION.md with a per-criterion ledger, a verdict and two seals.
4
4
  argument-hint: "[phase-number] [--external] [--criterion SC-nn]"
5
+ disable-model-invocation: true
5
6
  allowed-tools: Bash(${CLAUDE_SKILL_DIR}/scripts/ll-tools.js *)
6
7
  ---
7
8
 
@@ -43,6 +43,9 @@ long runs decay: nothing here is accepted by declaration.
43
43
  `ll-tools.js ledger` to mark each ledger line FRESH or STALE.
44
44
  5. Only after every state is written, open the `<!-- ll-state -->` board in PROGRESS.md and compare:
45
45
  `passes: true` whose command fails in this run is the gravest finding there is: name it.
46
+ 6. A committed script under `phases/` or `scripts/` with an absolute home path, `pkill -f` or
47
+ `killall` → `BLOCKS: process` (a disconfirmation about a committed artifact is a BLOCK, not a
48
+ reservation).
46
49
 
47
50
  Install no dependency, start no service beyond the sanity step; what is missing becomes
48
51
  NOT_VERIFIABLE with the requirement named.