Lisa Project Review
This skill compares Lisa's source templates against a target project that has Lisa applied, identifying what the project has changed from Lisa and offering to adopt those improvements back into Lisa.
This is the inverse of /lisa-review-implementation:
- •lisa-review-implementation: Run FROM project → "What did I change from Lisa?"
- •lisa-review-project: Run FROM Lisa → "What has this project changed?"
Prerequisites
This skill must be run FROM the Lisa repository directory. The target project must have Lisa already applied (must have a .lisa-manifest file).
Instructions
Step 1: Validate Lisa Directory
Confirm running from Lisa by checking for src/core/lisa.ts.
If not in Lisa, error with:
This command must be run FROM the Lisa repository. Current directory does not contain src/core/lisa.ts. Usage: /lisa-review-project /path/to/target-project
Step 2: Validate Arguments
If no project path provided, ask the user:
Which project would you like to review? Path: [user provides path]
Validate the project path:
- •Check the path exists and is a directory
- •Check
.lisa-manifestexists in the project root - •If missing, error with:
Project does not have Lisa applied.
Expected to find: {project-path}/.lisa-manifest
Did you apply Lisa to this project? Run: lisa {project-path}
Step 3: Detect Project Types
Parse the project's package.json and filesystem to detect its type(s):
- •npm-package:
package.jsonwithout"private": trueAND hasmain,bin,exports, orfiles - •cdk:
cdk.jsonexists ORaws-cdkin package.json dependencies - •nestjs:
nest-cli.jsonexists OR@nestjsin package.json dependencies - •expo:
app.jsonexists OReas.jsonexists ORexpoin package.json dependencies - •typescript:
tsconfig.jsonexists ORtypescriptin package.json dependencies
Build the type hierarchy. Example: if expo detected, types = [all, typescript, expo]
If no types detected, use [all].
Step 4: Read Manifest and Map Source Files
Read the project's .lisa-manifest file line by line:
For each line:
- •Skip lines starting with
#(comments) and empty lines - •Parse format:
strategy|relative/path/to/file - •Extract
strategyandrelativePath - •For each strategy type, find the corresponding source in Lisa
Lookup Order for Source Files:
For each detected type in reverse hierarchy order (most specific first):
- •Check
{type}/copy-overwrite/{relativePath}- if found, record it - •Check
{type}/copy-contents/{relativePath}- if found, record it - •Continue to next type
Example for an Expo project with manifest entry copy-overwrite|.github/workflows/ci.yml:
- •Check
expo/copy-overwrite/.github/workflows/ci.yml- found, use it - •(don't check further)
If no source found, record as "source-not-found".
Skip these strategies (they're intentionally customized):
- •
create-only- meant to be customized by project - •
merge- already merged into project's file
Step 5: Compare Files
For files with source found and strategy is copy-overwrite or copy-contents:
- •Read both the Lisa source and project version
- •If identical, mark as "in-sync"
- •If different:
- •Generate diff using:
diff -u "{lisa-source}" "{project-file}" || true - •Mark as "drifted"
- •Store diff for report
- •Generate diff using:
Step 6: Analyze and Categorize
For each drifted file, provide brief analysis:
- •Improvement: Change that makes the file better (better CI config, cleaner code, etc.)
- •Customization: Change specific to this project (environment config, custom paths, etc.)
- •Bug fix: Fixing an issue in Lisa's template
- •Divergence: Change that's neither an improvement nor needed customization (concerning)
Step 7: Generate Report
Create a markdown report:
# Lisa Project Review
**Lisa Directory:** {lisa-path}
**Target Project:** {project-path}
**Project Types:** {types}
**Project Name:** {from package.json name or basename}
**Generated:** {current date/time ISO}
## Summary
- **Total managed files:** X
- **In sync:** X
- **Drifted:** X
- **Intentionally customized (create-only/merge):** X
- **Source not found:** X
## Drifted Files
### {relative/path/to/file}
**Source:** {type}/copy-overwrite/{path}
**Strategy:** copy-overwrite
**Category:** Improvement
<details>
<summary>View diff (Lisa <- Project)</summary>
\`\`\`diff
{diff output}
\`\`\`
</details>
**Analysis:** {Brief analysis of the change and why it matters}
---
[Repeat for each drifted file]
## Files Not Found in Lisa
These files are in the manifest but their source templates couldn't be located in Lisa:
- {file1}
- {file2}
This might mean:
- The file was manually added after Lisa was applied
- A Lisa template was removed in an update
- The file is project-specific
## Intentionally Customized
These files use `create-only` or `merge` strategies and are meant to be customized:
- {file1}
- {file2}
## In Sync Files
<details>
<summary>X files match Lisa templates exactly</summary>
- {file1}
- {file2}
</details>
Step 8: Offer to Adopt Changes
After the report, present the findings:
I found X files that have drifted from Lisa's templates. [List files with categories] Would you like to: 1. Review specific drifted files in detail 2. Adopt improvements from this project back into Lisa 3. Just view the full report 4. Done - no changes
If user wants to adopt improvements:
- •Ask which files to adopt (let them select multiple)
- •For each selected file:
- •Determine the target path in Lisa (preserve type directory)
- •Confirm: "Copy project version to
{type}/copy-overwrite/{path}?" - •If confirmed, use Write tool to copy project file to Lisa
- •Report success
Important Notes
- •Never auto-adopt without confirmation - always ask the user first
- •Preserve the most specific type directory - if a file exists in both
typescript/andall/, adopt to where it currently exists in Lisa - •Handle missing files gracefully - if project file is missing but in manifest, note it (possible deletion or git-ignored)
- •Compare carefully - some differences may be platform-specific (line endings, env vars) and should NOT be adopted
- •The diff shows "Lisa <- Project" (what project changed FROM Lisa)