@kennethsolomon/shipkit 3.19.0 → 3.20.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 +25 -3
- package/package.json +1 -1
- package/skills/sk:brainstorming/SKILL.md +19 -128
- package/skills/sk:debug/SKILL.md +44 -111
- package/skills/sk:e2e/SKILL.md +45 -97
- package/skills/sk:features/SKILL.md +44 -99
- package/skills/sk:frontend-design/SKILL.md +16 -32
- package/skills/sk:lint/SKILL.md +42 -62
- package/skills/sk:mvp/SKILL.md +81 -134
- package/skills/sk:perf/SKILL.md +24 -43
- package/skills/sk:review/SKILL.md +57 -93
- package/skills/sk:security-check/SKILL.md +37 -43
- package/skills/sk:seo-audit/SKILL.md +75 -96
- package/skills/sk:setup-claude/SKILL.md +103 -0
- package/skills/sk:setup-claude/references/skill-profiles.md +201 -0
- package/skills/sk:setup-claude/templates/CLAUDE.md.template +102 -247
- package/skills/sk:setup-claude/templates/commands/brainstorm.md.template +1 -1
- package/skills/sk:setup-claude/templates/commands/execute-plan.md.template +1 -1
- package/skills/sk:setup-claude/templates/commands/finish-feature.md.template +1 -1
- package/skills/sk:setup-claude/templates/commands/security-check.md.template +1 -1
- package/skills/sk:setup-claude/templates/commands/write-plan.md.template +1 -1
- package/skills/sk:setup-optimizer/SKILL.md +85 -14
- package/skills/sk:skill-creator/SKILL.md +115 -226
- package/skills/sk:website/SKILL.md +81 -149
- package/skills/sk:write-tests/SKILL.md +44 -110
|
@@ -11,34 +11,32 @@ agent: general-purpose
|
|
|
11
11
|
|
|
12
12
|
## Purpose
|
|
13
13
|
|
|
14
|
-
Standalone optional command — audits any web project for SEO issues
|
|
14
|
+
Standalone optional command — audits any web project for SEO issues (Laravel, Next.js, Nuxt, plain HTML, etc.). Run independently like `/sk:debug`, not a numbered workflow step.
|
|
15
15
|
|
|
16
16
|
Two modes:
|
|
17
|
-
- **Source mode** (always
|
|
18
|
-
- **Server mode** (optional): fetches from
|
|
19
|
-
|
|
20
|
-
Run when: before shipping a client site, after adding new pages, or any time you want to check SEO health.
|
|
17
|
+
- **Source mode** (always): scans template files directly
|
|
18
|
+
- **Server mode** (optional): fetches from running dev server to validate rendered output
|
|
21
19
|
|
|
22
20
|
## Hard Rules
|
|
23
21
|
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
22
|
+
- Never auto-apply fixes without explicit user confirmation.
|
|
23
|
+
- Every finding must cite a specific `file:line`.
|
|
24
|
+
- Every finding is a checkbox: `- [ ]` (open) or `- [x]` (auto-fixed this run).
|
|
25
|
+
- Append to `tasks/seo-findings.md` with date header — never overwrite.
|
|
26
|
+
- Degrade gracefully if no server running — skip Phase 2, note in report.
|
|
27
|
+
- Structured data validation requires external tools (Google Rich Results Test) — flag it, don't skip silently.
|
|
30
28
|
|
|
31
29
|
## Before You Start
|
|
32
30
|
|
|
33
|
-
1. Read `tasks/findings.md` if
|
|
34
|
-
2. Read `tasks/lessons.md` if
|
|
35
|
-
3. Check
|
|
31
|
+
1. Read `tasks/findings.md` if exists — look for site context, target audience, business type.
|
|
32
|
+
2. Read `tasks/lessons.md` if exists — apply any SEO-related lessons.
|
|
33
|
+
3. Check `tasks/seo-findings.md` if exists — read last dated section to populate "Passed Checks".
|
|
36
34
|
|
|
37
35
|
## Mode Detection
|
|
38
36
|
|
|
39
37
|
### Source Mode — Always Active
|
|
40
38
|
|
|
41
|
-
Scan
|
|
39
|
+
Scan for template files:
|
|
42
40
|
|
|
43
41
|
| Extension | Framework |
|
|
44
42
|
|-----------|-----------|
|
|
@@ -56,68 +54,62 @@ Print: `"Source mode: found N template files ([extensions detected])"`
|
|
|
56
54
|
|
|
57
55
|
### Server Mode — Optional
|
|
58
56
|
|
|
59
|
-
Probe ports in parallel (background curl
|
|
60
|
-
- Ports: 3000, 5173, 8000, 8080, 4321, 4000, 8888
|
|
61
|
-
- Command: `curl -s -I --max-time 2 http://localhost:PORT` (HEAD request to capture both status code and headers)
|
|
62
|
-
- Use the first port that returns HTTP 200 **and** has a `Content-Type: text/html` response header
|
|
57
|
+
Probe ports in parallel (background curl): `curl -s -I --max-time 2 http://localhost:PORT`
|
|
63
58
|
|
|
64
|
-
|
|
59
|
+
Ports: 3000, 5173, 8000, 8080, 4321, 4000, 8888
|
|
65
60
|
|
|
66
|
-
|
|
61
|
+
Use first port returning HTTP 200 **and** `Content-Type: text/html` header. Skip ports without `text/html` (may be DB, gRPC, etc.).
|
|
67
62
|
|
|
68
|
-
|
|
63
|
+
- Qualifies: `"Server mode: detected running dev server at http://localhost:PORT"`
|
|
64
|
+
- None qualify: `"Server mode: no dev server detected — skipping Phase 2. Start your dev server and re-run for full audit."`
|
|
69
65
|
|
|
70
|
-
|
|
66
|
+
Confirm detected URL looks correct before trusting Phase 2 results.
|
|
71
67
|
|
|
72
68
|
## Phase 1 — Source Audit
|
|
73
69
|
|
|
74
70
|
### Technical SEO
|
|
75
71
|
|
|
76
|
-
- `robots.txt` — exists in project root or `public/`; does NOT contain `Disallow: /`
|
|
72
|
+
- `robots.txt` — exists in project root or `public/`; does NOT contain `Disallow: /`
|
|
77
73
|
- `sitemap.xml` — exists in project root or `public/`; referenced in `robots.txt` via `Sitemap:` directive
|
|
78
|
-
- `<html lang="">` — present on all layout/root templates
|
|
74
|
+
- `<html lang="">` — present and non-empty on all layout/root templates
|
|
79
75
|
- Canonical tags — `<link rel="canonical">` present on key page templates
|
|
80
76
|
- No accidental `<meta name="robots" content="noindex">` on public-facing pages
|
|
81
|
-
- No hardcoded `http://` asset URLs
|
|
77
|
+
- No hardcoded `http://` asset URLs (mixed content risk)
|
|
82
78
|
|
|
83
79
|
### On-Page SEO
|
|
84
80
|
|
|
85
|
-
- `<title>` — present in `<head>`, unique across pages, 50–60
|
|
86
|
-
- `<meta name="description">` — present in `<head>`, unique across pages, 150–160
|
|
87
|
-
- Exactly one `<h1>` per page template
|
|
81
|
+
- `<title>` — present in `<head>`, unique across pages, 50–60 chars
|
|
82
|
+
- `<meta name="description">` — present in `<head>`, unique across pages, 150–160 chars
|
|
83
|
+
- Exactly one `<h1>` per page template
|
|
88
84
|
- Heading hierarchy not skipped (no jumping from `<h2>` to `<h4>`)
|
|
89
|
-
- All `<img>` tags have `alt` attribute
|
|
90
|
-
- Internal `<a>` link text is descriptive — flag
|
|
91
|
-
- Image filenames are descriptive — flag
|
|
85
|
+
- All `<img>` tags have `alt` attribute — flag empty alt on non-decorative images
|
|
86
|
+
- Internal `<a>` link text is descriptive — flag: "click here", "here", "read more", "link", "this"
|
|
87
|
+
- Image filenames are descriptive — flag: `img001`, `IMG_`, `photo`, `image`, `DSC_`, `screenshot` with no context
|
|
92
88
|
|
|
93
89
|
### Content Signals
|
|
94
90
|
|
|
95
|
-
-
|
|
96
|
-
- Twitter Card
|
|
97
|
-
- JSON-LD
|
|
98
|
-
-
|
|
91
|
+
- OG tags: `og:title`, `og:description`, `og:url`, `og:image` all present in layout
|
|
92
|
+
- Twitter Card: `twitter:card` present
|
|
93
|
+
- JSON-LD: look for `<script type="application/ld+json">` — note presence/absence; do NOT validate schema
|
|
94
|
+
- `<html lang="">` matches expected locale
|
|
99
95
|
|
|
100
96
|
## Phase 2 — Server Audit (Optional)
|
|
101
97
|
|
|
102
98
|
If server detected:
|
|
103
99
|
|
|
104
|
-
1. Fetch `/` and discover up to 4 additional pages (from `<a>`
|
|
105
|
-
2. For each page
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
- Rendered OG tags vs source template
|
|
110
|
-
3. Flag mismatches: `"/about — Source template declares <title>About Us</title> but rendered output shows <title>My App</title> — framework may be overriding"`
|
|
111
|
-
4. Check HTTP status codes — flag any key page returning non-200
|
|
112
|
-
5. Check for redirect chains on common pages (/ → /home → /index is a chain)
|
|
100
|
+
1. Fetch `/` and discover up to 4 additional pages (from `<a>` hrefs or sitemap.xml).
|
|
101
|
+
2. For each page, compare rendered vs source template: `<title>`, `<meta name="description">`, `<h1>`, OG tags.
|
|
102
|
+
3. Flag mismatches: `"/about — Source template declares X but rendered output shows Y — framework may be overriding"`
|
|
103
|
+
4. Check HTTP status codes — flag any key page returning non-200.
|
|
104
|
+
5. Check for redirect chains (e.g., / → /home → /index).
|
|
113
105
|
|
|
114
|
-
|
|
106
|
+
Note in report: "Structured data detected but NOT validated — use Google Rich Results Test (https://search.google.com/test/rich-results) to verify schema markup."
|
|
115
107
|
|
|
116
108
|
## Phase 3 — Ask Before Fix
|
|
117
109
|
|
|
118
|
-
After
|
|
110
|
+
After Phase 1 (and Phase 2 if run):
|
|
119
111
|
|
|
120
|
-
1. Collect all auto-fixable findings
|
|
112
|
+
1. Collect all auto-fixable findings.
|
|
121
113
|
2. Display numbered list:
|
|
122
114
|
|
|
123
115
|
```
|
|
@@ -130,37 +122,33 @@ Found N auto-fixable issues:
|
|
|
130
122
|
Apply mechanical fixes? [y/N]
|
|
131
123
|
```
|
|
132
124
|
|
|
133
|
-
3. Wait for user response
|
|
134
|
-
4. On `y`: apply each fix
|
|
135
|
-
5. On `n`: mark all
|
|
125
|
+
3. Wait for user response.
|
|
126
|
+
4. On `y`: apply each fix, log `"Fixed: [description] in [file:line]"`, mark `- [x]`. On failure: log error, mark `- [ ]`, continue.
|
|
127
|
+
5. On `n`: mark all `- [ ]` with fix instructions.
|
|
136
128
|
|
|
137
129
|
## Mechanical Fixes Reference
|
|
138
130
|
|
|
139
|
-
|
|
131
|
+
**Can auto-apply (with confirmation):**
|
|
140
132
|
|
|
141
133
|
| Issue | Fix Applied |
|
|
142
134
|
|-------|------------|
|
|
143
|
-
| Missing `<title>`
|
|
135
|
+
| Missing `<title>` | Add `<title>TODO: Add page title (50-60 chars)</title>` |
|
|
144
136
|
| Missing `<meta name="description">` | Add `<meta name="description" content="TODO: Add description (150-160 chars)">` |
|
|
145
|
-
| `<img>` missing `alt`
|
|
137
|
+
| `<img>` missing `alt` | Add `alt="TODO: Describe this image for screen readers"` |
|
|
146
138
|
| Missing `<link rel="canonical">` | Add `<link rel="canonical" href="TODO: Add canonical URL">` |
|
|
147
139
|
| Missing `robots.txt` | Create `robots.txt`: `User-agent: *\nAllow: /\nSitemap: /sitemap.xml` |
|
|
148
|
-
| Missing `sitemap.xml` | Create
|
|
149
|
-
| Multiple `<h1>`
|
|
150
|
-
| Missing OG tags | Add `og:title`, `og:description`, `og:url` block (
|
|
151
|
-
| Missing `<html lang="">` | Add `lang="en"` —
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
- Content quality
|
|
155
|
-
-
|
|
156
|
-
- Title/description CONTENT (only adds TODOs)
|
|
157
|
-
- Schema markup content (only flags missing)
|
|
158
|
-
- Backlink strategy
|
|
159
|
-
- `<meta name="robots" content="noindex">` removal — only the developer can confirm whether a page is intentionally noindexed
|
|
140
|
+
| Missing `sitemap.xml` | Create scaffold with homepage entry |
|
|
141
|
+
| Multiple `<h1>` | Demote 2nd, 3rd... `<h1>` to `<h2>` |
|
|
142
|
+
| Missing OG tags | Add `og:title`, `og:description`, `og:url` block (TODO placeholders) |
|
|
143
|
+
| Missing `<html lang="">` | Add `lang="en"` — note: verify correct language code |
|
|
144
|
+
|
|
145
|
+
**Cannot auto-apply (report only):**
|
|
146
|
+
- Content quality, keyword targeting, title/description content, schema markup content, backlink strategy
|
|
147
|
+
- `<meta name="robots" content="noindex">` removal — developer must confirm intentional noindex
|
|
160
148
|
|
|
161
149
|
## Generate Report
|
|
162
150
|
|
|
163
|
-
|
|
151
|
+
Append to `tasks/seo-findings.md` with date header. Never overwrite.
|
|
164
152
|
|
|
165
153
|
```markdown
|
|
166
154
|
# SEO Audit — YYYY-MM-DD
|
|
@@ -198,10 +186,10 @@ Write to `tasks/seo-findings.md` — append with date header, never overwrite.
|
|
|
198
186
|
|
|
199
187
|
## Content Strategy — Manual Action
|
|
200
188
|
|
|
201
|
-
- [ ] No JSON-LD structured data detected — consider adding schema markup (Article / Product / LocalBusiness / FAQPage)
|
|
202
|
-
- [ ] `og:image` missing — social shares will have no preview image. Add a default OG image in
|
|
189
|
+
- [ ] No JSON-LD structured data detected — consider adding schema markup (Article / Product / LocalBusiness / FAQPage). Validate at: https://search.google.com/test/rich-results
|
|
190
|
+
- [ ] `og:image` missing — social shares will have no preview image. Add a default OG image in layout.
|
|
203
191
|
- [ ] Submit `sitemap.xml` to Google Search Console for faster indexing
|
|
204
|
-
- [ ] Title tags
|
|
192
|
+
- [ ] Title tags present but content is generic ("TODO") — research target keywords per page
|
|
205
193
|
|
|
206
194
|
## Passed Checks
|
|
207
195
|
|
|
@@ -232,49 +220,40 @@ Write to `tasks/seo-findings.md` — append with date header, never overwrite.
|
|
|
232
220
|
| **Total** | **11** | **1** |
|
|
233
221
|
```
|
|
234
222
|
|
|
235
|
-
**Never overwrite** `tasks/seo-findings.md` — append new audits with a date header.
|
|
236
|
-
|
|
237
223
|
## When Done
|
|
238
224
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
> "Technical SEO is solid. **N medium/low polish items** and **N content strategy items** noted in `tasks/seo-findings.md`. Check off items as you address them."
|
|
244
|
-
|
|
245
|
-
If all clean:
|
|
246
|
-
> "SEO audit passed — no issues found. `tasks/seo-findings.md` updated with clean baseline."
|
|
247
|
-
|
|
248
|
-
If fixes were declined (`n`):
|
|
249
|
-
> "SEO audit complete. **N auto-fixable issues** left open (fixes declined). Checklist in `tasks/seo-findings.md` — check off items as you manually address them."
|
|
225
|
+
- Critical or High open: `"SEO audit complete. N critical/high issues need attention before this site will rank well. Findings in tasks/seo-findings.md."`
|
|
226
|
+
- Only Medium/Low/Content Strategy open: `"Technical SEO is solid. N medium/low polish items and N content strategy items noted in tasks/seo-findings.md."`
|
|
227
|
+
- All clean: `"SEO audit passed — no issues found. tasks/seo-findings.md updated with clean baseline."`
|
|
228
|
+
- Fixes declined: `"SEO audit complete. N auto-fixable issues left open (fixes declined). Checklist in tasks/seo-findings.md."`
|
|
250
229
|
|
|
251
230
|
---
|
|
252
231
|
|
|
253
232
|
## Fix & Retest Protocol
|
|
254
233
|
|
|
255
|
-
|
|
234
|
+
Classify each SEO fix before committing:
|
|
256
235
|
|
|
257
|
-
**a. Template/config change** (adding
|
|
236
|
+
**a. Template/config change** (adding meta tag, fixing alt text, scaffolding robots.txt, adding lang, creating sitemap.xml) → commit and re-run `/sk:seo-audit`. No test update needed.
|
|
258
237
|
|
|
259
|
-
**b. Logic change** (changing how
|
|
260
|
-
1. Update or add failing unit tests for
|
|
238
|
+
**b. Logic change** (changing how framework generates meta tags, modifying layout data-fetching/rendering, changing routing affecting canonical URLs):
|
|
239
|
+
1. Update or add failing unit tests for new behavior
|
|
261
240
|
2. Re-run `/sk:test` — must pass at 100% coverage
|
|
262
|
-
3. Commit
|
|
263
|
-
4. Re-run `/sk:seo-audit` to verify
|
|
241
|
+
3. Commit tests + fix together
|
|
242
|
+
4. Re-run `/sk:seo-audit` to verify fix resolved the finding
|
|
264
243
|
|
|
265
|
-
|
|
244
|
+
Common logic-change examples:
|
|
266
245
|
- Changing a Next.js `generateMetadata()` function → update tests asserting metadata output
|
|
267
|
-
- Modifying a Laravel controller
|
|
268
|
-
- Changing a Vue component
|
|
246
|
+
- Modifying a Laravel controller setting page title → update feature tests
|
|
247
|
+
- Changing a Vue component injecting `<head>` tags → update component tests
|
|
269
248
|
|
|
270
249
|
---
|
|
271
250
|
|
|
272
251
|
## Model Routing
|
|
273
252
|
|
|
274
|
-
Read `.shipkit/config.json` from
|
|
253
|
+
Read `.shipkit/config.json` from project root if it exists.
|
|
275
254
|
|
|
276
|
-
- If `model_overrides["sk:seo-audit"]` is set, use that model —
|
|
277
|
-
- Otherwise use
|
|
255
|
+
- If `model_overrides["sk:seo-audit"]` is set, use that model — takes precedence.
|
|
256
|
+
- Otherwise use `profile` field. Default: `balanced`.
|
|
278
257
|
|
|
279
258
|
| Profile | Model |
|
|
280
259
|
|---------|-------|
|
|
@@ -283,4 +262,4 @@ Read `.shipkit/config.json` from the project root if it exists.
|
|
|
283
262
|
| `balanced` | sonnet |
|
|
284
263
|
| `budget` | haiku |
|
|
285
264
|
|
|
286
|
-
|
|
265
|
+
When spawning sub-agents via the Agent tool, pass `model: "<resolved-model>"`.
|
|
@@ -124,6 +124,109 @@ On **first-time setup** (no existing `CLAUDE.md` or `tasks/findings.md`), run a
|
|
|
124
124
|
|
|
125
125
|
Skip this phase on re-runs (when `tasks/findings.md` already contains "Reconnaissance").
|
|
126
126
|
|
|
127
|
+
## Phase 0.5: Stack Detection + Project-Level Skill Installation
|
|
128
|
+
|
|
129
|
+
After reconnaissance, detect the project stack and install only relevant skills, agents, and rules at the project level.
|
|
130
|
+
|
|
131
|
+
**Reference:** Read `${CLAUDE_SKILL_DIR}/references/skill-profiles.md` for the full categorization matrix.
|
|
132
|
+
|
|
133
|
+
### Step 1: Detect Stack
|
|
134
|
+
|
|
135
|
+
Scan project root for stack indicators (in priority order):
|
|
136
|
+
|
|
137
|
+
| Priority | Signal | Stack | Capabilities |
|
|
138
|
+
|----------|--------|-------|-------------|
|
|
139
|
+
| 1 | `composer.json` + `laravel/framework` | laravel | web, database, api |
|
|
140
|
+
| 2 | `package.json` + `next` | nextjs | web |
|
|
141
|
+
| 3 | `package.json` + `nuxt` | nuxt | web |
|
|
142
|
+
| 4 | `package.json` + `react` (no next) | react | web |
|
|
143
|
+
| 5 | `package.json` + `vue` (no nuxt) | vue | web |
|
|
144
|
+
| 6 | `app.json` or `app.config.ts` | expo | mobile |
|
|
145
|
+
| 7 | `react-native.config.js` | react-native | mobile |
|
|
146
|
+
| 8 | `pubspec.yaml` | flutter | mobile |
|
|
147
|
+
| 9 | `package.json` + `express` | express | api |
|
|
148
|
+
| 10 | `go.mod` | go | api |
|
|
149
|
+
| 11 | `Cargo.toml` | rust | api |
|
|
150
|
+
| 12 | `pyproject.toml` / `requirements.txt` | python | api |
|
|
151
|
+
| 13 | `Gemfile` + `rails` | rails | web, database, api |
|
|
152
|
+
|
|
153
|
+
Sub-detect database capability (within any stack):
|
|
154
|
+
- `prisma/schema.prisma` → add `database` capability
|
|
155
|
+
- `drizzle.config.ts` / `.js` → add `database` capability
|
|
156
|
+
- `database/migrations/` (Laravel) → add `database` capability
|
|
157
|
+
- `alembic/` → add `database` capability
|
|
158
|
+
- `db/migrate/` (Rails) → add `database` capability
|
|
159
|
+
|
|
160
|
+
Display result and allow override:
|
|
161
|
+
```
|
|
162
|
+
Detected: [stack] — capabilities: [web, database, api]
|
|
163
|
+
[N] skills, [N] agents, [N] rules will be installed.
|
|
164
|
+
Override? (enter to accept, or type capabilities to add/remove)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Step 2: Write Config
|
|
168
|
+
|
|
169
|
+
Write detection results to `.shipkit/config.json` (merge additively, preserve existing fields like `profile`):
|
|
170
|
+
|
|
171
|
+
```json
|
|
172
|
+
{
|
|
173
|
+
"stack": {
|
|
174
|
+
"detected": "<stack>",
|
|
175
|
+
"detected_at": "<YYYY-MM-DD>",
|
|
176
|
+
"capabilities": ["web", "database"]
|
|
177
|
+
},
|
|
178
|
+
"skills": {
|
|
179
|
+
"extra": [],
|
|
180
|
+
"disabled": []
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Step 3: Install Project-Level Skills
|
|
186
|
+
|
|
187
|
+
Using the categorization from `skill-profiles.md`, determine the install set:
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
installed = universal_skills + capability_add_ons(capabilities) + extra - disabled - mobile_exclusions
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Copy matching skills from `~/.claude/skills/` to `.claude/skills/` in the project:
|
|
194
|
+
- Only copy skill directories that match the install set
|
|
195
|
+
- Skip skills that already exist in the project's `.claude/skills/`
|
|
196
|
+
- If a skill exists in project but is NOT in the install set and NOT in `extra`, leave it (don't remove on first setup — only `setup-optimizer` removes)
|
|
197
|
+
|
|
198
|
+
### Step 4: Install Project-Level Agents + Rules
|
|
199
|
+
|
|
200
|
+
**Agents** — copy from `~/.claude/agents/` to `.claude/agents/` in the project:
|
|
201
|
+
|
|
202
|
+
| Stack | Agents to install |
|
|
203
|
+
|-------|------------------|
|
|
204
|
+
| all | architect, qa-engineer, debugger, code-reviewer, security-reviewer, performance-optimizer, refactor-specialist, tech-writer, devops-engineer |
|
|
205
|
+
| laravel, express, go, python, rust, rails | + backend-dev |
|
|
206
|
+
| react, nextjs, vue, nuxt, svelte | + frontend-dev |
|
|
207
|
+
| expo, react-native, flutter | + mobile-dev |
|
|
208
|
+
| any with `database` capability | + database-architect |
|
|
209
|
+
|
|
210
|
+
**Rules** — copy from `~/.claude/rules/` to `.claude/rules/` in the project:
|
|
211
|
+
|
|
212
|
+
| Stack | Rules to install |
|
|
213
|
+
|-------|-----------------|
|
|
214
|
+
| all | tests.md, api.md |
|
|
215
|
+
| laravel | + laravel.md |
|
|
216
|
+
| react, nextjs | + react.md |
|
|
217
|
+
| vue, nuxt | + vue.md |
|
|
218
|
+
| any with `database` capability | + migrations.md |
|
|
219
|
+
|
|
220
|
+
### Step 5: Generate CLAUDE.md Commands Table
|
|
221
|
+
|
|
222
|
+
When generating CLAUDE.md, the Commands table should only list installed skills (not all 44+). Read the installed skills from `.claude/skills/` in the project and generate the table dynamically.
|
|
223
|
+
|
|
224
|
+
Display installation summary:
|
|
225
|
+
```
|
|
226
|
+
Installed: [N] skills, [N] agents, [N] rules for [stack] stack.
|
|
227
|
+
[M] opt-in skills available (activate via .shipkit/config.json "extra" field).
|
|
228
|
+
```
|
|
229
|
+
|
|
127
230
|
## Generation Inputs
|
|
128
231
|
|
|
129
232
|
This skill detects:
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# ShipKit Skill Profiles — Stack-Based Filtering
|
|
2
|
+
|
|
3
|
+
**Last Updated:** 2026-03-29
|
|
4
|
+
**Total Skills:** 44 | **Agents:** 13 | **Rules:** 6
|
|
5
|
+
|
|
6
|
+
This file is the source of truth for which skills, agents, and rules get installed per project. Read by `sk:setup-claude` (initial setup) and `sk:setup-optimizer` (ongoing sync).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Universal Skills (always installed — 25 skills)
|
|
11
|
+
|
|
12
|
+
| Skill | Purpose |
|
|
13
|
+
|-------|---------|
|
|
14
|
+
| sk:start | Smart entry point — classifies task, routes to workflow |
|
|
15
|
+
| sk:context | Load project context + session brief |
|
|
16
|
+
| sk:brainstorming | Explore requirements before implementation |
|
|
17
|
+
| sk:write-plan | Decision-complete plan into todo.md |
|
|
18
|
+
| sk:execute-plan | Implement tasks in batches with progress logging |
|
|
19
|
+
| sk:write-tests | TDD: write failing tests before implementation |
|
|
20
|
+
| sk:test | Run all test suites, verify 100% coverage |
|
|
21
|
+
| sk:lint | Auto-detect and run all linters |
|
|
22
|
+
| sk:debug | Structured bug investigation |
|
|
23
|
+
| sk:review | 7-dimension self-review |
|
|
24
|
+
| sk:smart-commit | Conventional commit with approval |
|
|
25
|
+
| sk:gates | All quality gates in parallel batches |
|
|
26
|
+
| sk:safety-guard | Protect against destructive operations |
|
|
27
|
+
| sk:scope-check | Detect scope creep vs plan |
|
|
28
|
+
| sk:save-session | Save session state for continuity |
|
|
29
|
+
| sk:resume-session | Restore previously saved session |
|
|
30
|
+
| sk:learn | Extract reusable patterns from session |
|
|
31
|
+
| sk:retro | Post-ship retrospective |
|
|
32
|
+
| sk:health | Harness self-audit scorecard |
|
|
33
|
+
| sk:context-budget | Audit context window token consumption |
|
|
34
|
+
| sk:setup-claude | Bootstrap project scaffolding |
|
|
35
|
+
| sk:setup-optimizer | Diagnose + update workflow + enrich CLAUDE.md |
|
|
36
|
+
| sk:release | Version bump + changelog + tag |
|
|
37
|
+
| sk:fast-track | Abbreviated workflow for small changes |
|
|
38
|
+
| sk:skill-creator | Create or modify skills |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Stack-Specific Skills
|
|
43
|
+
|
|
44
|
+
### Laravel (+4 skills)
|
|
45
|
+
|
|
46
|
+
| Skill | Purpose |
|
|
47
|
+
|-------|---------|
|
|
48
|
+
| sk:laravel-new | Scaffold fresh Laravel app |
|
|
49
|
+
| sk:laravel-init | Configure existing Laravel project |
|
|
50
|
+
| sk:laravel-deploy | Deploy to Laravel Cloud |
|
|
51
|
+
| sk:schema-migrate | Multi-ORM schema change analysis |
|
|
52
|
+
|
|
53
|
+
### Web (+5 skills)
|
|
54
|
+
|
|
55
|
+
| Skill | Purpose |
|
|
56
|
+
|-------|---------|
|
|
57
|
+
| sk:frontend-design | UI mockup before implementation |
|
|
58
|
+
| sk:accessibility | WCAG 2.1 AA audit |
|
|
59
|
+
| sk:seo-audit | SEO audit (source + dev server) |
|
|
60
|
+
| sk:website | Build multi-page marketing website |
|
|
61
|
+
| sk:mvp | Generate MVP with landing page + app |
|
|
62
|
+
|
|
63
|
+
### Database (+1 skill)
|
|
64
|
+
|
|
65
|
+
| Skill | Purpose |
|
|
66
|
+
|-------|---------|
|
|
67
|
+
| sk:schema-migrate | Multi-ORM schema change analysis |
|
|
68
|
+
|
|
69
|
+
### API (+2 skills)
|
|
70
|
+
|
|
71
|
+
| Skill | Purpose |
|
|
72
|
+
|-------|---------|
|
|
73
|
+
| sk:api-design | Design API contracts before implementation |
|
|
74
|
+
| sk:team | Parallel domain agents (BE + FE + QA) |
|
|
75
|
+
|
|
76
|
+
### Mobile (exclude from web)
|
|
77
|
+
|
|
78
|
+
No additional skills. **Exclude:** sk:e2e (Playwright), sk:seo-audit, sk:accessibility, sk:website.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Opt-In Skills (manual activation only — 8 skills)
|
|
83
|
+
|
|
84
|
+
| Skill | Purpose | When to activate |
|
|
85
|
+
|-------|---------|-----------------|
|
|
86
|
+
| sk:autopilot | Hands-free workflow, all 8 steps | Well-defined tasks, minimal steering |
|
|
87
|
+
| sk:eval | Run evaluations for agent reliability | Eval-driven development |
|
|
88
|
+
| sk:ci | Set up GitHub Actions or GitLab CI | First-time CI setup |
|
|
89
|
+
| sk:reverse-doc | Generate docs from existing code | Onboarding, formalizing prototypes |
|
|
90
|
+
| sk:features | Sync feature specs with implementation | Feature spec maintenance |
|
|
91
|
+
| sk:e2e | E2E behavioral verification | Web projects with Playwright/Cypress |
|
|
92
|
+
| sk:dashboard | Workflow Kanban board (localhost) | Multi-worktree progress tracking |
|
|
93
|
+
| sk:plugin | Package skills as distributable plugin | Team skill sharing |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Quality Gate Skills (part of sk:gates — always installed)
|
|
98
|
+
|
|
99
|
+
| Skill | Gate role |
|
|
100
|
+
|-------|----------|
|
|
101
|
+
| sk:perf | Performance audit |
|
|
102
|
+
| sk:security-check | OWASP security audit |
|
|
103
|
+
|
|
104
|
+
These are installed universally because they run inside `sk:gates`. Perf auto-skips if no frontend+DB keywords. Security always runs.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Stack Detection Rules
|
|
109
|
+
|
|
110
|
+
| Priority | Signal | Detected Stack | Capabilities |
|
|
111
|
+
|----------|--------|---------------|-------------|
|
|
112
|
+
| 1 | `composer.json` + `laravel/framework` | laravel | web, database, api |
|
|
113
|
+
| 2 | `package.json` + `next` | nextjs | web |
|
|
114
|
+
| 3 | `package.json` + `nuxt` | nuxt | web |
|
|
115
|
+
| 4 | `package.json` + `react` (no next) | react | web |
|
|
116
|
+
| 5 | `package.json` + `vue` (no nuxt) | vue | web |
|
|
117
|
+
| 6 | `package.json` + `svelte` | svelte | web |
|
|
118
|
+
| 7 | `app.json` or `app.config.ts` | expo | mobile |
|
|
119
|
+
| 8 | `react-native.config.js` | react-native | mobile |
|
|
120
|
+
| 9 | `pubspec.yaml` | flutter | mobile |
|
|
121
|
+
| 10 | `package.json` + `express` | express | api |
|
|
122
|
+
| 11 | `go.mod` | go | api |
|
|
123
|
+
| 12 | `Cargo.toml` | rust | api |
|
|
124
|
+
| 13 | `pyproject.toml` / `requirements.txt` | python | api |
|
|
125
|
+
| 14 | `Gemfile` + `rails` | rails | web, database, api |
|
|
126
|
+
|
|
127
|
+
### Capability → Add-on mapping
|
|
128
|
+
|
|
129
|
+
| Capability | Add-on skills |
|
|
130
|
+
|-----------|---------------|
|
|
131
|
+
| web | sk:frontend-design, sk:accessibility, sk:seo-audit, sk:website, sk:mvp |
|
|
132
|
+
| database | sk:schema-migrate |
|
|
133
|
+
| api | sk:api-design, sk:team |
|
|
134
|
+
| laravel | sk:laravel-new, sk:laravel-init, sk:laravel-deploy |
|
|
135
|
+
| mobile | Exclude: sk:e2e, sk:seo-audit, sk:accessibility, sk:website |
|
|
136
|
+
|
|
137
|
+
### Database sub-detection (within any stack)
|
|
138
|
+
|
|
139
|
+
| Signal | ORM |
|
|
140
|
+
|--------|-----|
|
|
141
|
+
| `prisma/schema.prisma` | Prisma → add `database` capability |
|
|
142
|
+
| `drizzle.config.ts` / `.js` | Drizzle → add `database` capability |
|
|
143
|
+
| `database/migrations/` (Laravel) | Laravel migrations → add `database` capability |
|
|
144
|
+
| `alembic/` | SQLAlchemy → add `database` capability |
|
|
145
|
+
| `db/migrate/` (Rails) | Rails migrations → add `database` capability |
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Agent → Stack Mapping
|
|
150
|
+
|
|
151
|
+
| Agent | Stacks | Notes |
|
|
152
|
+
|-------|--------|-------|
|
|
153
|
+
| architect | all | System design, universal |
|
|
154
|
+
| backend-dev | laravel, express, go, python, rust, rails | Backend implementation |
|
|
155
|
+
| frontend-dev | react, nextjs, vue, nuxt, svelte | Frontend implementation |
|
|
156
|
+
| mobile-dev | expo, react-native, flutter | Mobile-specific |
|
|
157
|
+
| database-architect | any with `database` capability | Schema design, migrations |
|
|
158
|
+
| qa-engineer | all | E2E test scenarios, universal |
|
|
159
|
+
| debugger | all | Bug investigation, universal |
|
|
160
|
+
| code-reviewer | all | Code quality review, universal |
|
|
161
|
+
| security-reviewer | all | OWASP audit, universal |
|
|
162
|
+
| performance-optimizer | all | Performance analysis, universal |
|
|
163
|
+
| refactor-specialist | all | Safe refactoring, universal |
|
|
164
|
+
| tech-writer | all | Documentation, universal |
|
|
165
|
+
| devops-engineer | all | CI/CD, deployment, universal |
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Rule → Stack Mapping
|
|
170
|
+
|
|
171
|
+
| Rule | Applies to stacks | Path patterns |
|
|
172
|
+
|------|------------------|---------------|
|
|
173
|
+
| tests.md | all | `tests/**`, `**/*.test.*`, `**/*.spec.*` |
|
|
174
|
+
| api.md | laravel, express, go, python, rails | `routes/api.php`, `**/controllers/**`, `src/api/**` |
|
|
175
|
+
| laravel.md | laravel | `app/**/*.php`, `routes/**`, `config/**` |
|
|
176
|
+
| react.md | react, nextjs | `**/*.{tsx,jsx}`, `resources/js/**` |
|
|
177
|
+
| vue.md | vue, nuxt | `**/*.vue`, `resources/js/**` |
|
|
178
|
+
| migrations.md | any with `database` capability | `database/migrations/**`, `prisma/**`, `db/migrate/**` |
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Installation Formula
|
|
183
|
+
|
|
184
|
+
For a given project with detected `stack` and `capabilities`:
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
installed_skills = universal_skills
|
|
188
|
+
+ capability_add_ons(capabilities)
|
|
189
|
+
+ config.skills.extra
|
|
190
|
+
- config.skills.disabled
|
|
191
|
+
- mobile_exclusions (if mobile stack)
|
|
192
|
+
|
|
193
|
+
installed_agents = universal_agents
|
|
194
|
+
+ stack_specific_agents(stack)
|
|
195
|
+
- agents not matching any detected stack
|
|
196
|
+
|
|
197
|
+
installed_rules = universal_rules (tests.md)
|
|
198
|
+
+ stack_matching_rules(stack, capabilities)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
User overrides (`extra`, `disabled`) are never touched by auto-detection.
|