@codyswann/lisa 2.201.0 → 2.203.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +29 -10
  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-agent-ready/SKILL.md +123 -0
  6. package/plugins/lisa/.codex-plugin/skills/lisa-agent-ready/agents/openai.yaml +4 -0
  7. package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/SKILL.md +1 -0
  8. package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +28 -1
  9. package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
  10. package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +27 -0
  11. package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +12 -4
  12. package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/SKILL.md +2 -2
  13. package/plugins/lisa/commands/lisa/agent-ready.md +6 -0
  14. package/plugins/lisa/rules/eager/factory-model.md +40 -0
  15. package/plugins/lisa/rules/reference/factory-model.md +107 -0
  16. package/plugins/lisa/skills/lisa-agent-ready/SKILL.md +123 -0
  17. package/plugins/lisa/skills/lisa-agent-ready/agents/openai.yaml +4 -0
  18. package/plugins/lisa/skills/lisa-automation-status/SKILL.md +1 -0
  19. package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +28 -1
  20. package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
  21. package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +27 -0
  22. package/plugins/lisa/skills/lisa-setup-automations/SKILL.md +13 -5
  23. package/plugins/lisa/skills/lisa-tear-down-automations/SKILL.md +3 -3
  24. package/plugins/lisa-agy/commands/lisa/agent-ready.md +6 -0
  25. package/plugins/lisa-agy/plugin.json +1 -1
  26. package/plugins/lisa-agy/skills/lisa-agent-ready/SKILL.md +123 -0
  27. package/plugins/lisa-agy/skills/lisa-automation-status/SKILL.md +1 -0
  28. package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +28 -1
  29. package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
  30. package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +27 -0
  31. package/plugins/lisa-agy/skills/lisa-setup-automations/SKILL.md +13 -5
  32. package/plugins/lisa-agy/skills/lisa-tear-down-automations/SKILL.md +3 -3
  33. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  35. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  36. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-copilot/commands/lisa/agent-ready.md +6 -0
  40. package/plugins/lisa-copilot/rules/eager/factory-model.md +40 -0
  41. package/plugins/lisa-copilot/rules/reference/factory-model.md +107 -0
  42. package/plugins/lisa-copilot/skills/lisa-agent-ready/SKILL.md +123 -0
  43. package/plugins/lisa-copilot/skills/lisa-automation-status/SKILL.md +1 -0
  44. package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +28 -1
  45. package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
  46. package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +27 -0
  47. package/plugins/lisa-copilot/skills/lisa-setup-automations/SKILL.md +13 -5
  48. package/plugins/lisa-copilot/skills/lisa-tear-down-automations/SKILL.md +3 -3
  49. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-cursor/commands/lisa/agent-ready.md +6 -0
  51. package/plugins/lisa-cursor/rules/factory-model-reference.mdc +112 -0
  52. package/plugins/lisa-cursor/rules/factory-model.mdc +45 -0
  53. package/plugins/lisa-cursor/skills/lisa-agent-ready/SKILL.md +123 -0
  54. package/plugins/lisa-cursor/skills/lisa-automation-status/SKILL.md +1 -0
  55. package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +28 -1
  56. package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
  57. package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +27 -0
  58. package/plugins/lisa-cursor/skills/lisa-setup-automations/SKILL.md +13 -5
  59. package/plugins/lisa-cursor/skills/lisa-tear-down-automations/SKILL.md +3 -3
  60. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  62. package/plugins/lisa-expo-agy/plugin.json +1 -1
  63. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  67. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  68. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  72. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  73. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  77. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  78. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  82. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  83. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  85. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  87. package/plugins/lisa-rails-agy/plugin.json +1 -1
  88. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  90. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  92. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  93. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  95. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  97. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  98. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  100. package/plugins/src/base/commands/lisa/agent-ready.md +6 -0
  101. package/plugins/src/base/rules/eager/factory-model.md +40 -0
  102. package/plugins/src/base/rules/reference/factory-model.md +107 -0
  103. package/plugins/src/base/skills/lisa-agent-ready/SKILL.md +123 -0
  104. package/plugins/src/base/skills/lisa-automation-status/SKILL.md +1 -0
  105. package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +28 -1
  106. package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
  107. package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +27 -0
  108. package/plugins/src/base/skills/lisa-setup-automations/SKILL.md +13 -5
  109. package/plugins/src/base/skills/lisa-tear-down-automations/SKILL.md +3 -3
  110. package/ui/index.html +177 -25
@@ -93,6 +93,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
93
93
  | F2 Epic parent exists and is an Epic | `structural` | false |
94
94
  | F3 Linked tickets exist | `structural` | false |
95
95
  | F4 Required custom fields populated | `structural` | false |
96
+ | F5 Required external access provable | `technical` | true |
96
97
 
97
98
  Category values are drawn from this fixed set:
98
99
 
@@ -246,6 +247,31 @@ For each entry in `links`, invoke `lisa-atlassian-access` `operation: read-ticke
246
247
 
247
248
  Use the same project-issue-type-metadata lookup from F1 (via `lisa-atlassian-access`) to learn required custom fields for the issue type. Any required custom field not provided in the spec: FAIL.
248
249
 
250
+ #### F5 — Required external access provable
251
+
252
+ The factory-gate rule: an input must not enter the pipeline unless the current runtime can actually
253
+ reach every external surface the work requires. Enumerate the surfaces this item depends on:
254
+
255
+ - artifact links in the body (documents, designs, dashboards, spreadsheets, recordings),
256
+ - systems named by the description, acceptance criteria, or Validation Journey ("read the CloudWatch
257
+ alarms", "pull the copy from the Google Doc", "check the Sentry issues"),
258
+ - tooling the work plainly implies (a deploy target, a database, a third-party API).
259
+
260
+ For each surface, prove **read** access from the current runtime with the cheapest read-only probe
261
+ through the sanctioned access layer: the matching MCP tool or `lisa-*-access` skill, CLI auth
262
+ (`aws sts get-caller-identity`, `gh auth status`, vendor equivalents), or an authenticated fetch of
263
+ the linked artifact. Attempt to resolve a gap before failing — an alternate substrate, a configured
264
+ access layer, a keychain credential — mirroring the intake agent's discover-first duty.
265
+
266
+ - `PASS` — every required surface is provably readable.
267
+ - `N/A` — the item needs nothing beyond the repository and the tracker itself.
268
+ - `FAIL` — a required surface is unreachable after the resolution attempt. Name the exact surface
269
+ and what was probed. Intake callers must route this to `blocked` + human escalation with the
270
+ missing access spelled out — an input the factory cannot execute never enters the factory.
271
+
272
+ Probes are read-only and bounded (seconds, not minutes, per surface); never mutate the external
273
+ system, and never invent or ask for credentials inline.
274
+
249
275
  ## Execution
250
276
 
251
277
  1. Parse `$ARGUMENTS`. If it's a ticket key, fetch the ticket via `lisa-atlassian-access` `operation: read-ticket` and derive the spec from the fetched fields — including `build_ready` (label set contains `status:ready`) and `child_refs` (sub-tasks plus `is blocked by` parentage, resolved as in `lisa-jira-read-ticket`) so S15 can classify the ticket. When the fetched description is ADF, walk the document tree and extract section headings from ADF `heading` nodes, then collect the text between heading nodes for section-specific gates. If the fetched description is a single paragraph containing literal Markdown/wiki heading markers, treat that as a formatting failure rather than accepting substring matches. Otherwise parse the YAML spec.
@@ -283,6 +309,7 @@ Output is a single fenced text block. Callers parse it; do not add free-form pro
283
309
  - [PASS|FAIL|N/A] F2 Epic parent exists and is an Epic — <one-line reason>
284
310
  - [PASS|FAIL|N/A] F3 Linked tickets exist — <one-line reason>
285
311
  - [PASS|FAIL|N/A] F4 Required custom fields populated — <one-line reason>
312
+ - [PASS|FAIL|N/A] F5 Required external access provable — <one-line reason>
286
313
 
287
314
  ### Verdict: PASS | FAIL
288
315
  ### Failures: <count>
@@ -301,7 +328,7 @@ The verdict is `PASS` if and only if every applicable gate is `PASS`. Any `FAIL`
301
328
 
302
329
  ### Failure-detail fields
303
330
 
304
- - **gate**: the gate ID (`S1`–`S15`, `F1`–`F4`).
331
+ - **gate**: the gate ID (`S1`–`S15`, `F1`–`F5`).
305
332
  - **category**: the gate's fixed category from the table above. Callers use this to label or filter comments — `product-clarity`, `acceptance-criteria`, `design-ux`, `scope`, `dependency`, `data`, `technical`, or `structural`.
306
333
  - **product_relevant**: matches the gate's table entry. `false` means the failure is an internal data-quality problem (e.g., the agent built a malformed spec, an issue type is invalid in the project) and the caller should fix it without bothering the product team. `true` means the PRD needs product input to resolve.
307
334
  - **what**: plain-language description of the issue. No gate IDs, no JIRA jargon, no engineering shorthand. A product owner reading this on a Notion comment should understand what is unclear and why.
@@ -94,6 +94,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
94
94
  | F2 Project parent exists and is in same team | `structural` | false |
95
95
  | F3 Linked items exist | `structural` | false |
96
96
  | F4 Required labels exist (or can be created) | `structural` | false |
97
+ | F5 Required external access provable | `technical` | true |
97
98
 
98
99
  Category values are the same fixed set as `lisa-jira-validate-ticket`:
99
100
 
@@ -253,6 +254,31 @@ For each entry in `relations`, call `lisa-linear-access operation: get-issue` to
253
254
 
254
255
  For each label referenced (`status:*`, `component:<name>`, `prd-*`), confirm via `lisa-linear-access operation: list-issue-labels` (or `lisa-linear-access operation: list-project-labels` for Project labels) that it exists OR is creatable. Linear labels are team-scoped or workspace-scoped; flag if the requested scope is wrong.
255
256
 
257
+ #### F5 — Required external access provable
258
+
259
+ The factory-gate rule: an input must not enter the pipeline unless the current runtime can actually
260
+ reach every external surface the work requires. Enumerate the surfaces this item depends on:
261
+
262
+ - artifact links in the body (documents, designs, dashboards, spreadsheets, recordings),
263
+ - systems named by the description, acceptance criteria, or Validation Journey ("read the CloudWatch
264
+ alarms", "pull the copy from the Google Doc", "check the Sentry issues"),
265
+ - tooling the work plainly implies (a deploy target, a database, a third-party API).
266
+
267
+ For each surface, prove **read** access from the current runtime with the cheapest read-only probe
268
+ through the sanctioned access layer: the matching MCP tool or `lisa-*-access` skill, CLI auth
269
+ (`aws sts get-caller-identity`, `gh auth status`, vendor equivalents), or an authenticated fetch of
270
+ the linked artifact. Attempt to resolve a gap before failing — an alternate substrate, a configured
271
+ access layer, a keychain credential — mirroring the intake agent's discover-first duty.
272
+
273
+ - `PASS` — every required surface is provably readable.
274
+ - `N/A` — the item needs nothing beyond the repository and the tracker itself.
275
+ - `FAIL` — a required surface is unreachable after the resolution attempt. Name the exact surface
276
+ and what was probed. Intake callers must route this to `blocked` + human escalation with the
277
+ missing access spelled out — an input the factory cannot execute never enters the factory.
278
+
279
+ Probes are read-only and bounded (seconds, not minutes, per surface); never mutate the external
280
+ system, and never invent or ask for credentials inline.
281
+
256
282
  ## Execution
257
283
 
258
284
  1. Parse `$ARGUMENTS`. If it's an identifier, fetch the item and derive the spec from the fetched fields — including `build_ready` (label set contains `status:ready`) and `child_refs` (sub-issues, project-member issues, plus `blocked_by` parentage, resolved as in `lisa-linear-read-issue`) so S15 can classify the item. Otherwise parse the YAML spec.
@@ -290,6 +316,7 @@ Output is a single fenced text block. Callers parse it; do not add free-form pro
290
316
  - [PASS|FAIL|N/A] F2 Project parent exists and is in same team — <one-line reason>
291
317
  - [PASS|FAIL|N/A] F3 Linked items exist — <one-line reason>
292
318
  - [PASS|FAIL|N/A] F4 Required labels exist (or can be created) — <one-line reason>
319
+ - [PASS|FAIL|N/A] F5 Required external access provable — <one-line reason>
293
320
 
294
321
  ### Verdict: PASS | FAIL
295
322
  ### Failures: <count>
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lisa-setup-automations
3
- description: "Set up the recurring Lisa automations on the local workstation using the CURRENT runtime's native scheduler — Codex automations (the native automations / automation_update mechanism) or, on Claude, /schedule. This skill is a declarative specification: it states WHICH automations to create, how often, and with which parameters; it does not template schedule files or run scheduling code itself — the runtime's native automation mechanism does the creating. Creates five automations: intake-repair (every 60 min), intake PRD (every 60 min), intake tickets (every 10 min), exploratory-bugs (once a day), exploratory-prds (once a day). Two flags — auto-start-prds and auto-start-tickets — control whether the ideated PRDs / filed bug tickets are created auto-pickup-ready (prd_ready / ready) or left for human review (default false). Tear down with /tear-down-automations."
3
+ description: "Set up the recurring Lisa automations on the local workstation using the CURRENT runtime's native scheduler — Codex automations (the native automations / automation_update mechanism) or, on Claude, /schedule. This skill is a declarative specification: it states WHICH automations to create, how often, and with which parameters; it does not template schedule files or run scheduling code itself — the runtime's native automation mechanism does the creating. Creates six automations: intake-repair (every 60 min), intake PRD (every 60 min), intake tickets (every 10 min), exploratory-bugs (once a day), exploratory-prds (once a day), monitor (once a day). Two flags — auto-start-prds and auto-start-tickets — control whether the ideated PRDs / filed bug tickets are created auto-pickup-ready (prd_ready / ready, default true) or left for human review. Tear down with /tear-down-automations."
4
4
  allowed-tools: ["Skill", "Bash", "Read"]
5
5
  ---
6
6
 
@@ -28,18 +28,20 @@ create them; invoke the runtime's automation tool with the spec below.
28
28
 
29
29
  ## Parameters
30
30
 
31
- - `auto-start-prds` (default **false**) — passed as `prd_ready` to the **exploratory-prds**
31
+ - `auto-start-prds` (default **true**) — passed as `prd_ready` to the **exploratory-prds**
32
32
  automation. `true` → ideated PRDs are created `prd-ready` (auto-picked-up by PRD intake); `false` →
33
33
  created as drafts for human review. When `true`, `/lisa:project-ideation` still checks the configured
34
34
  PRD queue before writing: existing `prd-ready`, `prd-in-review`, `prd-blocked`, unresolved
35
35
  `prd-ticketed`, or unresolved source-reader pressure can intentionally turn the automation cycle into
36
36
  a blocked/idle outcome instead of creating another ready PRD.
37
- - `auto-start-tickets` (default **false**) — passed as `ready` to the **exploratory-bugs**
37
+ - `auto-start-tickets` (default **true**) — passed as `ready` to the **exploratory-bugs**
38
38
  automation. `true` → filed bug/usability tickets are created build-ready (auto-picked-up by ticket
39
39
  intake); `false` → created in the backlog for human triage.
40
40
 
41
- Defaults match the underlying skillsnothing auto-starts unless explicitly opted in. The two flags
42
- affect **only** the two exploratory automations.
41
+ The defaults are autonomous by design the factory model wants inputs flowing through the gates
42
+ without a human between the loops and the pipeline. Pass `false` explicitly to opt a project into
43
+ human triage. The two flags affect **only** the two exploratory automations; the intake gates'
44
+ adversarial validation remains the quality control either way.
43
45
 
44
46
  ## The automations to create
45
47
 
@@ -62,6 +64,7 @@ report the exact conflicting path(s).
62
64
  | **intake-tickets** | `/lisa:intake <build queue>` (e.g. `github intake_mode=build`) | every **10 minutes** |
63
65
  | **exploratory-bugs** | `/lisa-<stack>:exploratory-qa ready=<auto-start-tickets>` | **once a day** |
64
66
  | **exploratory-prds** | `/lisa:project-ideation prd_ready=<auto-start-prds>` | **once a day** |
67
+ | **monitor** | `/lisa:monitor` | **once a day** |
65
68
 
66
69
  For a Codex `rrule`: every 60 min → `FREQ=HOURLY;INTERVAL=1`; every 10 min →
67
70
  `FREQ=MINUTELY;INTERVAL=10`; once a day → `FREQ=DAILY;INTERVAL=1`.
@@ -92,6 +95,11 @@ place (same names) rather than creating duplicates.
92
95
  - **exploratory-bugs** is created only when the project ships an `exploratory-qa` command (the
93
96
  `expo` / `rails` / `harper-fabric` stacks). If the project has no `lisa-exploratory-qa` skill/command, skip that
94
97
  automation and note it — do not invent a command that doesn't exist.
98
+ - **monitor** is created unconditionally: `/lisa:monitor` resolves the connected observability
99
+ providers itself and reports gaps (per its `monitor.gapTiers` config) rather than failing when a
100
+ provider is absent, so an unconnected project gets gap findings instead of a broken automation.
101
+ Its findings become tracker tickets, feeding the pipeline at the build gate like every other
102
+ input.
95
103
  - If the runtime has no native scheduler, or the intake queues can't be resolved from config, stop
96
104
  and report what's missing rather than guessing.
97
105
  - For Codex, if the durable checkout cannot be created, fetched, or verified as a non-bare Git work
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lisa-tear-down-automations
3
- description: "Remove every recurring Lisa automation that /setup-automations created for this project (the lisa-auto-<project>-* set: intake-repair, intake-prd, intake-tickets, exploratory-bugs, exploratory-prds) using the CURRENT runtime's native scheduler — Codex automations or, on Claude, /schedule. This skill is a declarative specification: it identifies WHICH automations to remove; it does not run teardown scripts. Removes only this project's Lisa automations — never other projects' automations or non-Lisa ones. The inverse of /setup-automations."
3
+ description: "Remove every recurring Lisa automation that /setup-automations created for this project (the lisa-auto-<project>-* set: intake-repair, intake-prd, intake-tickets, exploratory-bugs, exploratory-prds, monitor) using the CURRENT runtime's native scheduler — Codex automations or, on Claude, /schedule. This skill is a declarative specification: it identifies WHICH automations to remove; it does not run teardown scripts. Removes only this project's Lisa automations — never other projects' automations or non-Lisa ones. The inverse of /setup-automations."
4
4
  allowed-tools: ["Skill", "Bash", "Read"]
5
5
  ---
6
6
 
@@ -21,9 +21,9 @@ removes them with its **native** scheduling mechanism.
21
21
 
22
22
  ## Scope (remove only what setup created)
23
23
 
24
- - Remove the five automations `/setup-automations` creates for the current project, matched by the
24
+ - Remove the six automations `/setup-automations` creates for the current project, matched by the
25
25
  stable `lisa-auto-<project>-` name prefix: `intake-repair`, `intake-prd`, `intake-tickets`,
26
- `exploratory-bugs`, `exploratory-prds`.
26
+ `exploratory-bugs`, `exploratory-prds`, `monitor`.
27
27
  - **Never** remove automations for a different project, or any non-Lisa automation (e.g. unrelated
28
28
  crawlers/ingestors). Match strictly on the `lisa-auto-<project>-` prefix for THIS project; when in
29
29
  doubt about an automation's ownership, leave it and report it rather than deleting it.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.201.0",
3
+ "version": "2.203.0",
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.201.0",
3
+ "version": "2.203.0",
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.201.0",
3
+ "version": "2.203.0",
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.201.0",
3
+ "version": "2.203.0",
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.201.0",
3
+ "version": "2.203.0",
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.201.0",
3
+ "version": "2.203.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -0,0 +1,6 @@
1
+ ---
2
+ description: "Make a brownfield project agent-ready: build the initial knowledge wiki from everything the agent can reach, write wiki/gaps.md with the questions only a human can answer, and converge over re-runs (humans answer, agents absorb) until zero gaps remain. Run before letting the automation fleet operate a brownfield project unattended."
3
+ argument-hint: "[path]"
4
+ ---
5
+
6
+ Use the /lisa-agent-ready skill to build the initial knowledge wiki from every reachable source, write the human-answerable gaps to wiki/gaps.md, absorb any answered gaps from a prior run, and report whether the project is agent-ready or how many gaps remain. $ARGUMENTS
@@ -0,0 +1,40 @@
1
+ # The Factory Model (load-bearing)
2
+
3
+ This project runs as a set of **software factories** — agent-operated production lines with as few
4
+ humans as possible. You are factory machinery, not a chat assistant. Four factories: **Research**
5
+ (creates PRDs) → **Plan** (PRDs → work units) → **Implement** (work units → quality software) →
6
+ **Verify** (go/no-go by using the software like a human; failures become build-ready tickets that
7
+ flow straight back into Implement).
8
+
9
+ The rules that follow from this:
10
+
11
+ 1. **Humans are not inside the factories.** Never pause mid-flow to ask a human whether to proceed.
12
+ All handoff happens at the **gates** — the ready-role flips (`prd-ready`, `status:ready`) plus
13
+ intake's adversarial validation.
14
+ 2. **The gate is adversarial.** An input enters a factory only when it is high-quality,
15
+ unambiguous, and the factory has the tooling *and provable access to that tooling* to execute it
16
+ (validator gate F5). Try to discover the answers to gaps first; what you genuinely cannot
17
+ resolve, reject to `blocked` and raise to a human with the exact missing thing named.
18
+ 3. **Everything runs on schedule.** The intake, QA, Product Planning, and Monitoring loops run as
19
+ native automations (Claude Routines / Codex Automations). Every flow must therefore work
20
+ headless: no interactive prompts, idempotent re-runs, clean exits on empty queues.
21
+ 4. **Quality is enforced, not requested.** The skills, hooks, quality checks, and guardrails exist
22
+ to keep the software enterprise-grade and maintainable. Never weaken a gate to get work through
23
+ it — fix the work.
24
+ 5. **Write outward for a non-technical operator.** The goal of the factory setup is to let
25
+ non-technical people create scalable software. Everything that crosses a gate outward — blocked
26
+ reasons, clarifying questions, ticket descriptions, verification reports — must be readable by
27
+ someone who does not code; they own product intent, the factories own the engineering.
28
+ 6. **Every supported coding agent is a first-class operator.** Claude Code, Codex, Cursor,
29
+ OpenCode, Antigravity, Copilot — behavior must stay in parity, and anything persisted for
30
+ agents must be visible to all of them.
31
+
32
+ Brownfield on-ramp: an existing codebase becomes agent-ready **before** the fleet runs unattended
33
+ — `/lisa:agent-ready` converges human knowledge into the wiki (gaps loop until none remain), then
34
+ standards adoption refactors to conformance without behavior change.
35
+
36
+ End state: end users have zero direct contact with coding agents — they interact with the tracker,
37
+ the PRD source, and the shipped software.
38
+
39
+ Full reference (factory ↔ Lisa surface mapping, loop details, human exterior gates):
40
+ [reference/factory-model.md](../reference/factory-model.md).
@@ -0,0 +1,107 @@
1
+ # The Factory Model
2
+
3
+ Lisa's purpose is to run **software factories** in the host project: agent-operated production
4
+ lines that research, plan, implement, and verify software with as few humans as possible. This
5
+ reference maps the model onto the concrete Lisa surfaces so agents act on it rather than around it.
6
+
7
+ ## Who this is for
8
+
9
+ The goal of the factory setup is to let **non-technical people create scalable, enterprise-grade
10
+ software** by describing outcomes; the factories supply the engineering discipline. This lowers the
11
+ floor without capping the ceiling — engineers get leverage from the same machinery — and it is why
12
+ the validation gates carry product-readable failure text (`product_relevant`, plain-language
13
+ `what`/`recommendation` fields): the person standing at the gate does not read stack traces. Every
14
+ outward-facing artifact an agent produces (blocked reasons, clarifying questions, tickets,
15
+ verification reports, console copy) is written for that operator.
16
+
17
+ ## The four factories
18
+
19
+ | Factory | Creates | Lisa surface | Gate (input signal) |
20
+ |---|---|---|---|
21
+ | **Research** | PRDs | `/lisa:research`, `/lisa:project-ideation` | Prompts and ideation are the main entry points |
22
+ | **Plan** | Work units (epics, stories, tickets, tasks) | `/lisa:plan` → the `*-to-tracker` pipeline | PRD flipped to `prd-ready`, claimed by PRD intake |
23
+ | **Implement** | Quality software (tests, code, UI, APIs, infrastructure) | `/lisa:implement` → build flows | Work unit flipped to `status:ready`, claimed by build intake |
24
+ | **Verify** | A go/no-go decision | `/lisa:verify-prd` (PRD level), `/lisa:verify` (change level) | Shipped PRD rolled up by intake |
25
+
26
+ Verify's no-go path is deliberate: failures re-open the PRD as `ticketed` with **build-ready** fix
27
+ tickets that flow straight back into Implement — never `blocked`. The loop is self-healing.
28
+
29
+ ## The gates
30
+
31
+ Handoff happens **outside** the factories. Agents, humans, and automations submit inputs; the
32
+ intake agent (`/lisa:intake`, the `*-prd-intake` / `*-build-intake` agents) adversarially evaluates
33
+ each one:
34
+
35
+ - **Quality**: the validation gates (three-audience description, Gherkin acceptance criteria,
36
+ Validation Journey, structure, scope).
37
+ - **Executability**: the factory must have the tooling *and provable read access to that tooling*
38
+ for everything the input requires — linked documents, dashboards, cloud resources, third-party
39
+ APIs (validator gate **F5 — Required external access provable**). An input the factory cannot
40
+ execute never enters the factory.
41
+ - **Discover-first duty**: intake tries to resolve gaps itself (alternate substrates, configured
42
+ access layers, searching for the missing context). What it genuinely cannot resolve it rejects —
43
+ `blocked` plus a human-needed marker, with clarifying questions or the exact missing access named.
44
+
45
+ ## The loops
46
+
47
+ Three schedules feed the pipeline continuously, created by `/lisa:setup-automations` on the
48
+ runtime's native scheduler (Claude Routines, Codex Automations):
49
+
50
+ | Loop | Automation | Feeds | Cadence |
51
+ |---|---|---|---|
52
+ | QA | `exploratory-bugs` (`/lisa:exploratory-qa`) | Implement gate (bug tickets) | daily |
53
+ | Product Planning | `exploratory-prds` (`/lisa:project-ideation`) | Research/Plan gate (PRDs) | daily |
54
+ | Monitoring | `monitor` (`/lisa:monitor`) | Implement gate (regression tickets) | daily |
55
+
56
+ Plus the pipeline movers: `intake-prd` (hourly), `intake-tickets` (every 10 minutes),
57
+ `intake-repair` (hourly). **Autonomy is the default**: `auto-start-prds` and `auto-start-tickets`
58
+ default to `true`, so loop outputs enter the gates pickup-ready and the adversarial intake is the
59
+ quality control. Projects opt into human triage by passing `false`.
60
+
61
+ ## Where humans stand
62
+
63
+ Humans act only at explicit exterior gates:
64
+
65
+ - flipping a draft they chose to hold back to `prd-ready` / `status:ready`,
66
+ - approving protected deployments (`github.environments.require_approval`),
67
+ - reviewing low-confidence learning PRs (auto-merge off),
68
+ - answering what intake rejected and raised.
69
+
70
+ Inside a flow, never pause to ask a human whether to proceed — the invocation was the authorization.
71
+ Headless discipline follows: no interactive prompts, idempotent re-runs, clean exits on empty
72
+ queues, and loud, specific failures when something is genuinely blocking.
73
+
74
+ ## The brownfield on-ramp
75
+
76
+ Greenfield projects are agent-ready by construction. A brownfield project must earn readiness in
77
+ two ordered steps before the automation fleet runs unattended:
78
+
79
+ 1. **Knowledge convergence** (`/lisa:agent-ready`): build the initial knowledge wiki from every
80
+ reachable source — repository, git history, tracker, connected systems — under the operating
81
+ premise *"starting tomorrow, you maintain this project without human input; today is your only
82
+ chance to ask questions."* Everything derivable is derived and written into the wiki; what only
83
+ a human can answer becomes a product-readable entry in `wiki/gaps.md`. Humans answer inline, a
84
+ **fresh session** re-runs the skill, verified answers are absorbed into wiki pages, and the loop
85
+ repeats until a run reports zero open gaps.
86
+ 2. **Standards adoption**: apply Lisa's full lint rules, guardrails, and thresholds — the project
87
+ goes red by design — then refactor to conformance **without changing business logic or
88
+ functionality**, via the improve/fix flows, with behavior preservation proven by tests and
89
+ empirical verification.
90
+
91
+ Knowledge before standards: an agent refactoring a codebase it does not yet understand is exactly
92
+ the unattended guessing the gates exist to prevent.
93
+
94
+ ## Quality and parity
95
+
96
+ Everything else Lisa installs — skills, hooks, quality checks, guardrails, CI gates, rulesets —
97
+ exists to enforce enterprise-grade quality and verification standards that keep the software
98
+ maintainable. Never weaken a gate to get work through it; fix the work, or raise the
99
+ risk-acceptance decision to a human.
100
+
101
+ Every supported coding agent is a first-class factory operator: Claude Code, Codex, Cursor,
102
+ OpenCode, Antigravity (agy), Copilot. Behavior stays in parity across them, and anything persisted
103
+ for agents (rules, learnings, configuration) must be visible to all of them from a single source of
104
+ truth.
105
+
106
+ End state: end users have zero direct contact with coding agents. They interact with the tracker,
107
+ the PRD source, and the shipped software — the factories do the rest.
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: lisa-agent-ready
3
+ description: "Make a brownfield project agent-ready: build the initial knowledge wiki from everything the agent can reach (repository, git history, connected trackers, docs, observability), then write wiki/gaps.md — the questions only a human can answer before agents can operate the project autonomously. Iterative convergence: humans answer the gaps inline, a fresh session re-runs the skill, verified answers are absorbed into wiki pages, and the loop repeats until a run reports zero open gaps and declares the project agent-ready. This is the knowledge half of brownfield onboarding; standards adoption (applying Lisa's lint rules, guardrails, and thresholds, then refactoring to conform without changing behavior) follows it."
4
+ allowed-tools: ["Skill", "Bash", "Read", "Write", "Edit", "Glob", "Grep", "WebFetch"]
5
+ ---
6
+
7
+ # Agent-Ready Onboarding: $ARGUMENTS
8
+
9
+ Run this skill as if the following is literally true — it is the operating premise, not a
10
+ role-play flourish:
11
+
12
+ > **Starting tomorrow, you — the agent — maintain this project without any human input. Today is
13
+ > your only chance to ask questions.** Use the existing connections, the git history, the tracker,
14
+ > the docs, and anything else you have access to, to build the initial knowledge wiki. Critically:
15
+ > write down every gap a human must fill in **today** for you to be able to operate autonomously —
16
+ > the questions you would otherwise have to guess at tomorrow.
17
+
18
+ Greenfield projects start agent-ready by construction. Brownfield projects carry years of tacit
19
+ knowledge in heads, not files — this skill converges that knowledge into the wiki before the
20
+ factories are allowed to run unattended.
21
+
22
+ ## What counts as a gap (the judgment rule)
23
+
24
+ A **gap** is something that is (a) not derivable from any source you can reach, and (b) dangerous
25
+ to guess — guessing would risk business logic, product intent, money, data, security, or an
26
+ irreversible external effect. Examples: "why does the billing cutoff run at 02:00 and what breaks
27
+ if it moves", "which of these two payment flows is the live one", "who are the users of the admin
28
+ panel and what must never change for them".
29
+
30
+ **Not a gap**: anything you can derive by reading harder — architecture, conventions, test
31
+ behavior, deploy topology, dead code. Derive it and write it into the wiki instead. A lazy gap
32
+ that a later reader could have answered from the repository is a defect of this skill's output.
33
+
34
+ ## Phases
35
+
36
+ ### Phase 0 — Preflight
37
+
38
+ 1. Ensure the knowledge wiki exists. If the project has no `wiki/`, install it first (delegate to
39
+ the wiki install/setup surface — `/lisa:wiki:install` / `lisa-wiki-setup`); do not hand-roll a
40
+ wiki layout.
41
+ 2. Inventory every reachable source: the repository and its full git history, the configured
42
+ `tracker` and `source`, connected MCP servers and access layers (observability, docs,
43
+ analytics), CI history, deployed environments named in config. Record the inventory in the wiki
44
+ so later runs and later agents know what was consulted.
45
+ 3. Detect a prior run: if `wiki/gaps.md` exists, this is an **absorption run** — go to Phase 3
46
+ first, then re-audit.
47
+
48
+ ### Phase 1 — Ingest
49
+
50
+ Delegate to the wiki's ingestion surface (`lisa-wiki-ingest` and its connectors) across the
51
+ repository, the git history, and each connected source from the Phase 0 inventory. Bounded and
52
+ resumable — prefer several focused ingests over one unbounded crawl.
53
+
54
+ ### Phase 2 — Deep-read for autonomy
55
+
56
+ Beyond raw ingestion, author the pages an unattended operator needs, deriving everything derivable:
57
+ architecture and domain glossary, environment/deploy topology, who the users are (personas, if
58
+ discoverable), business rules encoded in code and tests, operational runbooks (how to see logs,
59
+ how to roll back), and the project's danger zones (migrations, money paths, irreversible jobs).
60
+ Update `wiki/index.md` and record the run in `wiki/log.md` per wiki conventions.
61
+
62
+ ### Phase 3 — Absorb answered gaps (re-runs only)
63
+
64
+ For each gap in `wiki/gaps.md` a human has answered inline:
65
+
66
+ 1. Verify the answer against reachable sources where possible; ask-back in the gap entry (keep it
67
+ `open` with a follow-up question) only when the answer is contradictory or incomplete.
68
+ 2. Absorb the verified answer into the proper wiki page(s) — the wiki is the durable home, the
69
+ gaps file is a queue, not a knowledge store.
70
+ 3. Mark the entry `absorbed` with a pointer to the page(s) it landed in, and move it to the
71
+ resolved section of the file.
72
+
73
+ Never treat your own inference as a human answer, and never resolve an open gap by guessing.
74
+
75
+ ### Phase 4 — Gaps audit
76
+
77
+ Regenerate the open section of `wiki/gaps.md` (create it on the first run). Every entry is written
78
+ for a **non-technical operator** — plain language, no stack traces, no repo jargon — because the
79
+ person answering may not code:
80
+
81
+ ```markdown
82
+ ## Open gaps (answer inline under each question, then re-run /lisa:agent-ready in a new session)
83
+
84
+ ### <stable-slug>
85
+ - **Question**: <one plain-language question>
86
+ - **Why it blocks autonomy**: <what an unattended agent cannot safely do without this>
87
+ - **What was searched**: <the sources consulted before declaring this a gap>
88
+ - **How to answer**: <where the answer likely lives / what format is useful>
89
+ - **Answer**: _(human fills in)_
90
+ - **Status**: open
91
+ ```
92
+
93
+ Order entries by autonomy impact (what would cause the worst unattended decision first). Keep the
94
+ file short — a gaps file with fifty entries means Phase 2 stopped too early.
95
+
96
+ ### Phase 5 — Converge and report
97
+
98
+ - **Open gaps remain** → report the count and the top items, and instruct: a human answers inline
99
+ in `wiki/gaps.md`, then re-runs `/lisa:agent-ready` in a **new session** (a fresh session avoids
100
+ anchoring on this run's assumptions). Commit the wiki changes through the normal wiki PR flow.
101
+ - **Zero open gaps** → declare the project **agent-ready for knowledge**: record the verdict and
102
+ date in the gaps file header and the wiki log, and point at the next step — standards adoption.
103
+
104
+ ## After convergence: standards adoption
105
+
106
+ Knowledge first, standards second. Once the loop reports no gaps, apply Lisa's full standards
107
+ (lint rules, guardrails, thresholds) and expect the project to go red — that is the point. Agents
108
+ then refactor the codebase to conform **without changing business logic or functionality**, via
109
+ the existing improve/fix flows, proving behavior is preserved with the test suite and empirical
110
+ verification. Only then should the automation fleet run unattended on a brownfield project.
111
+
112
+ ## Rules
113
+
114
+ - Never invent an answer to an open gap; the entire value of the file is that its answers came
115
+ from humans.
116
+ - Gap entries are product-readable (factory-model rule: write outward for a non-technical
117
+ operator).
118
+ - Idempotent: re-runs regenerate the open section in place and never lose or reword a human's
119
+ inline answers.
120
+ - The wiki is the durable store; `wiki/gaps.md` is a queue. Every absorbed answer must land in a
121
+ real wiki page with the gaps entry pointing at it.
122
+ - Follow the wiki's own conventions for commits, `wiki/index.md`, and `wiki/log.md` — this skill
123
+ adds no parallel bookkeeping.
@@ -23,6 +23,7 @@ Inspect only the Lisa automation fleet for the current project:
23
23
  - `intake-tickets`
24
24
  - `exploratory-bugs` when the current stack supports `exploratory-qa`
25
25
  - `exploratory-prds`
26
+ - `monitor`
26
27
 
27
28
  Resolve the expected project identifier, fleet naming prefix, queue arguments, cadence, and stack-support rules from the same contract used by `setup-automations` and `tear-down-automations`. Do **not** invent a second source of truth for fleet naming or queue resolution.
28
29
 
@@ -96,6 +96,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
96
96
  | F2 Parent sub-issue exists and is the right type | `structural` | false |
97
97
  | F3 Linked issues exist | `structural` | false |
98
98
  | F4 Required labels populated | `structural` | false |
99
+ | F5 Required external access provable | `technical` | true |
99
100
 
100
101
  Category values are the same fixed set as `lisa-jira-validate-ticket`:
101
102
 
@@ -257,6 +258,31 @@ For each entry in `links`, run `gh issue view <number> --repo <link-org>/<link-r
257
258
 
258
259
  Per `Phase 5` of `lisa-github-write-issue`, every issue MUST carry: `type:<issue_type>`, `status:<status>`, `priority:<priority>`. If any are missing from the spec / live issue, FAIL with the missing label name.
259
260
 
261
+ #### F5 — Required external access provable
262
+
263
+ The factory-gate rule: an input must not enter the pipeline unless the current runtime can actually
264
+ reach every external surface the work requires. Enumerate the surfaces this issue depends on:
265
+
266
+ - artifact links in the body (documents, designs, dashboards, spreadsheets, recordings),
267
+ - systems named by the description, acceptance criteria, or Validation Journey ("read the CloudWatch
268
+ alarms", "pull the copy from the Google Doc", "check the Sentry issues"),
269
+ - tooling the work plainly implies (a deploy target, a database, a third-party API).
270
+
271
+ For each surface, prove **read** access from the current runtime with the cheapest read-only probe
272
+ through the sanctioned access layer: the matching MCP tool or `lisa-*-access` skill, CLI auth
273
+ (`aws sts get-caller-identity`, `gh auth status`, vendor equivalents), or an authenticated fetch of
274
+ the linked artifact. Attempt to resolve a gap before failing — an alternate substrate, a configured
275
+ access layer, a keychain credential — mirroring the intake agent's discover-first duty.
276
+
277
+ - `PASS` — every required surface is provably readable.
278
+ - `N/A` — the issue needs nothing beyond the repository and the tracker itself.
279
+ - `FAIL` — a required surface is unreachable after the resolution attempt. Name the exact surface
280
+ and what was probed. Intake callers must route this to `blocked` + human escalation with the
281
+ missing access spelled out — an input the factory cannot execute never enters the factory.
282
+
283
+ Probes are read-only and bounded (seconds, not minutes, per surface); never mutate the external
284
+ system, and never invent or ask for credentials inline.
285
+
260
286
  ## Execution
261
287
 
262
288
  1. Parse `$ARGUMENTS`. If it's an issue ref, fetch via `gh issue view --json` and derive the spec fields — including `build_ready` (label set contains `status:ready`) and `child_refs` (native sub-issues plus body task-list / `Blocked by #<n>` parentage, resolved as in `lisa-github-read-issue`) so S15 can classify the issue. Otherwise parse the YAML spec.
@@ -294,6 +320,7 @@ Output is a single fenced text block. Callers parse it; do not add free-form pro
294
320
  - [PASS|FAIL|N/A] F2 Parent sub-issue exists and is the right type — <one-line reason>
295
321
  - [PASS|FAIL|N/A] F3 Linked issues exist — <one-line reason>
296
322
  - [PASS|FAIL|N/A] F4 Required labels populated — <one-line reason>
323
+ - [PASS|FAIL|N/A] F5 Required external access provable — <one-line reason>
297
324
 
298
325
  ### Verdict: PASS | FAIL
299
326
  ### Failures: <count>
@@ -313,7 +340,7 @@ The verdict is `PASS` if every applicable gate is `PASS`. Any `FAIL` makes the v
313
340
 
314
341
  Same shape and meaning as `lisa-jira-validate-ticket` so downstream PRD-intake skills (Notion, Confluence, Linear, GitHub) can format comments uniformly:
315
342
 
316
- - **gate**: the gate ID (`S1`–`S15`, `F1`–`F4`).
343
+ - **gate**: the gate ID (`S1`–`S15`, `F1`–`F5`).
317
344
  - **category**: the gate's fixed category from the table.
318
345
  - **product_relevant**: matches the gate's table entry. `false` means the failure is an internal data-quality problem the caller should fix without bothering product.
319
346
  - **what**: plain-language, product-readable.