@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.
@@ -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 regardless of framework (Laravel, Next.js, Nuxt, plain HTML, etc.). Run at any point after implementation is complete. NOT a numbered workflow step — invoke it independently like `/sk:debug`.
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 runs): scans template files directly for SEO signals
18
- - **Server mode** (optional): fetches from a running dev server to validate rendered output
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
- - **Never auto-apply fixes without explicit user confirmation.**
25
- - **Every finding must cite a specific `file:line`.**
26
- - **Every finding is a checkbox:** `- [ ]` (open) or `- [x]` (auto-fixed this run)
27
- - **Append to `tasks/seo-findings.md`** never overwrite (use date header per run)
28
- - **Degrade gracefully** if no server is running — skip Phase 2, note it in report
29
- - **Structured data validation requires external tools** (Google Rich Results Test) — flag it, don't skip silently
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 it exists — look for site context, target audience, business type (helps tailor content strategy recommendations)
34
- 2. Read `tasks/lessons.md` if it exists — apply any SEO-related lessons
35
- 3. Check if `tasks/seo-findings.md` exists — if yes, read the last dated section to identify previously flagged items (used to populate "Passed Checks" in the new report)
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 the project for template files:
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 processes) to avoid 14-second worst-case serial timeout:
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
- If a port returns 200 but no `Content-Type: text/html` header, skip it it is likely a non-HTTP service (e.g., a database, gRPC server) and not a web app. Try the next port.
59
+ Ports: 3000, 5173, 8000, 8080, 4321, 4000, 8888
65
60
 
66
- If any port qualifies: `"Server mode: detected running dev server at http://localhost:PORT"`
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
- If none respond or qualify: `"Server mode: no dev server detected skipping Phase 2. Start your dev server and re-run for full audit."`
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
- > Note: confirm the detected URL looks correct before trusting Phase 2 results.
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: /` blocking all crawlers
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 (not empty)
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 in templates (mixed content risk)
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 characters
86
- - `<meta name="description">` — present in `<head>`, unique across pages, 150–160 characters
87
- - Exactly one `<h1>` per page template (not zero, not two+)
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 (even if empty for decorative but flag empty alt on non-decorative images)
90
- - Internal `<a>` link text is descriptive — flag anchors with text: "click here", "here", "read more", "link", "this"
91
- - Image filenames are descriptive — flag patterns like `img001`, `IMG_`, `photo`, `image`, `DSC_`, `screenshot` with no context
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
- - Open Graph tags: `og:title`, `og:description`, `og:url`, `og:image` all present in layout
96
- - Twitter Card tags: `twitter:card` present
97
- - JSON-LD structured data block: look for `<script type="application/ld+json">` — note presence/absence; do NOT validate schema (requires external tool)
98
- - Page `<html lang="">` matches expected locale
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>` href values in homepage, or from sitemap.xml)
105
- 2. For each page fetched, extract and compare:
106
- - Rendered `<title>` vs source template value
107
- - Rendered `<meta name="description">` vs source template value
108
- - Rendered `<h1>` vs source template value
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
- > 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."
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 completing Phase 1 (and Phase 2 if run):
110
+ After Phase 1 (and Phase 2 if run):
119
111
 
120
- 1. Collect all auto-fixable findings (see Mechanical Fixes Reference below)
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 in order, log `"Fixed: [description] in [file:line]"`, mark as `- [x]` in report. On individual fix failure: log the error, mark that item `- [ ]`, and continue with remaining fixes.
135
- 5. On `n`: mark all as `- [ ]` in report with Fix instructions
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
- What this skill CAN auto-apply when user confirms:
131
+ **Can auto-apply (with confirmation):**
140
132
 
141
133
  | Issue | Fix Applied |
142
134
  |-------|------------|
143
- | Missing `<title>` in `<head>` | Add `<title>TODO: Add page title (50-60 chars)</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` attribute | Add `alt="TODO: Describe this image for screen readers"` |
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 `sitemap.xml` scaffold with homepage entry |
149
- | Multiple `<h1>` on same page | Demote 2nd, 3rd... `<h1>` to `<h2>` |
150
- | Missing OG tags | Add `og:title`, `og:description`, `og:url` block (with TODO placeholders) |
151
- | Missing `<html lang="">` | Add `lang="en"` — **note in output: verify correct language code** |
152
-
153
- Things this skill CANNOT auto-apply (report only):
154
- - Content quality improvements
155
- - Keyword targeting
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
- Write to `tasks/seo-findings.md` — append with date header, never overwrite.
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) based on your content type. Validate at: https://search.google.com/test/rich-results
202
- - [ ] `og:image` missing — social shares will have no preview image. Add a default OG image in your layout.
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 are present but content is generic ("TODO") — research target keywords for each page
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
- If Critical or High items are open:
240
- > "SEO audit complete. **N critical/high issues** need attention before this site will rank well. Findings and checklist in `tasks/seo-findings.md`."
241
-
242
- If only Medium/Low/Content Strategy open:
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
- When applying an SEO fix, classify it before committing:
234
+ Classify each SEO fix before committing:
256
235
 
257
- **a. Template/config change** (adding a meta tag, fixing alt text, scaffolding robots.txt, adding lang attribute, creating sitemap.xml) → commit and re-run `/sk:seo-audit`. No test update needed.
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 a framework generates meta tags, modifying a layout component's data-fetching or rendering logic, changing routing that affects canonical URLs) → trigger protocol:
260
- 1. Update or add failing unit tests for the new behavior
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 (tests + fix together in one commit)
263
- 4. Re-run `/sk:seo-audit` to verify the fix resolved the finding
241
+ 3. Commit tests + fix together
242
+ 4. Re-run `/sk:seo-audit` to verify fix resolved the finding
264
243
 
265
- **Common logic-change SEO fixes:**
244
+ Common logic-change examples:
266
245
  - Changing a Next.js `generateMetadata()` function → update tests asserting metadata output
267
- - Modifying a Laravel controller that sets page title → update feature tests
268
- - Changing a Vue component that injects `<head>` tags → update component tests
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 the project root if it exists.
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 — it takes precedence.
277
- - Otherwise use the `profile` field. Default: `balanced`.
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
- > `opus` = inherit (uses the current session model). When spawning sub-agents via the Agent tool, pass `model: "<resolved-model>"`.
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.