@codyswann/lisa 1.54.13 → 1.54.15

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.
@@ -5,7 +5,6 @@
5
5
  },
6
6
  "metadata": {
7
7
  "description": "Claude Code governance plugins for TypeScript, Expo, NestJS, CDK, and Rails projects",
8
- "version": "1.0.0",
9
8
  "pluginRoot": "./plugins"
10
9
  },
11
10
  "plugins": [
@@ -13,35 +12,30 @@
13
12
  "name": "typescript",
14
13
  "source": "./plugins/lisa-typescript",
15
14
  "description": "Claude Code governance plugin for TypeScript projects — universal skills, agents, hooks, and rules plus TypeScript-specific tooling",
16
- "version": "1.0.0",
17
15
  "category": "productivity"
18
16
  },
19
17
  {
20
18
  "name": "expo",
21
19
  "source": "./plugins/lisa-expo",
22
20
  "description": "Claude Code governance plugin for Expo/React Native projects — universal skills plus Expo-specific tooling (Apollo Client, Gluestack, Expo Router, Playwright, Maestro)",
23
- "version": "1.0.0",
24
21
  "category": "productivity"
25
22
  },
26
23
  {
27
24
  "name": "nestjs",
28
25
  "source": "./plugins/lisa-nestjs",
29
26
  "description": "Claude Code governance plugin for NestJS/GraphQL projects — universal skills plus NestJS-specific tooling (GraphQL, TypeORM, security scanning)",
30
- "version": "1.0.0",
31
27
  "category": "productivity"
32
28
  },
33
29
  {
34
30
  "name": "cdk",
35
31
  "source": "./plugins/lisa-cdk",
36
32
  "description": "Claude Code governance plugin for AWS CDK projects — universal skills, agents, hooks, and rules plus TypeScript tooling",
37
- "version": "1.0.0",
38
33
  "category": "productivity"
39
34
  },
40
35
  {
41
36
  "name": "rails",
42
37
  "source": "./plugins/lisa-rails",
43
38
  "description": "Claude Code governance plugin for Ruby on Rails projects — universal skills plus Rails-specific tooling (ActionController, ActionView, ActiveRecord)",
44
- "version": "1.0.0",
45
39
  "category": "productivity"
46
40
  }
47
41
  ]
package/package.json CHANGED
@@ -72,7 +72,7 @@
72
72
  "axios": ">=1.13.5"
73
73
  },
74
74
  "name": "@codyswann/lisa",
75
- "version": "1.54.13",
75
+ "version": "1.54.15",
76
76
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
77
77
  "main": "dist/index.js",
78
78
  "exports": {
@@ -171,7 +171,7 @@
171
171
  "typescript-eslint": "^8.0.0"
172
172
  },
173
173
  "devDependencies": {
174
- "@codyswann/lisa": "^1.54.7"
174
+ "@codyswann/lisa": "^1.54.13"
175
175
  },
176
176
  "type": "module"
177
177
  }
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "name": "cdk",
3
- "version": "1.0.0",
3
+ "version": "1.54.15",
4
4
  "description": "Claude Code governance plugin for AWS CDK projects — includes all universal skills, agents, hooks, and rules from Lisa plus TypeScript tooling",
5
- "author": "Cody Swann",
5
+ "author": {
6
+ "name": "Cody Swann"
7
+ },
6
8
  "hooks": {
7
9
  "UserPromptSubmit": [
8
10
  {
@@ -37,27 +39,45 @@
37
39
  {
38
40
  "matcher": "Write|Edit",
39
41
  "hooks": [
40
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/format-on-edit.sh" },
41
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sg-scan-on-edit.sh" },
42
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/lint-on-edit.sh" }
42
+ {
43
+ "type": "command",
44
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/format-on-edit.sh"
45
+ },
46
+ {
47
+ "type": "command",
48
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sg-scan-on-edit.sh"
49
+ },
50
+ {
51
+ "type": "command",
52
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/lint-on-edit.sh"
53
+ }
43
54
  ]
44
55
  },
45
56
  {
46
57
  "matcher": "TaskCreate|TaskUpdate",
47
58
  "hooks": [
48
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sync-tasks.sh" }
59
+ {
60
+ "type": "command",
61
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sync-tasks.sh"
62
+ }
49
63
  ]
50
64
  },
51
65
  {
52
66
  "matcher": "Task",
53
67
  "hooks": [
54
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-task || true" }
68
+ {
69
+ "type": "command",
70
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-task || true"
71
+ }
55
72
  ]
56
73
  },
57
74
  {
58
75
  "matcher": "TodoWrite",
59
76
  "hooks": [
60
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-todo || true" }
77
+ {
78
+ "type": "command",
79
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-todo || true"
80
+ }
61
81
  ]
62
82
  }
63
83
  ],
@@ -65,22 +85,81 @@
65
85
  {
66
86
  "matcher": "Task",
67
87
  "hooks": [
68
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code pre-task || true" }
88
+ {
89
+ "type": "command",
90
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code pre-task || true"
91
+ }
69
92
  ]
70
93
  }
71
94
  ],
72
95
  "Stop": [
73
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/verify-completion.sh" }] },
74
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/notify-ntfy.sh" }] },
75
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code stop || true" }] }
96
+ {
97
+ "matcher": "",
98
+ "hooks": [
99
+ {
100
+ "type": "command",
101
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/verify-completion.sh"
102
+ }
103
+ ]
104
+ },
105
+ {
106
+ "matcher": "",
107
+ "hooks": [
108
+ {
109
+ "type": "command",
110
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/notify-ntfy.sh"
111
+ }
112
+ ]
113
+ },
114
+ {
115
+ "matcher": "",
116
+ "hooks": [
117
+ {
118
+ "type": "command",
119
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code stop || true"
120
+ }
121
+ ]
122
+ }
76
123
  ],
77
124
  "SessionStart": [
78
- { "matcher": "startup", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/install-pkgs.sh" }] },
79
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/setup-jira-cli.sh" }] },
80
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-start || true" }] }
125
+ {
126
+ "matcher": "startup",
127
+ "hooks": [
128
+ {
129
+ "type": "command",
130
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/install-pkgs.sh"
131
+ }
132
+ ]
133
+ },
134
+ {
135
+ "matcher": "",
136
+ "hooks": [
137
+ {
138
+ "type": "command",
139
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/setup-jira-cli.sh"
140
+ }
141
+ ]
142
+ },
143
+ {
144
+ "matcher": "",
145
+ "hooks": [
146
+ {
147
+ "type": "command",
148
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-start || true"
149
+ }
150
+ ]
151
+ }
81
152
  ],
82
153
  "SessionEnd": [
83
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-end || true" }] }
154
+ {
155
+ "matcher": "",
156
+ "hooks": [
157
+ {
158
+ "type": "command",
159
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-end || true"
160
+ }
161
+ ]
162
+ }
84
163
  ]
85
164
  }
86
165
  }
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "name": "expo",
3
- "version": "1.0.0",
3
+ "version": "1.54.15",
4
4
  "description": "Claude Code governance plugin for Expo/React Native projects — includes all universal skills, agents, hooks, and rules from Lisa plus Expo-specific tooling",
5
- "author": "Cody Swann",
5
+ "author": {
6
+ "name": "Cody Swann"
7
+ },
6
8
  "hooks": {
7
9
  "UserPromptSubmit": [
8
10
  {
@@ -37,27 +39,45 @@
37
39
  {
38
40
  "matcher": "Write|Edit",
39
41
  "hooks": [
40
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/format-on-edit.sh" },
41
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sg-scan-on-edit.sh" },
42
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/lint-on-edit.sh" }
42
+ {
43
+ "type": "command",
44
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/format-on-edit.sh"
45
+ },
46
+ {
47
+ "type": "command",
48
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sg-scan-on-edit.sh"
49
+ },
50
+ {
51
+ "type": "command",
52
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/lint-on-edit.sh"
53
+ }
43
54
  ]
44
55
  },
45
56
  {
46
57
  "matcher": "TaskCreate|TaskUpdate",
47
58
  "hooks": [
48
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sync-tasks.sh" }
59
+ {
60
+ "type": "command",
61
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sync-tasks.sh"
62
+ }
49
63
  ]
50
64
  },
51
65
  {
52
66
  "matcher": "Task",
53
67
  "hooks": [
54
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-task || true" }
68
+ {
69
+ "type": "command",
70
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-task || true"
71
+ }
55
72
  ]
56
73
  },
57
74
  {
58
75
  "matcher": "TodoWrite",
59
76
  "hooks": [
60
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-todo || true" }
77
+ {
78
+ "type": "command",
79
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-todo || true"
80
+ }
61
81
  ]
62
82
  }
63
83
  ],
@@ -65,22 +85,81 @@
65
85
  {
66
86
  "matcher": "Task",
67
87
  "hooks": [
68
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code pre-task || true" }
88
+ {
89
+ "type": "command",
90
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code pre-task || true"
91
+ }
69
92
  ]
70
93
  }
71
94
  ],
72
95
  "Stop": [
73
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/verify-completion.sh" }] },
74
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/notify-ntfy.sh" }] },
75
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code stop || true" }] }
96
+ {
97
+ "matcher": "",
98
+ "hooks": [
99
+ {
100
+ "type": "command",
101
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/verify-completion.sh"
102
+ }
103
+ ]
104
+ },
105
+ {
106
+ "matcher": "",
107
+ "hooks": [
108
+ {
109
+ "type": "command",
110
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/notify-ntfy.sh"
111
+ }
112
+ ]
113
+ },
114
+ {
115
+ "matcher": "",
116
+ "hooks": [
117
+ {
118
+ "type": "command",
119
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code stop || true"
120
+ }
121
+ ]
122
+ }
76
123
  ],
77
124
  "SessionStart": [
78
- { "matcher": "startup", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/install-pkgs.sh" }] },
79
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/setup-jira-cli.sh" }] },
80
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-start || true" }] }
125
+ {
126
+ "matcher": "startup",
127
+ "hooks": [
128
+ {
129
+ "type": "command",
130
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/install-pkgs.sh"
131
+ }
132
+ ]
133
+ },
134
+ {
135
+ "matcher": "",
136
+ "hooks": [
137
+ {
138
+ "type": "command",
139
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/setup-jira-cli.sh"
140
+ }
141
+ ]
142
+ },
143
+ {
144
+ "matcher": "",
145
+ "hooks": [
146
+ {
147
+ "type": "command",
148
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-start || true"
149
+ }
150
+ ]
151
+ }
81
152
  ],
82
153
  "SessionEnd": [
83
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-end || true" }] }
154
+ {
155
+ "matcher": "",
156
+ "hooks": [
157
+ {
158
+ "type": "command",
159
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-end || true"
160
+ }
161
+ ]
162
+ }
84
163
  ]
85
164
  }
86
165
  }
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "name": "nestjs",
3
- "version": "1.0.0",
3
+ "version": "1.54.15",
4
4
  "description": "Claude Code governance plugin for NestJS/GraphQL projects — includes all universal skills, agents, hooks, and rules from Lisa plus NestJS-specific tooling (GraphQL, TypeORM, security scanning)",
5
- "author": "Cody Swann",
5
+ "author": {
6
+ "name": "Cody Swann"
7
+ },
6
8
  "hooks": {
7
9
  "UserPromptSubmit": [
8
10
  {
@@ -37,27 +39,45 @@
37
39
  {
38
40
  "matcher": "Write|Edit",
39
41
  "hooks": [
40
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/format-on-edit.sh" },
41
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sg-scan-on-edit.sh" },
42
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/lint-on-edit.sh" }
42
+ {
43
+ "type": "command",
44
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/format-on-edit.sh"
45
+ },
46
+ {
47
+ "type": "command",
48
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sg-scan-on-edit.sh"
49
+ },
50
+ {
51
+ "type": "command",
52
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/lint-on-edit.sh"
53
+ }
43
54
  ]
44
55
  },
45
56
  {
46
57
  "matcher": "TaskCreate|TaskUpdate",
47
58
  "hooks": [
48
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sync-tasks.sh" }
59
+ {
60
+ "type": "command",
61
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sync-tasks.sh"
62
+ }
49
63
  ]
50
64
  },
51
65
  {
52
66
  "matcher": "Task",
53
67
  "hooks": [
54
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-task || true" }
68
+ {
69
+ "type": "command",
70
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-task || true"
71
+ }
55
72
  ]
56
73
  },
57
74
  {
58
75
  "matcher": "TodoWrite",
59
76
  "hooks": [
60
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-todo || true" }
77
+ {
78
+ "type": "command",
79
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-todo || true"
80
+ }
61
81
  ]
62
82
  }
63
83
  ],
@@ -65,22 +85,81 @@
65
85
  {
66
86
  "matcher": "Task",
67
87
  "hooks": [
68
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code pre-task || true" }
88
+ {
89
+ "type": "command",
90
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code pre-task || true"
91
+ }
69
92
  ]
70
93
  }
71
94
  ],
72
95
  "Stop": [
73
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/verify-completion.sh" }] },
74
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/notify-ntfy.sh" }] },
75
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code stop || true" }] }
96
+ {
97
+ "matcher": "",
98
+ "hooks": [
99
+ {
100
+ "type": "command",
101
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/verify-completion.sh"
102
+ }
103
+ ]
104
+ },
105
+ {
106
+ "matcher": "",
107
+ "hooks": [
108
+ {
109
+ "type": "command",
110
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/notify-ntfy.sh"
111
+ }
112
+ ]
113
+ },
114
+ {
115
+ "matcher": "",
116
+ "hooks": [
117
+ {
118
+ "type": "command",
119
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code stop || true"
120
+ }
121
+ ]
122
+ }
76
123
  ],
77
124
  "SessionStart": [
78
- { "matcher": "startup", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/install-pkgs.sh" }] },
79
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/setup-jira-cli.sh" }] },
80
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-start || true" }] }
125
+ {
126
+ "matcher": "startup",
127
+ "hooks": [
128
+ {
129
+ "type": "command",
130
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/install-pkgs.sh"
131
+ }
132
+ ]
133
+ },
134
+ {
135
+ "matcher": "",
136
+ "hooks": [
137
+ {
138
+ "type": "command",
139
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/setup-jira-cli.sh"
140
+ }
141
+ ]
142
+ },
143
+ {
144
+ "matcher": "",
145
+ "hooks": [
146
+ {
147
+ "type": "command",
148
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-start || true"
149
+ }
150
+ ]
151
+ }
81
152
  ],
82
153
  "SessionEnd": [
83
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-end || true" }] }
154
+ {
155
+ "matcher": "",
156
+ "hooks": [
157
+ {
158
+ "type": "command",
159
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-end || true"
160
+ }
161
+ ]
162
+ }
84
163
  ]
85
164
  }
86
165
  }
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "name": "rails",
3
- "version": "1.0.0",
3
+ "version": "1.54.15",
4
4
  "description": "Claude Code governance plugin for Ruby on Rails projects — includes all universal skills, agents, hooks, and rules from Lisa plus Rails-specific tooling (ActionController, ActionView, ActiveRecord)",
5
- "author": "Cody Swann",
5
+ "author": {
6
+ "name": "Cody Swann"
7
+ },
6
8
  "hooks": {
7
9
  "UserPromptSubmit": [
8
10
  {
@@ -37,19 +39,28 @@
37
39
  {
38
40
  "matcher": "TaskCreate|TaskUpdate",
39
41
  "hooks": [
40
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sync-tasks.sh" }
42
+ {
43
+ "type": "command",
44
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sync-tasks.sh"
45
+ }
41
46
  ]
42
47
  },
43
48
  {
44
49
  "matcher": "Task",
45
50
  "hooks": [
46
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-task || true" }
51
+ {
52
+ "type": "command",
53
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-task || true"
54
+ }
47
55
  ]
48
56
  },
49
57
  {
50
58
  "matcher": "TodoWrite",
51
59
  "hooks": [
52
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-todo || true" }
60
+ {
61
+ "type": "command",
62
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-todo || true"
63
+ }
53
64
  ]
54
65
  }
55
66
  ],
@@ -57,21 +68,72 @@
57
68
  {
58
69
  "matcher": "Task",
59
70
  "hooks": [
60
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code pre-task || true" }
71
+ {
72
+ "type": "command",
73
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code pre-task || true"
74
+ }
61
75
  ]
62
76
  }
63
77
  ],
64
78
  "Stop": [
65
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/verify-completion.sh" }] },
66
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/notify-ntfy.sh" }] },
67
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code stop || true" }] }
79
+ {
80
+ "matcher": "",
81
+ "hooks": [
82
+ {
83
+ "type": "command",
84
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/verify-completion.sh"
85
+ }
86
+ ]
87
+ },
88
+ {
89
+ "matcher": "",
90
+ "hooks": [
91
+ {
92
+ "type": "command",
93
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/notify-ntfy.sh"
94
+ }
95
+ ]
96
+ },
97
+ {
98
+ "matcher": "",
99
+ "hooks": [
100
+ {
101
+ "type": "command",
102
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code stop || true"
103
+ }
104
+ ]
105
+ }
68
106
  ],
69
107
  "SessionStart": [
70
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/setup-jira-cli.sh" }] },
71
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-start || true" }] }
108
+ {
109
+ "matcher": "",
110
+ "hooks": [
111
+ {
112
+ "type": "command",
113
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/setup-jira-cli.sh"
114
+ }
115
+ ]
116
+ },
117
+ {
118
+ "matcher": "",
119
+ "hooks": [
120
+ {
121
+ "type": "command",
122
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-start || true"
123
+ }
124
+ ]
125
+ }
72
126
  ],
73
127
  "SessionEnd": [
74
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-end || true" }] }
128
+ {
129
+ "matcher": "",
130
+ "hooks": [
131
+ {
132
+ "type": "command",
133
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-end || true"
134
+ }
135
+ ]
136
+ }
75
137
  ]
76
138
  }
77
139
  }
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "name": "typescript",
3
- "version": "1.0.0",
3
+ "version": "1.54.15",
4
4
  "description": "Claude Code governance plugin for TypeScript projects — includes all universal skills, agents, hooks, and rules from Lisa plus TypeScript-specific tooling",
5
- "author": "Cody Swann",
5
+ "author": {
6
+ "name": "Cody Swann"
7
+ },
6
8
  "hooks": {
7
9
  "UserPromptSubmit": [
8
10
  {
@@ -37,27 +39,45 @@
37
39
  {
38
40
  "matcher": "Write|Edit",
39
41
  "hooks": [
40
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/format-on-edit.sh" },
41
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sg-scan-on-edit.sh" },
42
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/lint-on-edit.sh" }
42
+ {
43
+ "type": "command",
44
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/format-on-edit.sh"
45
+ },
46
+ {
47
+ "type": "command",
48
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sg-scan-on-edit.sh"
49
+ },
50
+ {
51
+ "type": "command",
52
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/lint-on-edit.sh"
53
+ }
43
54
  ]
44
55
  },
45
56
  {
46
57
  "matcher": "TaskCreate|TaskUpdate",
47
58
  "hooks": [
48
- { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sync-tasks.sh" }
59
+ {
60
+ "type": "command",
61
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/sync-tasks.sh"
62
+ }
49
63
  ]
50
64
  },
51
65
  {
52
66
  "matcher": "Task",
53
67
  "hooks": [
54
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-task || true" }
68
+ {
69
+ "type": "command",
70
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-task || true"
71
+ }
55
72
  ]
56
73
  },
57
74
  {
58
75
  "matcher": "TodoWrite",
59
76
  "hooks": [
60
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-todo || true" }
77
+ {
78
+ "type": "command",
79
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-todo || true"
80
+ }
61
81
  ]
62
82
  }
63
83
  ],
@@ -65,22 +85,81 @@
65
85
  {
66
86
  "matcher": "Task",
67
87
  "hooks": [
68
- { "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code pre-task || true" }
88
+ {
89
+ "type": "command",
90
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code pre-task || true"
91
+ }
69
92
  ]
70
93
  }
71
94
  ],
72
95
  "Stop": [
73
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/verify-completion.sh" }] },
74
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/notify-ntfy.sh" }] },
75
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code stop || true" }] }
96
+ {
97
+ "matcher": "",
98
+ "hooks": [
99
+ {
100
+ "type": "command",
101
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/verify-completion.sh"
102
+ }
103
+ ]
104
+ },
105
+ {
106
+ "matcher": "",
107
+ "hooks": [
108
+ {
109
+ "type": "command",
110
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/notify-ntfy.sh"
111
+ }
112
+ ]
113
+ },
114
+ {
115
+ "matcher": "",
116
+ "hooks": [
117
+ {
118
+ "type": "command",
119
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code stop || true"
120
+ }
121
+ ]
122
+ }
76
123
  ],
77
124
  "SessionStart": [
78
- { "matcher": "startup", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/install-pkgs.sh" }] },
79
- { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/setup-jira-cli.sh" }] },
80
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-start || true" }] }
125
+ {
126
+ "matcher": "startup",
127
+ "hooks": [
128
+ {
129
+ "type": "command",
130
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/install-pkgs.sh"
131
+ }
132
+ ]
133
+ },
134
+ {
135
+ "matcher": "",
136
+ "hooks": [
137
+ {
138
+ "type": "command",
139
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/setup-jira-cli.sh"
140
+ }
141
+ ]
142
+ },
143
+ {
144
+ "matcher": "",
145
+ "hooks": [
146
+ {
147
+ "type": "command",
148
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-start || true"
149
+ }
150
+ ]
151
+ }
81
152
  ],
82
153
  "SessionEnd": [
83
- { "matcher": "", "hooks": [{ "type": "command", "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-end || true" }] }
154
+ {
155
+ "matcher": "",
156
+ "hooks": [
157
+ {
158
+ "type": "command",
159
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-end || true"
160
+ }
161
+ ]
162
+ }
84
163
  ]
85
164
  }
86
165
  }
@@ -2,7 +2,7 @@
2
2
  "name": "cdk",
3
3
  "version": "1.0.0",
4
4
  "description": "Claude Code governance plugin for AWS CDK projects — includes all universal skills, agents, hooks, and rules from Lisa plus TypeScript tooling",
5
- "author": "Cody Swann",
5
+ "author": { "name": "Cody Swann" },
6
6
  "hooks": {
7
7
  "UserPromptSubmit": [
8
8
  {
@@ -2,7 +2,7 @@
2
2
  "name": "expo",
3
3
  "version": "1.0.0",
4
4
  "description": "Claude Code governance plugin for Expo/React Native projects — includes all universal skills, agents, hooks, and rules from Lisa plus Expo-specific tooling",
5
- "author": "Cody Swann",
5
+ "author": { "name": "Cody Swann" },
6
6
  "hooks": {
7
7
  "UserPromptSubmit": [
8
8
  {
@@ -2,7 +2,7 @@
2
2
  "name": "nestjs",
3
3
  "version": "1.0.0",
4
4
  "description": "Claude Code governance plugin for NestJS/GraphQL projects — includes all universal skills, agents, hooks, and rules from Lisa plus NestJS-specific tooling (GraphQL, TypeORM, security scanning)",
5
- "author": "Cody Swann",
5
+ "author": { "name": "Cody Swann" },
6
6
  "hooks": {
7
7
  "UserPromptSubmit": [
8
8
  {
@@ -2,7 +2,7 @@
2
2
  "name": "rails",
3
3
  "version": "1.0.0",
4
4
  "description": "Claude Code governance plugin for Ruby on Rails projects — includes all universal skills, agents, hooks, and rules from Lisa plus Rails-specific tooling (ActionController, ActionView, ActiveRecord)",
5
- "author": "Cody Swann",
5
+ "author": { "name": "Cody Swann" },
6
6
  "hooks": {
7
7
  "UserPromptSubmit": [
8
8
  {
@@ -2,7 +2,7 @@
2
2
  "name": "typescript",
3
3
  "version": "1.0.0",
4
4
  "description": "Claude Code governance plugin for TypeScript projects — includes all universal skills, agents, hooks, and rules from Lisa plus TypeScript-specific tooling",
5
- "author": "Cody Swann",
5
+ "author": { "name": "Cody Swann" },
6
6
  "hooks": {
7
7
  "UserPromptSubmit": [
8
8
  {
@@ -4,11 +4,15 @@
4
4
  set -euo pipefail
5
5
 
6
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- PLUGINS_DIR="$SCRIPT_DIR/../plugins"
7
+ ROOT_DIR="$SCRIPT_DIR/.."
8
+ PLUGINS_DIR="$ROOT_DIR/plugins"
8
9
  SRC_DIR="$PLUGINS_DIR/src"
9
10
  BASE_DIR="$SRC_DIR/base"
10
11
  STACKS=(typescript expo nestjs cdk rails)
11
12
 
13
+ # Read version from package.json so plugins stay in sync with Lisa releases
14
+ VERSION=$(node -e "console.log(require('$ROOT_DIR/package.json').version)")
15
+
12
16
  for stack in "${STACKS[@]}"; do
13
17
  OUT="$PLUGINS_DIR/lisa-$stack"
14
18
  rm -rf "$OUT"
@@ -18,5 +22,15 @@ for stack in "${STACKS[@]}"; do
18
22
  if [ -d "$STACK_SRC" ]; then
19
23
  cp -r "$STACK_SRC/." "$OUT/"
20
24
  fi
21
- echo "Built plugins/lisa-$stack"
25
+ # Inject Lisa version into the built plugin manifest
26
+ MANIFEST="$OUT/.claude-plugin/plugin.json"
27
+ if [ -f "$MANIFEST" ]; then
28
+ node -e "
29
+ const fs = require('fs');
30
+ const m = JSON.parse(fs.readFileSync('$MANIFEST', 'utf8'));
31
+ m.version = '$VERSION';
32
+ fs.writeFileSync('$MANIFEST', JSON.stringify(m, null, 2) + '\n');
33
+ "
34
+ fi
35
+ echo "Built plugins/lisa-$stack (v$VERSION)"
22
36
  done
@@ -43,11 +43,12 @@ PYEOF
43
43
  fi
44
44
  fi
45
45
 
46
- # Register the Lisa marketplace and install plugins only when claude CLI is available
46
+ # Install plugins only when claude CLI is available
47
47
  if ! command -v claude &>/dev/null; then exit 0; fi
48
48
 
49
- # Register the Lisa marketplace pointing to this npm package
50
- claude marketplace add "$LISA_DIR" --scope project </dev/null 2>&1 || true
49
+ # The Lisa marketplace is registered via extraKnownMarketplaces in .claude/settings.json
50
+ # pointing to the GitHub repo (CodySwannGT/lisa). Built plugins are committed to the repo
51
+ # so relative paths in marketplace.json resolve correctly.
51
52
 
52
53
  # Detect which stack plugin to install from .claude/settings.json
53
54
  SETTINGS_FILE="$PROJECT_ROOT/.claude/settings.json"