lazyclaude-ai 0.1.3 → 0.1.5
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 +39 -15
- package/README_ko-KR.md +38 -14
- package/RELEASE_CHECKLIST.md +12 -2
- package/cover.png +0 -0
- package/docs/hooks.md +19 -5
- package/docs/migration.md +11 -4
- package/package.json +1 -1
- package/plugins/lazyclaude/.claude-plugin/plugin.json +1 -1
- package/plugins/lazyclaude/bin/lazyclaude-hook.js +18 -12
- package/plugins/lazyclaude/commands/start-work.md +21 -0
- package/plugins/lazyclaude/commands/ulw-loop.md +24 -0
- package/plugins/lazyclaude/commands/ulw-plan.md +22 -0
- package/plugins/lazyclaude/skills/start-work/SKILL.md +11 -3
- package/plugins/lazyclaude/skills/ulw-loop/SKILL.md +13 -5
- package/plugins/lazyclaude/skills/ulw-plan/SKILL.md +5 -2
- package/scripts/qa-portable-install.sh +1 -1
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-lazyclaude--ai-cb3837" />
|
|
12
|
-
<img src="https://img.shields.io/badge/version-0.1.
|
|
12
|
+
<img src="https://img.shields.io/badge/version-0.1.5-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>
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
> [!NOTE]
|
|
20
20
|
> LazyClaude is a quiet personal distribution for bringing LazyCodex-style prompt engineering into Claude Code. It installs as `lazyclaude@lazyclaude-ai`, so normal `claude` launches can load the LazyClaude skills and hooks without a long `--plugin-dir` command.
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
This checkout is prepared as `lazyclaude-ai@0.1.5` for personal install
|
|
23
23
|
convenience. The repo can remain private and quiet; publishing to npm here does
|
|
24
24
|
not imply public repo promotion, marketplace publication, or advertisement.
|
|
25
25
|
Future package releases still require explicit user approval.
|
|
@@ -30,7 +30,7 @@ Future package releases still require explicit user approval.
|
|
|
30
30
|
- **ULW prompt hooks** - type `ulw`, `ultrawork`, `$ulw-plan`, or `$ulw-loop`
|
|
31
31
|
- **Native goal guidance** - ULW context points Claude toward `/goal` or
|
|
32
32
|
model-facing `get_goal`, `create_goal`, and delayed `update_goal` when those
|
|
33
|
-
surfaces exist
|
|
33
|
+
surfaces exist, and gives a clear fallback when goal tools are unavailable
|
|
34
34
|
- **Dynamic workflow/worktree guidance** - large or parallel tasks are steered
|
|
35
35
|
toward Claude Code Dynamic workflow orchestration and Dynamic worktree
|
|
36
36
|
isolation
|
|
@@ -48,6 +48,17 @@ Future package releases still require explicit user approval.
|
|
|
48
48
|
npx --yes lazyclaude-ai install
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
+
If you are currently inside this repository checkout, which has the same
|
|
52
|
+
package name as the registry package, `npx --yes lazyclaude-ai@0.1.5 install`
|
|
53
|
+
can resolve the local same-name source checkout and fail with
|
|
54
|
+
`sh: lazyclaude-ai: command not found`. From a fresh directory, the normal
|
|
55
|
+
install command works:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
cd /tmp
|
|
59
|
+
npx --yes lazyclaude-ai@0.1.5 install
|
|
60
|
+
```
|
|
61
|
+
|
|
51
62
|
Validate the installed plugin:
|
|
52
63
|
|
|
53
64
|
```bash
|
|
@@ -68,8 +79,9 @@ npm install -g lazyclaude-ai
|
|
|
68
79
|
lazyclaude install
|
|
69
80
|
```
|
|
70
81
|
|
|
71
|
-
If you need the explicit `npm exec` form
|
|
72
|
-
confuse the registry package with
|
|
82
|
+
If you need the explicit `npm exec` form while standing inside the source
|
|
83
|
+
checkout, use a fresh prefix so npm does not confuse the registry package with
|
|
84
|
+
a same-name source checkout:
|
|
73
85
|
|
|
74
86
|
```bash
|
|
75
87
|
npm exec --prefix "$(mktemp -d)" --yes --package lazyclaude-ai -- lazyclaude install
|
|
@@ -111,21 +123,29 @@ $start-work plans/lazyclaude-retrofit.md
|
|
|
111
123
|
```
|
|
112
124
|
|
|
113
125
|
Expected behavior: LazyClaude's prompt hook adds `ULTRAWORK MODE ENABLED`
|
|
114
|
-
context
|
|
115
|
-
|
|
116
|
-
|
|
126
|
+
context and shows `LazyClaude ULW hook active` as a visible hook message. The
|
|
127
|
+
hook also tells Claude to treat plain `ulw` as `/lazyclaude:ulw-loop` /
|
|
128
|
+
`Skill(ulw-loop)` semantics before ordinary task execution, then the matching
|
|
129
|
+
skill and agent instructions steer Claude toward test-first work, native goal
|
|
130
|
+
handling, manual QA evidence, cleanup receipts, and explicit approval before
|
|
131
|
+
future release steps.
|
|
117
132
|
|
|
118
133
|
LazyClaude does not auto-type `/goal` or send slash command text for you.
|
|
119
134
|
Instead, the hook and ULW skills add run-context guidance: use Claude Code's
|
|
120
135
|
native goal surface when available, inspect `get_goal`, call `create_goal` only
|
|
121
136
|
when no matching goal is active, and reserve `update_goal` for verified
|
|
122
|
-
completion or a genuine blocker.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
tool
|
|
128
|
-
|
|
137
|
+
completion or a genuine blocker. When goal tools are unavailable or not exposed,
|
|
138
|
+
LazyClaude now tells Claude to say that plainly and ask you to bind the native
|
|
139
|
+
session goal with an exact `/goal <completion condition>` before long execution.
|
|
140
|
+
For large independent work, LazyClaude applies the same principle to Claude
|
|
141
|
+
Code's available orchestration surfaces: when `Workflow` is exposed, call the
|
|
142
|
+
`Workflow` tool; when isolated edits need a model-facing worktree lane, use
|
|
143
|
+
`EnterWorktree`. If only the CLI surface is available for a fresh isolated lane,
|
|
144
|
+
use `claude --worktree <short-name> --tmux`.
|
|
145
|
+
|
|
146
|
+
Plain `ulw` is hook context activation. Claude may still show it as hook
|
|
147
|
+
guidance rather than a separate Skill tool invocation in history. Use visible
|
|
148
|
+
namespaced commands when you want explicit LazyClaude skill activation:
|
|
129
149
|
|
|
130
150
|
```text
|
|
131
151
|
/lazyclaude:ulw-loop <what you want executed with evidence>
|
|
@@ -133,6 +153,10 @@ you want explicit LazyClaude skill activation:
|
|
|
133
153
|
/lazyclaude:start-work plans/lazyclaude-retrofit.md
|
|
134
154
|
```
|
|
135
155
|
|
|
156
|
+
Those namespaced commands are shipped as real Claude Code command files under
|
|
157
|
+
`plugins/lazyclaude/commands/`, so `/lazyclaude:ulw-loop` should load the
|
|
158
|
+
command body, then the matching skill guidance.
|
|
159
|
+
|
|
136
160
|
## Commands
|
|
137
161
|
|
|
138
162
|
| 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-lazyclaude--ai-cb3837" />
|
|
12
|
-
<img src="https://img.shields.io/badge/version-0.1.
|
|
12
|
+
<img src="https://img.shields.io/badge/version-0.1.5-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>
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
> [!NOTE]
|
|
24
24
|
> LazyClaude는 LazyCodex 스타일의 prompt engineering을 Claude Code로 가져오기 위한 조용한 개인용 배포판입니다. `lazyclaude@lazyclaude-ai`로 설치되므로, 매번 긴 `--plugin-dir` 없이 일반 `claude` 실행에서 LazyClaude skill과 hook을 불러올 수 있습니다.
|
|
25
25
|
|
|
26
|
-
현재
|
|
26
|
+
현재 checkout은 `lazyclaude-ai@0.1.5` 배포용으로 준비되어 있습니다. 목적은 다른 PC에서도
|
|
27
27
|
빠르게 설치하기 위한 개인용 배포물입니다. 저장소는 비공개 저장소로
|
|
28
28
|
유지할 수 있고, npm 배포가 곧 홍보, 공개 저장소 운영, Claude marketplace
|
|
29
29
|
등록을 의미하지는 않습니다. 새 버전 배포는 항상 별도의 명시적 승인 후에
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
- **ULW prompt hook** - `ulw`, `ultrawork`, `$ulw-plan`, `$ulw-loop` 트리거
|
|
36
36
|
- **Native goal guidance** - Claude Code가 `/goal` 또는 `get_goal`,
|
|
37
37
|
`create_goal`, `update_goal` 같은 goal surface를 제공하면 이를 우선
|
|
38
|
-
사용하도록
|
|
38
|
+
사용하도록 유도하고, goal tools are unavailable 상황의 fallback도 명시
|
|
39
39
|
- **Dynamic workflow/worktree guidance** - 크거나 병렬적인 작업은 Claude
|
|
40
40
|
Code Dynamic workflow와 Dynamic worktree 격리 쪽으로 유도
|
|
41
41
|
- **Claude skills** - `ulw-plan`, `ulw-loop`, `start-work`, `rules`, `lsp`, `programming`, `review-work`
|
|
@@ -52,6 +52,17 @@
|
|
|
52
52
|
npx --yes lazyclaude-ai install
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
+
현재 위치가 이 저장소 checkout이면, registry package와 같은 package name을
|
|
56
|
+
가진 same-name source checkout 안에 있는 상태입니다. 이 경우
|
|
57
|
+
`npx --yes lazyclaude-ai@0.1.5 install`이 local checkout을 먼저 해석해서
|
|
58
|
+
`sh: lazyclaude-ai: command not found`로 실패할 수 있습니다. 새 폴더에서는
|
|
59
|
+
일반 설치 명령이 정상 동작합니다.
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
cd /tmp
|
|
63
|
+
npx --yes lazyclaude-ai@0.1.5 install
|
|
64
|
+
```
|
|
65
|
+
|
|
55
66
|
설치 상태를 확인합니다.
|
|
56
67
|
|
|
57
68
|
```bash
|
|
@@ -73,7 +84,8 @@ lazyclaude install
|
|
|
73
84
|
```
|
|
74
85
|
|
|
75
86
|
현재 checkout처럼 package 이름이 같은 폴더 안에서 `npm exec`를 직접 쓸
|
|
76
|
-
때는
|
|
87
|
+
때는 registry package와 same-name source checkout이 섞이지 않도록 fresh
|
|
88
|
+
prefix를 주는 편이 안전합니다.
|
|
77
89
|
|
|
78
90
|
```bash
|
|
79
91
|
npm exec --prefix "$(mktemp -d)" --yes --package lazyclaude-ai -- lazyclaude install
|
|
@@ -115,21 +127,29 @@ $start-work plans/lazyclaude-retrofit.md
|
|
|
115
127
|
```
|
|
116
128
|
|
|
117
129
|
기대 동작은 LazyClaude prompt hook이 `ULTRAWORK MODE ENABLED` 컨텍스트를
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
130
|
+
추가하고 `LazyClaude ULW hook active`라는 visible hook message를 보여주는
|
|
131
|
+
것입니다. 또한 plain `ulw`를 일반 작업 실행 전 `/lazyclaude:ulw-loop` /
|
|
132
|
+
`Skill(ulw-loop)` semantics로 처리하라고 Claude에게 지시합니다. 그 뒤 skill
|
|
133
|
+
및 agent 지시문이 Claude를 test-first 작업, native goal 처리, 실제 수동 QA
|
|
134
|
+
증거, cleanup receipt, 향후 release step의 명시적 승인 쪽으로 유도합니다.
|
|
121
135
|
|
|
122
136
|
LazyClaude는 `/goal`을 대신 입력하거나 slash command text를 자동 전송하지
|
|
123
137
|
않습니다. 대신 hook과 ULW skill이 run context를 보강합니다. Claude Code의
|
|
124
138
|
native goal surface가 있으면 `get_goal`을 먼저 확인하고, matching active
|
|
125
139
|
goal이 없을 때만 `create_goal`을 호출하며, `update_goal`은 검증 완료 또는
|
|
126
|
-
진짜 blocker가 있을 때까지 미루도록 안내합니다.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
140
|
+
진짜 blocker가 있을 때까지 미루도록 안내합니다. goal tools are unavailable,
|
|
141
|
+
즉 model-facing goal tools가 이 Claude Code session에 노출되지 않은 경우에는
|
|
142
|
+
그 한계를 먼저 말하고, 긴 실행 전에 정확한 `/goal <completion condition>`로
|
|
143
|
+
native session goal을 묶어달라고 요청하도록 했습니다. 큰 독립 작업에서는
|
|
144
|
+
같은 원칙을 Claude Code가 노출한 orchestration surface에 적용합니다.
|
|
145
|
+
`Workflow`가 노출되면 `Workflow` tool을 호출하고, isolated edit lane이
|
|
146
|
+
model-facing worktree를 필요로 하면 `EnterWorktree`를 사용합니다. CLI surface만
|
|
147
|
+
가능한 새 격리 lane에서는 `claude --worktree <short-name> --tmux`를 사용합니다.
|
|
148
|
+
|
|
149
|
+
단순히 `ulw`라고 입력하는 것은 hook context activation입니다. Claude Code
|
|
150
|
+
history에는 별도 Skill tool invocation이 아니라 hook guidance로 보일 수
|
|
151
|
+
있습니다. 명시적인 LazyClaude skill activation을 보고 싶다면 namespaced
|
|
152
|
+
command를 사용합니다.
|
|
133
153
|
|
|
134
154
|
```text
|
|
135
155
|
/lazyclaude:ulw-loop <증거 기반으로 실행할 작업>
|
|
@@ -137,6 +157,10 @@ LazyClaude skill activation을 보고 싶다면 namespaced command를 사용합
|
|
|
137
157
|
/lazyclaude:start-work plans/lazyclaude-retrofit.md
|
|
138
158
|
```
|
|
139
159
|
|
|
160
|
+
이 namespaced command들은 `plugins/lazyclaude/commands/` 아래 실제 Claude Code
|
|
161
|
+
command file로 배포됩니다. 따라서 `/lazyclaude:ulw-loop`는 command body를 먼저
|
|
162
|
+
로드하고, 이어서 대응 skill guidance를 따라가야 합니다.
|
|
163
|
+
|
|
140
164
|
## 명령어
|
|
141
165
|
|
|
142
166
|
| 명령어 | 용도 |
|
package/RELEASE_CHECKLIST.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# LazyClaude Release Checklist
|
|
2
2
|
|
|
3
|
-
Status: quiet public npm package
|
|
4
|
-
|
|
3
|
+
Status: this checkout is prepared for quiet public npm package
|
|
4
|
+
`lazyclaude-ai@0.1.5` after explicit user approval.
|
|
5
5
|
|
|
6
6
|
DO NOT publish a new version of LazyClaude, run `npm publish`, push release
|
|
7
7
|
tags, or add a remote Claude Code marketplace entry without explicit user
|
|
@@ -43,6 +43,16 @@ local marketplace metadata needed by `claude plugin details`. Do not ask users
|
|
|
43
43
|
to type a generated command that shells out to `npx --yes lazyclaude-ai path` for
|
|
44
44
|
normal npm installs.
|
|
45
45
|
|
|
46
|
+
Run fresh-machine QA from a fresh directory, not from this repository checkout.
|
|
47
|
+
Inside the same-name source checkout, `npx --yes lazyclaude-ai@0.1.5 install`
|
|
48
|
+
can resolve the local package and fail with `sh: lazyclaude-ai: command not
|
|
49
|
+
found`. Use `cd /tmp` for the fresh directory scenario, or use the explicit
|
|
50
|
+
fresh-prefix form:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm exec --prefix "$(mktemp -d)" --yes --package lazyclaude-ai -- lazyclaude install
|
|
54
|
+
```
|
|
55
|
+
|
|
46
56
|
## Quiet Public NPM Package Release Or Update
|
|
47
57
|
|
|
48
58
|
Use this track only when the user explicitly approves making a new package
|
package/cover.png
CHANGED
|
Binary file
|
package/docs/hooks.md
CHANGED
|
@@ -25,8 +25,11 @@ $start-work
|
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
When a trigger is present, the hook returns additional context containing
|
|
28
|
-
`ULTRAWORK MODE ENABLED
|
|
29
|
-
executed as a
|
|
28
|
+
`ULTRAWORK MODE ENABLED` and a visible `LazyClaude ULW hook active` system
|
|
29
|
+
message. That context is guidance for Claude Code; it is not executed as a
|
|
30
|
+
command. The guidance tells Claude to treat plain `ulw` as
|
|
31
|
+
`/lazyclaude:ulw-loop` / `Skill(ulw-loop)` semantics before ordinary task
|
|
32
|
+
execution.
|
|
30
33
|
|
|
31
34
|
LazyClaude follows the LazyCodex goal pattern as model-facing run context, not
|
|
32
35
|
as slash-command injection. If Claude Code exposes the native goal surface, the
|
|
@@ -35,9 +38,18 @@ matching goal is active, and delay `update_goal` until verified completion or a
|
|
|
35
38
|
genuine blocker. It may also point Claude toward the user-visible `/goal`
|
|
36
39
|
surface, but it does not auto-type `/goal` or send slash command text.
|
|
37
40
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
If goal tools are unavailable or not exposed in the running Claude Code session,
|
|
42
|
+
the hook context tells Claude to say that explicitly and ask the user to bind the
|
|
43
|
+
native session goal with `/goal <completion condition>` before long execution.
|
|
44
|
+
LazyClaude then continues with its ledger fallback when the user declines or the
|
|
45
|
+
surface is absent.
|
|
46
|
+
|
|
47
|
+
For broad work, the same context ports the LazyCodex model-facing principle to
|
|
48
|
+
Claude Code's exposed orchestration surfaces: if `Workflow` is available, call
|
|
49
|
+
the `Workflow` tool before serial execution and bind every lane to evidence and
|
|
50
|
+
cleanup. If isolated edits need a model-facing worktree lane, use
|
|
51
|
+
`EnterWorktree`; when only the CLI surface is available, the actionable launch
|
|
52
|
+
form is `claude --worktree <short-name> --tmux`.
|
|
41
53
|
|
|
42
54
|
Plain `ulw` therefore activates hook context, not a visible Skill tool call.
|
|
43
55
|
For a visible LazyClaude command/skill invocation, use the namespaced Claude
|
|
@@ -49,6 +61,8 @@ Code commands:
|
|
|
49
61
|
/lazyclaude:start-work plans/lazyclaude-retrofit.md
|
|
50
62
|
```
|
|
51
63
|
|
|
64
|
+
These are real Claude Code command files in `plugins/lazyclaude/commands/`.
|
|
65
|
+
|
|
52
66
|
## Safety
|
|
53
67
|
|
|
54
68
|
Hooks parse JSON from stdin and return JSON to Claude Code. The hook does not
|
package/docs/migration.md
CHANGED
|
@@ -10,7 +10,7 @@ of surface, and a conservative local fallback where it does not.
|
|
|
10
10
|
| Codex ultrawork plan mode | Claude Code skill plus planner agent | `ulw-plan` and `prometheus-planner` |
|
|
11
11
|
| Codex execution loop | Claude Code skill plus executor agent | `ulw-loop`, `start-work`, and `boulder-executor` |
|
|
12
12
|
| Codex goal-tool guidance | Claude Code native goal surface | `/goal` when user-selected, or model-facing `get_goal`, `create_goal`, and verified-final `update_goal` guidance when exposed |
|
|
13
|
-
| Codex parallel orchestration | Claude Code Dynamic workflow and Dynamic worktree surfaces |
|
|
13
|
+
| Codex parallel orchestration | Claude Code Dynamic workflow and Dynamic worktree surfaces | Call `Workflow` for broad independent work when exposed; use `EnterWorktree` or the CLI worktree path for risky or parallel edits |
|
|
14
14
|
| Codex hooks | Claude Code hooks | `plugins/lazyclaude/hooks/hooks.json` |
|
|
15
15
|
| Codex MCP helpers | Claude Code plugin MCP config | `plugins/lazyclaude/.mcp.json` |
|
|
16
16
|
| Codex LSP integration | Claude Code plugin LSP config | `plugins/lazyclaude/.lsp.json` |
|
|
@@ -54,11 +54,18 @@ Claude to inspect `get_goal`, create a goal with `create_goal` only when no
|
|
|
54
54
|
matching active goal exists, and defer `update_goal` until the evidence gate has
|
|
55
55
|
passed or a real blocker is recorded.
|
|
56
56
|
|
|
57
|
+
Current Claude Code sessions may not expose model-facing goal tools to the
|
|
58
|
+
model. When goal tools are unavailable or not exposed, LazyClaude should not
|
|
59
|
+
pretend the native goal was bound. It should state the limitation and ask the
|
|
60
|
+
user to run `/goal <completion condition>` before long-running ULW execution.
|
|
61
|
+
|
|
57
62
|
When the user explicitly chooses Claude Code `/goal`, that native session goal
|
|
58
63
|
remains user-visible and user-controlled. LazyClaude does not auto-type
|
|
59
|
-
`/goal`. For multi-lane work, LazyClaude
|
|
60
|
-
|
|
61
|
-
|
|
64
|
+
`/goal`. For multi-lane work, LazyClaude follows the same model-facing tool
|
|
65
|
+
principle where Claude Code exposes it: call the `Workflow` tool before serial
|
|
66
|
+
execution, bind each lane to criteria and evidence, and use `EnterWorktree` for
|
|
67
|
+
isolated model-facing worktree lanes. When only the CLI surface is available,
|
|
68
|
+
the concrete isolated-lane launch form is `claude --worktree <short-name> --tmux`.
|
|
62
69
|
|
|
63
70
|
If OMC/omc is already installed in Claude Code, keep it disabled or start a
|
|
64
71
|
separate Claude Code session without OMC while testing LazyClaude. This repo no
|
package/package.json
CHANGED
|
@@ -21,25 +21,31 @@ const hookEventNames = {
|
|
|
21
21
|
"post-compact": "PostCompact",
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
const writeContext = (additionalContext) => {
|
|
24
|
+
const writeContext = (additionalContext, systemMessage) => {
|
|
25
|
+
const payload = {
|
|
26
|
+
continue: true,
|
|
27
|
+
hookSpecificOutput: {
|
|
28
|
+
hookEventName: hookEventNames[eventName],
|
|
29
|
+
additionalContext,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
if (systemMessage) {
|
|
33
|
+
payload.systemMessage = systemMessage;
|
|
34
|
+
}
|
|
25
35
|
console.log(
|
|
26
|
-
JSON.stringify(
|
|
27
|
-
continue: true,
|
|
28
|
-
hookSpecificOutput: {
|
|
29
|
-
hookEventName: hookEventNames[eventName],
|
|
30
|
-
additionalContext,
|
|
31
|
-
},
|
|
32
|
-
}),
|
|
36
|
+
JSON.stringify(payload),
|
|
33
37
|
);
|
|
34
38
|
};
|
|
35
39
|
|
|
36
40
|
const ultraworkContext = [
|
|
37
41
|
"ULTRAWORK MODE ENABLED.",
|
|
42
|
+
"Treat this prompt as an explicit request to use LazyClaude ulw-loop discipline now; load or follow /lazyclaude:ulw-loop / Skill(ulw-loop) semantics before ordinary task execution.",
|
|
38
43
|
"Use evidence-bound planning, tests, manual QA, and cleanup receipts.",
|
|
39
|
-
"Native goal integration: when Claude Code exposes
|
|
44
|
+
"Native goal tool integration: only when Claude Code exposes model-facing goal tools, first inspect get_goal, call create_goal with an objective-only payload when no matching goal is active, and reserve update_goal for verified completion or a genuine blocker.",
|
|
45
|
+
"Native /goal fallback: if model-facing goal tools are unavailable or not exposed, say so explicitly and ask the user to bind the native Claude Code goal with /goal <completion condition>; continue with the LazyClaude ledger fallback when they decline or the surface is absent.",
|
|
40
46
|
"Do not auto-type or inject the user's slash commands; treat /goal as Claude Code's native goal surface, not as prompt text for this hook to send.",
|
|
41
|
-
"Dynamic workflow:
|
|
42
|
-
"Dynamic worktree:
|
|
47
|
+
"Dynamic workflow integration: when Claude Code exposes the Workflow tool and the task is broad, risky, parallel, or long-running, call the Workflow tool before serial execution and bind each lane to explicit criteria, artifacts, and cleanup receipts.",
|
|
48
|
+
"Dynamic worktree integration: when Claude Code exposes EnterWorktree and isolated edits are needed, use EnterWorktree for the selected lane; otherwise use or recommend claude --worktree <short-name> --tmux. Never mutate unrelated user state.",
|
|
43
49
|
].join(" ");
|
|
44
50
|
|
|
45
51
|
const input = readInput();
|
|
@@ -54,7 +60,7 @@ switch (eventName) {
|
|
|
54
60
|
const prompt = typeof input.prompt === "string" ? input.prompt : "";
|
|
55
61
|
const activates = /\b(?:ultrawork|ulw)\b|\$(?:ulw-plan|ulw-loop|start-work)\b/u.test(prompt);
|
|
56
62
|
if (activates) {
|
|
57
|
-
writeContext(ultraworkContext);
|
|
63
|
+
writeContext(ultraworkContext, "LazyClaude ULW hook active: ulw-loop guidance injected.");
|
|
58
64
|
} else {
|
|
59
65
|
writeContext("LazyClaude prompt hook checked: no workflow activation.");
|
|
60
66
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Execute a checked plan with LazyClaude start-work discipline.
|
|
3
|
+
argument-hint: '<plan-file>'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `start-work` skill for the user's current plan file or command
|
|
7
|
+
arguments.
|
|
8
|
+
|
|
9
|
+
Before the first checkbox, bootstrap Claude Code-native workflow state:
|
|
10
|
+
|
|
11
|
+
- Use `get_goal` and `create_goal` only if model-facing goal tools are exposed.
|
|
12
|
+
- If goal tools are unavailable, ask the user to set a native `/goal` completion
|
|
13
|
+
condition for the plan before multi-turn execution.
|
|
14
|
+
- For broad, risky, parallel, or long-running checkbox waves, call the
|
|
15
|
+
`Workflow` tool when Claude Code exposes it.
|
|
16
|
+
- For isolated edit lanes, use `EnterWorktree` when exposed; otherwise launch
|
|
17
|
+
or recommend `claude --worktree <short-name> --tmux`.
|
|
18
|
+
|
|
19
|
+
Then execute the first unchecked top-level checkbox with failing-test-first
|
|
20
|
+
implementation, automated verification, manual QA evidence, cleanup receipts,
|
|
21
|
+
and ledger updates.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run LazyClaude ULW loop discipline with goal and Dynamic workflow bootstrap.
|
|
3
|
+
argument-hint: '<objective>'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `ulw-loop` skill for the user's current objective or command arguments.
|
|
7
|
+
|
|
8
|
+
Before implementation, bootstrap Claude Code-native workflow state:
|
|
9
|
+
|
|
10
|
+
1. If model-facing goal tools are available in this session, inspect `get_goal`,
|
|
11
|
+
call `create_goal` only when no matching goal exists, and reserve
|
|
12
|
+
`update_goal` for verified completion or a genuine blocker.
|
|
13
|
+
2. If goal tools are unavailable, state that plainly and ask the user to bind
|
|
14
|
+
the native Claude Code goal with this exact surface before long execution:
|
|
15
|
+
`/goal <completion condition for the current objective>`.
|
|
16
|
+
3. For broad, risky, parallel, or long-running work, call the `Workflow` tool
|
|
17
|
+
when Claude Code exposes it. Bind every lane to explicit criteria, evidence
|
|
18
|
+
artifacts, and cleanup receipts.
|
|
19
|
+
4. When isolated edits are needed, use `EnterWorktree` when Claude Code exposes
|
|
20
|
+
it. If only the CLI surface is available, tell the user the concrete launch
|
|
21
|
+
form: `claude --worktree <short-name> --tmux`.
|
|
22
|
+
|
|
23
|
+
Then continue with evidence-bound success criteria, tests, manual QA artifacts,
|
|
24
|
+
cleanup receipts, and explicit release approval boundaries.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Plan LazyClaude work with explicit goal, Dynamic workflow, and QA criteria.
|
|
3
|
+
argument-hint: '<planning brief>'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `ulw-plan` skill for the user's current planning brief or command
|
|
7
|
+
arguments.
|
|
8
|
+
|
|
9
|
+
The plan must include Claude Code-native bootstrap steps:
|
|
10
|
+
|
|
11
|
+
- If model-facing goal tools are exposed, use `get_goal`, `create_goal`, and
|
|
12
|
+
delayed `update_goal` exactly as native goal state, not as slash-command text.
|
|
13
|
+
- If goal tools are unavailable, include the exact user-visible `/goal`
|
|
14
|
+
completion condition to bind before execution.
|
|
15
|
+
- For independent, risky, parallel, or long-running work, include when Claude
|
|
16
|
+
should call the `Workflow` tool and how each lane proves its evidence.
|
|
17
|
+
- For isolated edit lanes, include when to use `EnterWorktree`; if only the CLI
|
|
18
|
+
surface is available, include `claude --worktree <short-name> --tmux`, plus
|
|
19
|
+
evidence paths and cleanup.
|
|
20
|
+
|
|
21
|
+
Write the plan under `plans/` and keep it executable: concrete files, tests,
|
|
22
|
+
manual QA, cleanup, and publish/remote-mutation guardrails.
|
|
@@ -27,6 +27,14 @@ and verification gates are complete or the plan is genuinely blocked. If the
|
|
|
27
27
|
user invokes `/goal`, respect that native Claude Code session goal; LazyClaude
|
|
28
28
|
does not auto-type or send `/goal` text.
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
If goal tools are unavailable or not exposed in this Claude Code session, state
|
|
31
|
+
that limitation before execution and ask the user to bind a native
|
|
32
|
+
`/goal <plan completion condition>` when the plan is long-running. Continue with
|
|
33
|
+
the Boulder and ledger fallback when no native goal can be bound.
|
|
34
|
+
|
|
35
|
+
For broad, risky, parallel, or long-running checkbox waves, use Dynamic workflow
|
|
36
|
+
orchestration and call `Workflow` when Claude Code exposes it. Each workflow lane must have explicit evidence
|
|
37
|
+
paths and cleanup receipts. For risky or parallel edits, use Dynamic worktree
|
|
38
|
+
isolation: call `EnterWorktree` when it is exposed, keep every command in the
|
|
39
|
+
selected worktree, and when only the CLI surface is available use or recommend
|
|
40
|
+
`claude --worktree <short-name> --tmux`.
|
|
@@ -22,8 +22,16 @@ only after every success criterion has real evidence or when the work is truly
|
|
|
22
22
|
blocked. If the user chooses `/goal`, treat it as Claude Code's native session
|
|
23
23
|
goal command; LazyClaude must not auto-type or send `/goal` text for them.
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
If goal tools are unavailable or not exposed in this Claude Code session, state
|
|
26
|
+
that limitation explicitly. Before long execution, ask the user to bind the
|
|
27
|
+
native Claude Code goal with a concrete `/goal <completion condition>` command,
|
|
28
|
+
then continue with a local ledger fallback when they choose not to.
|
|
29
|
+
|
|
30
|
+
For broad, risky, parallel, or long-running work, use Dynamic workflow
|
|
31
|
+
orchestration and call the `Workflow` tool when Claude Code exposes it instead
|
|
32
|
+
of merely mentioning workflow guidance. Keep each worker or workflow branch tied
|
|
33
|
+
to concrete criteria, artifacts, and cleanup receipts. Use Dynamic worktree
|
|
34
|
+
isolation for risky or parallel edits: call
|
|
35
|
+
`EnterWorktree` when Claude Code exposes it, keep all mutations inside the active
|
|
36
|
+
Claude Code workspace/worktree, and when only the CLI surface is available use
|
|
37
|
+
or recommend `claude --worktree <short-name> --tmux`.
|
|
@@ -14,9 +14,12 @@ Use Claude Code surfaces directly:
|
|
|
14
14
|
- use subagents only for read-only research or plan review
|
|
15
15
|
- include native goal handling: `get_goal`, `create_goal`, and delayed
|
|
16
16
|
`update_goal` when Claude Code exposes those tools, or a user-managed `/goal`
|
|
17
|
-
condition when
|
|
17
|
+
condition when goal tools are unavailable or not exposed
|
|
18
18
|
- include Dynamic workflow and Dynamic worktree guidance for independent,
|
|
19
|
-
parallel, risky, or long-running implementation lanes
|
|
19
|
+
parallel, risky, or long-running implementation lanes: call `Workflow` when
|
|
20
|
+
Claude Code exposes it, call `EnterWorktree` when isolated edits
|
|
21
|
+
need a model-facing worktree lane, and include
|
|
22
|
+
`claude --worktree <short-name> --tmux` when only the CLI surface is available
|
|
20
23
|
- write only plan artifacts and drafts
|
|
21
24
|
- include concrete tests, manual QA, cleanup, and non-publish guardrails
|
|
22
25
|
|
|
@@ -91,7 +91,7 @@ echo "DOCTOR_PASS" >> "$EVIDENCE"
|
|
|
91
91
|
|
|
92
92
|
if command -v claude >/dev/null 2>&1; then
|
|
93
93
|
run_step CLAUDE_PLUGIN_DETAILS claude plugin details lazyclaude@lazyclaude-ai
|
|
94
|
-
if ! grep -
|
|
94
|
+
if ! grep -Eq "Skills \\([0-9]+\\)" "$EVIDENCE" || ! grep -q "ulw-loop" "$EVIDENCE" || ! grep -q "ulw-plan" "$EVIDENCE" || ! grep -q "Hooks (4)" "$EVIDENCE"; then
|
|
95
95
|
echo "CLAUDE_PLUGIN_DETAILS_FAIL: expected LazyClaude skills/hooks inventory" >> "$EVIDENCE"
|
|
96
96
|
echo "CLAUDE_PLUGIN_DETAILS_FAIL"
|
|
97
97
|
exit 1
|