@codyswann/lisa 2.322.7 → 2.322.8

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 (64) hide show
  1. package/dist/core/upstream-evidence-manifest.js +2 -2
  2. package/package.json +1 -1
  3. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  4. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  5. package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/SKILL.md +12 -8
  6. package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +9 -5
  7. package/plugins/lisa/skills/lisa-setup-remote-env/SKILL.md +12 -8
  8. package/plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +9 -5
  9. package/plugins/lisa-agy/plugin.json +1 -1
  10. package/plugins/lisa-agy/skills/lisa-setup-remote-env/SKILL.md +12 -8
  11. package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +9 -5
  12. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  13. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  14. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  15. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-copilot/skills/lisa-setup-remote-env/SKILL.md +12 -8
  19. package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +9 -5
  20. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-cursor/skills/lisa-setup-remote-env/SKILL.md +12 -8
  22. package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +9 -5
  23. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  25. package/plugins/lisa-expo-agy/plugin.json +1 -1
  26. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  30. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  31. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  35. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  36. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  40. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  41. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  45. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  46. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  50. package/plugins/lisa-rails-agy/plugin.json +1 -1
  51. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  55. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  56. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  60. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  61. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  63. package/plugins/src/base/skills/lisa-setup-remote-env/SKILL.md +12 -8
  64. package/plugins/src/base/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +9 -5
@@ -559,10 +559,10 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
559
559
  "plugins/src/base/skills/lisa-setup-linear/SKILL.md": "ec76f832a6df6f58b163f7f5ba6826ed2fcbddc91e44a8372e874858e4d0c518",
560
560
  "plugins/src/base/skills/lisa-setup-notion/SKILL.md": "f5a1e9290789fd1c33675168d30461fb24a11c98a433ef777c1f536bc2f905ef",
561
561
  "plugins/src/base/skills/lisa-setup-remote-aws/SKILL.md": "80fbf157f9c562c033886c25a99b37356602edd9e61cd2d492f339769ddcf97e",
562
- "plugins/src/base/skills/lisa-setup-remote-env/SKILL.md": "f706b5c94267d128bf41ef1a5fa6b68ea184e22c7929bda126128f08e1728b86",
562
+ "plugins/src/base/skills/lisa-setup-remote-env/SKILL.md": "5627c45a4ce7d0f0d122791f699b6dd2841602adf873678c693ad08a48eab401",
563
563
  "plugins/src/base/skills/lisa-setup-remote-env/assets/session-start.sh": "6e3871ec2f8d56b8ebb85376ebdd3956f3ed8fa4f7b278c2ed90ca9b8845897c",
564
564
  "plugins/src/base/skills/lisa-setup-remote-env/assets/setup.sh": "c04afb1cf8e14a2713645228e679fa7772559488330a240ec0297cae6afd03e2",
565
- "plugins/src/base/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs": "f468dcf72512ff0b7d0d0ff6a38e81e5b57d83361ffff45c5265147f67ca01df",
565
+ "plugins/src/base/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs": "68339117f7d2fe1fdb9f05c8039ffe719f24da7cf700bc3c940bfccbf82cded2",
566
566
  "plugins/src/base/skills/lisa-setup-remote-env/scripts/toolchain.mjs": "ff66d33ba41a068d09be18f81ac68988238c2afa1d4e3733ae906b73eea74324",
567
567
  "plugins/src/base/skills/lisa-setup-remote-env/scripts/verify-remote-env.mjs": "82bc2a27a0a5afb2ff413a88365c619fd7f0eaada5de3ccabf2000938f0607a4",
568
568
  "plugins/src/base/skills/lisa-setup-sonar/SKILL.md": "53fbd8acce4b5e47e88195a7b90d5be424fa6ef7ad872f52c50467c690664c3b",
package/package.json CHANGED
@@ -115,7 +115,7 @@
115
115
  "brace-expansion": ">=5.0.9"
116
116
  },
117
117
  "name": "@codyswann/lisa",
118
- "version": "2.322.7",
118
+ "version": "2.322.8",
119
119
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
120
120
  "main": "dist/index.js",
121
121
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -18,7 +18,7 @@ maintenance: n=0; rc=0; seen=""; for f in scripts/lisa-remote-env/setup.sh */scr
18
18
  ```
19
19
 
20
20
  **That line is identical for every project AND every surface.** Nothing in it names the
21
- repository, the package manager, or a home directory, so it can be pasted unchanged anywhere.
21
+ repository or the package manager, so it can be pasted unchanged anywhere.
22
22
 
23
23
  Locating the checkout is the only hard part, because the surfaces disagree about where the
24
24
  field runs:
@@ -26,13 +26,17 @@ field runs:
26
26
  | Surface | cwd when the field runs | Checkout |
27
27
  | --- | --- | --- |
28
28
  | Codex Cloud | **is** the checkout | `/workspace/<repo>` |
29
- | Claude Code web | `$HOME` | `$HOME/<repo>` |
29
+ | Claude Code web | `$HOME`, but not reliably | `$HOME/<repo>`, or another root |
30
30
 
31
- So both candidates are tried **relative to cwd** the checkout itself, then one level down —
32
- and neither mentions `$HOME`. An earlier version of this field used
33
- `bash "$HOME"/*/scripts/...`, which works on Claude Code web and fails on Codex Cloud, where
34
- the checkout is not under `$HOME` at all: the glob matches nothing and bash reports
35
- `No such file or directory` for a path still containing a literal `*`.
31
+ So the checkout itself and one level down are tried **relative to cwd first**, then the same
32
+ pair under `$HOME` and `/workspace` the roots the two surfaces actually use — because cwd is
33
+ not reliably either of them: a live Claude environment reported `$HOME` as `/root` with the
34
+ checkout at `/home/user/lisa`, which a cwd-only search cannot reach.
35
+
36
+ The cwd-relative candidates coming **first** is the invariant, and a test pins it. An earlier
37
+ version of this field used `bash "$HOME"/*/scripts/...` alone, which works on Claude Code web
38
+ and fails on Codex Cloud, where the checkout is not under `$HOME` at all: the glob matches
39
+ nothing and bash reports `No such file or directory` for a path still containing a literal `*`.
36
40
 
37
41
  **Every** match is prepared, not the first. A Claude Code web environment can hold more than
38
42
  one checkout, and stopping at the first glob hit would prepare whichever repository sorts
@@ -190,7 +194,7 @@ It reads the bootstrap name from `secrets.bootstrap.key` and emits the environme
190
194
 
191
195
  - **`gh` is not pre-installed.** If the project's flows shell out to it, add it to `remoteEnv.tools.install`, pinned and checksummed like anything else.
192
196
  - **A proxied credential reads as the literal string `proxy-injected`.** Tools that authenticate through the GitHub proxy work; a script that reads the variable directly gets the placeholder. The read-back asserts this rather than leaving it to be discovered against a live service.
193
- - **The setup field runs from `$HOME`, not from the checkout.** That is why the field is a `$HOME` glob rather than a plain relative path: it locates the clone one level down, and the script anchors itself from there. Nothing in the emitted line names this project, so it is the same line everywhere.
197
+ - **The surfaces disagree about where the setup field runs.** Codex Cloud runs it inside the checkout; Claude Code web runs it from `$HOME` with the checkout one level down. That is why the field tries the checkout itself and then one level down relative to cwd, and only then the same pair under `$HOME` and `/workspace` — the script anchors itself on whichever matched. Nothing in the emitted line names this project, so it is the same line everywhere.
194
198
  - **Trusted network access is not enough for provider CLIs.** Use Custom and include package registries, GitHub, cloud SDK hosts, and the bootstrap credential manager API.
195
199
 
196
200
  ### One environment per project, pinned locally
@@ -444,11 +444,15 @@ export function emitClaudeWeb({ bootstrapKey }) {
444
444
  " Setup script:",
445
445
  ` ${SETUP_FIELD}`,
446
446
  "",
447
- " This line is identical for every project nothing in it names this",
448
- " repository or its package manager. Claude runs the field from $HOME",
449
- " while the checkout lives one level down, so the glob is what locates",
450
- " it; the script then anchors itself and installs dependencies using",
451
- " whichever lockfile the project actually commits.",
447
+ " This line is identical for every project and every surface nothing",
448
+ " in it names this repository or its package manager. The surfaces",
449
+ " disagree about where the field runs: Codex Cloud runs it inside the",
450
+ " checkout, Claude Code web runs it from $HOME with the checkout one",
451
+ " level down. So it tries the checkout itself and then one level down,",
452
+ " relative to cwd, and only then the same pair under $HOME and",
453
+ " /workspace, for the case where cwd is neither. The script anchors",
454
+ " itself on whichever matched and installs dependencies using whichever",
455
+ " lockfile the project actually commits.",
452
456
  "",
453
457
  " Keeping it generic is the point. A field that named the repository and",
454
458
  " the package manager was a string a human had to get right, in a box",
@@ -18,7 +18,7 @@ maintenance: n=0; rc=0; seen=""; for f in scripts/lisa-remote-env/setup.sh */scr
18
18
  ```
19
19
 
20
20
  **That line is identical for every project AND every surface.** Nothing in it names the
21
- repository, the package manager, or a home directory, so it can be pasted unchanged anywhere.
21
+ repository or the package manager, so it can be pasted unchanged anywhere.
22
22
 
23
23
  Locating the checkout is the only hard part, because the surfaces disagree about where the
24
24
  field runs:
@@ -26,13 +26,17 @@ field runs:
26
26
  | Surface | cwd when the field runs | Checkout |
27
27
  | --- | --- | --- |
28
28
  | Codex Cloud | **is** the checkout | `/workspace/<repo>` |
29
- | Claude Code web | `$HOME` | `$HOME/<repo>` |
29
+ | Claude Code web | `$HOME`, but not reliably | `$HOME/<repo>`, or another root |
30
30
 
31
- So both candidates are tried **relative to cwd** the checkout itself, then one level down —
32
- and neither mentions `$HOME`. An earlier version of this field used
33
- `bash "$HOME"/*/scripts/...`, which works on Claude Code web and fails on Codex Cloud, where
34
- the checkout is not under `$HOME` at all: the glob matches nothing and bash reports
35
- `No such file or directory` for a path still containing a literal `*`.
31
+ So the checkout itself and one level down are tried **relative to cwd first**, then the same
32
+ pair under `$HOME` and `/workspace` the roots the two surfaces actually use — because cwd is
33
+ not reliably either of them: a live Claude environment reported `$HOME` as `/root` with the
34
+ checkout at `/home/user/lisa`, which a cwd-only search cannot reach.
35
+
36
+ The cwd-relative candidates coming **first** is the invariant, and a test pins it. An earlier
37
+ version of this field used `bash "$HOME"/*/scripts/...` alone, which works on Claude Code web
38
+ and fails on Codex Cloud, where the checkout is not under `$HOME` at all: the glob matches
39
+ nothing and bash reports `No such file or directory` for a path still containing a literal `*`.
36
40
 
37
41
  **Every** match is prepared, not the first. A Claude Code web environment can hold more than
38
42
  one checkout, and stopping at the first glob hit would prepare whichever repository sorts
@@ -190,7 +194,7 @@ It reads the bootstrap name from `secrets.bootstrap.key` and emits the environme
190
194
 
191
195
  - **`gh` is not pre-installed.** If the project's flows shell out to it, add it to `remoteEnv.tools.install`, pinned and checksummed like anything else.
192
196
  - **A proxied credential reads as the literal string `proxy-injected`.** Tools that authenticate through the GitHub proxy work; a script that reads the variable directly gets the placeholder. The read-back asserts this rather than leaving it to be discovered against a live service.
193
- - **The setup field runs from `$HOME`, not from the checkout.** That is why the field is a `$HOME` glob rather than a plain relative path: it locates the clone one level down, and the script anchors itself from there. Nothing in the emitted line names this project, so it is the same line everywhere.
197
+ - **The surfaces disagree about where the setup field runs.** Codex Cloud runs it inside the checkout; Claude Code web runs it from `$HOME` with the checkout one level down. That is why the field tries the checkout itself and then one level down relative to cwd, and only then the same pair under `$HOME` and `/workspace` — the script anchors itself on whichever matched. Nothing in the emitted line names this project, so it is the same line everywhere.
194
198
  - **Trusted network access is not enough for provider CLIs.** Use Custom and include package registries, GitHub, cloud SDK hosts, and the bootstrap credential manager API.
195
199
 
196
200
  ### One environment per project, pinned locally
@@ -444,11 +444,15 @@ export function emitClaudeWeb({ bootstrapKey }) {
444
444
  " Setup script:",
445
445
  ` ${SETUP_FIELD}`,
446
446
  "",
447
- " This line is identical for every project nothing in it names this",
448
- " repository or its package manager. Claude runs the field from $HOME",
449
- " while the checkout lives one level down, so the glob is what locates",
450
- " it; the script then anchors itself and installs dependencies using",
451
- " whichever lockfile the project actually commits.",
447
+ " This line is identical for every project and every surface nothing",
448
+ " in it names this repository or its package manager. The surfaces",
449
+ " disagree about where the field runs: Codex Cloud runs it inside the",
450
+ " checkout, Claude Code web runs it from $HOME with the checkout one",
451
+ " level down. So it tries the checkout itself and then one level down,",
452
+ " relative to cwd, and only then the same pair under $HOME and",
453
+ " /workspace, for the case where cwd is neither. The script anchors",
454
+ " itself on whichever matched and installs dependencies using whichever",
455
+ " lockfile the project actually commits.",
452
456
  "",
453
457
  " Keeping it generic is the point. A field that named the repository and",
454
458
  " the package manager was a string a human had to get right, in a box",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -18,7 +18,7 @@ maintenance: n=0; rc=0; seen=""; for f in scripts/lisa-remote-env/setup.sh */scr
18
18
  ```
19
19
 
20
20
  **That line is identical for every project AND every surface.** Nothing in it names the
21
- repository, the package manager, or a home directory, so it can be pasted unchanged anywhere.
21
+ repository or the package manager, so it can be pasted unchanged anywhere.
22
22
 
23
23
  Locating the checkout is the only hard part, because the surfaces disagree about where the
24
24
  field runs:
@@ -26,13 +26,17 @@ field runs:
26
26
  | Surface | cwd when the field runs | Checkout |
27
27
  | --- | --- | --- |
28
28
  | Codex Cloud | **is** the checkout | `/workspace/<repo>` |
29
- | Claude Code web | `$HOME` | `$HOME/<repo>` |
29
+ | Claude Code web | `$HOME`, but not reliably | `$HOME/<repo>`, or another root |
30
30
 
31
- So both candidates are tried **relative to cwd** the checkout itself, then one level down —
32
- and neither mentions `$HOME`. An earlier version of this field used
33
- `bash "$HOME"/*/scripts/...`, which works on Claude Code web and fails on Codex Cloud, where
34
- the checkout is not under `$HOME` at all: the glob matches nothing and bash reports
35
- `No such file or directory` for a path still containing a literal `*`.
31
+ So the checkout itself and one level down are tried **relative to cwd first**, then the same
32
+ pair under `$HOME` and `/workspace` the roots the two surfaces actually use — because cwd is
33
+ not reliably either of them: a live Claude environment reported `$HOME` as `/root` with the
34
+ checkout at `/home/user/lisa`, which a cwd-only search cannot reach.
35
+
36
+ The cwd-relative candidates coming **first** is the invariant, and a test pins it. An earlier
37
+ version of this field used `bash "$HOME"/*/scripts/...` alone, which works on Claude Code web
38
+ and fails on Codex Cloud, where the checkout is not under `$HOME` at all: the glob matches
39
+ nothing and bash reports `No such file or directory` for a path still containing a literal `*`.
36
40
 
37
41
  **Every** match is prepared, not the first. A Claude Code web environment can hold more than
38
42
  one checkout, and stopping at the first glob hit would prepare whichever repository sorts
@@ -190,7 +194,7 @@ It reads the bootstrap name from `secrets.bootstrap.key` and emits the environme
190
194
 
191
195
  - **`gh` is not pre-installed.** If the project's flows shell out to it, add it to `remoteEnv.tools.install`, pinned and checksummed like anything else.
192
196
  - **A proxied credential reads as the literal string `proxy-injected`.** Tools that authenticate through the GitHub proxy work; a script that reads the variable directly gets the placeholder. The read-back asserts this rather than leaving it to be discovered against a live service.
193
- - **The setup field runs from `$HOME`, not from the checkout.** That is why the field is a `$HOME` glob rather than a plain relative path: it locates the clone one level down, and the script anchors itself from there. Nothing in the emitted line names this project, so it is the same line everywhere.
197
+ - **The surfaces disagree about where the setup field runs.** Codex Cloud runs it inside the checkout; Claude Code web runs it from `$HOME` with the checkout one level down. That is why the field tries the checkout itself and then one level down relative to cwd, and only then the same pair under `$HOME` and `/workspace` — the script anchors itself on whichever matched. Nothing in the emitted line names this project, so it is the same line everywhere.
194
198
  - **Trusted network access is not enough for provider CLIs.** Use Custom and include package registries, GitHub, cloud SDK hosts, and the bootstrap credential manager API.
195
199
 
196
200
  ### One environment per project, pinned locally
@@ -444,11 +444,15 @@ export function emitClaudeWeb({ bootstrapKey }) {
444
444
  " Setup script:",
445
445
  ` ${SETUP_FIELD}`,
446
446
  "",
447
- " This line is identical for every project nothing in it names this",
448
- " repository or its package manager. Claude runs the field from $HOME",
449
- " while the checkout lives one level down, so the glob is what locates",
450
- " it; the script then anchors itself and installs dependencies using",
451
- " whichever lockfile the project actually commits.",
447
+ " This line is identical for every project and every surface nothing",
448
+ " in it names this repository or its package manager. The surfaces",
449
+ " disagree about where the field runs: Codex Cloud runs it inside the",
450
+ " checkout, Claude Code web runs it from $HOME with the checkout one",
451
+ " level down. So it tries the checkout itself and then one level down,",
452
+ " relative to cwd, and only then the same pair under $HOME and",
453
+ " /workspace, for the case where cwd is neither. The script anchors",
454
+ " itself on whichever matched and installs dependencies using whichever",
455
+ " lockfile the project actually commits.",
452
456
  "",
453
457
  " Keeping it generic is the point. A field that named the repository and",
454
458
  " the package manager was a string a human had to get right, in a box",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -18,7 +18,7 @@ maintenance: n=0; rc=0; seen=""; for f in scripts/lisa-remote-env/setup.sh */scr
18
18
  ```
19
19
 
20
20
  **That line is identical for every project AND every surface.** Nothing in it names the
21
- repository, the package manager, or a home directory, so it can be pasted unchanged anywhere.
21
+ repository or the package manager, so it can be pasted unchanged anywhere.
22
22
 
23
23
  Locating the checkout is the only hard part, because the surfaces disagree about where the
24
24
  field runs:
@@ -26,13 +26,17 @@ field runs:
26
26
  | Surface | cwd when the field runs | Checkout |
27
27
  | --- | --- | --- |
28
28
  | Codex Cloud | **is** the checkout | `/workspace/<repo>` |
29
- | Claude Code web | `$HOME` | `$HOME/<repo>` |
29
+ | Claude Code web | `$HOME`, but not reliably | `$HOME/<repo>`, or another root |
30
30
 
31
- So both candidates are tried **relative to cwd** the checkout itself, then one level down —
32
- and neither mentions `$HOME`. An earlier version of this field used
33
- `bash "$HOME"/*/scripts/...`, which works on Claude Code web and fails on Codex Cloud, where
34
- the checkout is not under `$HOME` at all: the glob matches nothing and bash reports
35
- `No such file or directory` for a path still containing a literal `*`.
31
+ So the checkout itself and one level down are tried **relative to cwd first**, then the same
32
+ pair under `$HOME` and `/workspace` the roots the two surfaces actually use — because cwd is
33
+ not reliably either of them: a live Claude environment reported `$HOME` as `/root` with the
34
+ checkout at `/home/user/lisa`, which a cwd-only search cannot reach.
35
+
36
+ The cwd-relative candidates coming **first** is the invariant, and a test pins it. An earlier
37
+ version of this field used `bash "$HOME"/*/scripts/...` alone, which works on Claude Code web
38
+ and fails on Codex Cloud, where the checkout is not under `$HOME` at all: the glob matches
39
+ nothing and bash reports `No such file or directory` for a path still containing a literal `*`.
36
40
 
37
41
  **Every** match is prepared, not the first. A Claude Code web environment can hold more than
38
42
  one checkout, and stopping at the first glob hit would prepare whichever repository sorts
@@ -190,7 +194,7 @@ It reads the bootstrap name from `secrets.bootstrap.key` and emits the environme
190
194
 
191
195
  - **`gh` is not pre-installed.** If the project's flows shell out to it, add it to `remoteEnv.tools.install`, pinned and checksummed like anything else.
192
196
  - **A proxied credential reads as the literal string `proxy-injected`.** Tools that authenticate through the GitHub proxy work; a script that reads the variable directly gets the placeholder. The read-back asserts this rather than leaving it to be discovered against a live service.
193
- - **The setup field runs from `$HOME`, not from the checkout.** That is why the field is a `$HOME` glob rather than a plain relative path: it locates the clone one level down, and the script anchors itself from there. Nothing in the emitted line names this project, so it is the same line everywhere.
197
+ - **The surfaces disagree about where the setup field runs.** Codex Cloud runs it inside the checkout; Claude Code web runs it from `$HOME` with the checkout one level down. That is why the field tries the checkout itself and then one level down relative to cwd, and only then the same pair under `$HOME` and `/workspace` — the script anchors itself on whichever matched. Nothing in the emitted line names this project, so it is the same line everywhere.
194
198
  - **Trusted network access is not enough for provider CLIs.** Use Custom and include package registries, GitHub, cloud SDK hosts, and the bootstrap credential manager API.
195
199
 
196
200
  ### One environment per project, pinned locally
@@ -444,11 +444,15 @@ export function emitClaudeWeb({ bootstrapKey }) {
444
444
  " Setup script:",
445
445
  ` ${SETUP_FIELD}`,
446
446
  "",
447
- " This line is identical for every project nothing in it names this",
448
- " repository or its package manager. Claude runs the field from $HOME",
449
- " while the checkout lives one level down, so the glob is what locates",
450
- " it; the script then anchors itself and installs dependencies using",
451
- " whichever lockfile the project actually commits.",
447
+ " This line is identical for every project and every surface nothing",
448
+ " in it names this repository or its package manager. The surfaces",
449
+ " disagree about where the field runs: Codex Cloud runs it inside the",
450
+ " checkout, Claude Code web runs it from $HOME with the checkout one",
451
+ " level down. So it tries the checkout itself and then one level down,",
452
+ " relative to cwd, and only then the same pair under $HOME and",
453
+ " /workspace, for the case where cwd is neither. The script anchors",
454
+ " itself on whichever matched and installs dependencies using whichever",
455
+ " lockfile the project actually commits.",
452
456
  "",
453
457
  " Keeping it generic is the point. A field that named the repository and",
454
458
  " the package manager was a string a human had to get right, in a box",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -18,7 +18,7 @@ maintenance: n=0; rc=0; seen=""; for f in scripts/lisa-remote-env/setup.sh */scr
18
18
  ```
19
19
 
20
20
  **That line is identical for every project AND every surface.** Nothing in it names the
21
- repository, the package manager, or a home directory, so it can be pasted unchanged anywhere.
21
+ repository or the package manager, so it can be pasted unchanged anywhere.
22
22
 
23
23
  Locating the checkout is the only hard part, because the surfaces disagree about where the
24
24
  field runs:
@@ -26,13 +26,17 @@ field runs:
26
26
  | Surface | cwd when the field runs | Checkout |
27
27
  | --- | --- | --- |
28
28
  | Codex Cloud | **is** the checkout | `/workspace/<repo>` |
29
- | Claude Code web | `$HOME` | `$HOME/<repo>` |
29
+ | Claude Code web | `$HOME`, but not reliably | `$HOME/<repo>`, or another root |
30
30
 
31
- So both candidates are tried **relative to cwd** the checkout itself, then one level down —
32
- and neither mentions `$HOME`. An earlier version of this field used
33
- `bash "$HOME"/*/scripts/...`, which works on Claude Code web and fails on Codex Cloud, where
34
- the checkout is not under `$HOME` at all: the glob matches nothing and bash reports
35
- `No such file or directory` for a path still containing a literal `*`.
31
+ So the checkout itself and one level down are tried **relative to cwd first**, then the same
32
+ pair under `$HOME` and `/workspace` the roots the two surfaces actually use — because cwd is
33
+ not reliably either of them: a live Claude environment reported `$HOME` as `/root` with the
34
+ checkout at `/home/user/lisa`, which a cwd-only search cannot reach.
35
+
36
+ The cwd-relative candidates coming **first** is the invariant, and a test pins it. An earlier
37
+ version of this field used `bash "$HOME"/*/scripts/...` alone, which works on Claude Code web
38
+ and fails on Codex Cloud, where the checkout is not under `$HOME` at all: the glob matches
39
+ nothing and bash reports `No such file or directory` for a path still containing a literal `*`.
36
40
 
37
41
  **Every** match is prepared, not the first. A Claude Code web environment can hold more than
38
42
  one checkout, and stopping at the first glob hit would prepare whichever repository sorts
@@ -190,7 +194,7 @@ It reads the bootstrap name from `secrets.bootstrap.key` and emits the environme
190
194
 
191
195
  - **`gh` is not pre-installed.** If the project's flows shell out to it, add it to `remoteEnv.tools.install`, pinned and checksummed like anything else.
192
196
  - **A proxied credential reads as the literal string `proxy-injected`.** Tools that authenticate through the GitHub proxy work; a script that reads the variable directly gets the placeholder. The read-back asserts this rather than leaving it to be discovered against a live service.
193
- - **The setup field runs from `$HOME`, not from the checkout.** That is why the field is a `$HOME` glob rather than a plain relative path: it locates the clone one level down, and the script anchors itself from there. Nothing in the emitted line names this project, so it is the same line everywhere.
197
+ - **The surfaces disagree about where the setup field runs.** Codex Cloud runs it inside the checkout; Claude Code web runs it from `$HOME` with the checkout one level down. That is why the field tries the checkout itself and then one level down relative to cwd, and only then the same pair under `$HOME` and `/workspace` — the script anchors itself on whichever matched. Nothing in the emitted line names this project, so it is the same line everywhere.
194
198
  - **Trusted network access is not enough for provider CLIs.** Use Custom and include package registries, GitHub, cloud SDK hosts, and the bootstrap credential manager API.
195
199
 
196
200
  ### One environment per project, pinned locally
@@ -444,11 +444,15 @@ export function emitClaudeWeb({ bootstrapKey }) {
444
444
  " Setup script:",
445
445
  ` ${SETUP_FIELD}`,
446
446
  "",
447
- " This line is identical for every project nothing in it names this",
448
- " repository or its package manager. Claude runs the field from $HOME",
449
- " while the checkout lives one level down, so the glob is what locates",
450
- " it; the script then anchors itself and installs dependencies using",
451
- " whichever lockfile the project actually commits.",
447
+ " This line is identical for every project and every surface nothing",
448
+ " in it names this repository or its package manager. The surfaces",
449
+ " disagree about where the field runs: Codex Cloud runs it inside the",
450
+ " checkout, Claude Code web runs it from $HOME with the checkout one",
451
+ " level down. So it tries the checkout itself and then one level down,",
452
+ " relative to cwd, and only then the same pair under $HOME and",
453
+ " /workspace, for the case where cwd is neither. The script anchors",
454
+ " itself on whichever matched and installs dependencies using whichever",
455
+ " lockfile the project actually commits.",
452
456
  "",
453
457
  " Keeping it generic is the point. A field that named the repository and",
454
458
  " the package manager was a string a human had to get right, in a box",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.322.7",
3
+ "version": "2.322.8",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -18,7 +18,7 @@ maintenance: n=0; rc=0; seen=""; for f in scripts/lisa-remote-env/setup.sh */scr
18
18
  ```
19
19
 
20
20
  **That line is identical for every project AND every surface.** Nothing in it names the
21
- repository, the package manager, or a home directory, so it can be pasted unchanged anywhere.
21
+ repository or the package manager, so it can be pasted unchanged anywhere.
22
22
 
23
23
  Locating the checkout is the only hard part, because the surfaces disagree about where the
24
24
  field runs:
@@ -26,13 +26,17 @@ field runs:
26
26
  | Surface | cwd when the field runs | Checkout |
27
27
  | --- | --- | --- |
28
28
  | Codex Cloud | **is** the checkout | `/workspace/<repo>` |
29
- | Claude Code web | `$HOME` | `$HOME/<repo>` |
29
+ | Claude Code web | `$HOME`, but not reliably | `$HOME/<repo>`, or another root |
30
30
 
31
- So both candidates are tried **relative to cwd** the checkout itself, then one level down —
32
- and neither mentions `$HOME`. An earlier version of this field used
33
- `bash "$HOME"/*/scripts/...`, which works on Claude Code web and fails on Codex Cloud, where
34
- the checkout is not under `$HOME` at all: the glob matches nothing and bash reports
35
- `No such file or directory` for a path still containing a literal `*`.
31
+ So the checkout itself and one level down are tried **relative to cwd first**, then the same
32
+ pair under `$HOME` and `/workspace` the roots the two surfaces actually use — because cwd is
33
+ not reliably either of them: a live Claude environment reported `$HOME` as `/root` with the
34
+ checkout at `/home/user/lisa`, which a cwd-only search cannot reach.
35
+
36
+ The cwd-relative candidates coming **first** is the invariant, and a test pins it. An earlier
37
+ version of this field used `bash "$HOME"/*/scripts/...` alone, which works on Claude Code web
38
+ and fails on Codex Cloud, where the checkout is not under `$HOME` at all: the glob matches
39
+ nothing and bash reports `No such file or directory` for a path still containing a literal `*`.
36
40
 
37
41
  **Every** match is prepared, not the first. A Claude Code web environment can hold more than
38
42
  one checkout, and stopping at the first glob hit would prepare whichever repository sorts
@@ -190,7 +194,7 @@ It reads the bootstrap name from `secrets.bootstrap.key` and emits the environme
190
194
 
191
195
  - **`gh` is not pre-installed.** If the project's flows shell out to it, add it to `remoteEnv.tools.install`, pinned and checksummed like anything else.
192
196
  - **A proxied credential reads as the literal string `proxy-injected`.** Tools that authenticate through the GitHub proxy work; a script that reads the variable directly gets the placeholder. The read-back asserts this rather than leaving it to be discovered against a live service.
193
- - **The setup field runs from `$HOME`, not from the checkout.** That is why the field is a `$HOME` glob rather than a plain relative path: it locates the clone one level down, and the script anchors itself from there. Nothing in the emitted line names this project, so it is the same line everywhere.
197
+ - **The surfaces disagree about where the setup field runs.** Codex Cloud runs it inside the checkout; Claude Code web runs it from `$HOME` with the checkout one level down. That is why the field tries the checkout itself and then one level down relative to cwd, and only then the same pair under `$HOME` and `/workspace` — the script anchors itself on whichever matched. Nothing in the emitted line names this project, so it is the same line everywhere.
194
198
  - **Trusted network access is not enough for provider CLIs.** Use Custom and include package registries, GitHub, cloud SDK hosts, and the bootstrap credential manager API.
195
199
 
196
200
  ### One environment per project, pinned locally
@@ -444,11 +444,15 @@ export function emitClaudeWeb({ bootstrapKey }) {
444
444
  " Setup script:",
445
445
  ` ${SETUP_FIELD}`,
446
446
  "",
447
- " This line is identical for every project nothing in it names this",
448
- " repository or its package manager. Claude runs the field from $HOME",
449
- " while the checkout lives one level down, so the glob is what locates",
450
- " it; the script then anchors itself and installs dependencies using",
451
- " whichever lockfile the project actually commits.",
447
+ " This line is identical for every project and every surface nothing",
448
+ " in it names this repository or its package manager. The surfaces",
449
+ " disagree about where the field runs: Codex Cloud runs it inside the",
450
+ " checkout, Claude Code web runs it from $HOME with the checkout one",
451
+ " level down. So it tries the checkout itself and then one level down,",
452
+ " relative to cwd, and only then the same pair under $HOME and",
453
+ " /workspace, for the case where cwd is neither. The script anchors",
454
+ " itself on whichever matched and installs dependencies using whichever",
455
+ " lockfile the project actually commits.",
452
456
  "",
453
457
  " Keeping it generic is the point. A field that named the repository and",
454
458
  " the package manager was a string a human had to get right, in a box",