@codyswann/lisa 2.317.3 → 2.317.4

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 (69) hide show
  1. package/dist/core/upstream-evidence-manifest.js +3 -3
  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-secrets-access/SKILL.md +7 -0
  6. package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-aws/SKILL.md +32 -7
  7. package/plugins/lisa/scripts/remote-agent-aws-setup.sh +8 -2
  8. package/plugins/lisa/skills/lisa-secrets-access/SKILL.md +7 -0
  9. package/plugins/lisa/skills/lisa-setup-remote-aws/SKILL.md +32 -7
  10. package/plugins/lisa-agy/plugin.json +1 -1
  11. package/plugins/lisa-agy/scripts/remote-agent-aws-setup.sh +8 -2
  12. package/plugins/lisa-agy/skills/lisa-secrets-access/SKILL.md +7 -0
  13. package/plugins/lisa-agy/skills/lisa-setup-remote-aws/SKILL.md +32 -7
  14. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  16. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  17. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-copilot/scripts/remote-agent-aws-setup.sh +8 -2
  21. package/plugins/lisa-copilot/skills/lisa-secrets-access/SKILL.md +7 -0
  22. package/plugins/lisa-copilot/skills/lisa-setup-remote-aws/SKILL.md +32 -7
  23. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cursor/scripts/remote-agent-aws-setup.sh +8 -2
  25. package/plugins/lisa-cursor/skills/lisa-secrets-access/SKILL.md +7 -0
  26. package/plugins/lisa-cursor/skills/lisa-setup-remote-aws/SKILL.md +32 -7
  27. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  29. package/plugins/lisa-expo-agy/plugin.json +1 -1
  30. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  34. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  35. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  39. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  40. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  44. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  45. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  49. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  50. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-rails-agy/plugin.json +1 -1
  55. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  59. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  60. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  64. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  65. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  67. package/plugins/src/base/scripts/remote-agent-aws-setup.sh +8 -2
  68. package/plugins/src/base/skills/lisa-secrets-access/SKILL.md +7 -0
  69. package/plugins/src/base/skills/lisa-setup-remote-aws/SKILL.md +32 -7
@@ -399,7 +399,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
399
399
  "plugins/src/base/scripts/queue-health-classification.mjs": "07fd596da5792d8bd29f2d51584c59011d3d06256eae601b27a3c72730b42333",
400
400
  "plugins/src/base/scripts/queue-status-build-readers.mjs": "1e05181dc8fbe2a4f0c04ce73fdfe1c3a7fc1777cb66e95d7e9a593559c8ca27",
401
401
  "plugins/src/base/scripts/queue-status-prd-readers.mjs": "32b4366fc292062c869793aeaf5b006ff400df5da09ee510f862e15d59a77770",
402
- "plugins/src/base/scripts/remote-agent-aws-setup.sh": "a0e35ed9222c78bce58097a761204f22d388296656c6f4b5043da547e4dad103",
402
+ "plugins/src/base/scripts/remote-agent-aws-setup.sh": "e3fc922d9b868e0f5a72c7a16a4c32e4a1b3f5278b7c8563648e4f05c49072c5",
403
403
  "plugins/src/base/skills/lisa-acceptance-criteria/SKILL.md": "b4289ec04de657f0eeefaed56939fa171c2f8a11086bd225db39130f4a609e95",
404
404
  "plugins/src/base/skills/lisa-agent-design-best-practices/SKILL.md": "2c487df59f54682d744e71f78a2bccccf9e3a6510705b4ff6be7edfa4be2d43b",
405
405
  "plugins/src/base/skills/lisa-agent-ready/SKILL.md": "13f2e0f50287a04ed9a036ef1c547563b5f6f6325b2b35f6746d46a5ed4d15df",
@@ -535,7 +535,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
535
535
  "plugins/src/base/skills/lisa-review-local/SKILL.md": "66defe83565ab3633a13e69ce394de64f17f2c2bddbf046bc12c8bbd0ca57f5c",
536
536
  "plugins/src/base/skills/lisa-rework-triage/SKILL.md": "3389740fc0f162be0b684625424e716a0a3e4c99c8cdb4317ec82dcfcf7b57c7",
537
537
  "plugins/src/base/skills/lisa-root-cause-analysis/SKILL.md": "3fa14217ca36b238ebb8203d18f10eaaf98a3647f949cdada6cb9f56ddf9ed50",
538
- "plugins/src/base/skills/lisa-secrets-access/SKILL.md": "e7ccac9b7c8e9a9ad61f267de3b121c916b69a495da95eb280f390c33f8e04f6",
538
+ "plugins/src/base/skills/lisa-secrets-access/SKILL.md": "9d7346864b04304e5b4bbb90512c7f2e701d69ab012b4fcf3b7b687221fc76bd",
539
539
  "plugins/src/base/skills/lisa-secrets-access/scripts/doctor-secrets.mjs": "aca23d562016bfda30d0ace0f77668edb91e5bcda1bf278036353671c53e9cbc",
540
540
  "plugins/src/base/skills/lisa-secrets-access/scripts/envfile.mjs": "be4e38ce85f9268b52b29dbde264ecd8d50973c2b63a15410336234a921d9644",
541
541
  "plugins/src/base/skills/lisa-secrets-access/scripts/materialize-secrets.mjs": "4b4448cd680a8fe7b1f51bad840c2655f898e9bc08ca06c385cd1d21dca3c3d4",
@@ -558,7 +558,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
558
558
  "plugins/src/base/skills/lisa-setup-kane/SKILL.md": "fe50024a4f896af01716f2435f57227b1f8de61803e80bf3e3c3247ec179b103",
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
- "plugins/src/base/skills/lisa-setup-remote-aws/SKILL.md": "7a134f6ce7857152076c2a85e0777d88f1f22b0ecfe607dd2fc6f8a286547910",
561
+ "plugins/src/base/skills/lisa-setup-remote-aws/SKILL.md": "80fbf157f9c562c033886c25a99b37356602edd9e61cd2d492f339769ddcf97e",
562
562
  "plugins/src/base/skills/lisa-setup-remote-env/SKILL.md": "cf0f54c4960c682c5135a5bc9db4701c2e95fec07faf4b041ede80b9cbc61072",
563
563
  "plugins/src/base/skills/lisa-setup-remote-env/assets/setup.sh": "cf60c686b6861c33910f8175015dab2b4e33505af900a85c592d6ca061a8f7c4",
564
564
  "plugins/src/base/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs": "1e3f57c34edd65129a157f7418524594ca92b5472978bf5be1641981f4f1afbe",
package/package.json CHANGED
@@ -115,7 +115,7 @@
115
115
  "brace-expansion": ">=5.0.8"
116
116
  },
117
117
  "name": "@codyswann/lisa",
118
- "version": "2.317.3",
118
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -198,6 +198,13 @@ Values never enter that process, so its output cannot leak one even if logged.
198
198
  | `aws` | `aws secretsmanager get-secret-value --secret-id <name>` | not implemented |
199
199
  | `vault` | `vault kv get -field=<name> <path>` | not implemented |
200
200
 
201
+ **A provider cannot hold its own bootstrap.** With `provider: "aws"`, reading any
202
+ secret needs AWS credentials — so the AWS bootstrap bundle
203
+ (`LISA_AWS_BOOTSTRAP_JSON`, see `lisa-setup-remote-aws`) cannot live there:
204
+ resolving it would require the very credential it contains. Keep that one in a
205
+ different provider. The same applies to any provider whose own access key is a
206
+ secret you would otherwise store inside it.
207
+
201
208
  Unimplemented providers fail with a message naming where to add them, rather than failing obscurely. Do not claim support that does not exist.
202
209
 
203
210
  Cache **in-process only**. Never write a resolved value to disk except through the materialization contract above.
@@ -30,16 +30,41 @@ Install the vendor-neutral AWS bootstrap into the current repository.
30
30
  `.github/workflows/copilot-setup-steps.yml`; and it always writes
31
31
  `docs/remote-agent-aws.md`.
32
32
  4. Run `bash -n scripts/remote-agent-aws-setup.sh`.
33
- 5. Never write or request the actual bootstrap SecretString in repository
34
- files. Tell the operator to retrieve the `remote-agent-credentials` secret
35
- from the shared AWS account and paste its complete SecretString into the
36
- platform secret named `LISA_AWS_BOOTSTRAP_JSON`. The default cdkstarter
37
- secret name is `remote-agent-credentials`; downstream infrastructure may
38
- configure a different name. Pass that name with `--secret-name` so the
39
- generated runbook contains the exact retrieval command.
33
+ 5. Never write or request the actual bootstrap bundle in repository files. Tell
34
+ the operator where to obtain it and where to put it — see **Where the bundle
35
+ lives** below. Pass `--secret-name` when the source names it something other
36
+ than `remote-agent-credentials`, so the generated runbook contains the exact
37
+ retrieval command.
40
38
  6. Report the external step that remains: configure that one secret in the
41
39
  remote environment and launch a smoke session.
42
40
 
41
+ ## Where the bundle lives
42
+
43
+ `LISA_AWS_BOOTSTRAP_JSON` is **just another secret**, and it belongs wherever
44
+ the project keeps its secrets — resolved through `lisa-secrets-access` like
45
+ everything else. It is not tied to any one store.
46
+
47
+ Whoever provisions the IAM user emits the bundle somewhere. `cdkstarter` writes
48
+ it to AWS Secrets Manager as `remote-agent-credentials`, but that is where it is
49
+ *emitted*, not where it must *live*. Copy it once into the project's configured
50
+ provider and read it from there.
51
+
52
+ **Do not keep it in two stores.** A bundle sitting in Secrets Manager *and* in
53
+ the platform's secret store is two live copies of one credential: rotate the
54
+ IAM key and whichever copy you forget keeps authenticating until it doesn't,
55
+ with nothing to say which is current. That is the drift the single-store rule in
56
+ `lisa-secrets-access` exists to prevent, and this credential is not exempt.
57
+
58
+ **One provider cannot serve this particular secret.** If `secrets.provider` is
59
+ `aws`, reading the bundle requires AWS credentials — and the bundle *is* the AWS
60
+ credential. Anything else works: Bitwarden, 1Password, Doppler, Vault, or a
61
+ platform secret store. Pick the one that is not the thing being bootstrapped.
62
+
63
+ On a surface that materializes (see `lisa-secrets-access`), the bundle arrives
64
+ in `secrets.env` with everything else, so the project hook can run this setup
65
+ script after materialization with no extra plumbing. On a surface that reads
66
+ through live, resolve it at the point of use.
67
+
43
68
  ## Contract
44
69
 
45
70
  A future coding agent is supported without an AWS change when its remote
@@ -3,8 +3,14 @@
3
3
  # source copied into every generated Lisa agent plugin.
4
4
  #
5
5
  # Required secret:
6
- # LISA_AWS_BOOTSTRAP_JSON Complete SecretString emitted by cdkstarter's
7
- # remote-agent IAM kit.
6
+ # LISA_AWS_BOOTSTRAP_JSON The complete remote-agent bootstrap bundle, as one
7
+ # JSON value. cdkstarter's IAM kit emits it, but this
8
+ # script neither knows nor cares which store it came
9
+ # from — resolve it through lisa-secrets-access like
10
+ # any other secret. Note that a project whose
11
+ # provider is AWS Secrets Manager cannot keep it
12
+ # there: reading it would need the very credential it
13
+ # contains.
8
14
  # Optional plain variables:
9
15
  # LISA_REMOTE_AGENT claude | codex | cursor | copilot | agy | opencode
10
16
  # LISA_AWS_DEFAULT_PROFILE Defaults to dev, then the first available profile.
@@ -198,6 +198,13 @@ Values never enter that process, so its output cannot leak one even if logged.
198
198
  | `aws` | `aws secretsmanager get-secret-value --secret-id <name>` | not implemented |
199
199
  | `vault` | `vault kv get -field=<name> <path>` | not implemented |
200
200
 
201
+ **A provider cannot hold its own bootstrap.** With `provider: "aws"`, reading any
202
+ secret needs AWS credentials — so the AWS bootstrap bundle
203
+ (`LISA_AWS_BOOTSTRAP_JSON`, see `lisa-setup-remote-aws`) cannot live there:
204
+ resolving it would require the very credential it contains. Keep that one in a
205
+ different provider. The same applies to any provider whose own access key is a
206
+ secret you would otherwise store inside it.
207
+
201
208
  Unimplemented providers fail with a message naming where to add them, rather than failing obscurely. Do not claim support that does not exist.
202
209
 
203
210
  Cache **in-process only**. Never write a resolved value to disk except through the materialization contract above.
@@ -30,16 +30,41 @@ Install the vendor-neutral AWS bootstrap into the current repository.
30
30
  `.github/workflows/copilot-setup-steps.yml`; and it always writes
31
31
  `docs/remote-agent-aws.md`.
32
32
  4. Run `bash -n scripts/remote-agent-aws-setup.sh`.
33
- 5. Never write or request the actual bootstrap SecretString in repository
34
- files. Tell the operator to retrieve the `remote-agent-credentials` secret
35
- from the shared AWS account and paste its complete SecretString into the
36
- platform secret named `LISA_AWS_BOOTSTRAP_JSON`. The default cdkstarter
37
- secret name is `remote-agent-credentials`; downstream infrastructure may
38
- configure a different name. Pass that name with `--secret-name` so the
39
- generated runbook contains the exact retrieval command.
33
+ 5. Never write or request the actual bootstrap bundle in repository files. Tell
34
+ the operator where to obtain it and where to put it — see **Where the bundle
35
+ lives** below. Pass `--secret-name` when the source names it something other
36
+ than `remote-agent-credentials`, so the generated runbook contains the exact
37
+ retrieval command.
40
38
  6. Report the external step that remains: configure that one secret in the
41
39
  remote environment and launch a smoke session.
42
40
 
41
+ ## Where the bundle lives
42
+
43
+ `LISA_AWS_BOOTSTRAP_JSON` is **just another secret**, and it belongs wherever
44
+ the project keeps its secrets — resolved through `lisa-secrets-access` like
45
+ everything else. It is not tied to any one store.
46
+
47
+ Whoever provisions the IAM user emits the bundle somewhere. `cdkstarter` writes
48
+ it to AWS Secrets Manager as `remote-agent-credentials`, but that is where it is
49
+ *emitted*, not where it must *live*. Copy it once into the project's configured
50
+ provider and read it from there.
51
+
52
+ **Do not keep it in two stores.** A bundle sitting in Secrets Manager *and* in
53
+ the platform's secret store is two live copies of one credential: rotate the
54
+ IAM key and whichever copy you forget keeps authenticating until it doesn't,
55
+ with nothing to say which is current. That is the drift the single-store rule in
56
+ `lisa-secrets-access` exists to prevent, and this credential is not exempt.
57
+
58
+ **One provider cannot serve this particular secret.** If `secrets.provider` is
59
+ `aws`, reading the bundle requires AWS credentials — and the bundle *is* the AWS
60
+ credential. Anything else works: Bitwarden, 1Password, Doppler, Vault, or a
61
+ platform secret store. Pick the one that is not the thing being bootstrapped.
62
+
63
+ On a surface that materializes (see `lisa-secrets-access`), the bundle arrives
64
+ in `secrets.env` with everything else, so the project hook can run this setup
65
+ script after materialization with no extra plumbing. On a surface that reads
66
+ through live, resolve it at the point of use.
67
+
43
68
  ## Contract
44
69
 
45
70
  A future coding agent is supported without an AWS change when its remote
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.317.3",
3
+ "version": "2.317.4",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -3,8 +3,14 @@
3
3
  # source copied into every generated Lisa agent plugin.
4
4
  #
5
5
  # Required secret:
6
- # LISA_AWS_BOOTSTRAP_JSON Complete SecretString emitted by cdkstarter's
7
- # remote-agent IAM kit.
6
+ # LISA_AWS_BOOTSTRAP_JSON The complete remote-agent bootstrap bundle, as one
7
+ # JSON value. cdkstarter's IAM kit emits it, but this
8
+ # script neither knows nor cares which store it came
9
+ # from — resolve it through lisa-secrets-access like
10
+ # any other secret. Note that a project whose
11
+ # provider is AWS Secrets Manager cannot keep it
12
+ # there: reading it would need the very credential it
13
+ # contains.
8
14
  # Optional plain variables:
9
15
  # LISA_REMOTE_AGENT claude | codex | cursor | copilot | agy | opencode
10
16
  # LISA_AWS_DEFAULT_PROFILE Defaults to dev, then the first available profile.
@@ -198,6 +198,13 @@ Values never enter that process, so its output cannot leak one even if logged.
198
198
  | `aws` | `aws secretsmanager get-secret-value --secret-id <name>` | not implemented |
199
199
  | `vault` | `vault kv get -field=<name> <path>` | not implemented |
200
200
 
201
+ **A provider cannot hold its own bootstrap.** With `provider: "aws"`, reading any
202
+ secret needs AWS credentials — so the AWS bootstrap bundle
203
+ (`LISA_AWS_BOOTSTRAP_JSON`, see `lisa-setup-remote-aws`) cannot live there:
204
+ resolving it would require the very credential it contains. Keep that one in a
205
+ different provider. The same applies to any provider whose own access key is a
206
+ secret you would otherwise store inside it.
207
+
201
208
  Unimplemented providers fail with a message naming where to add them, rather than failing obscurely. Do not claim support that does not exist.
202
209
 
203
210
  Cache **in-process only**. Never write a resolved value to disk except through the materialization contract above.
@@ -30,16 +30,41 @@ Install the vendor-neutral AWS bootstrap into the current repository.
30
30
  `.github/workflows/copilot-setup-steps.yml`; and it always writes
31
31
  `docs/remote-agent-aws.md`.
32
32
  4. Run `bash -n scripts/remote-agent-aws-setup.sh`.
33
- 5. Never write or request the actual bootstrap SecretString in repository
34
- files. Tell the operator to retrieve the `remote-agent-credentials` secret
35
- from the shared AWS account and paste its complete SecretString into the
36
- platform secret named `LISA_AWS_BOOTSTRAP_JSON`. The default cdkstarter
37
- secret name is `remote-agent-credentials`; downstream infrastructure may
38
- configure a different name. Pass that name with `--secret-name` so the
39
- generated runbook contains the exact retrieval command.
33
+ 5. Never write or request the actual bootstrap bundle in repository files. Tell
34
+ the operator where to obtain it and where to put it — see **Where the bundle
35
+ lives** below. Pass `--secret-name` when the source names it something other
36
+ than `remote-agent-credentials`, so the generated runbook contains the exact
37
+ retrieval command.
40
38
  6. Report the external step that remains: configure that one secret in the
41
39
  remote environment and launch a smoke session.
42
40
 
41
+ ## Where the bundle lives
42
+
43
+ `LISA_AWS_BOOTSTRAP_JSON` is **just another secret**, and it belongs wherever
44
+ the project keeps its secrets — resolved through `lisa-secrets-access` like
45
+ everything else. It is not tied to any one store.
46
+
47
+ Whoever provisions the IAM user emits the bundle somewhere. `cdkstarter` writes
48
+ it to AWS Secrets Manager as `remote-agent-credentials`, but that is where it is
49
+ *emitted*, not where it must *live*. Copy it once into the project's configured
50
+ provider and read it from there.
51
+
52
+ **Do not keep it in two stores.** A bundle sitting in Secrets Manager *and* in
53
+ the platform's secret store is two live copies of one credential: rotate the
54
+ IAM key and whichever copy you forget keeps authenticating until it doesn't,
55
+ with nothing to say which is current. That is the drift the single-store rule in
56
+ `lisa-secrets-access` exists to prevent, and this credential is not exempt.
57
+
58
+ **One provider cannot serve this particular secret.** If `secrets.provider` is
59
+ `aws`, reading the bundle requires AWS credentials — and the bundle *is* the AWS
60
+ credential. Anything else works: Bitwarden, 1Password, Doppler, Vault, or a
61
+ platform secret store. Pick the one that is not the thing being bootstrapped.
62
+
63
+ On a surface that materializes (see `lisa-secrets-access`), the bundle arrives
64
+ in `secrets.env` with everything else, so the project hook can run this setup
65
+ script after materialization with no extra plumbing. On a surface that reads
66
+ through live, resolve it at the point of use.
67
+
43
68
  ## Contract
44
69
 
45
70
  A future coding agent is supported without an AWS change when its remote
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -3,8 +3,14 @@
3
3
  # source copied into every generated Lisa agent plugin.
4
4
  #
5
5
  # Required secret:
6
- # LISA_AWS_BOOTSTRAP_JSON Complete SecretString emitted by cdkstarter's
7
- # remote-agent IAM kit.
6
+ # LISA_AWS_BOOTSTRAP_JSON The complete remote-agent bootstrap bundle, as one
7
+ # JSON value. cdkstarter's IAM kit emits it, but this
8
+ # script neither knows nor cares which store it came
9
+ # from — resolve it through lisa-secrets-access like
10
+ # any other secret. Note that a project whose
11
+ # provider is AWS Secrets Manager cannot keep it
12
+ # there: reading it would need the very credential it
13
+ # contains.
8
14
  # Optional plain variables:
9
15
  # LISA_REMOTE_AGENT claude | codex | cursor | copilot | agy | opencode
10
16
  # LISA_AWS_DEFAULT_PROFILE Defaults to dev, then the first available profile.
@@ -198,6 +198,13 @@ Values never enter that process, so its output cannot leak one even if logged.
198
198
  | `aws` | `aws secretsmanager get-secret-value --secret-id <name>` | not implemented |
199
199
  | `vault` | `vault kv get -field=<name> <path>` | not implemented |
200
200
 
201
+ **A provider cannot hold its own bootstrap.** With `provider: "aws"`, reading any
202
+ secret needs AWS credentials — so the AWS bootstrap bundle
203
+ (`LISA_AWS_BOOTSTRAP_JSON`, see `lisa-setup-remote-aws`) cannot live there:
204
+ resolving it would require the very credential it contains. Keep that one in a
205
+ different provider. The same applies to any provider whose own access key is a
206
+ secret you would otherwise store inside it.
207
+
201
208
  Unimplemented providers fail with a message naming where to add them, rather than failing obscurely. Do not claim support that does not exist.
202
209
 
203
210
  Cache **in-process only**. Never write a resolved value to disk except through the materialization contract above.
@@ -30,16 +30,41 @@ Install the vendor-neutral AWS bootstrap into the current repository.
30
30
  `.github/workflows/copilot-setup-steps.yml`; and it always writes
31
31
  `docs/remote-agent-aws.md`.
32
32
  4. Run `bash -n scripts/remote-agent-aws-setup.sh`.
33
- 5. Never write or request the actual bootstrap SecretString in repository
34
- files. Tell the operator to retrieve the `remote-agent-credentials` secret
35
- from the shared AWS account and paste its complete SecretString into the
36
- platform secret named `LISA_AWS_BOOTSTRAP_JSON`. The default cdkstarter
37
- secret name is `remote-agent-credentials`; downstream infrastructure may
38
- configure a different name. Pass that name with `--secret-name` so the
39
- generated runbook contains the exact retrieval command.
33
+ 5. Never write or request the actual bootstrap bundle in repository files. Tell
34
+ the operator where to obtain it and where to put it — see **Where the bundle
35
+ lives** below. Pass `--secret-name` when the source names it something other
36
+ than `remote-agent-credentials`, so the generated runbook contains the exact
37
+ retrieval command.
40
38
  6. Report the external step that remains: configure that one secret in the
41
39
  remote environment and launch a smoke session.
42
40
 
41
+ ## Where the bundle lives
42
+
43
+ `LISA_AWS_BOOTSTRAP_JSON` is **just another secret**, and it belongs wherever
44
+ the project keeps its secrets — resolved through `lisa-secrets-access` like
45
+ everything else. It is not tied to any one store.
46
+
47
+ Whoever provisions the IAM user emits the bundle somewhere. `cdkstarter` writes
48
+ it to AWS Secrets Manager as `remote-agent-credentials`, but that is where it is
49
+ *emitted*, not where it must *live*. Copy it once into the project's configured
50
+ provider and read it from there.
51
+
52
+ **Do not keep it in two stores.** A bundle sitting in Secrets Manager *and* in
53
+ the platform's secret store is two live copies of one credential: rotate the
54
+ IAM key and whichever copy you forget keeps authenticating until it doesn't,
55
+ with nothing to say which is current. That is the drift the single-store rule in
56
+ `lisa-secrets-access` exists to prevent, and this credential is not exempt.
57
+
58
+ **One provider cannot serve this particular secret.** If `secrets.provider` is
59
+ `aws`, reading the bundle requires AWS credentials — and the bundle *is* the AWS
60
+ credential. Anything else works: Bitwarden, 1Password, Doppler, Vault, or a
61
+ platform secret store. Pick the one that is not the thing being bootstrapped.
62
+
63
+ On a surface that materializes (see `lisa-secrets-access`), the bundle arrives
64
+ in `secrets.env` with everything else, so the project hook can run this setup
65
+ script after materialization with no extra plumbing. On a surface that reads
66
+ through live, resolve it at the point of use.
67
+
43
68
  ## Contract
44
69
 
45
70
  A future coding agent is supported without an AWS change when its remote
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.317.3",
3
+ "version": "2.317.4",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -3,8 +3,14 @@
3
3
  # source copied into every generated Lisa agent plugin.
4
4
  #
5
5
  # Required secret:
6
- # LISA_AWS_BOOTSTRAP_JSON Complete SecretString emitted by cdkstarter's
7
- # remote-agent IAM kit.
6
+ # LISA_AWS_BOOTSTRAP_JSON The complete remote-agent bootstrap bundle, as one
7
+ # JSON value. cdkstarter's IAM kit emits it, but this
8
+ # script neither knows nor cares which store it came
9
+ # from — resolve it through lisa-secrets-access like
10
+ # any other secret. Note that a project whose
11
+ # provider is AWS Secrets Manager cannot keep it
12
+ # there: reading it would need the very credential it
13
+ # contains.
8
14
  # Optional plain variables:
9
15
  # LISA_REMOTE_AGENT claude | codex | cursor | copilot | agy | opencode
10
16
  # LISA_AWS_DEFAULT_PROFILE Defaults to dev, then the first available profile.
@@ -198,6 +198,13 @@ Values never enter that process, so its output cannot leak one even if logged.
198
198
  | `aws` | `aws secretsmanager get-secret-value --secret-id <name>` | not implemented |
199
199
  | `vault` | `vault kv get -field=<name> <path>` | not implemented |
200
200
 
201
+ **A provider cannot hold its own bootstrap.** With `provider: "aws"`, reading any
202
+ secret needs AWS credentials — so the AWS bootstrap bundle
203
+ (`LISA_AWS_BOOTSTRAP_JSON`, see `lisa-setup-remote-aws`) cannot live there:
204
+ resolving it would require the very credential it contains. Keep that one in a
205
+ different provider. The same applies to any provider whose own access key is a
206
+ secret you would otherwise store inside it.
207
+
201
208
  Unimplemented providers fail with a message naming where to add them, rather than failing obscurely. Do not claim support that does not exist.
202
209
 
203
210
  Cache **in-process only**. Never write a resolved value to disk except through the materialization contract above.
@@ -30,16 +30,41 @@ Install the vendor-neutral AWS bootstrap into the current repository.
30
30
  `.github/workflows/copilot-setup-steps.yml`; and it always writes
31
31
  `docs/remote-agent-aws.md`.
32
32
  4. Run `bash -n scripts/remote-agent-aws-setup.sh`.
33
- 5. Never write or request the actual bootstrap SecretString in repository
34
- files. Tell the operator to retrieve the `remote-agent-credentials` secret
35
- from the shared AWS account and paste its complete SecretString into the
36
- platform secret named `LISA_AWS_BOOTSTRAP_JSON`. The default cdkstarter
37
- secret name is `remote-agent-credentials`; downstream infrastructure may
38
- configure a different name. Pass that name with `--secret-name` so the
39
- generated runbook contains the exact retrieval command.
33
+ 5. Never write or request the actual bootstrap bundle in repository files. Tell
34
+ the operator where to obtain it and where to put it — see **Where the bundle
35
+ lives** below. Pass `--secret-name` when the source names it something other
36
+ than `remote-agent-credentials`, so the generated runbook contains the exact
37
+ retrieval command.
40
38
  6. Report the external step that remains: configure that one secret in the
41
39
  remote environment and launch a smoke session.
42
40
 
41
+ ## Where the bundle lives
42
+
43
+ `LISA_AWS_BOOTSTRAP_JSON` is **just another secret**, and it belongs wherever
44
+ the project keeps its secrets — resolved through `lisa-secrets-access` like
45
+ everything else. It is not tied to any one store.
46
+
47
+ Whoever provisions the IAM user emits the bundle somewhere. `cdkstarter` writes
48
+ it to AWS Secrets Manager as `remote-agent-credentials`, but that is where it is
49
+ *emitted*, not where it must *live*. Copy it once into the project's configured
50
+ provider and read it from there.
51
+
52
+ **Do not keep it in two stores.** A bundle sitting in Secrets Manager *and* in
53
+ the platform's secret store is two live copies of one credential: rotate the
54
+ IAM key and whichever copy you forget keeps authenticating until it doesn't,
55
+ with nothing to say which is current. That is the drift the single-store rule in
56
+ `lisa-secrets-access` exists to prevent, and this credential is not exempt.
57
+
58
+ **One provider cannot serve this particular secret.** If `secrets.provider` is
59
+ `aws`, reading the bundle requires AWS credentials — and the bundle *is* the AWS
60
+ credential. Anything else works: Bitwarden, 1Password, Doppler, Vault, or a
61
+ platform secret store. Pick the one that is not the thing being bootstrapped.
62
+
63
+ On a surface that materializes (see `lisa-secrets-access`), the bundle arrives
64
+ in `secrets.env` with everything else, so the project hook can run this setup
65
+ script after materialization with no extra plumbing. On a surface that reads
66
+ through live, resolve it at the point of use.
67
+
43
68
  ## Contract
44
69
 
45
70
  A future coding agent is supported without an AWS change when its remote
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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.317.3",
3
+ "version": "2.317.4",
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"
@@ -3,8 +3,14 @@
3
3
  # source copied into every generated Lisa agent plugin.
4
4
  #
5
5
  # Required secret:
6
- # LISA_AWS_BOOTSTRAP_JSON Complete SecretString emitted by cdkstarter's
7
- # remote-agent IAM kit.
6
+ # LISA_AWS_BOOTSTRAP_JSON The complete remote-agent bootstrap bundle, as one
7
+ # JSON value. cdkstarter's IAM kit emits it, but this
8
+ # script neither knows nor cares which store it came
9
+ # from — resolve it through lisa-secrets-access like
10
+ # any other secret. Note that a project whose
11
+ # provider is AWS Secrets Manager cannot keep it
12
+ # there: reading it would need the very credential it
13
+ # contains.
8
14
  # Optional plain variables:
9
15
  # LISA_REMOTE_AGENT claude | codex | cursor | copilot | agy | opencode
10
16
  # LISA_AWS_DEFAULT_PROFILE Defaults to dev, then the first available profile.
@@ -198,6 +198,13 @@ Values never enter that process, so its output cannot leak one even if logged.
198
198
  | `aws` | `aws secretsmanager get-secret-value --secret-id <name>` | not implemented |
199
199
  | `vault` | `vault kv get -field=<name> <path>` | not implemented |
200
200
 
201
+ **A provider cannot hold its own bootstrap.** With `provider: "aws"`, reading any
202
+ secret needs AWS credentials — so the AWS bootstrap bundle
203
+ (`LISA_AWS_BOOTSTRAP_JSON`, see `lisa-setup-remote-aws`) cannot live there:
204
+ resolving it would require the very credential it contains. Keep that one in a
205
+ different provider. The same applies to any provider whose own access key is a
206
+ secret you would otherwise store inside it.
207
+
201
208
  Unimplemented providers fail with a message naming where to add them, rather than failing obscurely. Do not claim support that does not exist.
202
209
 
203
210
  Cache **in-process only**. Never write a resolved value to disk except through the materialization contract above.
@@ -30,16 +30,41 @@ Install the vendor-neutral AWS bootstrap into the current repository.
30
30
  `.github/workflows/copilot-setup-steps.yml`; and it always writes
31
31
  `docs/remote-agent-aws.md`.
32
32
  4. Run `bash -n scripts/remote-agent-aws-setup.sh`.
33
- 5. Never write or request the actual bootstrap SecretString in repository
34
- files. Tell the operator to retrieve the `remote-agent-credentials` secret
35
- from the shared AWS account and paste its complete SecretString into the
36
- platform secret named `LISA_AWS_BOOTSTRAP_JSON`. The default cdkstarter
37
- secret name is `remote-agent-credentials`; downstream infrastructure may
38
- configure a different name. Pass that name with `--secret-name` so the
39
- generated runbook contains the exact retrieval command.
33
+ 5. Never write or request the actual bootstrap bundle in repository files. Tell
34
+ the operator where to obtain it and where to put it — see **Where the bundle
35
+ lives** below. Pass `--secret-name` when the source names it something other
36
+ than `remote-agent-credentials`, so the generated runbook contains the exact
37
+ retrieval command.
40
38
  6. Report the external step that remains: configure that one secret in the
41
39
  remote environment and launch a smoke session.
42
40
 
41
+ ## Where the bundle lives
42
+
43
+ `LISA_AWS_BOOTSTRAP_JSON` is **just another secret**, and it belongs wherever
44
+ the project keeps its secrets — resolved through `lisa-secrets-access` like
45
+ everything else. It is not tied to any one store.
46
+
47
+ Whoever provisions the IAM user emits the bundle somewhere. `cdkstarter` writes
48
+ it to AWS Secrets Manager as `remote-agent-credentials`, but that is where it is
49
+ *emitted*, not where it must *live*. Copy it once into the project's configured
50
+ provider and read it from there.
51
+
52
+ **Do not keep it in two stores.** A bundle sitting in Secrets Manager *and* in
53
+ the platform's secret store is two live copies of one credential: rotate the
54
+ IAM key and whichever copy you forget keeps authenticating until it doesn't,
55
+ with nothing to say which is current. That is the drift the single-store rule in
56
+ `lisa-secrets-access` exists to prevent, and this credential is not exempt.
57
+
58
+ **One provider cannot serve this particular secret.** If `secrets.provider` is
59
+ `aws`, reading the bundle requires AWS credentials — and the bundle *is* the AWS
60
+ credential. Anything else works: Bitwarden, 1Password, Doppler, Vault, or a
61
+ platform secret store. Pick the one that is not the thing being bootstrapped.
62
+
63
+ On a surface that materializes (see `lisa-secrets-access`), the bundle arrives
64
+ in `secrets.env` with everything else, so the project hook can run this setup
65
+ script after materialization with no extra plumbing. On a surface that reads
66
+ through live, resolve it at the point of use.
67
+
43
68
  ## Contract
44
69
 
45
70
  A future coding agent is supported without an AWS change when its remote