@codyswann/lisa 2.61.0 → 2.62.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.
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/agents/confluence-prd-intake.md +1 -1
- package/plugins/lisa/agents/github-agent.md +4 -5
- package/plugins/lisa/agents/github-build-intake.md +1 -1
- package/plugins/lisa/agents/github-prd-intake.md +1 -1
- package/plugins/lisa/agents/linear-prd-intake.md +1 -1
- package/plugins/lisa/agents/notion-prd-intake.md +1 -1
- package/plugins/lisa/commands/intake.md +1 -1
- package/plugins/lisa/commands/project-ideation.md +3 -3
- package/plugins/lisa/commands/repair-intake.md +6 -0
- package/plugins/lisa/commands/research.md +3 -3
- package/plugins/lisa/commands/setup-automations.md +6 -0
- package/plugins/lisa/commands/tear-down-automations.md +6 -0
- package/plugins/lisa/commands/verify-prd.md +2 -2
- package/plugins/lisa/rules/config-resolution.md +63 -4
- package/plugins/lisa/rules/intent-routing.md +4 -3
- package/plugins/lisa/rules/leaf-only-lifecycle.md +1 -1
- package/plugins/lisa/rules/prd-lifecycle-rollup.md +10 -2
- package/plugins/lisa/rules/repo-scope-split.md +18 -1
- package/plugins/lisa/skills/confluence-prd-intake/SKILL.md +24 -14
- package/plugins/lisa/skills/confluence-prd-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/confluence-write-prd/SKILL.md +103 -0
- package/plugins/lisa/skills/confluence-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-build-intake/SKILL.md +32 -21
- package/plugins/lisa/skills/github-evidence/SKILL.md +3 -26
- package/plugins/lisa/skills/github-evidence/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/github-journey/SKILL.md +2 -2
- package/plugins/lisa/skills/github-prd-intake/SKILL.md +25 -11
- package/plugins/lisa/skills/github-prd-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/github-sync/SKILL.md +5 -5
- package/plugins/lisa/skills/github-write-issue/SKILL.md +15 -6
- package/plugins/lisa/skills/github-write-prd/SKILL.md +100 -0
- package/plugins/lisa/skills/github-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/implement/SKILL.md +13 -6
- package/plugins/lisa/skills/intake/SKILL.md +13 -12
- package/plugins/lisa/skills/intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/jira-build-intake/SKILL.md +24 -11
- package/plugins/lisa/skills/jira-write-ticket/SKILL.md +8 -0
- package/plugins/lisa/skills/linear-build-intake/SKILL.md +22 -9
- package/plugins/lisa/skills/linear-prd-intake/SKILL.md +23 -13
- package/plugins/lisa/skills/linear-prd-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/linear-write-issue/SKILL.md +10 -2
- package/plugins/lisa/skills/linear-write-prd/SKILL.md +90 -0
- package/plugins/lisa/skills/linear-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/notion-access/SKILL.md +2 -0
- package/plugins/lisa/skills/notion-prd-intake/SKILL.md +22 -12
- package/plugins/lisa/skills/notion-prd-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/notion-write-prd/SKILL.md +107 -0
- package/plugins/lisa/skills/notion-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/prd-source-write/SKILL.md +80 -0
- package/plugins/lisa/skills/prd-source-write/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/project-ideation/SKILL.md +183 -80
- package/plugins/lisa/skills/repair-intake/SKILL.md +403 -0
- package/plugins/lisa/skills/repair-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/research/SKILL.md +19 -3
- package/plugins/lisa/skills/research/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/setup-automations/SKILL.md +78 -0
- package/plugins/lisa/skills/setup-automations/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/setup-github/SKILL.md +0 -1
- package/plugins/lisa/skills/tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa/skills/tear-down-automations/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-build-intake/SKILL.md +6 -2
- package/plugins/lisa/skills/tracker-build-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/tracker-evidence/SKILL.md +2 -2
- package/plugins/lisa/skills/tracker-sync/SKILL.md +1 -1
- package/plugins/lisa/skills/verify-prd/SKILL.md +41 -38
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/commands/exploratory-qa.md +3 -3
- package/plugins/lisa-expo/skills/exploratory-qa/SKILL.md +48 -18
- package/plugins/lisa-expo/skills/exploratory-qa/agents/openai.yaml +2 -2
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/commands/exploratory-qa.md +3 -3
- package/plugins/lisa-harper-fabric/skills/exploratory-qa/SKILL.md +48 -18
- package/plugins/lisa-harper-fabric/skills/exploratory-qa/agents/openai.yaml +2 -2
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/commands/exploratory-qa.md +3 -3
- package/plugins/lisa-rails/skills/exploratory-qa/SKILL.md +48 -18
- package/plugins/lisa-rails/skills/exploratory-qa/agents/openai.yaml +2 -2
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/skills/lisa-wiki-ingest/SKILL.md +30 -1
- package/plugins/src/base/agents/confluence-prd-intake.md +1 -1
- package/plugins/src/base/agents/github-agent.md +4 -5
- package/plugins/src/base/agents/github-build-intake.md +1 -1
- package/plugins/src/base/agents/github-prd-intake.md +1 -1
- package/plugins/src/base/agents/linear-prd-intake.md +1 -1
- package/plugins/src/base/agents/notion-prd-intake.md +1 -1
- package/plugins/src/base/commands/intake.md +1 -1
- package/plugins/src/base/commands/project-ideation.md +3 -3
- package/plugins/src/base/commands/repair-intake.md +6 -0
- package/plugins/src/base/commands/research.md +3 -3
- package/plugins/src/base/commands/setup-automations.md +6 -0
- package/plugins/src/base/commands/tear-down-automations.md +6 -0
- package/plugins/src/base/commands/verify-prd.md +2 -2
- package/plugins/src/base/rules/config-resolution.md +63 -4
- package/plugins/src/base/rules/intent-routing.md +4 -3
- package/plugins/src/base/rules/leaf-only-lifecycle.md +1 -1
- package/plugins/src/base/rules/prd-lifecycle-rollup.md +10 -2
- package/plugins/src/base/rules/repo-scope-split.md +18 -1
- package/plugins/src/base/skills/confluence-prd-intake/SKILL.md +24 -14
- package/plugins/src/base/skills/confluence-write-prd/SKILL.md +103 -0
- package/plugins/src/base/skills/github-build-intake/SKILL.md +32 -21
- package/plugins/src/base/skills/github-evidence/SKILL.md +3 -26
- package/plugins/src/base/skills/github-journey/SKILL.md +2 -2
- package/plugins/src/base/skills/github-prd-intake/SKILL.md +25 -11
- package/plugins/src/base/skills/github-sync/SKILL.md +5 -5
- package/plugins/src/base/skills/github-write-issue/SKILL.md +15 -6
- package/plugins/src/base/skills/github-write-prd/SKILL.md +100 -0
- package/plugins/src/base/skills/implement/SKILL.md +13 -6
- package/plugins/src/base/skills/intake/SKILL.md +13 -12
- package/plugins/src/base/skills/jira-build-intake/SKILL.md +24 -11
- package/plugins/src/base/skills/jira-write-ticket/SKILL.md +8 -0
- package/plugins/src/base/skills/linear-build-intake/SKILL.md +22 -9
- package/plugins/src/base/skills/linear-prd-intake/SKILL.md +23 -13
- package/plugins/src/base/skills/linear-write-issue/SKILL.md +10 -2
- package/plugins/src/base/skills/linear-write-prd/SKILL.md +90 -0
- package/plugins/src/base/skills/notion-access/SKILL.md +2 -0
- package/plugins/src/base/skills/notion-prd-intake/SKILL.md +22 -12
- package/plugins/src/base/skills/notion-write-prd/SKILL.md +107 -0
- package/plugins/src/base/skills/prd-source-write/SKILL.md +80 -0
- package/plugins/src/base/skills/project-ideation/SKILL.md +183 -80
- package/plugins/src/base/skills/repair-intake/SKILL.md +403 -0
- package/plugins/src/base/skills/research/SKILL.md +19 -3
- package/plugins/src/base/skills/setup-automations/SKILL.md +78 -0
- package/plugins/src/base/skills/setup-github/SKILL.md +0 -1
- package/plugins/src/base/skills/tear-down-automations/SKILL.md +34 -0
- package/plugins/src/base/skills/tracker-build-intake/SKILL.md +6 -2
- package/plugins/src/base/skills/tracker-evidence/SKILL.md +2 -2
- package/plugins/src/base/skills/tracker-sync/SKILL.md +1 -1
- package/plugins/src/base/skills/verify-prd/SKILL.md +41 -38
- package/plugins/src/expo/commands/exploratory-qa.md +3 -3
- package/plugins/src/expo/skills/exploratory-qa/SKILL.md +48 -18
- package/plugins/src/harper-fabric/commands/exploratory-qa.md +3 -3
- package/plugins/src/harper-fabric/skills/exploratory-qa/SKILL.md +48 -18
- package/plugins/src/rails/commands/exploratory-qa.md +3 -3
- package/plugins/src/rails/skills/exploratory-qa/SKILL.md +48 -18
- package/plugins/src/wiki/skills/lisa-wiki-ingest/SKILL.md +30 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prd-source-write
|
|
3
|
+
description: "Vendor-neutral wrapper for creating (or idempotently updating) a PRD in the configured PRD source. The PRD-side sibling of lisa:tracker-write. Resolves `source` from .lisa.config.local.json first (then .lisa.config.json — local overrides global) and dispatches to lisa:notion-write-prd, lisa:confluence-write-prd, lisa:github-write-prd, or lisa:linear-write-prd. Callers (notably lisa:research) MUST invoke this skill instead of a vendor PRD writer directly — that is what makes the PRD source switchable per project. Accepts an `initial_role` of `draft` (default) or `ready` so a freshly created PRD either waits for human promotion or is immediately picked up by lisa:intake; and a stable dedupe marker so re-runs reference the existing PRD instead of creating a duplicate. The PRD lives in the source — there is no separate document artifact."
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PRD Source Write: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Thin dispatcher. Resolves the configured PRD `source` and delegates to the matching vendor PRD
|
|
10
|
+
writer, which owns the concrete create/update, the lifecycle-role application, and the marker-based
|
|
11
|
+
dedupe. This skill only routes — it never talks to a source API itself.
|
|
12
|
+
|
|
13
|
+
See the `config-resolution` rule for the full configuration schema and the PRD lifecycle roles.
|
|
14
|
+
|
|
15
|
+
## Input contract
|
|
16
|
+
|
|
17
|
+
Callers pass a single structured spec:
|
|
18
|
+
|
|
19
|
+
```yaml
|
|
20
|
+
operation: create_or_update # the only operation; create unless the marker already exists
|
|
21
|
+
title: "<PRD title>"
|
|
22
|
+
body: "<full PRD markdown — the entire spec>"
|
|
23
|
+
initial_role: draft | ready # default: draft. ready = picked up by lisa:intake's PRD scan
|
|
24
|
+
dedupe_key: "<stable-key>" # e.g. project-ideation's idea key
|
|
25
|
+
marker: "[lisa-project-ideation] idea=<stable-key>" # embedded in the PRD body for dedupe
|
|
26
|
+
origin: { tool: project-ideation | research | manual }
|
|
27
|
+
source_ref: "<optional existing PRD ref to force an update>"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
`initial_role` semantics are uniform across vendors (the role STRINGS resolve per vendor from
|
|
31
|
+
`config-resolution`):
|
|
32
|
+
|
|
33
|
+
- **`draft`** (default) → the PRD is created in the source's `draft` PRD role. It waits for a human
|
|
34
|
+
(or a later `ready` promotion) before any intake claims it.
|
|
35
|
+
- **`ready`** → the PRD is created in the source's `ready` PRD role (`prd-ready`), so the PRD-side of
|
|
36
|
+
`lisa:intake` / the `*-prd-intake` scanner auto-claims it on the next cycle.
|
|
37
|
+
|
|
38
|
+
There is no "omitted = legacy behavior" mode (unlike the ticket-side `build_ready`): there was no
|
|
39
|
+
prior PRD-source-write behavior to preserve, so omitted means `draft`.
|
|
40
|
+
|
|
41
|
+
## Workflow
|
|
42
|
+
|
|
43
|
+
1. **Resolve the source.** Read `.lisa.config.local.json` first (if present), then
|
|
44
|
+
`.lisa.config.json`. Local overrides global per key. Use `jq` — never hand-parse JSON.
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
local_source=$(jq -r '.source // empty' .lisa.config.local.json 2>/dev/null)
|
|
48
|
+
global_source=$(jq -r '.source // empty' .lisa.config.json 2>/dev/null)
|
|
49
|
+
source="${local_source:-${global_source}}"
|
|
50
|
+
if [ -z "$source" ]; then
|
|
51
|
+
echo "Error: 'source' is not set in .lisa.config.json. A PRD source (notion / confluence / github / linear) is required to create a PRD. Run /lisa:setup:notion (or :confluence, :github, :linear)." >&2
|
|
52
|
+
exit 1
|
|
53
|
+
fi
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
2. **Validate the value and dispatch** (pass the spec verbatim):
|
|
57
|
+
|
|
58
|
+
- `notion` → confirm `notion.workspaceId` and `notion.prdDatabaseId` are present, then invoke
|
|
59
|
+
`lisa:notion-write-prd`.
|
|
60
|
+
- `confluence` → confirm `atlassian.cloudId` and (`confluence.spaceKey` or
|
|
61
|
+
`confluence.parents.draft`/`.ready`) are present, then invoke `lisa:confluence-write-prd`.
|
|
62
|
+
- `github` → confirm `github.org` and `github.repo` are present, then invoke
|
|
63
|
+
`lisa:github-write-prd`.
|
|
64
|
+
- `linear` → confirm `linear.workspace` (and team for project placement) is present, then invoke
|
|
65
|
+
`lisa:linear-write-prd`.
|
|
66
|
+
- `jira` → **stop and fail loudly**: `"source=jira is not a supported PRD source — config-resolution defines no JIRA PRD lifecycle roles. Use notion / confluence / github / linear, or set source accordingly."` (JIRA is a destination tracker, not a PRD source.)
|
|
67
|
+
- Any other value (including `file`) → stop and report: `"Unknown PRD source '<value>'. Expected one of: notion, confluence, github, linear."`
|
|
68
|
+
|
|
69
|
+
3. **Surface the vendor writer's output unchanged.** It returns the created/reused PRD ref + URL,
|
|
70
|
+
the applied role (`draft`/`ready`), the dedupe marker, and whether it was created or reused.
|
|
71
|
+
Downstream callers (research, project-ideation) parse this — do not paraphrase.
|
|
72
|
+
|
|
73
|
+
## Rules
|
|
74
|
+
|
|
75
|
+
- Never bypass dispatch — a vendor-neutral caller calling a `*-write-prd` skill directly defeats the
|
|
76
|
+
per-project source switch (exactly the `tracker-write` discipline, mirrored).
|
|
77
|
+
- Never accept a source outside `{notion, confluence, github, linear}`. `jira` and `file` fail loudly.
|
|
78
|
+
- Never mutate the spec between layers. The vendor writers define their own create/dedupe contract.
|
|
79
|
+
- Never invent a PRD lifecycle role string — resolve every role from `config-resolution` per vendor.
|
|
80
|
+
- Idempotency is the vendor writer's job (marker search before create); this shim only routes.
|
|
@@ -1,131 +1,234 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: project-ideation
|
|
3
|
-
description: "Generate practical, verifiable product
|
|
3
|
+
description: "Generate practical, verifiable product ideas for the current host project FROM EVIDENCE-DERIVED PERSONAS, then turn the selected build-ready ideas into real PRDs via lisa:research. First derives the personas the project actually serves by mining its docs, code, data model, and releases (never invented — each persona cites its evidence), then ideates per persona. Every build-ready idea must pass a practicality gate (an obtainable data/source path) and an empirical verification gate (a user-observable outcome the agent can verify). Selected ideas are handed to lisa:research, which creates each PRD in the configured source (Notion / Confluence / GitHub / Linear) — in the draft state by default, or prd-ready (auto-picked-up by lisa:intake) when prd_ready=true. Defaults to creating one PRD (the top-ranked idea); max_prds widens the batch. Invoke for 'generate feature ideas for this project', 'what should we build next for <persona>?', 'looking at <external product>, what should we add here?'. Vendor- and stack-agnostic."
|
|
4
4
|
allowed-tools: ["Skill", "Bash", "Read", "Glob", "Grep", "WebFetch", "WebSearch"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Project Ideation
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Generate persona-grounded, verifiable ideas for the host project in `$ARGUMENTS` (or the current
|
|
10
|
+
working directory), then create PRDs for the selected build-ready ideas via `lisa:research`.
|
|
10
11
|
|
|
11
|
-
The value of this skill is **filtering**, not
|
|
12
|
+
The value of this skill is **grounding + filtering**, not brainstorm volume. Ideas come from
|
|
13
|
+
personas the project demonstrably serves, and an idea you cannot ground in obtainable data and
|
|
14
|
+
cannot verify yourself is noise — demote it honestly.
|
|
12
15
|
|
|
13
|
-
##
|
|
16
|
+
## Parameters
|
|
17
|
+
|
|
18
|
+
- **`target`** (first positional, optional) — a target project path, or an external product/site to
|
|
19
|
+
draw inspiration from. Defaults to the current working directory.
|
|
20
|
+
- **`prd_ready=true|false`** (default **false**) — the PRD-lifecycle state for the PRDs this run
|
|
21
|
+
creates. `false` → created in the source's **draft** state for human review. `true` → created
|
|
22
|
+
**prd-ready** so the PRD side of `lisa:intake` auto-claims them. Passed straight through to
|
|
23
|
+
`lisa:research` (which maps it to `lisa:prd-source-write`'s `initial_role`).
|
|
24
|
+
- **`max_prds=<n>|all`** (default **1**) — how many build-ready ideas become PRDs this run. Default
|
|
25
|
+
creates **one** PRD (the single top-ranked idea), because `lisa:research` is a heavy full flow.
|
|
26
|
+
`max_prds=3` creates the top three; `max_prds=all` creates one per build-ready idea. Discovery
|
|
27
|
+
Spikes and Rejected ideas are never turned into PRDs regardless of `max_prds`.
|
|
14
28
|
|
|
15
|
-
|
|
29
|
+
## When to use
|
|
16
30
|
|
|
17
|
-
- "generate feature ideas for this project"
|
|
31
|
+
- "generate feature ideas for this project" / "what should this app do next?"
|
|
32
|
+
- "what should we build next for <persona / user type>?"
|
|
18
33
|
- "looking at <external product / website>, what should we add here?"
|
|
19
34
|
- "suggest practical improvements we can verify ourselves"
|
|
20
|
-
- "what should this app do next given the data we can get?"
|
|
21
|
-
- "what high-value features could we add to <repo>?"
|
|
22
35
|
|
|
23
|
-
|
|
36
|
+
This skill **does** create PRDs (via `lisa:research`) for the selected ideas. It does **not** create
|
|
37
|
+
tracker tickets (that is `lisa:plan`) and does **not** change code (that is `lisa:implement`).
|
|
24
38
|
|
|
25
39
|
## Two gates every build-ready idea must pass
|
|
26
40
|
|
|
27
|
-
An idea may only
|
|
41
|
+
An idea may only become a **Practical Idea** (and thus a PRD candidate) if it passes BOTH gates.
|
|
42
|
+
Otherwise demote it.
|
|
28
43
|
|
|
29
|
-
1. **Practicality gate.** The project can plausibly implement the idea from sources that
|
|
30
|
-
|
|
44
|
+
1. **Practicality gate.** The project can plausibly implement the idea from sources that actually
|
|
45
|
+
exist: existing code, a data model, a route/command/UI surface, a public or integrated API, a
|
|
46
|
+
scrapeable public page, an existing user input, a local database, or documented integrations. Name
|
|
47
|
+
the specific source and how the data is obtained. "We could probably get the data somehow" fails.
|
|
48
|
+
2. **Empirical verification gate.** You can personally confirm the resulting behavior by using the
|
|
49
|
+
software (running the CLI, hitting the API, loading the page, querying the DB, inspecting an
|
|
50
|
+
artifact) and capture a concrete evidence artifact. "Tests could be written later" does NOT
|
|
51
|
+
satisfy this gate — quality gates are prerequisites, never proof an idea works.
|
|
31
52
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
53
|
+
Failing the practicality gate → **Rejected / Not Practical Yet** (or **Discovery Spike** if a bounded
|
|
54
|
+
probe could make it practical), naming the missing data/source/access. Failing only the verification
|
|
55
|
+
gate → **Discovery Spike** (define the missing proof), never a build-ready recommendation.
|
|
35
56
|
|
|
36
57
|
## Step 1 — Establish host-project context (always first)
|
|
37
58
|
|
|
38
59
|
Never propose ideas before you understand what exists. Inspect the host project and record:
|
|
39
60
|
|
|
40
|
-
- **Project type and package manager** —
|
|
41
|
-
|
|
42
|
-
- **
|
|
43
|
-
- **
|
|
44
|
-
|
|
45
|
-
- **
|
|
61
|
+
- **Project type and package manager** — manifests (`package.json`, `pyproject.toml`, `go.mod`,
|
|
62
|
+
`Cargo.toml`, `Gemfile`, …) and any `.lisa.config.json`.
|
|
63
|
+
- **Docs and specs** — `README`, `docs/`, `wiki/`, architecture notes, ADRs, marketing/landing copy.
|
|
64
|
+
- **Current product surfaces or commands** — routes, screens, CLI subcommands, API endpoints,
|
|
65
|
+
scheduled jobs, generated artifacts.
|
|
66
|
+
- **Data model and existing user inputs** — schemas, migrations, forms, config the user supplies.
|
|
67
|
+
- **Available data sources and ingestion/scraping paths** — integrated APIs, public datasets,
|
|
68
|
+
scrapeable pages, local databases, event streams.
|
|
69
|
+
- **Existing verification tooling** — how a human currently observes the software works.
|
|
70
|
+
|
|
71
|
+
Use Lisa's existing methodology rather than inventing a parallel flow. Route each evidence source
|
|
72
|
+
through the matching established practice before any idea is promoted to **Practical Ideas**:
|
|
73
|
+
|
|
74
|
+
- **Host-code inspection** uses `/lisa:codebase-research` concepts: trace data flow from entry point
|
|
75
|
+
to output, identify modification points, map dependencies, and find reusable code or patterns.
|
|
76
|
+
- **Public, no-login comparison** uses web/browser research when those tools are available: inspect
|
|
77
|
+
the public surface, preserve source URLs, and separate observed behavior from inference.
|
|
78
|
+
- **UI-facing recommendations** use `/lisa:product-walkthrough` methodology first: inspect the
|
|
79
|
+
current product surface, note existing-component reuse candidates, capture coverage smells or
|
|
80
|
+
behavioral surprises, and only then list a UI idea as build-ready.
|
|
81
|
+
|
|
82
|
+
## Step 2 — Derive the personas (evidence-gated, never invented)
|
|
83
|
+
|
|
84
|
+
Ideation is **persona-driven**, and the personas must be gleaned from the project itself — not
|
|
85
|
+
assumed. Mine the Step 1 evidence for who the project actually serves:
|
|
86
|
+
|
|
87
|
+
- **Docs / README / release notes / CHANGELOG** — stated audiences, "for <role>" framing, who each
|
|
88
|
+
shipped feature was for.
|
|
89
|
+
- **Code** — auth roles / RBAC / permission checks, account-type or user-type enums, route guards,
|
|
90
|
+
feature flags scoped to a cohort, role-specific UI branches.
|
|
91
|
+
- **Data model** — user / role / tenant / org tables, profile fields, subscription tiers.
|
|
92
|
+
- **Tests & product walkthrough** — the real user journeys exercised.
|
|
93
|
+
- **External inspiration** (Step 3, if used) — comparable products' user segments, as inspiration
|
|
94
|
+
only.
|
|
95
|
+
|
|
96
|
+
Anti-fabrication rule (mechanical): **no evidence citation → no persona.** Generic roles
|
|
97
|
+
("admin", "analyst", "end user", "power user") are **banned unless the project has specific evidence
|
|
98
|
+
for them**. Each persona requires at least **two grounded signals** from different source classes
|
|
99
|
+
where available; if only one strong signal exists, emit a single **low-confidence "Primary
|
|
100
|
+
documented user"** persona named as such — never fabricate a full set from thin evidence.
|
|
101
|
+
|
|
102
|
+
Cap the set at **3–6 personas** (merge adjacent personas by goal/workflow; more than six is taxonomy
|
|
103
|
+
noise). Each persona records:
|
|
104
|
+
|
|
105
|
+
- `name` — concrete and project-specific.
|
|
106
|
+
- `goals` — what this persona is trying to accomplish.
|
|
107
|
+
- `pains` — current friction for this persona, grounded in observed behavior/gaps.
|
|
108
|
+
- `evidence` — the specific files / doc sections / tables / releases that justify the persona.
|
|
109
|
+
- `confidence` — high | medium | low, with the reason.
|
|
110
|
+
|
|
111
|
+
Always emit a **Personas Derived From Evidence** section, even when no PRDs are created. Spikes and
|
|
112
|
+
rejected ideas are still tagged with the persona they would serve (or `cross-persona`).
|
|
113
|
+
|
|
114
|
+
## Step 3 — Optional external / public-source inspection
|
|
115
|
+
|
|
116
|
+
Only when the user references an external product, website, public dataset, or competitor:
|
|
117
|
+
|
|
118
|
+
- Inspect **public, no-login** surfaces only. Preserve every **source URL** so informed ideas cite
|
|
119
|
+
it. The external source is **inspiration, not a domain you bake in** — keep the workflow reusable.
|
|
120
|
+
- If the runtime has no browser/web capability, mark that source **unavailable** and proceed with
|
|
121
|
+
host-project-only ideas (document the fallback rather than fabricating findings).
|
|
122
|
+
|
|
123
|
+
## Step 4 — Ideate per persona, then filter through the gates
|
|
124
|
+
|
|
125
|
+
For each derived persona, brainstorm ideas that serve that persona's goals/pains, **tag each idea
|
|
126
|
+
with the persona(s) it serves**, then run every idea through BOTH gates. For each surviving idea,
|
|
127
|
+
build a **feasibility card**:
|
|
128
|
+
|
|
129
|
+
- **Persona(s) served** — which derived persona(s), and why this matters to them.
|
|
130
|
+
- **Existing fit** — the current route / API / CLI / model / doc / surface it builds on (this is also
|
|
131
|
+
the idea's stable "existing-fit anchor" used in the dedupe key).
|
|
132
|
+
- **Data/source required** + **how it is obtained** — the concrete accessible path.
|
|
133
|
+
- **Known source limitations** — rate limits, robots/ToS, staleness, missing fields.
|
|
134
|
+
- **Smallest practical slice** — the minimal useful version.
|
|
135
|
+
- **Empirical verification steps** — what you (the agent) will do against the running software.
|
|
136
|
+
- **Evidence artifact** — the screenshot, curl/CLI output, DB row, or generated file the verifier
|
|
137
|
+
captures.
|
|
138
|
+
- **Confidence** — high | medium | low, with the reason.
|
|
46
139
|
|
|
47
|
-
|
|
140
|
+
## Step 5 — Rank and select the PRD creation set
|
|
48
141
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
142
|
+
Rank Practical Ideas by **persona value, feasibility, verification clarity, and project fit**. Then
|
|
143
|
+
select the creation set by `max_prds` (default **1** → the single top-ranked idea; `<n>` → top n;
|
|
144
|
+
`all` → every Practical Idea). Spikes and Rejected ideas are reported but never selected.
|
|
52
145
|
|
|
53
|
-
## Step
|
|
146
|
+
## Step 6 — Create a PRD per selected idea (via lisa:research)
|
|
54
147
|
|
|
55
|
-
|
|
148
|
+
For each idea in the creation set, invoke `/lisa:research` with:
|
|
56
149
|
|
|
57
|
-
-
|
|
58
|
-
|
|
59
|
-
-
|
|
150
|
+
- the feasibility card and persona evidence as the problem statement (so the PRD inherits the
|
|
151
|
+
grounding and the empirical verification plan),
|
|
152
|
+
- `prd_ready` (this run's flag — `lisa:research` maps it to draft vs prd-ready),
|
|
153
|
+
- a stable **dedupe marker** (see below) so a re-run references the existing PRD instead of creating
|
|
154
|
+
a duplicate.
|
|
60
155
|
|
|
61
|
-
|
|
156
|
+
`lisa:research` synthesizes the PRD and creates it in the configured source via
|
|
157
|
+
`lisa:prd-source-write`. `project-ideation` never writes to the source directly — it delegates, so
|
|
158
|
+
the PRD source stays switchable per project. Capture each returned PRD ref / URL / role / outcome.
|
|
62
159
|
|
|
63
|
-
|
|
160
|
+
### Dedupe marker (stable, never title-based)
|
|
64
161
|
|
|
65
|
-
|
|
162
|
+
Each created PRD carries the marker `[lisa-project-ideation] idea=<stable-key>`. Compute
|
|
163
|
+
`<stable-key>` deterministically from: repo identity (configured repo or git remote + repo-root
|
|
164
|
+
basename) + a normalized slug of the idea name + the normalized persona key(s) + the existing-fit
|
|
165
|
+
anchor. **Do not** include rank, date, confidence, or the generated PRD title (they change across
|
|
166
|
+
runs). `lisa:prd-source-write` searches the source for an open PRD carrying this marker before
|
|
167
|
+
creating — matching by marker, never by title — so re-running ideation updates/references the
|
|
168
|
+
existing PRD rather than duplicating it.
|
|
66
169
|
|
|
67
|
-
|
|
68
|
-
- **Existing fit** — the current route / API / CLI / model / doc / surface it builds on.
|
|
69
|
-
- **Data/source required** — the specific data the idea consumes.
|
|
70
|
-
- **How the data can be obtained or scraped** — the concrete accessible path (endpoint, query, public page, existing input).
|
|
71
|
-
- **Known source limitations or terms constraints** — rate limits, robots/ToS, staleness, missing fields.
|
|
72
|
-
- **Smallest practical implementation slice** — the minimal useful version.
|
|
73
|
-
- **Empirical verification steps** — what you (the agent) will do against the running app / API / CLI / DB / artifact to confirm it works.
|
|
74
|
-
- **Evidence artifact** — the screenshot, curl output, CLI output, DB row, or generated file the verifier captures.
|
|
75
|
-
- **Confidence** — high | medium | low, with the reason.
|
|
170
|
+
## Step 7 — Output (no report file)
|
|
76
171
|
|
|
77
|
-
|
|
172
|
+
Emit two distinct in-session sections (do not write a report file):
|
|
78
173
|
|
|
79
|
-
|
|
174
|
+
1. **Idea report** (the audit trail):
|
|
175
|
+
```markdown
|
|
176
|
+
## Personas Derived From Evidence
|
|
177
|
+
- <name> — goals; pains; evidence (files/docs/tables/releases); confidence
|
|
80
178
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- <current surfaces, data, commands, or workflows discovered — so duplicates are not re-proposed>
|
|
179
|
+
## What Already Exists
|
|
180
|
+
- <current surfaces, data, commands, workflows — so duplicates aren't re-proposed>
|
|
84
181
|
|
|
85
|
-
## Practical Ideas
|
|
86
|
-
### 1. <Idea name>
|
|
87
|
-
-
|
|
88
|
-
|
|
89
|
-
- Data/source path: <specific accessible source or scrape/API path>
|
|
90
|
-
- Practical slice: <smallest useful version>
|
|
91
|
-
- Empirical verification: <steps the agent can perform against the running software>
|
|
92
|
-
- Evidence: <screenshot, curl output, CLI output, DB row, generated file, etc.>
|
|
93
|
-
- Confidence: high|medium|low with reason
|
|
182
|
+
## Practical Ideas
|
|
183
|
+
### 1. <Idea name> (persona: <persona(s)>)
|
|
184
|
+
- Persona value · Existing fit · Data/source path · Practical slice · Empirical verification ·
|
|
185
|
+
Evidence · Confidence
|
|
94
186
|
|
|
95
|
-
## Discovery Spikes
|
|
96
|
-
- <ideas
|
|
187
|
+
## Discovery Spikes
|
|
188
|
+
- <ideas needing proof of data/access/verification — name the missing proof — tagged by persona>
|
|
97
189
|
|
|
98
|
-
## Rejected / Not Practical Yet
|
|
99
|
-
- <attractive ideas rejected
|
|
100
|
-
```
|
|
190
|
+
## Rejected / Not Practical Yet
|
|
191
|
+
- <attractive ideas rejected for missing data/access/legality/verification — name what's missing>
|
|
192
|
+
```
|
|
193
|
+
2. **PRDs Created** (the creation summary): for each selected idea — the created/reused PRD ref +
|
|
194
|
+
URL, its lifecycle role (`draft` or `ready`), its dedupe marker, and `created | reused`. List the
|
|
195
|
+
Practical Ideas that were **not** created this run and why (e.g. "below the `max_prds=1` cut").
|
|
101
196
|
|
|
102
|
-
Always include the **What Already Exists
|
|
197
|
+
Always include the **Personas**, **What Already Exists**, **Discovery Spikes**, and **Rejected**
|
|
198
|
+
sections (even if empty) so the user sees what was considered and filtered out.
|
|
103
199
|
|
|
104
200
|
## Out of scope (hard rules)
|
|
105
201
|
|
|
106
|
-
- **No
|
|
107
|
-
|
|
108
|
-
- **No
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
- **
|
|
113
|
-
|
|
202
|
+
- **No fabricated personas.** No evidence citation → no persona; generic roles banned without
|
|
203
|
+
evidence (Step 2).
|
|
204
|
+
- **No sign-in-only ideas** unless the host project already supports sign-in *and* credentials are
|
|
205
|
+
available. **No private-data assumptions.** **No manual-data-only** requirements unless the user
|
|
206
|
+
accepts manual curation. **No paid-API / non-scrapeable-source ideas** in the build-ready list —
|
|
207
|
+
demote with the blocker named.
|
|
208
|
+
- **Tests, lint, typecheck, and build are not the empirical verification plan** — they are
|
|
209
|
+
prerequisites; verification must observe user-facing behavior.
|
|
210
|
+
- **Do not create tracker tickets or mutate the host project's code.** PRD creation (via
|
|
211
|
+
`lisa:research`) is the only write this skill performs; ticket planning (`lisa:plan`) and
|
|
212
|
+
implementation (`lisa:implement`) are separate, user-invoked flows.
|
|
213
|
+
- **Do not write PRDs to the source directly** — always go through `lisa:research` →
|
|
214
|
+
`lisa:prd-source-write` so the source stays switchable.
|
|
215
|
+
- **Do not add a new verification/browser-automation framework** when one already exists — reuse it.
|
|
216
|
+
- **Do not overfit to a source example.** Keep the workflow project-agnostic.
|
|
114
217
|
|
|
115
218
|
## Handing off
|
|
116
219
|
|
|
117
|
-
|
|
220
|
+
The created PRDs flow straight into the lifecycle:
|
|
118
221
|
|
|
119
|
-
-
|
|
120
|
-
-
|
|
121
|
-
|
|
122
|
-
- Lock in the verification so it never regresses → `/lisa:codify-verification`
|
|
222
|
+
- A `draft` PRD → a human reviews it, then promotes it to `ready` (or re-run with `prd_ready=true`).
|
|
223
|
+
- A `prd-ready` PRD → `/lisa:intake` (PRD side) auto-claims it → `/lisa:plan` decomposes it →
|
|
224
|
+
`/lisa:implement` builds each item → `/lisa:codify-verification` locks in the verification.
|
|
123
225
|
|
|
124
226
|
## Example outputs
|
|
125
227
|
|
|
126
|
-
Use the markdown examples in `examples/` as shape references
|
|
228
|
+
Use the markdown examples in `examples/` as shape references for the idea report:
|
|
127
229
|
|
|
128
|
-
- `host-project-only.md`
|
|
129
|
-
- `public-external-inspiration.md`
|
|
130
|
-
|
|
131
|
-
- `
|
|
230
|
+
- `host-project-only.md` — ideas grounded only in the current repository.
|
|
231
|
+
- `public-external-inspiration.md` — public, no-login external sources as inspiration, not hidden
|
|
232
|
+
requirements.
|
|
233
|
+
- `unavailable-data-rejection.md` — naming missing private/paid/unavailable sources when demoting.
|
|
234
|
+
- `evidence-card-format.md` — the required evidence fields every Practical Idea card must carry.
|