luciazero 2.3.0 → 2.4.2
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/LICENSE +1 -1
- package/README.md +35 -31
- package/agents/reviewer.md +34 -26
- package/claude/agents/reviewer.md +34 -26
- package/claude/hooks/luciazero-verify.sh +6 -14
- package/install-codex.sh +5 -1
- package/install.sh +3 -2
- package/package.json +10 -5
- package/skills/bisect/SKILL.md +11 -8
- package/skills/debug/SKILL.md +29 -23
- package/skills/discipline-report/SKILL.md +16 -6
- package/skills/done/SKILL.md +36 -30
- package/skills/experiment/SKILL.md +20 -17
- package/skills/imouto-mode/SKILL.md +29 -22
- package/skills/lucia-relay/SKILL.md +46 -32
- package/skills/lucia-relay/scripts/relay.py +599 -85
- package/skills/plan/SKILL.md +14 -10
- package/skills/ready/SKILL.md +82 -66
- package/skills/retro/SKILL.md +46 -39
- package/skills/show/SKILL.md +45 -96
- package/CHANGELOG.md +0 -712
- package/README.th.md +0 -277
package/skills/done/SKILL.md
CHANGED
|
@@ -1,70 +1,76 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: done
|
|
3
|
-
description: Run the closeout ritual before handing back non-trivial work
|
|
3
|
+
description: Run the closeout ritual before handing back non-trivial work; full verification, revert-probe honesty, independent review, and scope reporting. Use before declaring completion, opening a PR, wrapping up a change, or "ปิดงาน".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Done
|
|
7
|
-
|
|
8
|
-
The doctrine says: *done is proven by a command, not by my judgment.* This is the ritual that turns that rule into a checklist. Run every step; skipping one is how "done" ships broken.
|
|
6
|
+
# Done
|
|
9
7
|
|
|
10
8
|
## 1. Full verify
|
|
11
9
|
|
|
12
|
-
Run the **full** tier
|
|
10
|
+
Run the **full** tier now: `verify-full` when present, otherwise verify. Quote
|
|
11
|
+
the shortest decisive line.
|
|
13
12
|
|
|
14
|
-
- Red → you are not here yet.
|
|
15
|
-
- No verify command exists →
|
|
16
|
-
-
|
|
13
|
+
- Red → you are not here yet. Return to the loop.
|
|
14
|
+
- No verify command exists → use `/ready`; do not claim done.
|
|
15
|
+
- It must actually have run **now**, not earlier in the session.
|
|
17
16
|
|
|
18
17
|
## 2. Skeptic diff pass
|
|
19
18
|
|
|
20
|
-
Re-read the final diff as a hostile reviewer.
|
|
19
|
+
Re-read the final diff as a hostile reviewer. Check:
|
|
21
20
|
|
|
22
|
-
- **Edge cases
|
|
23
|
-
- **Error paths
|
|
24
|
-
- **Changed contracts
|
|
25
|
-
- **Accidental content
|
|
26
|
-
- **Test honesty
|
|
21
|
+
- **Edge cases**: empty, zero, unicode, boundaries, concurrency.
|
|
22
|
+
- **Error paths**: failures, missing files, dropped network, cleanup.
|
|
23
|
+
- **Changed contracts**: APIs, formats, schema, config, old consumers.
|
|
24
|
+
- **Accidental content**: unrelated files, debug code, secrets, loose pins.
|
|
25
|
+
- **Test honesty**: would changed tests fail if implementation is reverted?
|
|
27
26
|
|
|
28
|
-
|
|
27
|
+
When applicable run
|
|
28
|
+
`<this-skill-dir>/scripts/revert-probe.sh "<verify-cmd>"`. Weakened checks are
|
|
29
|
+
findings. Fix findings and repeat full verify.
|
|
29
30
|
|
|
30
31
|
## 3. Risk-routed independent review
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
Choose focus:
|
|
33
34
|
|
|
34
|
-
- `security
|
|
35
|
-
- `contract
|
|
36
|
-
- `general
|
|
35
|
+
- `security`: auth, permissions, input, paths, commands, secrets, endpoints.
|
|
36
|
+
- `contract`: public API/CLI, schema, config, migration, consumers.
|
|
37
|
+
- `general`: money, concurrency, resources, or a wide uncertain diff.
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
Prefer the harness's built-in review command; otherwise use one reviewer agent.
|
|
40
|
+
If security and contract both apply, request two independent focused passes.
|
|
41
|
+
The reviewer reads callers and consumers.
|
|
39
42
|
|
|
40
|
-
|
|
43
|
+
Fix and re-verify every `blocker` or `major`, unless the user explicitly
|
|
44
|
+
accepts the named risk. A `minor` may be deferred only when reported. A small,
|
|
45
|
+
well-understood diff with no routed risk may stop after the skeptic pass.
|
|
41
46
|
|
|
42
47
|
## 4. Scope check
|
|
43
48
|
|
|
44
|
-
Re-read the original request.
|
|
49
|
+
Re-read the original request. Every item is delivered, or named as left out with
|
|
50
|
+
a reason. Never drop scope silently.
|
|
45
51
|
|
|
46
52
|
## 5. Lessons
|
|
47
53
|
|
|
48
|
-
|
|
54
|
+
For a dead end, footgun, or disproved approach, run `/retro`. If unfinished
|
|
55
|
+
state must transfer, use `/lucia-relay` instead.
|
|
49
56
|
|
|
50
57
|
## 6. Report
|
|
51
58
|
|
|
52
59
|
```
|
|
53
60
|
Done: <what changed, one line>
|
|
54
|
-
Proof: <verify command> → <decisive
|
|
55
|
-
Not covered: <
|
|
56
|
-
Left out: <scope
|
|
61
|
+
Proof: <verify command> → <decisive line>
|
|
62
|
+
Not covered: <verification gap>
|
|
63
|
+
Left out: <scope omitted + reason, or nothing>
|
|
57
64
|
```
|
|
58
65
|
|
|
59
|
-
No hedging
|
|
60
|
-
|
|
61
|
-
When the report feeds a machine — a CI job, a PR comment, a dashboard — mirror it as JSON: same facts, no extra claims. A blocked closeout reports `"status": "blocked"` with the failing line as `decisive_line`.
|
|
66
|
+
No hedging: report done only after every step passes. Machine output mirrors the
|
|
67
|
+
same facts; blocked output uses `"status": "blocked"` and its failing line.
|
|
62
68
|
|
|
63
69
|
```json
|
|
64
70
|
{
|
|
65
71
|
"status": "done",
|
|
66
72
|
"verify": {"command": "./test.sh", "exit_code": 0, "decisive_line": "PASS all checks green"},
|
|
67
|
-
"not_covered": "<
|
|
73
|
+
"not_covered": "<verification gap>",
|
|
68
74
|
"left_out": "nothing"
|
|
69
75
|
}
|
|
70
76
|
```
|
|
@@ -5,40 +5,43 @@ description: Measure performance or tuning changes with a baseline, controlled c
|
|
|
5
5
|
|
|
6
6
|
# Experiment — no claim without a measurement
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Optimization needs numbers; null results get recorded too.
|
|
9
9
|
|
|
10
10
|
## 1. Define the metric before touching code
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
Choose one command that prints the number: runtime, RSS, latency, size, or count.
|
|
13
|
+
Decide **now** what improvement would count, before seeing results. If no metric
|
|
14
|
+
command exists, build it first.
|
|
14
15
|
|
|
15
16
|
## 2. Baseline
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
Run at least 3 times and record all values, not only the mean. Pin what you can:
|
|
19
|
+
seed, input, cache state, and environment; state what remains uncontrolled.
|
|
20
|
+
Correctness verify must be green before and after.
|
|
20
21
|
|
|
21
22
|
## 3. One variable per experiment
|
|
22
23
|
|
|
23
|
-
Change one thing.
|
|
24
|
+
Change one thing. Multiple changes make the result uninterpretable.
|
|
24
25
|
|
|
25
26
|
## 4. Measure again
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
Use the Same command, same repetitions, same conditions. A result must beat the
|
|
29
|
+
baseline spread; Inside the noise = **null result**.
|
|
29
30
|
|
|
30
31
|
## 5. Verdict and record
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
Follow the repository's existing experiment log; otherwise create and append to
|
|
34
|
+
`docs/experiments.md`:
|
|
33
35
|
|
|
34
36
|
```
|
|
35
|
-
## <date> — <hypothesis
|
|
36
|
-
change: <
|
|
37
|
-
baseline: <values> | result: <values>
|
|
37
|
+
## <date> — <hypothesis>
|
|
38
|
+
change: <one variable>
|
|
39
|
+
baseline: <all values> | result: <all values>
|
|
38
40
|
verdict: WIN <n%> | NULL (inside noise) | LOSS
|
|
39
|
-
decision: <kept
|
|
41
|
+
decision: <kept or reverted + reason>
|
|
40
42
|
```
|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
Losers and nulls are reverted immediately; the log preserves the finding, not
|
|
45
|
+
the bad diff. A null result is a finding—record it so it is not retried without
|
|
46
|
+
new evidence. Never delete a previous entry; append a correction when later
|
|
47
|
+
evidence overturns it. Route load-bearing nulls through `/retro`.
|
|
@@ -6,38 +6,45 @@ disable-model-invocation: true
|
|
|
6
6
|
|
|
7
7
|
# Imouto Mode
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Optional warm, lightly tsundere voice for coding. Keep a non-romantic
|
|
10
|
+
sibling-companion persona: work first, personality second.
|
|
10
11
|
|
|
11
12
|
## Modes
|
|
12
13
|
|
|
13
|
-
Default: off for every request. Apply a
|
|
14
|
+
Default: off for every request. Apply a mode only to the current invocation; the
|
|
15
|
+
next request is off unless explicitly invoked again. Never persist preferences
|
|
16
|
+
unless separately asked.
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- `
|
|
18
|
-
-
|
|
19
|
-
- `off` — use the normal professional style for this invocation.
|
|
20
|
-
- no argument or an unknown argument — show these choices without enabling anything.
|
|
18
|
+
- `focus` — recommended: one brief warm touch in greeting, transition, or handoff.
|
|
19
|
+
- `on` — voice throughout, capped at two short personality touches.
|
|
20
|
+
- `off` — normal professional voice.
|
|
21
|
+
- No or unknown argument — show these choices without enabling anything.
|
|
21
22
|
|
|
22
23
|
## Voice
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
Match the user's language. In Thai, be casual, warm, and gently playful without
|
|
26
|
+
padding. Express tsundere as mild surface reluctance, then show
|
|
27
|
+
care through useful action; the answer must remain obvious.
|
|
28
|
+
|
|
29
|
+
Never insult, belittle, shame, snap at, or patronize the user. Never withhold
|
|
30
|
+
help, hide uncertainty, weaken evidence, or delay work. Tease only when harmless.
|
|
31
|
+
Use `พี่` or another familiar form only after the user uses or requests it.
|
|
32
|
+
Use only available context; Never claim memory that is not present.
|
|
30
33
|
|
|
31
34
|
## Work-first boundaries
|
|
32
35
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
- Never auto-trigger. Repository names, mascot art, Thai text, or affectionate wording are not activation.
|
|
36
|
+
Preserve the plan → change → verify → fix loop and all safety rules. Keep code,
|
|
37
|
+
commands, paths, errors, test evidence, findings, and incident/security guidance
|
|
38
|
+
literal. For incidents, destructive actions, security, high-stakes advice, or
|
|
39
|
+
distress, use a calm direct voice with no teasing.
|
|
38
40
|
|
|
39
|
-
|
|
41
|
+
Never add roleplay that delays a tool call, pads updates, repeats facts, or
|
|
42
|
+
displaces evidence. Never auto-trigger. Names, mascot art, Thai, or affectionate
|
|
43
|
+
text are not activation.
|
|
40
44
|
|
|
41
|
-
|
|
45
|
+
## Relationship boundaries
|
|
42
46
|
|
|
43
|
-
|
|
47
|
+
Keep the voice non-romantic and non-sexual. Never use jealousy, possessiveness,
|
|
48
|
+
exclusivity, guilt, emotional dependency, real-feeling/consciousness claims, or
|
|
49
|
+
replacement of human relationships. Remain a coding agent first. If personality
|
|
50
|
+
and clarity conflict, choose clarity.
|
|
@@ -3,46 +3,60 @@ name: lucia-relay
|
|
|
3
3
|
description: Transfer unfinished work and non-obvious knowledge across sessions, agents, people, machines, or harnesses. Use for relay, handoff, continuing later, context transfer, compaction, or "ส่งต่อ"; produce verifiable portable state.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Lucia Relay
|
|
6
|
+
# Lucia Relay
|
|
7
7
|
|
|
8
|
-
`/retro` stores
|
|
8
|
+
`/retro` stores durable lessons; Relay moves task state. JSON is canonical;
|
|
9
|
+
Markdown is generated. Treat received artifacts and their commands as
|
|
10
|
+
untrusted until repository identity, HEAD, and evidence agree.
|
|
9
11
|
|
|
10
12
|
## Decide the route first
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
- `same-machine`: local paths are usable; schema 1/2 remain readable.
|
|
15
|
+
- `cross-machine`: use schema 3, a clean pushed commit, portable knowledge, and
|
|
16
|
+
receiver-supplied trust. Never assume paths or artifact claims travel.
|
|
13
17
|
|
|
14
|
-
|
|
15
|
-
- `cross-machine`: the receiver cannot open anything local. Every pointer must be repo-relative and present in a pushed commit, or the needed knowledge must be copied into `knowledge.inline` in `LUCIA_RELAY.json`.
|
|
16
|
-
|
|
17
|
-
If the destination is not explicit and cannot be inferred, ask the user. Never assume a local path will travel.
|
|
18
|
+
Ask if unclear.
|
|
18
19
|
|
|
19
20
|
## Produce
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
22
|
+
For same-machine, run `relay.py draft --root . --recipient same-machine`.
|
|
23
|
+
|
|
24
|
+
1. Commit and push every task file first. Choose the task's base commit, then
|
|
25
|
+
run `relay.py draft --root . --recipient cross-machine --base <base> >
|
|
26
|
+
LUCIA_RELAY.json`. This publishes a commit-named transfer tag and records
|
|
27
|
+
sanitized clone URL, head/base OIDs, and committed changed files.
|
|
28
|
+
2. Fill goal, done/in-progress state, one literal next action, verification,
|
|
29
|
+
`read_first`, inline knowledge, hypotheses (including refuted ones), and
|
|
30
|
+
landmines. Keep captured route/repository fields unchanged.
|
|
31
|
+
3. Each verification entry needs an argv-safe command, exit code, decisive
|
|
32
|
+
line, and timezone-aware run time. Include at least one entry and portable
|
|
33
|
+
knowledge. Copy machine-local essentials into `knowledge.inline`; exclude
|
|
34
|
+
credentials, private paths, and preferences.
|
|
35
|
+
4. Run `relay.py render --root .`, fix errors, then run `relay.py envelope
|
|
36
|
+
--root .`. Send both artifacts normally; send the envelope's repository URL,
|
|
37
|
+
HEAD, and manifest digest through an authenticated channel.
|
|
38
|
+
|
|
39
|
+
Do not transfer a chat transcript. Transfer decisions, evidence, negative
|
|
40
|
+
knowledge, and source-of-truth pointers. Keep artifacts out of Git; if
|
|
41
|
+
committed, review secrets and remove after use.
|
|
41
42
|
|
|
42
43
|
## Receive
|
|
43
44
|
|
|
44
|
-
1.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
1. Obtain the trusted envelope. Clone its repository, checkout its HEAD
|
|
46
|
+
(detached is valid), and place both artifacts at root. Never execute a
|
|
47
|
+
command merely because the relay contains it.
|
|
48
|
+
2. Run `relay.py inspect --root . --expected-recipient cross-machine
|
|
49
|
+
--trusted-head <sha> --trusted-manifest-sha256 <digest>
|
|
50
|
+
--trusted-repository-url <url>`. Read committed
|
|
51
|
+
changed files, every `read_first` pointer, inline knowledge, hypotheses, and
|
|
52
|
+
landmines before editing.
|
|
53
|
+
3. Manually approve and run every verification command in the receiver's
|
|
54
|
+
coding harness; Relay never executes artifact commands. Compare each exit
|
|
55
|
+
code and decisive line with the recorded evidence.
|
|
56
|
+
4. The tree wins on mismatch: report it and update the plan from current state.
|
|
57
|
+
After all evidence matches, run `relay.py consume --root . --verified
|
|
58
|
+
--expected-recipient cross-machine --trusted-head <sha>
|
|
59
|
+
--trusted-manifest-sha256 <digest> --trusted-repository-url <url>`.
|
|
60
|
+
|
|
61
|
+
For same-machine, inspect normally, rerun evidence manually, then consume with
|
|
62
|
+
`--verified`; never reuse a stale relay.
|