@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.
- package/README.md +52 -1158
- package/all/copy-overwrite/.claude/commands/plan/add-test-coverage.md +8 -0
- package/all/copy-overwrite/.claude/commands/plan/fix-linter-error.md +8 -0
- package/all/copy-overwrite/.claude/commands/plan/local-code-review.md +6 -0
- package/all/copy-overwrite/.claude/commands/plan/lower-code-complexity.md +6 -0
- package/all/copy-overwrite/.claude/commands/plan/reduce-max-lines-per-function.md +8 -0
- package/all/copy-overwrite/.claude/commands/plan/reduce-max-lines.md +8 -0
- package/all/copy-overwrite/.claude/commands/project/add-test-coverage.md +4 -1
- package/all/copy-overwrite/.claude/commands/project/archive.md +4 -0
- package/all/copy-overwrite/.claude/commands/project/bootstrap.md +4 -0
- package/all/copy-overwrite/.claude/commands/project/debrief.md +4 -0
- package/all/copy-overwrite/.claude/commands/project/document.md +4 -0
- package/all/copy-overwrite/.claude/commands/project/execute.md +4 -0
- package/all/copy-overwrite/.claude/commands/project/fix-linter-error.md +4 -1
- package/all/copy-overwrite/.claude/commands/project/implement.md +4 -0
- package/all/copy-overwrite/.claude/commands/project/local-code-review.md +3 -0
- package/all/copy-overwrite/.claude/commands/project/lower-code-complexity.md +3 -0
- package/all/copy-overwrite/.claude/commands/project/plan.md +4 -0
- package/all/copy-overwrite/.claude/commands/project/reduce-max-lines-per-function.md +4 -1
- package/all/copy-overwrite/.claude/commands/project/reduce-max-lines.md +4 -1
- package/all/copy-overwrite/.claude/commands/project/research.md +4 -0
- package/all/copy-overwrite/.claude/commands/project/review.md +4 -0
- package/all/copy-overwrite/.claude/commands/project/setup.md +4 -0
- package/all/copy-overwrite/.claude/commands/project/verify.md +4 -0
- package/all/copy-overwrite/.claude/skills/plan-add-test-coverage/SKILL.md +54 -0
- package/all/copy-overwrite/.claude/skills/plan-fix-linter-error/SKILL.md +63 -0
- package/all/copy-overwrite/.claude/skills/plan-local-code-review/SKILL.md +88 -0
- package/all/copy-overwrite/.claude/skills/plan-lower-code-complexity/SKILL.md +58 -0
- package/all/copy-overwrite/.claude/skills/plan-reduce-max-lines/SKILL.md +59 -0
- package/all/copy-overwrite/.claude/skills/plan-reduce-max-lines-per-function/SKILL.md +62 -0
- package/all/copy-overwrite/.claude/skills/project-add-test-coverage/SKILL.md +4 -1
- package/all/copy-overwrite/.claude/skills/project-archive/SKILL.md +4 -0
- package/all/copy-overwrite/.claude/skills/project-bootstrap/SKILL.md +4 -0
- package/all/copy-overwrite/.claude/skills/project-debrief/SKILL.md +4 -0
- package/all/copy-overwrite/.claude/skills/project-document/SKILL.md +4 -0
- package/all/copy-overwrite/.claude/skills/project-execute/SKILL.md +4 -0
- package/all/copy-overwrite/.claude/skills/project-fix-linter-error/SKILL.md +4 -1
- package/all/copy-overwrite/.claude/skills/project-implement/SKILL.md +4 -0
- package/all/copy-overwrite/.claude/skills/project-local-code-review/SKILL.md +3 -0
- package/all/copy-overwrite/.claude/skills/project-lower-code-complexity/SKILL.md +3 -0
- package/all/copy-overwrite/.claude/skills/project-plan/SKILL.md +4 -0
- package/all/copy-overwrite/.claude/skills/project-reduce-max-lines/SKILL.md +4 -1
- package/all/copy-overwrite/.claude/skills/project-reduce-max-lines-per-function/SKILL.md +4 -1
- package/all/copy-overwrite/.claude/skills/project-research/SKILL.md +4 -0
- package/all/copy-overwrite/.claude/skills/project-review/SKILL.md +4 -0
- package/all/copy-overwrite/.claude/skills/project-setup/SKILL.md +4 -0
- package/all/copy-overwrite/.claude/skills/project-verify/SKILL.md +4 -0
- package/all/copy-overwrite/.claude/skills/pull-request-review/SKILL.md +3 -7
- package/all/copy-overwrite/README.md +69 -0
- package/cdk/copy-overwrite/README.md +77 -0
- package/expo/copy-overwrite/README.md +85 -0
- package/nestjs/copy-overwrite/README.md +77 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,1215 +1,109 @@
|
|
|
1
1
|
# Lisa
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Developers write specs and answer questions. Agents implement, test, verify, question, and document.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## About This Project
|
|
8
8
|
|
|
9
|
-
Claude
|
|
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
|
|
183
|
-
|
|
184
|
-
```bash
|
|
17
|
+
# Or use npx (no install required)
|
|
185
18
|
npx @codyswann/lisa /path/to/project
|
|
186
19
|
```
|
|
187
20
|
|
|
188
|
-
|
|
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
|
-
|
|
23
|
+
Lisa applies multiple layers of quality control to Claude Code projects:
|
|
198
24
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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
|
-
|
|
206
|
-
brew install coderabbit
|
|
34
|
+
## Step 1: Install Claude Code
|
|
207
35
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
36
|
+
```bash
|
|
37
|
+
brew install claude-code
|
|
38
|
+
# Or: npm install -g @anthropic-ai/claude-code
|
|
39
|
+
```
|
|
211
40
|
|
|
212
|
-
|
|
41
|
+
## Step 2: Set Up This Project
|
|
213
42
|
|
|
214
|
-
|
|
43
|
+
> Ask Claude: "I just cloned this repo. Walk me through the full setup including installing dependencies and building the project."
|
|
215
44
|
|
|
216
|
-
|
|
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
|
-
|
|
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
|
-
|
|
56
|
+
## Step 4: Work on a Feature
|
|
419
57
|
|
|
420
|
-
|
|
58
|
+
> Ask Claude: "I have a feature to implement: [describe feature]. Research the codebase and create a plan."
|
|
421
59
|
|
|
422
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
71
|
+
### Code Review
|
|
449
72
|
|
|
450
|
-
|
|
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
|
-
|
|
77
|
+
> Ask Claude: "Commit my changes and open a pull request."
|
|
462
78
|
|
|
463
|
-
|
|
79
|
+
### Fix Lint Errors
|
|
464
80
|
|
|
465
|
-
|
|
81
|
+
> Ask Claude: "Run the linter and fix all errors."
|
|
466
82
|
|
|
467
|
-
|
|
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
|
-
|
|
85
|
+
> Ask Claude: "Increase test coverage for the files I changed."
|
|
475
86
|
|
|
476
|
-
|
|
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
|
-
|
|
89
|
+
> Ask Claude: "Run the test suite and fix any failures."
|
|
483
90
|
|
|
484
|
-
###
|
|
91
|
+
### Contributing
|
|
485
92
|
|
|
486
|
-
|
|
93
|
+
> Ask Claude: "I want to add a new stack type to Lisa. Walk me through the process."
|
|
487
94
|
|
|
488
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|