@codyswann/lisa 1.18.0 → 1.19.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 (53) hide show
  1. package/README.md +52 -1158
  2. package/all/copy-overwrite/.claude/commands/plan/add-test-coverage.md +8 -0
  3. package/all/copy-overwrite/.claude/commands/plan/fix-linter-error.md +8 -0
  4. package/all/copy-overwrite/.claude/commands/plan/local-code-review.md +6 -0
  5. package/all/copy-overwrite/.claude/commands/plan/lower-code-complexity.md +6 -0
  6. package/all/copy-overwrite/.claude/commands/plan/reduce-max-lines-per-function.md +8 -0
  7. package/all/copy-overwrite/.claude/commands/plan/reduce-max-lines.md +8 -0
  8. package/all/copy-overwrite/.claude/commands/project/add-test-coverage.md +4 -1
  9. package/all/copy-overwrite/.claude/commands/project/archive.md +4 -0
  10. package/all/copy-overwrite/.claude/commands/project/bootstrap.md +4 -0
  11. package/all/copy-overwrite/.claude/commands/project/debrief.md +4 -0
  12. package/all/copy-overwrite/.claude/commands/project/document.md +4 -0
  13. package/all/copy-overwrite/.claude/commands/project/execute.md +4 -0
  14. package/all/copy-overwrite/.claude/commands/project/fix-linter-error.md +4 -1
  15. package/all/copy-overwrite/.claude/commands/project/implement.md +4 -0
  16. package/all/copy-overwrite/.claude/commands/project/local-code-review.md +3 -0
  17. package/all/copy-overwrite/.claude/commands/project/lower-code-complexity.md +3 -0
  18. package/all/copy-overwrite/.claude/commands/project/plan.md +4 -0
  19. package/all/copy-overwrite/.claude/commands/project/reduce-max-lines-per-function.md +4 -1
  20. package/all/copy-overwrite/.claude/commands/project/reduce-max-lines.md +4 -1
  21. package/all/copy-overwrite/.claude/commands/project/research.md +4 -0
  22. package/all/copy-overwrite/.claude/commands/project/review.md +4 -0
  23. package/all/copy-overwrite/.claude/commands/project/setup.md +4 -0
  24. package/all/copy-overwrite/.claude/commands/project/verify.md +4 -0
  25. package/all/copy-overwrite/.claude/skills/plan-add-test-coverage/SKILL.md +54 -0
  26. package/all/copy-overwrite/.claude/skills/plan-fix-linter-error/SKILL.md +63 -0
  27. package/all/copy-overwrite/.claude/skills/plan-local-code-review/SKILL.md +88 -0
  28. package/all/copy-overwrite/.claude/skills/plan-lower-code-complexity/SKILL.md +58 -0
  29. package/all/copy-overwrite/.claude/skills/plan-reduce-max-lines/SKILL.md +59 -0
  30. package/all/copy-overwrite/.claude/skills/plan-reduce-max-lines-per-function/SKILL.md +62 -0
  31. package/all/copy-overwrite/.claude/skills/project-add-test-coverage/SKILL.md +4 -1
  32. package/all/copy-overwrite/.claude/skills/project-archive/SKILL.md +4 -0
  33. package/all/copy-overwrite/.claude/skills/project-bootstrap/SKILL.md +4 -0
  34. package/all/copy-overwrite/.claude/skills/project-debrief/SKILL.md +4 -0
  35. package/all/copy-overwrite/.claude/skills/project-document/SKILL.md +4 -0
  36. package/all/copy-overwrite/.claude/skills/project-execute/SKILL.md +4 -0
  37. package/all/copy-overwrite/.claude/skills/project-fix-linter-error/SKILL.md +4 -1
  38. package/all/copy-overwrite/.claude/skills/project-implement/SKILL.md +4 -0
  39. package/all/copy-overwrite/.claude/skills/project-local-code-review/SKILL.md +3 -0
  40. package/all/copy-overwrite/.claude/skills/project-lower-code-complexity/SKILL.md +3 -0
  41. package/all/copy-overwrite/.claude/skills/project-plan/SKILL.md +4 -0
  42. package/all/copy-overwrite/.claude/skills/project-reduce-max-lines/SKILL.md +4 -1
  43. package/all/copy-overwrite/.claude/skills/project-reduce-max-lines-per-function/SKILL.md +4 -1
  44. package/all/copy-overwrite/.claude/skills/project-research/SKILL.md +4 -0
  45. package/all/copy-overwrite/.claude/skills/project-review/SKILL.md +4 -0
  46. package/all/copy-overwrite/.claude/skills/project-setup/SKILL.md +4 -0
  47. package/all/copy-overwrite/.claude/skills/project-verify/SKILL.md +4 -0
  48. package/all/copy-overwrite/.claude/skills/pull-request-review/SKILL.md +3 -7
  49. package/all/copy-overwrite/README.md +69 -0
  50. package/cdk/copy-overwrite/README.md +77 -0
  51. package/expo/copy-overwrite/README.md +85 -0
  52. package/nestjs/copy-overwrite/README.md +77 -0
  53. package/package.json +1 -1
package/README.md CHANGED
@@ -1,1215 +1,109 @@
1
1
  # Lisa
2
2
 
3
- Lisa is a **Claude Code governance framework** that ensures Claude produces high-quality, consistent code through multiple layers of guardrails, guidance, and automated enforcement.
3
+ A Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects.
4
4
 
5
- > **New to Lisa?** Start with the **[Architecture Overview](OVERVIEW.md)** for a visual guide to how Lisa works, including the developer workflow diagram and multi-layer governance architecture.
5
+ Developers write specs and answer questions. Agents implement, test, verify, question, and document.
6
6
 
7
- ## Why Lisa Exists
7
+ ## About This Project
8
8
 
9
- Claude Code is powerful, but without guardrails it can:
10
- - Produce inconsistent code styles across sessions
11
- - Skip tests or quality checks when not reminded
12
- - Over-engineer solutions or create unnecessary abstractions
13
- - Mutate data instead of using immutable patterns
14
- - Leave deprecated code instead of cleanly deleting it
15
-
16
- Lisa solves this by applying a comprehensive governance system that guides Claude's behavior at every step.
17
-
18
- **The key insight:** Not every developer needs to be an AI expert. Platform teams with deep AI knowledge can encode best practices into Lisa, and implementation teams get the benefits automatically through simple commands.
19
-
20
- ## How It Works
21
-
22
- Lisa applies multiple layers of quality control to your project:
23
-
24
- | Layer | Purpose | Examples |
25
- |-------|---------|----------|
26
- | **CLAUDE.md** | Direct behavioral rules | "Never skip tests", "Always use immutable patterns" |
27
- | **Skills** | Teach patterns & philosophy | Immutability, TDD, YAGNI/SOLID/DRY/KISS |
28
- | **Hooks** | Auto-enforcement on every edit | Format and lint after Write/Edit operations |
29
- | **Slash Commands** | Guided workflows | `/project:implement`, `/project:review`, `/git:commit` |
30
- | **Custom ESLint Plugins** | Enforce code structure | Statement ordering, component structure |
31
- | **Thresholds** | Configurable limits | Max complexity, max file length |
32
- | **Git Hooks** | Pre-commit quality gates | Husky + lint-staged + commitlint |
33
- | **Agents** | Specialized sub-agents | Codebase analysis, pattern finding |
34
-
35
- These layers work together. When Claude writes code:
36
- 1. **CLAUDE.md** tells it what patterns to follow
37
- 2. **Skills** teach it the philosophy behind those patterns
38
- 3. **Hooks** automatically format and lint the code
39
- 4. **ESLint plugins** catch structural violations
40
- 5. **Git hooks** prevent commits that fail quality checks
41
-
42
- ## Team & Organization Usage
43
-
44
- Lisa is designed for a **two-tier organizational model** that separates AI expertise from day-to-day development:
45
-
46
- ```
47
- ┌─────────────────────────────────────────────────────────────┐
48
- │ PLATFORM TEAM │
49
- │ │
50
- │ • Deep AI/LLM expertise (prompting, context engineering) │
51
- │ • Domain knowledge of coding standards & best practices │
52
- │ • Maintains and iterates on Lisa configurations │
53
- │ • Writes skills, hooks, ESLint rules, slash commands │
54
- │ • Tests guardrails against real-world edge cases │
55
- │ │
56
- │ │ │
57
- │ ▼ │
58
- │ Lisa Repository │
59
- │ │ │
60
- │ ▼ │
61
- ├─────────────────────────────────────────────────────────────┤
62
- │ IMPLEMENTATION TEAMS │
63
- │ │
64
- │ • Focus on building end-user software │
65
- │ • Run `npx @codyswann/lisa` to bootstrap projects │
66
- │ • Use simple commands like `/project:implement` │
67
- │ • Don't need deep AI expertise │
68
- │ • Automatically get guardrails & quality enforcement │
69
- │ │
70
- └─────────────────────────────────────────────────────────────┘
71
- ```
72
-
73
- ### Why This Model Works
74
-
75
- **For Platform Teams:**
76
- - Centralize AI governance expertise in one place
77
- - Iterate on prompts, skills, and guardrails based on real feedback
78
- - A/B test different approaches across the organization
79
- - Push improvements to all teams instantly via Lisa updates
80
-
81
- **For Implementation Teams:**
82
- - No need to learn prompt engineering or context engineering
83
- - Simple commands produce high-quality, consistent code
84
- - Guardrails prevent common mistakes automatically
85
- - Focus on business logic, not AI wrangling
86
-
87
- ### How Implementation Teams Work
88
-
89
- Once Lisa is applied to a project, developers use a simple workflow:
90
-
91
- **Simple Requests**
92
-
93
- For straightforward tasks, just describe what you need:
94
-
95
- ```
96
- Developer: "Fix the typo in the login error message"
97
-
98
- Claude: [Immediately fixes the typo with proper verification]
99
- ```
100
-
101
- **Complex Work: The Full Workflow**
102
-
103
- For larger features or complex changes, use the spec-driven workflow:
104
-
105
- ```bash
106
- # 1. Create a spec file describing what you want
107
- # (or let Claude create it from your prompt)
108
- echo "Add user authentication with OAuth" > specs/add-auth.md
109
-
110
- # 2. Bootstrap: research, analyze, identify gaps
111
- /project:bootstrap @specs/add-auth.md
112
-
113
- # 3. Execute: plan tasks, implement with TDD, verify completion
114
- /project:execute @projects/add-auth
115
- ```
116
-
117
- That's it. Behind the scenes, Lisa ensures:
118
- - Comprehensive codebase and web research
119
- - Knowledge gap detection (stops if questions need answering)
120
- - Task breakdown and TDD implementation
121
- - Verification that all tasks completed
122
- - New patterns captured in `.claude/rules/PROJECT_RULES.md`
123
-
124
- ### Platform Team Iteration Example
125
-
126
- 1. **Platform Team** discovers Claude sometimes creates overly complex functions
127
- 2. **Platform Team** adds a `cognitiveComplexity: 10` threshold to ESLint config
128
- 3. **Platform Team** writes a skill teaching Claude to decompose complex logic
129
- 4. **Platform Team** pushes update to Lisa repository
130
- 5. **Implementation Teams** run `lisa` on their projects (or it happens via CI)
131
- 6. **Implementation Teams** now automatically get simpler, more maintainable code
132
-
133
- ### Upstreaming Improvements
134
-
135
- When implementation teams make improvements to Lisa-managed files (better CI configs, new hooks, etc.), the `/lisa:review-implementation` command helps upstream those changes back to Lisa:
136
-
137
- ```bash
138
- # Start Claude Code with access to both your project and Lisa
139
- claude --add-dir ~/lisa
140
-
141
- # Run the review command
142
- /lisa:review-implementation
143
- ```
144
-
145
- This command:
146
- 1. Compares your project's Lisa-managed files against Lisa's source templates
147
- 2. Generates a diff report showing what has changed
148
- 3. Offers to copy improvements back to Lisa for all teams to benefit
149
-
150
- ### Forking for Your Organization
151
-
152
- ```bash
153
- # Fork Lisa for your organization
154
- gh repo fork CodySwannGT/lisa --org your-org --clone
155
-
156
- # Customize configurations
157
- cd lisa
158
- # Edit skills, hooks, CLAUDE.md, ESLint rules, etc.
159
-
160
- # Push to your org's fork
161
- git push origin main
162
- ```
163
-
164
- Implementation teams then install from your organization's fork:
165
-
166
- ```bash
167
- # Install globally from your fork
168
- npm install -g github:your-org/lisa
169
-
170
- # Or use npx with your fork
171
- npx github:your-org/lisa /path/to/project
172
- ```
9
+ > Ask Claude: "What is the purpose of Lisa and how does it work?"
173
10
 
174
11
  ## Installation
175
12
 
176
- Install Lisa globally via npm:
177
-
178
13
  ```bash
14
+ # Install via npm
179
15
  npm install -g @codyswann/lisa
180
- ```
181
16
 
182
- Or use npx to run without installing:
183
-
184
- ```bash
17
+ # Or use npx (no install required)
185
18
  npx @codyswann/lisa /path/to/project
186
19
  ```
187
20
 
188
- ### Requirements
189
-
190
- - **Node.js 18+** (workflows default to 22.x)
191
- - **npm**, **bun**, or **pnpm**
192
-
193
- ### Optional Tools
194
-
195
- These tools enhance Lisa's capabilities but are not required:
21
+ ## How It Works
196
22
 
197
- - **[CodeRabbit CLI](https://coderabbit.ai/)** - AI-powered code review tool used by `/project:review`
23
+ Lisa applies multiple layers of quality control to Claude Code projects:
198
24
 
199
- **Installation (choose one):**
200
- ```bash
201
- # Recommended
202
- curl -fsSL https://cli.coderabbit.ai/install.sh | sh
203
- coderabbit --version # Verify installation
25
+ | Layer | Purpose |
26
+ |-------|---------|
27
+ | **CLAUDE.md** | Direct behavioral rules for Claude |
28
+ | **Skills** | Teach coding philosophy and patterns |
29
+ | **Hooks** | Auto-format and lint on every edit |
30
+ | **Slash Commands** | Guided workflows (`/plan:add-test-coverage`, `/git:commit`) |
31
+ | **ESLint Plugins** | Enforce code structure and ordering |
32
+ | **Git Hooks** | Pre-commit quality gates via Husky |
204
33
 
205
- # Homebrew (macOS/Linux)
206
- brew install coderabbit
34
+ ## Step 1: Install Claude Code
207
35
 
208
- # NPX (no install needed)
209
- npx coderabbitai-mcp@latest
210
- ```
36
+ ```bash
37
+ brew install claude-code
38
+ # Or: npm install -g @anthropic-ai/claude-code
39
+ ```
211
40
 
212
- If not installed, the CodeRabbit review step in `/project:review` will be skipped silently.
41
+ ## Step 2: Set Up This Project
213
42
 
214
- ## Usage
43
+ > Ask Claude: "I just cloned this repo. Walk me through the full setup including installing dependencies and building the project."
215
44
 
216
- Run Lisa against any project directory:
45
+ ## Step 3: Apply Lisa to a Project
217
46
 
218
47
  ```bash
219
48
  lisa /path/to/your-project
220
49
 
221
50
  # Or from within your project
222
- lisa .
223
-
224
- # Or with npx (no install required)
225
51
  npx @codyswann/lisa .
226
52
  ```
227
53
 
228
- ### Options
229
-
230
- | Option | Description |
231
- |--------|-------------|
232
- | `-n, --dry-run` | Show what would be done without making changes |
233
- | `-y, --yes` | Non-interactive mode (auto-accept defaults, overwrite on conflict) |
234
- | `-v, --validate` | Validate project compatibility without applying changes |
235
- | `-u, --uninstall` | Remove Lisa-managed files from the project |
236
- | `-h, --help` | Show help message |
237
-
238
- ### Dry Run
239
-
240
- Preview changes before applying them:
241
-
242
- ```bash
243
- lisa --dry-run /path/to/your-project
244
- ```
245
-
246
- ### CI/CD Usage
247
-
248
- For automated pipelines, use non-interactive mode:
249
-
250
- ```bash
251
- lisa --yes /path/to/project
252
-
253
- # Or with npx
254
- npx @codyswann/lisa --yes /path/to/project
255
- ```
256
-
257
- ### Validate Mode
258
-
259
- Check project compatibility without making changes:
260
-
261
- ```bash
262
- lisa --validate /path/to/project
263
- ```
264
-
265
- ### Uninstall
266
-
267
- Remove Lisa-managed files from a project:
268
-
269
- ```bash
270
- lisa --uninstall /path/to/project
271
-
272
- # Preview what would be removed
273
- lisa --dry-run --uninstall /path/to/project
274
- ```
275
-
276
- Note: Files applied with `copy-contents` or `merge` strategies require manual cleanup as they modify existing content.
277
-
278
- ### GitHub Rulesets
279
-
280
- Lisa can also apply GitHub repository rulesets via a separate script. This enforces branch protection rules like requiring PRs, status checks, and preventing force pushes.
281
-
282
- ```bash
283
- # Apply rulesets to a project's GitHub repo
284
- ~/lisa/lisa-github-rulesets.sh /path/to/project
285
-
286
- # Preview what would be applied
287
- ~/lisa/lisa-github-rulesets.sh --dry-run /path/to/project
288
-
289
- # Non-interactive mode
290
- ~/lisa/lisa-github-rulesets.sh --yes /path/to/project
291
- ```
292
-
293
- **Requirements:**
294
- - `gh` CLI installed and authenticated (`gh auth login`)
295
- - Admin permissions on the repository
296
- - `jq` installed
297
-
298
- **How it works:**
299
-
300
- 1. Detects project types (same as main Lisa script)
301
- 2. Collects ruleset templates from `github-rulesets/` directories:
302
- - `all/github-rulesets/` → applied to all projects
303
- - `typescript/github-rulesets/` → TypeScript projects
304
- - `expo/github-rulesets/` → Expo projects (inherits typescript)
305
- - etc.
306
- 3. Creates or updates rulesets via the GitHub API
307
-
308
- **Template format:**
309
-
310
- Place JSON files in `{type}/github-rulesets/`. The script strips read-only fields (`id`, `source`, `source_type`) before applying:
311
-
312
- ```json
313
- {
314
- "name": "Protect Main Branch",
315
- "target": "branch",
316
- "enforcement": "active",
317
- "conditions": {
318
- "ref_name": {
319
- "include": ["~DEFAULT_BRANCH"],
320
- "exclude": []
321
- }
322
- },
323
- "rules": [
324
- { "type": "deletion" },
325
- { "type": "non_fast_forward" },
326
- {
327
- "type": "pull_request",
328
- "parameters": {
329
- "required_approving_review_count": 1,
330
- "dismiss_stale_reviews_on_push": true,
331
- "require_code_owner_review": false,
332
- "require_last_push_approval": true,
333
- "required_review_thread_resolution": true
334
- }
335
- }
336
- ]
337
- }
338
- ```
339
-
340
- You can export an existing ruleset from GitHub's UI or API and place it in the appropriate directory. The script handles idempotency—if a ruleset with the same name exists, it updates rather than creates.
341
-
342
- ## What Lisa Applies
343
-
344
- ### CLAUDE.md - Behavioral Rules
345
-
346
- Direct instructions for Claude Code:
347
-
348
- ```markdown
349
- Always invoke /coding-philosophy skill to enforce immutable patterns
350
- Always make atomic commits with clear conventional messages
351
- Never skip or disable any tests or quality checks
352
- Never use --no-verify with git commands
353
- Never create TODOs or placeholders
354
- ```
355
-
356
- ### Skills - Teaching Philosophy
357
-
358
- Skills teach Claude the "why" behind coding decisions:
359
-
360
- - **coding-philosophy** - Immutability, function structure, TDD, clean deletion
361
- - **jsdoc-best-practices** - Documentation that explains "why" not "what"
362
- - **container-view-pattern** - Component architecture for React/Expo
363
-
364
- ### Hooks - Automated Enforcement
365
-
366
- Hooks run automatically during Claude Code sessions:
367
-
368
- | Hook | Trigger | Action |
369
- |------|---------|--------|
370
- | `format-on-edit.sh` | After Write/Edit | Run Prettier on changed files |
371
- | `lint-on-edit.sh` | After Write/Edit | Run ESLint on changed files |
372
- | `install_pkgs.sh` | Session start | Ensure dependencies installed |
373
- | `notify-ntfy.sh` | Permission prompt/Stop | Send notifications |
374
-
375
- **Async Workflow:** Lisa includes built-in [ntfy.sh](https://ntfy.sh) integration for push notifications. This enables a powerful async workflow with Claude Code Web - fire off tasks and get notified when they complete or need attention. See [Claude Code Web + Notifications](docs/workflows/claude-code-web-notifications.md) for setup instructions.
376
-
377
- ### Slash Commands - Guided Workflows
378
-
379
- Pre-built workflows for common tasks:
380
-
381
- | Command | Purpose |
382
- |---------|---------|
383
- | `/project:plan` | Create implementation plan |
384
- | `/project:implement` | Execute all planned tasks |
385
- | `/project:review` | Run code review |
386
- | `/project:verify` | Run all quality checks |
387
- | `/project:reduce-max-lines` | Reduce max file lines threshold and fix violations |
388
- | `/project:reduce-max-lines-per-function` | Reduce max lines per function threshold and fix violations |
389
- | `/git:commit` | Create conventional commit |
390
- | `/git:submit-pr` | Create pull request |
391
- | `/lisa:review-implementation` | Compare project files against Lisa templates, upstream changes |
392
-
393
- ### Custom ESLint Plugins
394
-
395
- Lisa includes custom ESLint plugins that enforce code structure:
396
-
397
- **eslint-plugin-code-organization**
398
- - `enforce-statement-order` - Definitions → Side effects → Return
399
-
400
- **eslint-plugin-component-structure** (Expo)
401
- - `single-component-per-file` - One component per file
402
- - `require-memo-in-view` - Memoization in view components
403
-
404
- ### Thresholds
405
-
406
- Configurable limits in `eslint.thresholds.config.json`:
407
-
408
- ```json
409
- {
410
- "cognitiveComplexity": 10,
411
- "maxLines": 300,
412
- "maxLinesPerFunction": 75
413
- }
414
- ```
415
-
416
- ### File Backups
54
+ > Ask Claude: "How do I apply Lisa to a project? Walk me through using the CLI on an existing codebase."
417
55
 
418
- When Lisa overwrites files that have local modifications (conflicts), it automatically creates timestamped backup copies in the `.lisabak/` directory. This allows you to review or recover your original files if needed.
56
+ ## Step 4: Work on a Feature
419
57
 
420
- **Backup naming format:** `<YYYY-MM-DD>-<filename>.<extension>.lisa.bak`
58
+ > Ask Claude: "I have a feature to implement: [describe feature]. Research the codebase and create a plan."
421
59
 
422
- **Example:**
423
- ```
424
- .lisabak/
425
- ├── 2026-01-19-eslint.config.mjs.lisa.bak
426
- ├── 2026-01-19-package.json.lisa.bak
427
- └── 2026-01-19-.prettierrc.json.lisa.bak
428
- ```
429
-
430
- **Key behaviors:**
431
- - Backups are created only when files are overwritten (not on first creation or when identical)
432
- - Multiple backups of the same file on the same day are all preserved
433
- - The `.lisabak/` directory is automatically added to `.gitignore` (backups are local-only)
434
- - Backups are meant for manual review; the `.lisabak/` directory can be safely deleted after reviewing
435
-
436
- ## Project Type Detection
60
+ Or use utility commands:
437
61
 
438
- Lisa auto-detects project types and applies appropriate configurations:
62
+ - `/plan:add-test-coverage` - Increase test coverage to a threshold
63
+ - `/plan:fix-linter-error` - Fix ESLint rule violations
64
+ - `/plan:local-code-review` - Review local branch changes
65
+ - `/plan:lower-code-complexity` - Reduce cognitive complexity
66
+ - `/plan:reduce-max-lines` - Reduce max file lines threshold
67
+ - `/plan:reduce-max-lines-per-function` - Reduce max function lines
439
68
 
440
- | Type | Detection |
441
- |------|-----------|
442
- | TypeScript | `tsconfig.json` or `"typescript"` in package.json |
443
- | npm-package | Not `"private": true` and has `main`, `bin`, `exports`, or `files` |
444
- | Expo | `app.json`, `eas.json`, or `"expo"` in package.json |
445
- | NestJS | `nest-cli.json` or `"@nestjs"` in package.json |
446
- | CDK | `cdk.json` or `"aws-cdk"` in package.json |
69
+ ## Common Tasks
447
70
 
448
- ### Cascading Inheritance
71
+ ### Code Review
449
72
 
450
- Types inherit from their parents:
73
+ > Ask Claude: "Review the changes on this branch and suggest improvements."
451
74
 
452
- ```
453
- all/ ← Applied to every project
454
- └── typescript/ ← TypeScript-specific
455
- ├── npm-package/ ← Publishable npm packages (includes typescript)
456
- ├── expo/ ← Expo (includes typescript)
457
- ├── nestjs/ ← NestJS (includes typescript)
458
- └── cdk/ ← CDK (includes typescript)
459
- ```
75
+ ### Submit a PR
460
76
 
461
- An Expo project receives configs from: `all/` `typescript/` `expo/`
77
+ > Ask Claude: "Commit my changes and open a pull request."
462
78
 
463
- An npm package receives configs from: `all/` → `typescript/` → `npm-package/`
79
+ ### Fix Lint Errors
464
80
 
465
- ### Why Stack-Specific Rules Matter
81
+ > Ask Claude: "Run the linter and fix all errors."
466
82
 
467
- **Generic AI rules don't work.** Each technology stack has its own:
468
- - Architectural patterns (NestJS modules vs. Expo screens vs. CDK constructs)
469
- - Testing approaches (Jest + Testing Library vs. Supertest vs. CDK assertions)
470
- - File organization conventions
471
- - Performance pitfalls
472
- - Security considerations
83
+ ### Add Test Coverage
473
84
 
474
- When Claude writes code without stack-specific guidance, it produces "generic" solutions that miss the idioms and best practices of your stack. For example:
85
+ > Ask Claude: "Increase test coverage for the files I changed."
475
86
 
476
- | Stack | Generic AI Output | With Lisa Stack Rules |
477
- |-------|-------------------|----------------------|
478
- | **Expo** | Inline styles, direct RN imports | Uses design system, container/view pattern |
479
- | **NestJS** | Mixed concerns in controllers | Proper service/repository separation |
480
- | **CDK** | Hardcoded values, no constructs | Parameterized, reusable L3 constructs |
87
+ ### Run Tests
481
88
 
482
- The more specific the guidance, the better the output. That's why Lisa is structured around project types rather than one-size-fits-all rules.
89
+ > Ask Claude: "Run the test suite and fix any failures."
483
90
 
484
- ### npm Package Publishing
91
+ ### Contributing
485
92
 
486
- Projects detected as `npm-package` automatically receive a GitHub Actions workflow for publishing to npm using **OIDC trusted publishing**. This workflow:
93
+ > Ask Claude: "I want to add a new stack type to Lisa. Walk me through the process."
487
94
 
488
- 1. Triggers on push to `main`
489
- 2. Runs semantic versioning via `release.yml`
490
- 3. Publishes to npm with `npm publish --access public --provenance`
95
+ ## Project Standards
491
96
 
492
- **Step 1: First-Time Publish (Manual)**
493
-
494
- OIDC trusted publishing requires the package to exist on npm first. For new packages, do a manual initial publish:
495
-
496
- ```bash
497
- # Login to npm (opens browser for authentication)
498
- npm login
499
-
500
- # Verify you're logged in
501
- npm whoami
502
-
503
- # Build the package
504
- npm run build
505
-
506
- # Publish for the first time
507
- npm publish --access public
508
- ```
509
-
510
- **Step 2: Configure Trusted Publisher on npm**
511
-
512
- After the first publish, configure OIDC for automated future releases:
513
-
514
- 1. Go to [npmjs.com](https://www.npmjs.com/) and navigate to your package
515
- 2. Click **Settings** → **Trusted Publishers**
516
- 3. Click **Add GitHub Actions**
517
- 4. Fill in the required fields:
518
- - **Organization/User**: Your GitHub username or org (e.g., `CodySwannGT`)
519
- - **Repository**: Your repo name (e.g., `lisa`)
520
- - **Workflow filename**: `publish.yml` (must match exactly, including `.yml`)
521
- - **Environment**: Leave blank unless using GitHub environments
522
- 5. Click **Save**
523
-
524
- **Step 3: Future Releases (Automatic)**
525
-
526
- Once configured, all future releases are automatic:
527
- - Push to `main` triggers the workflow
528
- - Semantic versioning determines the version bump
529
- - OIDC authenticates without tokens
530
- - Package publishes with provenance attestation
531
-
532
- **Benefits of OIDC Trusted Publishing:**
533
-
534
- - No tokens to manage, rotate, or risk leaking
535
- - Automatic provenance attestations for supply chain security
536
- - Short-lived, workflow-specific credentials
537
- - No 90-day expiration limits to worry about
538
-
539
- **Requirements:**
540
-
541
- - npm CLI 11.5+ (workflow automatically installs latest)
542
- - Cannot use self-hosted GitHub runners (not yet supported by npm)
543
-
544
- **Workflow Configuration:**
545
-
546
- The `publish-to-npm.yml` workflow accepts configurable inputs:
547
-
548
- | Input | Default | Description |
549
- |-------|---------|-------------|
550
- | `node_version` | `20.x` | Node.js version to use |
551
- | `package_manager` | `npm` | Package manager (`npm`, `yarn`, or `bun`) |
552
-
553
- Example with custom configuration:
554
-
555
- ```yaml
556
- publish:
557
- uses: ./.github/workflows/publish-to-npm.yml
558
- needs: [release]
559
- with:
560
- tag: ${{ needs.release.outputs.tag }}
561
- version: ${{ needs.release.outputs.version }}
562
- node_version: '22.x'
563
- package_manager: 'bun'
564
- ```
565
-
566
- ### Extending Lisa for Other Stacks
567
-
568
- Lisa currently supports TypeScript, npm-package, Expo, NestJS, and CDK—but the architecture is designed for extension. **We're calling on the community to contribute stack-specific configurations.**
569
-
570
- **Stacks that would benefit from Lisa extensions:**
571
-
572
- | Stack | Potential Rules |
573
- |-------|-----------------|
574
- | **Next.js** | App Router patterns, Server Components vs. Client, caching strategies |
575
- | **React Native (non-Expo)** | Native module patterns, platform-specific code |
576
- | **Django** | Model/View/Template separation, ORM patterns, admin customization |
577
- | **FastAPI** | Dependency injection, Pydantic models, async patterns |
578
- | **Spring Boot** | Bean lifecycle, annotation patterns, JPA repositories |
579
- | **Laravel** | Eloquent patterns, Blade templates, queue workers |
580
- | **Rails** | Convention over configuration, concerns, ActiveRecord |
581
- | **Go (Gin/Echo)** | Error handling, middleware patterns, struct design |
582
- | **Rust (Axum/Actix)** | Ownership patterns, error types, async runtime |
583
- | **Flutter** | Widget composition, BLoC pattern, platform channels |
584
- | **Vue/Nuxt** | Composition API, Pinia stores, auto-imports |
585
- | **Svelte/SvelteKit** | Reactive statements, load functions, form actions |
586
- | **Terraform** | Module structure, state management, provider patterns |
587
- | **Kubernetes** | Helm charts, operator patterns, RBAC |
588
-
589
- **To contribute a new stack:**
590
-
591
- 1. Create a new detector in `src/detection/detectors/`
592
- 2. Register the detector in `src/detection/index.ts`
593
- 3. Add the config directory structure:
594
-
595
- ```bash
596
- # Create the stack directory
597
- mkdir -p your-stack/{copy-overwrite,merge}
598
-
599
- # Add stack-specific skills
600
- mkdir -p your-stack/copy-overwrite/.claude/skills/your-pattern
601
- cat > your-stack/copy-overwrite/.claude/skills/your-pattern/SKILL.md << 'EOF'
602
- ---
603
- name: your-pattern
604
- description: Teaches Claude the idioms of your stack
605
- ---
606
- # Your Pattern
607
- ...
608
- EOF
609
-
610
- # Add stack-specific ESLint rules
611
- mkdir -p your-stack/copy-overwrite/eslint-plugin-your-stack
612
-
613
- # Add package.json dependencies via merge/
614
- ```
615
-
616
- See the `expo/` directory for a comprehensive example of stack-specific configuration.
617
-
618
- **Example prompts to bootstrap a new stack with Claude:**
619
-
620
- Use these prompts in Claude Code (with Lisa applied) to generate stack configurations:
621
-
622
- ```
623
- Research Rails best practices and create a Lisa configuration for Ruby on Rails projects.
624
- Look at the expo/ directory as a reference for structure. Include:
625
- - Detection logic as a new detector in src/detection/detectors/
626
- - Skills for Rails conventions (MVC, ActiveRecord patterns, concerns)
627
- - ESLint equivalent rules using RuboCop (create a rubocop config, not an ESLint plugin)
628
- - Common .gitignore entries for Rails projects
629
- ```
630
-
631
- ```
632
- Create a Lisa configuration for Flutter projects. Reference expo/ for structure.
633
- Include:
634
- - Detection logic (pubspec.yaml with flutter dependency)
635
- - Skills for widget composition, BLoC/Riverpod patterns, platform channels
636
- - Dart analyzer rules (analysis_options.yaml instead of ESLint)
637
- - Flutter-specific .gitignore entries
638
- ```
639
-
640
- ```
641
- Add Next.js support to Lisa. This should be a child of typescript/ (like expo is).
642
- Include:
643
- - Detection logic (next.config.js or "next" in package.json)
644
- - Skills for App Router patterns, Server vs Client Components, caching
645
- - ESLint rules for Next.js idioms (or extend next/core-web-vitals)
646
- - Typical Next.js scripts in package.json
647
- ```
648
-
649
- ```
650
- Analyze the expo/ directory structure and create equivalent configuration for Django.
651
- Include:
652
- - Detection logic (manage.py, settings.py, or django in requirements.txt)
653
- - Skills for MVT pattern, ORM best practices, admin customization
654
- - Linting via flake8/ruff config (not ESLint)
655
- - Django-specific .gitignore entries
656
- ```
657
-
658
- ## Package.lisa.json: Governance-Driven Package.json Management
659
-
660
- The `package.lisa.json` strategy provides a specialized approach to managing `package.json` files with structured governance. Instead of using `//lisa-*` tags directly in project `package.json` files, Lisa separates governance logic into `package.lisa.json` files within each type directory.
661
-
662
- ### How It Works
663
-
664
- Each project type directory (all/, typescript/, expo/, nestjs/, cdk/, npm-package/) can contain a `package.lisa.json` file in the `package-lisa/` subdirectory:
665
-
666
- ```
667
- typescript/
668
- ├── package-lisa/
669
- │ └── package.lisa.json
670
- ```
671
-
672
- The `package.lisa.json` file defines three sections:
673
-
674
- ```json
675
- {
676
- "force": {
677
- "scripts": { "test": "jest", "lint": "eslint ." },
678
- "devDependencies": { "typescript": "^5.0.0" }
679
- },
680
- "defaults": {
681
- "engines": { "node": "22.x" }
682
- },
683
- "merge": {
684
- "trustedDependencies": ["@ast-grep/cli"]
685
- }
686
- }
687
- ```
688
-
689
- ### Section Semantics
690
-
691
- - **force**: Lisa's values completely override project values. Used for critical governance like test runners and linters.
692
- - **defaults**: Provides default values only when keys are missing from the project. Project values always win if present.
693
- - **merge**: Concatenates arrays and deduplicates. Useful for combining Lisa's required dependencies with project's custom ones.
694
-
695
- ### Type Inheritance
696
-
697
- Templates follow the project type hierarchy:
698
-
699
- ```
700
- all/package-lisa/package.lisa.json
701
- └── typescript/package-lisa/package.lisa.json
702
- ├── expo/package-lisa/package.lisa.json
703
- ├── nestjs/package-lisa/package.lisa.json
704
- ├── cdk/package-lisa/package.lisa.json
705
- └── npm-package/package-lisa/package.lisa.json
706
- ```
707
-
708
- Child types inherit and override parent templates. For example, a NestJS project loads templates from `all/`, `typescript/`, and `nestjs/` in order, with later types overriding earlier ones.
709
-
710
- ### Benefits vs Tagged Comments
711
-
712
- Unlike `//lisa-force-*` tags embedded in `package.json`:
713
-
714
- - **Clean Project Files**: Project `package.json` files remain completely free of Lisa governance markers
715
- - **Type-Specific Governance**: Different governance rules for different project types (TypeScript vs Expo vs NestJS)
716
- - **Inheritance Chain**: Automatically applies parent type templates (TypeScript rules apply to all TS projects)
717
- - **Separation of Concerns**: Governance lives in Lisa directory; project files are purely for application use
718
- - **Transparent Updates**: Lisa can update governance without modifying project files
719
-
720
- ### Migration for Existing Users
721
-
722
- If you're currently using `//lisa-*` tags in your `package.json`:
723
-
724
- 1. Extract the tagged sections into a `package.lisa.json` file
725
- 2. Organize by section: move `//lisa-force-*` sections to `force`, etc.
726
- 3. Remove the tags from your `package.json`
727
- 4. Lisa will now manage those properties via `package.lisa.json`
728
-
729
- ## Copy Strategies
730
-
731
- Each type directory contains subdirectories that control how files are applied:
732
-
733
- | Strategy | Dest doesn't exist | Dest identical | Dest differs |
734
- |----------|-------------------|----------------|--------------|
735
- | `copy-overwrite/` | Copy | Skip | Prompt (overwrite/skip) |
736
- | `copy-contents/` | Copy | Skip | Append missing lines |
737
- | `create-only/` | Copy | Skip | Skip |
738
- | `merge/` | Copy | Skip | JSON deep merge |
739
- | `tagged-merge/` | Copy | Skip | Merge by tagged sections |
740
-
741
- ### Strategy Details
742
-
743
- **copy-overwrite**: Standard config files that should match Lisa's version. Prompts when local changes exist.
744
-
745
- **copy-contents**: For files like `.gitignore` where you want to ensure certain lines exist without removing custom entries.
746
-
747
- **create-only**: Template files that should only be created once (e.g., `.claude/rules/PROJECT_RULES.md` for project-specific customization).
748
-
749
- **merge**: For JSON files. Performs a deep merge where:
750
- - Lisa provides default values
751
- - Your project's values take precedence
752
- - Missing scripts/dependencies are added without overwriting existing ones
753
-
754
- **tagged-merge**: For JSON files with explicit section management via comment tags. Enables fine-grained control over which parts Lisa manages vs. which parts projects can customize:
755
-
756
- ```json
757
- {
758
- "scripts": {
759
- "//lisa-force-scripts-quality-assurance": "Required by Lisa for CI/CD and governance",
760
- "lint": "eslint . --quiet",
761
- "build": "tsc",
762
- "test": "vitest run",
763
- "//end-lisa-force-scripts-quality-assurance": "",
764
- "deploy": "my-custom-deploy"
765
- },
766
- "devDependencies": {
767
- "//lisa-force-dev-dependencies": "Required by Lisa for standard governance",
768
- "eslint": "^9.39.0",
769
- "prettier": "^3.3.3",
770
- "//end-lisa-force-dev-dependencies": ""
771
- },
772
- "engines": {
773
- "//lisa-defaults-engines": "Defaults - projects can override",
774
- "node": "22.21.1",
775
- "bun": "1.3.8",
776
- "//end-lisa-defaults-engines": ""
777
- },
778
- "//lisa-merge-trusted-dependencies": "Lisa's + project's combined",
779
- "trustedDependencies": ["@ast-grep/cli"],
780
- "//end-lisa-merge-trusted-dependencies": ""
781
- }
782
- ```
783
-
784
- **Tag Format:** `//lisa-<behavior>-<category>` with matching `//end-lisa-<behavior>-<category>`
785
-
786
- **Tag Semantics:**
787
- - `//lisa-force-<name>` → `//end-lisa-force-<name>`: Lisa replaces this section entirely; project changes within tags are ignored
788
- - `//lisa-defaults-<name>` → `//end-lisa-defaults-<name>`: Project can override the entire section; Lisa provides defaults if missing
789
- - `//lisa-merge-<name>` → `//end-lisa-merge-<name>`: For arrays—Lisa's items are merged with project's (deduplicated by value equality)
790
-
791
- **Benefits:**
792
- - Lisa controls critical configs (CI/CD scripts, required dependencies) via `force` tags
793
- - Projects can safely customize defaults via `defaults` tags
794
- - Array merging via `merge` tags enables shared dependency lists without overwriting project additions
795
- - Projects can safely extend with custom values outside tagged sections
796
- - Tags are visible in the file, making governance transparent to developers
97
+ > Ask Claude: "What coding standards and conventions does this project follow?"
797
98
 
798
99
  ## Architecture
799
100
 
800
- Lisa is written in TypeScript with the following structure:
801
-
802
- ```
803
- lisa/
804
- ├── src/
805
- │ ├── index.ts # CLI entry point
806
- │ ├── cli/
807
- │ │ ├── index.ts # Commander setup
808
- │ │ └── prompts.ts # Interactive prompts
809
- │ ├── core/
810
- │ │ ├── lisa.ts # Main orchestrator
811
- │ │ ├── config.ts # Types and configuration
812
- │ │ └── manifest.ts # Manifest operations
813
- │ ├── detection/
814
- │ │ ├── index.ts # Detector registry
815
- │ │ └── detectors/ # Project type detectors
816
- │ ├── strategies/
817
- │ │ ├── index.ts # Strategy registry
818
- │ │ ├── copy-overwrite.ts
819
- │ │ ├── copy-contents.ts
820
- │ │ ├── create-only.ts
821
- │ │ ├── merge.ts
822
- │ │ ├── tagged-merge.ts # Tagged merge with comment-based tags
823
- │ │ └── tagged-merge-types.ts # Types for tagged merge
824
- │ ├── transaction/
825
- │ │ ├── backup.ts # Backup/restore
826
- │ │ └── transaction.ts # Atomic wrapper
827
- │ ├── logging/ # Console logger
828
- │ ├── errors/ # Custom error types
829
- │ └── utils/ # File and JSON utilities
830
- ├── all/ # Applied to all projects
831
- ├── typescript/ # TypeScript projects
832
- ├── npm-package/ # Publishable npm packages
833
- ├── expo/ # Expo projects
834
- ├── nestjs/ # NestJS projects
835
- ├── cdk/ # CDK projects
836
- ├── tests/ # Vitest test suite
837
- ├── package.json
838
- ├── tsconfig.json
839
- └── vitest.config.ts
840
- ```
841
-
842
- ## Coding Philosophy
843
-
844
- Lisa enforces a consistent coding philosophy through skills and linting:
845
-
846
- ### Core Principles
847
-
848
- 1. **Immutability First** - Never mutate data; always create new references
849
- 2. **Function Structure** - Definitions → Side effects → Return
850
- 3. **Functional Transformations** - Use `map`, `filter`, `reduce` over loops
851
- 4. **Test-Driven Development** - Write failing tests before implementation
852
- 5. **Clean Deletion** - Delete old code completely; no deprecation layers
853
-
854
- ### YAGNI + SOLID + DRY + KISS
855
-
856
- When principles conflict, **KISS wins**. The decision framework:
857
-
858
- 1. Do I need this now? (YAGNI) → If no, don't build it
859
- 2. Is there a simpler way? (KISS) → Choose simpler
860
- 3. Am I repeating 3+ times? (DRY) → Extract if simpler
861
- 4. Does this do one thing? (SRP) → Split only if clearer
862
-
863
- ## Configuration Customization
864
-
865
- ### Project-Specific Rules
866
-
867
- Edit `.claude/rules/PROJECT_RULES.md` (created by Lisa) to add project-specific instructions:
868
-
869
- ```markdown
870
- # Project Rules
871
-
872
- This is a mobile app for sports betting.
873
- Always use the design system components from `@/ui`.
874
- Never import directly from react-native.
875
- ```
876
-
877
- ### Threshold Adjustment
878
-
879
- Edit `eslint.thresholds.config.json` to adjust limits:
880
-
881
- ```json
882
- {
883
- "cognitiveComplexity": 15,
884
- "maxLines": 400
885
- }
886
- ```
887
-
888
- ### Local Settings
889
-
890
- Create `.claude/settings.local.json` for machine-specific overrides:
891
-
892
- ```json
893
- {
894
- "env": {
895
- "CUSTOM_VAR": "value"
896
- }
897
- }
898
- ```
899
-
900
- This file should be in `.gitignore`.
901
-
902
- ### Ignoring Files (.lisaignore)
903
-
904
- Create a `.lisaignore` file in your project root to skip specific files from Lisa's management. This is useful when you have custom configurations that shouldn't be overwritten.
905
-
906
- ```bash
907
- # Ignore specific files
908
- eslint.config.mjs
909
- .prettierrc.json
910
-
911
- # Ignore entire directories
912
- .claude/hooks/
913
-
914
- # Use glob patterns
915
- *.example.json
916
- **/*.custom.ts
917
- ```
918
-
919
- Lisa will skip any files matching these patterns during apply operations. The ignored file count appears in the summary output.
101
+ > Ask Claude: "Explain the architecture of this project, including key components and how they interact."
920
102
 
921
103
  ## Troubleshooting
922
104
 
923
- ### Common Issues
924
-
925
- #### "Node.js not found"
926
-
927
- Install Node.js 18+:
928
-
929
- ```bash
930
- # macOS with Homebrew
931
- brew install node
932
-
933
- # Using nvm
934
- nvm install 18
935
- nvm use 18
936
- ```
937
-
938
- #### JSON merge fails with "parse error"
939
-
940
- Your project's `package.json` may have syntax errors. Validate it:
941
-
942
- ```bash
943
- node -e "require('./package.json')"
944
- ```
945
-
946
- #### Hooks not running
947
-
948
- Ensure `.claude/settings.json` was applied and hooks are executable:
949
-
950
- ```bash
951
- chmod +x .claude/hooks/*.sh
952
- ```
953
-
954
- ### Debug Mode
955
-
956
- ```bash
957
- # See all operations without making changes
958
- lisa --dry-run /path/to/project
959
-
960
- # Check compatibility issues
961
- lisa --validate /path/to/project
962
- ```
963
-
964
- ## Development
965
-
966
- ### Building
967
-
968
- ```bash
969
- npm install
970
- npm run build
971
- ```
972
-
973
- ### Testing
974
-
975
- Lisa includes a comprehensive test suite using Vitest:
976
-
977
- ```bash
978
- # Run all tests
979
- npm test
980
-
981
- # Run tests in watch mode
982
- npm run test:watch
983
-
984
- # Run with coverage
985
- npm run test:cov
986
- ```
987
-
988
- ### Type Checking
989
-
990
- ```bash
991
- npm run typecheck
992
- ```
993
-
994
- ## Adding New Configurations
995
-
996
- ### Adding a Skill
997
-
998
- ```bash
999
- mkdir -p all/copy-overwrite/.claude/skills/my-skill
1000
- cat > all/copy-overwrite/.claude/skills/my-skill/SKILL.md << 'EOF'
1001
- ---
1002
- name: my-skill
1003
- description: What this skill teaches Claude
1004
- ---
1005
-
1006
- # My Skill
1007
-
1008
- ## When to Use
1009
- - Scenario 1
1010
- - Scenario 2
1011
-
1012
- ## Instructions
1013
- 1. Step one
1014
- 2. Step two
1015
- EOF
1016
- ```
1017
-
1018
- ### Adding a Slash Command
1019
-
1020
- ```bash
1021
- mkdir -p all/copy-overwrite/.claude/commands/my-category
1022
- cat > all/copy-overwrite/.claude/commands/my-category/my-command.md << 'EOF'
1023
- ---
1024
- description: What this command does
1025
- argument-hint: <optional-args>
1026
- ---
1027
-
1028
- Instructions for Claude to follow...
1029
- EOF
1030
- ```
1031
-
1032
- ### Adding an ESLint Rule
1033
-
1034
- 1. Add rule to appropriate plugin in `eslint-plugin-*/rules/`
1035
- 2. Register in plugin's `index.js`
1036
- 3. Add tests in `__tests__/`
1037
-
1038
- ### Adding a New Project Type Detector
1039
-
1040
- 1. Create detector in `src/detection/detectors/your-type.ts`
1041
- 2. Register in `src/detection/index.ts`
1042
- 3. Update `PROJECT_TYPE_HIERARCHY` in `src/core/config.ts` if it has a parent
1043
- 4. Add tests in `tests/unit/detection/`
1044
-
1045
- ## Changelog
1046
-
1047
- ### v2.1.0 (2026-01-28)
1048
-
1049
- **Features:**
1050
- - New `tagged-merge` copy strategy for fine-grained JSON section control
1051
- - `//lisa-force-*` tags: Lisa replaces section entirely
1052
- - `//lisa-defaults-*` tags: Project can override, Lisa provides defaults
1053
- - `//lisa-merge-*` tags: Arrays merged with deduplication
1054
- - Tagged-merge templates for all project types (typescript, expo, nestjs, cdk)
1055
- - Backward-compatible with existing `merge/` strategy
1056
-
1057
- ### v2.0.0 (2026-01-17)
1058
-
1059
- **Breaking Changes:**
1060
- - Rewritten from Bash to TypeScript
1061
- - Removed dependency on `jq` - now uses native Node.js
1062
- - Removed bats test suite - now uses Vitest
1063
-
1064
- **Features:**
1065
- - Full TypeScript implementation with type safety
1066
- - 97 comprehensive tests with Vitest
1067
- - Modular architecture with dependency injection
1068
- - Atomic transactions with backup/rollback
1069
- - Improved error handling with custom error types
1070
- - New `npm-package` project type with automated npm publishing workflow
1071
- - ESLint 9 flat config support for TypeScript projects
1072
-
1073
- ### v1.0.0 (2026-01-17)
1074
-
1075
- **Features:**
1076
- - Initial release
1077
- - Multi-layer Claude Code governance (CLAUDE.md, skills, hooks, commands)
1078
- - Custom ESLint plugins for code structure enforcement
1079
- - Project type detection (TypeScript, Expo, NestJS, CDK)
1080
- - Four copy strategies: copy-overwrite, copy-contents, create-only, merge
1081
- - Cascading type inheritance
1082
- - Dry-run and validate modes
1083
- - Non-interactive mode for CI/CD
1084
- - Uninstall capability with manifest tracking
1085
-
1086
- **Governance Layers:**
1087
- - Behavioral rules via CLAUDE.md
1088
- - Teaching skills for coding philosophy
1089
- - Automated hooks for format/lint on edit
1090
- - Pre-built slash commands for workflows
1091
- - Threshold-based complexity limits
1092
- - Git hooks via Husky for pre-commit gates
1093
-
1094
- ## Future Enhancements
1095
-
1096
- Planned improvements for future versions of Lisa:
1097
-
1098
- ### Beads / Task Management Integration
1099
-
1100
- Integrate with [Beads](https://github.com/steveyegge/beads), a git-backed issue tracker engineered for AI-supervised coding workflows, and Claude Code's task management system (v2.1.16+).
1101
-
1102
- **Value:**
1103
- - **Persistent Memory**: Beads stores tasks as JSONL in `.beads/`, version-controlled with code—agents maintain context across sessions
1104
- - **Dependency-Aware Execution**: `bd ready` shows only unblocked work, enabling true parallel multi-agent execution
1105
- - **Async Workflows**: Combine Claude Code Web + ntfy notifications + Beads status updates for fire-and-forget task execution
1106
- - **Audit Trail**: Git-tracked task history provides immutable record of work decomposition and completion
1107
-
1108
- **Integration Points:**
1109
- - Update `/project:plan` to create Beads issues with dependencies
1110
- - Update `/project:execute` to claim and resolve tasks automatically
1111
- - Enable multi-agent orchestration querying `bd ready` for unblocked work
1112
-
1113
- ### Biome Migration
1114
-
1115
- Migrate formatting from Prettier to [Biome](https://biomejs.dev/) for 40x faster formatting, while keeping ESLint for governance-critical rules.
1116
-
1117
- **Value:**
1118
- - **Performance**: Biome formats 10,000 files in 0.3s vs Prettier's 12.1s
1119
- - **Unified Tooling**: Single binary replaces Prettier, reducing dependencies
1120
- - **97% Prettier-Compatible**: Nearly identical output with minimal configuration changes
1121
-
1122
- **Approach:**
1123
- - Replace Prettier with Biome formatter (low-risk, high-reward)
1124
- - Keep ESLint for custom rules (enforce-statement-order, functional/immutable-data)
1125
- - Monitor Biome's GritQL plugin system for future full migration when it matures
1126
-
1127
- **Note:** Full ESLint replacement is not recommended yet—Lisa's custom plugins and eslint-plugin-functional have no Biome equivalents.
1128
-
1129
- ### ESLint Plugin Extraction
1130
-
1131
- Extract custom ESLint plugins to separate npm packages for independent versioning and broader adoption.
1132
-
1133
- **Current Plugins:**
1134
- - `eslint-plugin-code-organization` (1 rule: enforce-statement-order)
1135
- - `eslint-plugin-component-structure` (4 rules: container/view pattern enforcement)
1136
- - `eslint-plugin-ui-standards` (3 rules: NativeWind/styling standards)
1137
-
1138
- **Value:**
1139
- - **Independent Versioning**: Bug fixes ship without waiting for Lisa releases
1140
- - **Reusability**: Any ESLint project can adopt these rules, not just Lisa users
1141
- - **Easier Contribution**: Focused repos with clearer scope for community PRs
1142
- - **Smaller Bundle**: Lisa package size reduced; users install only needed plugins
1143
- - **Clear Ownership**: Each plugin has its own documentation and maintenance cycle
1144
-
1145
- **Extraction Order:**
1146
- 1. `eslint-plugin-code-organization` (generic, cleanest extraction)
1147
- 2. `eslint-plugin-ui-standards` (Expo-specific, smaller)
1148
- 3. `eslint-plugin-component-structure` (largest, most complex)
1149
-
1150
- ### Test Library Standardization
1151
-
1152
- Standardize on Vitest across all Lisa-managed projects for consistent, fast testing.
1153
-
1154
- **Current State:** Lisa uses Vitest 3.0 with 97 tests, 90% coverage thresholds, and v8 provider.
1155
-
1156
- **Value:**
1157
- - **Consistency**: All projects use same test APIs and patterns
1158
- - **Performance**: Vitest is 10-20x faster than Jest in watch mode
1159
- - **TypeScript-Native**: No ts-jest configuration needed
1160
- - **Modern Ecosystem**: Growing adoption (20M+ weekly downloads), active maintenance
1161
-
1162
- **Trade-offs Considered:**
1163
- - Jest: Industry standard but slower, requires ts-jest for TypeScript
1164
- - Bun Test: Fastest but smallest ecosystem, 34% compatibility issues reported
1165
- - Vitest: Best balance of speed, TypeScript support, and ecosystem maturity
1166
-
1167
- ### Ruby on Rails Support
1168
-
1169
- Add Ruby on Rails as a project type with RuboCop integration and Rails-specific skills.
1170
-
1171
- **Detection:** Check for `Gemfile` + `Gemfile.lock` + `config/application.rb` + `app/` directory
1172
-
1173
- **What Lisa Would Provide:**
1174
- - **RuboCop Configuration**: `.rubocop.yml` with rubocop-rails, rubocop-performance, rubocop-rspec
1175
- - **Skills**: Rails conventions (MVC, service objects, concerns), RSpec testing, database/migrations
1176
- - **Gemfile Merge**: Add development gems (rspec-rails, factory_bot_rails, faker) via merge strategy
1177
- - **CI/CD**: GitHub workflows for RuboCop + RSpec
1178
-
1179
- **Skills to Create:**
1180
- 1. `rails-conventions` - MVC patterns, service objects, concerns, ActiveRecord
1181
- 2. `rspec-testing` - Test structure, shared examples, factories, isolation
1182
- 3. `rubocop-patterns` - Linting rules, Rails-specific cops
1183
- 4. `rails-database` - Migrations, models, scopes, associations
1184
-
1185
- **Note:** Rails would be a standalone type (not inheriting from TypeScript) since Ruby uses different tooling.
1186
-
1187
- ### Plugin Publishing
1188
-
1189
- Publish Claude Code skills, commands, and agents as installable plugins via the Claude Code marketplace system.
1190
-
1191
- **Current Plugin Ecosystem:**
1192
- - Official plugins: `claude-plugins-official` (typescript-lsp, code-review, playwright)
1193
- - Community registry: [claude-plugins.dev](https://claude-plugins.dev/)
1194
-
1195
- **Lisa Components That Could Become Plugins:**
1196
- - `jsdoc-best-practices` skill - Documentation standards
1197
- - `project:*` commands - Implementation workflows
1198
- - Custom agents (skill-evaluator, codebase-analyzer)
1199
-
1200
- **Value:**
1201
- - **À La Carte Adoption**: Teams install only relevant governance patterns
1202
- - **Automatic Updates**: Plugin updates flow without re-running Lisa CLI
1203
- - **Community Contributions**: Accept PRs for stack-specific patterns (Django, FastAPI, etc.)
1204
- - **Ecosystem Discovery**: Listed on claude-plugins.dev for broader reach
1205
- - **Mix-and-Match**: Combine Lisa's `coding-philosophy` with other teams' specialized plugins
1206
-
1207
- **Implementation Path:**
1208
- 1. Extract skills as standalone plugins with `.claude-plugin/plugin.json` manifests
1209
- 2. Create `lisa-governance-plugins` marketplace repository
1210
- 3. List on claude-plugins.dev community registry
1211
- 4. Provide marketplace.json for organizations to self-host
105
+ > Ask Claude: "I'm having an issue with [describe problem]. Help me debug it."
1212
106
 
1213
107
  ## License
1214
108
 
1215
- MIT License - see [LICENSE](LICENSE) for details
109
+ MIT License - see [LICENSE](LICENSE) for details.