agileflow 3.2.1 → 3.4.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/CHANGELOG.md +10 -0
- package/README.md +6 -6
- package/lib/feature-flags.js +32 -4
- package/lib/skill-loader.js +0 -1
- package/package.json +1 -1
- package/scripts/agileflow-statusline.sh +81 -0
- package/scripts/babysit-clear-restore.js +154 -0
- package/scripts/claude-tmux.sh +120 -24
- package/scripts/claude-watchdog.sh +225 -0
- package/scripts/generators/agent-registry.js +14 -1
- package/scripts/generators/inject-babysit.js +22 -9
- package/scripts/generators/inject-help.js +19 -9
- package/scripts/lib/README-portable-tasks.md +424 -0
- package/scripts/lib/audit-cleanup.js +250 -0
- package/scripts/lib/audit-registry.js +248 -0
- package/scripts/lib/configure-detect.js +20 -0
- package/scripts/lib/feature-catalog.js +13 -2
- package/scripts/lib/gate-enforcer.js +295 -0
- package/scripts/lib/model-profiles.js +98 -0
- package/scripts/lib/signal-detectors.js +1 -1
- package/scripts/lib/skill-catalog.js +557 -0
- package/scripts/lib/skill-recommender.js +311 -0
- package/scripts/lib/tdd-phase-manager.js +455 -0
- package/scripts/lib/team-events.js +76 -8
- package/scripts/lib/tmux-group-colors.js +113 -0
- package/scripts/messaging-bridge.js +209 -1
- package/scripts/spawn-audit-sessions.js +549 -0
- package/scripts/team-manager.js +37 -16
- package/scripts/tmux-close-windows.sh +180 -0
- package/scripts/tmux-restore-window.sh +67 -0
- package/scripts/tmux-save-closed-window.sh +35 -0
- package/src/core/agents/ads-audit-budget.md +181 -0
- package/src/core/agents/ads-audit-compliance.md +169 -0
- package/src/core/agents/ads-audit-creative.md +164 -0
- package/src/core/agents/ads-audit-google.md +226 -0
- package/src/core/agents/ads-audit-meta.md +183 -0
- package/src/core/agents/ads-audit-tracking.md +197 -0
- package/src/core/agents/ads-consensus.md +322 -0
- package/src/core/agents/brainstorm-analyzer-features.md +169 -0
- package/src/core/agents/brainstorm-analyzer-growth.md +161 -0
- package/src/core/agents/brainstorm-analyzer-integration.md +172 -0
- package/src/core/agents/brainstorm-analyzer-market.md +147 -0
- package/src/core/agents/brainstorm-analyzer-ux.md +167 -0
- package/src/core/agents/brainstorm-consensus.md +237 -0
- package/src/core/agents/completeness-analyzer-api.md +190 -0
- package/src/core/agents/completeness-analyzer-conditional.md +201 -0
- package/src/core/agents/completeness-analyzer-handlers.md +159 -0
- package/src/core/agents/completeness-analyzer-imports.md +159 -0
- package/src/core/agents/completeness-analyzer-routes.md +182 -0
- package/src/core/agents/completeness-analyzer-state.md +188 -0
- package/src/core/agents/completeness-analyzer-stubs.md +198 -0
- package/src/core/agents/completeness-consensus.md +286 -0
- package/src/core/agents/perf-consensus.md +2 -2
- package/src/core/agents/security-consensus.md +2 -2
- package/src/core/agents/seo-analyzer-content.md +167 -0
- package/src/core/agents/seo-analyzer-images.md +187 -0
- package/src/core/agents/seo-analyzer-performance.md +206 -0
- package/src/core/agents/seo-analyzer-schema.md +176 -0
- package/src/core/agents/seo-analyzer-sitemap.md +172 -0
- package/src/core/agents/seo-analyzer-technical.md +144 -0
- package/src/core/agents/seo-consensus.md +289 -0
- package/src/core/agents/test-consensus.md +2 -2
- package/src/core/commands/ads/audit.md +375 -0
- package/src/core/commands/ads/budget.md +97 -0
- package/src/core/commands/ads/competitor.md +112 -0
- package/src/core/commands/ads/creative.md +85 -0
- package/src/core/commands/ads/google.md +112 -0
- package/src/core/commands/ads/landing.md +119 -0
- package/src/core/commands/ads/linkedin.md +112 -0
- package/src/core/commands/ads/meta.md +91 -0
- package/src/core/commands/ads/microsoft.md +115 -0
- package/src/core/commands/ads/plan.md +321 -0
- package/src/core/commands/ads/tiktok.md +129 -0
- package/src/core/commands/ads/youtube.md +124 -0
- package/src/core/commands/ads.md +128 -0
- package/src/core/commands/babysit.md +250 -1344
- package/src/core/commands/code/completeness.md +466 -0
- package/src/core/commands/{audit → code}/legal.md +26 -16
- package/src/core/commands/{audit → code}/logic.md +27 -16
- package/src/core/commands/{audit → code}/performance.md +30 -20
- package/src/core/commands/{audit → code}/security.md +32 -19
- package/src/core/commands/{audit → code}/test.md +30 -20
- package/src/core/commands/{discovery → ideate}/brief.md +12 -12
- package/src/core/commands/{discovery/new.md → ideate/discover.md} +13 -13
- package/src/core/commands/ideate/features.md +435 -0
- package/src/core/commands/seo/audit.md +373 -0
- package/src/core/commands/seo/competitor.md +174 -0
- package/src/core/commands/seo/content.md +107 -0
- package/src/core/commands/seo/geo.md +229 -0
- package/src/core/commands/seo/hreflang.md +140 -0
- package/src/core/commands/seo/images.md +96 -0
- package/src/core/commands/seo/page.md +198 -0
- package/src/core/commands/seo/plan.md +163 -0
- package/src/core/commands/seo/programmatic.md +131 -0
- package/src/core/commands/seo/references/cwv-thresholds.md +64 -0
- package/src/core/commands/seo/references/eeat-framework.md +110 -0
- package/src/core/commands/seo/references/quality-gates.md +91 -0
- package/src/core/commands/seo/references/schema-types.md +102 -0
- package/src/core/commands/seo/schema.md +183 -0
- package/src/core/commands/seo/sitemap.md +97 -0
- package/src/core/commands/seo/technical.md +100 -0
- package/src/core/commands/seo.md +107 -0
- package/src/core/commands/skill/list.md +68 -212
- package/src/core/commands/skill/recommend.md +216 -0
- package/src/core/commands/tdd-next.md +238 -0
- package/src/core/commands/tdd.md +210 -0
- package/src/core/experts/_core-expertise.yaml +105 -0
- package/src/core/experts/analytics/expertise.yaml +5 -99
- package/src/core/experts/codebase-query/expertise.yaml +3 -72
- package/src/core/experts/compliance/expertise.yaml +6 -72
- package/src/core/experts/database/expertise.yaml +9 -52
- package/src/core/experts/documentation/expertise.yaml +7 -140
- package/src/core/experts/integrations/expertise.yaml +7 -127
- package/src/core/experts/mentor/expertise.yaml +8 -35
- package/src/core/experts/monitoring/expertise.yaml +7 -49
- package/src/core/experts/performance/expertise.yaml +1 -26
- package/src/core/experts/security/expertise.yaml +9 -34
- package/src/core/experts/ui/expertise.yaml +6 -36
- package/src/core/knowledge/ads/ad-audit-checklist-scoring.md +424 -0
- package/src/core/knowledge/ads/ad-optimization-logic.md +590 -0
- package/src/core/knowledge/ads/ad-technical-specifications.md +385 -0
- package/src/core/knowledge/ads/definitive-advertising-reference-2026.md +506 -0
- package/src/core/knowledge/ads/paid-advertising-research-2026.md +445 -0
- package/src/core/templates/agileflow-metadata.json +15 -1
- package/tools/cli/installers/ide/_base-ide.js +42 -5
- package/tools/cli/installers/ide/claude-code.js +13 -4
- package/tools/cli/lib/content-injector.js +160 -12
- package/tools/cli/lib/docs-setup.js +1 -1
- package/src/core/commands/skill/create.md +0 -698
- package/src/core/commands/skill/delete.md +0 -316
- package/src/core/commands/skill/edit.md +0 -359
- package/src/core/commands/skill/test.md +0 -394
- package/src/core/commands/skill/upgrade.md +0 -552
- package/src/core/templates/skill-template.md +0 -117
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* model-profiles.js - Model resolution for audit subagents
|
|
3
|
+
*
|
|
4
|
+
* Resolves which model (haiku/sonnet/opus) to use for agent subagents.
|
|
5
|
+
* Models are specified inline via command arguments (MODEL=opus).
|
|
6
|
+
*
|
|
7
|
+
* Resolution order:
|
|
8
|
+
* 1. Explicit MODEL= argument (highest priority)
|
|
9
|
+
* 2. Agent frontmatter model (from .md file)
|
|
10
|
+
* 3. Fallback: 'haiku'
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* const { resolveModel, estimateCost } = require('./model-profiles');
|
|
14
|
+
* const model = resolveModel('opus', 'haiku'); // returns 'opus'
|
|
15
|
+
* const model2 = resolveModel(null, 'sonnet'); // returns 'sonnet'
|
|
16
|
+
* const model3 = resolveModel(null, null); // returns 'haiku'
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const VALID_MODELS = ['haiku', 'sonnet', 'opus'];
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Resolve which model to use for a given agent.
|
|
23
|
+
*
|
|
24
|
+
* Resolution order:
|
|
25
|
+
* 1. Explicit model argument (MODEL= from command)
|
|
26
|
+
* 2. Agent frontmatter model
|
|
27
|
+
* 3. Fallback: 'haiku'
|
|
28
|
+
*
|
|
29
|
+
* @param {string} [explicitModel] - MODEL= argument value
|
|
30
|
+
* @param {string} [frontmatterModel] - Model from agent .md frontmatter
|
|
31
|
+
* @returns {string} Model name: 'haiku', 'sonnet', or 'opus'
|
|
32
|
+
*/
|
|
33
|
+
function resolveModel(explicitModel, frontmatterModel) {
|
|
34
|
+
// 1. Explicit MODEL= argument
|
|
35
|
+
if (explicitModel && VALID_MODELS.includes(explicitModel.toLowerCase())) {
|
|
36
|
+
return explicitModel.toLowerCase();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// 2. Frontmatter model
|
|
40
|
+
if (frontmatterModel && VALID_MODELS.includes(frontmatterModel.toLowerCase())) {
|
|
41
|
+
return frontmatterModel.toLowerCase();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// 3. Fallback
|
|
45
|
+
return 'haiku';
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Validate a model name.
|
|
50
|
+
*
|
|
51
|
+
* @param {string} model - Model name to validate
|
|
52
|
+
* @returns {boolean} True if valid
|
|
53
|
+
*/
|
|
54
|
+
function isValidModel(model) {
|
|
55
|
+
return !!model && VALID_MODELS.includes(model.toLowerCase());
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Estimate cost multiplier for a model relative to haiku baseline.
|
|
60
|
+
*
|
|
61
|
+
* @param {string} model - Model name
|
|
62
|
+
* @param {number} [analyzerCount=5] - Number of analyzers
|
|
63
|
+
* @returns {{ multiplier: number, model: string, perAnalyzerCost: string }}
|
|
64
|
+
*/
|
|
65
|
+
function estimateCost(model, analyzerCount) {
|
|
66
|
+
let MODEL_PRICING;
|
|
67
|
+
try {
|
|
68
|
+
MODEL_PRICING = require('./team-events').MODEL_PRICING;
|
|
69
|
+
} catch (_) {
|
|
70
|
+
MODEL_PRICING = {
|
|
71
|
+
haiku: { input: 0.8, output: 4.0 },
|
|
72
|
+
sonnet: { input: 3.0, output: 15.0 },
|
|
73
|
+
opus: { input: 15.0, output: 75.0 },
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const count = analyzerCount || 5;
|
|
78
|
+
const resolved = resolveModel(model);
|
|
79
|
+
const pricing = MODEL_PRICING[resolved] || MODEL_PRICING.haiku;
|
|
80
|
+
const haikuPricing = MODEL_PRICING.haiku;
|
|
81
|
+
|
|
82
|
+
const multiplier = pricing.output / haikuPricing.output;
|
|
83
|
+
const perAnalyzer = `$${((pricing.input * 50000) / 1_000_000 + (pricing.output * 10000) / 1_000_000).toFixed(3)}`;
|
|
84
|
+
|
|
85
|
+
return {
|
|
86
|
+
multiplier: Math.round(multiplier * 100) / 100,
|
|
87
|
+
model: resolved,
|
|
88
|
+
perAnalyzerCost: perAnalyzer,
|
|
89
|
+
totalEstimate: `~$${(count * ((pricing.input * 50000) / 1_000_000 + (pricing.output * 10000) / 1_000_000)).toFixed(2)}`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
module.exports = {
|
|
94
|
+
VALID_MODELS,
|
|
95
|
+
resolveModel,
|
|
96
|
+
isValidModel,
|
|
97
|
+
estimateCost,
|
|
98
|
+
};
|
|
@@ -546,7 +546,7 @@ const FEATURE_DETECTORS = {
|
|
|
546
546
|
priority: 'medium',
|
|
547
547
|
trigger: `${coreFiles} source files modified - logic audit available`,
|
|
548
548
|
action: 'offer',
|
|
549
|
-
command: '/agileflow:
|
|
549
|
+
command: '/agileflow:code:logic',
|
|
550
550
|
phase: 'post-impl',
|
|
551
551
|
});
|
|
552
552
|
},
|
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* skill-catalog.js
|
|
4
|
+
*
|
|
5
|
+
* Two-tier skill discovery for AgileFlow:
|
|
6
|
+
*
|
|
7
|
+
* Tier 1: Curated picks (~60 vetted skills shipped with AgileFlow)
|
|
8
|
+
* - Organized by category (Frontend, Backend, Database, Testing, DevOps, Security)
|
|
9
|
+
* - Each entry has name, repo, description, tags, category, installCmd
|
|
10
|
+
*
|
|
11
|
+
* Tier 2: Live search from skills.sh via `npx skills search <keyword>`
|
|
12
|
+
* - Users always see curated picks first, then "Browse more on skills.sh"
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
'use strict';
|
|
16
|
+
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// Curated Skill Catalog
|
|
19
|
+
// =============================================================================
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Create a curated skill entry.
|
|
23
|
+
* @param {string} name - Skill display name
|
|
24
|
+
* @param {string} repo - GitHub owner/repo or registry identifier
|
|
25
|
+
* @param {string} description - Short description
|
|
26
|
+
* @param {string[]} tags - Technology tags for matching
|
|
27
|
+
* @param {string} category - Category grouping
|
|
28
|
+
* @returns {Object} Curated skill entry
|
|
29
|
+
*/
|
|
30
|
+
function skill(name, repo, description, tags, category) {
|
|
31
|
+
return {
|
|
32
|
+
name,
|
|
33
|
+
repo,
|
|
34
|
+
description,
|
|
35
|
+
tags,
|
|
36
|
+
category,
|
|
37
|
+
installCmd: `npx skills add ${repo}`,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Full curated catalog of vetted skills.
|
|
43
|
+
* Organized by category for display and filtered by tags for recommendations.
|
|
44
|
+
*/
|
|
45
|
+
const CURATED_SKILLS = [
|
|
46
|
+
// ===== Frontend (13) =====
|
|
47
|
+
skill(
|
|
48
|
+
'react-best-practices',
|
|
49
|
+
'vercel/agent-skills',
|
|
50
|
+
'React patterns, hooks, and component architecture',
|
|
51
|
+
['react', 'jsx', 'hooks'],
|
|
52
|
+
'Frontend'
|
|
53
|
+
),
|
|
54
|
+
skill(
|
|
55
|
+
'next-best-practices',
|
|
56
|
+
'vercel/next-skills',
|
|
57
|
+
'Next.js App Router, RSC, and data fetching patterns',
|
|
58
|
+
['next', 'nextjs', 'react', 'app-router'],
|
|
59
|
+
'Frontend'
|
|
60
|
+
),
|
|
61
|
+
skill(
|
|
62
|
+
'web-design-guidelines',
|
|
63
|
+
'vercel/agent-skills',
|
|
64
|
+
'Web design principles and responsive layouts',
|
|
65
|
+
['design', 'css', 'responsive'],
|
|
66
|
+
'Frontend'
|
|
67
|
+
),
|
|
68
|
+
skill(
|
|
69
|
+
'frontend-design',
|
|
70
|
+
'anthropics/skills',
|
|
71
|
+
'Frontend design system and component patterns',
|
|
72
|
+
['frontend', 'design-system', 'components'],
|
|
73
|
+
'Frontend'
|
|
74
|
+
),
|
|
75
|
+
skill(
|
|
76
|
+
'web-artifacts-builder',
|
|
77
|
+
'anthropics/skills',
|
|
78
|
+
'Build interactive web artifacts and prototypes',
|
|
79
|
+
['html', 'css', 'javascript', 'prototype'],
|
|
80
|
+
'Frontend'
|
|
81
|
+
),
|
|
82
|
+
skill(
|
|
83
|
+
'svelte5-sveltekit',
|
|
84
|
+
'claude-skills/sveltekit-svelte5-tailwind-skill',
|
|
85
|
+
'Svelte 5 runes, SvelteKit routing, and Tailwind integration',
|
|
86
|
+
['svelte', 'sveltekit', 'tailwind'],
|
|
87
|
+
'Frontend'
|
|
88
|
+
),
|
|
89
|
+
skill(
|
|
90
|
+
'vue-development',
|
|
91
|
+
'alexanderop/claude-skill-vue-development',
|
|
92
|
+
'Vue 3 Composition API and ecosystem patterns',
|
|
93
|
+
['vue', 'vuejs', 'vue3', 'pinia'],
|
|
94
|
+
'Frontend'
|
|
95
|
+
),
|
|
96
|
+
skill(
|
|
97
|
+
'typescript-pro',
|
|
98
|
+
'anthropics/skills',
|
|
99
|
+
'Advanced TypeScript patterns, generics, and type utilities',
|
|
100
|
+
['typescript', 'ts'],
|
|
101
|
+
'Frontend'
|
|
102
|
+
),
|
|
103
|
+
skill(
|
|
104
|
+
'tailwind-mastery',
|
|
105
|
+
'anthropics/skills',
|
|
106
|
+
'Tailwind CSS utility patterns and custom configurations',
|
|
107
|
+
['tailwind', 'tailwindcss', 'css'],
|
|
108
|
+
'Frontend'
|
|
109
|
+
),
|
|
110
|
+
skill(
|
|
111
|
+
'angular-best-practices',
|
|
112
|
+
'anthropics/skills',
|
|
113
|
+
'Angular signals, standalone components, and RxJS patterns',
|
|
114
|
+
['angular', 'rxjs'],
|
|
115
|
+
'Frontend'
|
|
116
|
+
),
|
|
117
|
+
skill(
|
|
118
|
+
'component-library',
|
|
119
|
+
'anthropics/skills',
|
|
120
|
+
'Building reusable component libraries with design tokens',
|
|
121
|
+
['components', 'design-tokens', 'storybook'],
|
|
122
|
+
'Frontend'
|
|
123
|
+
),
|
|
124
|
+
skill(
|
|
125
|
+
'react-native-guidelines',
|
|
126
|
+
'anthropics/skills',
|
|
127
|
+
'React Native mobile development patterns',
|
|
128
|
+
['react-native', 'mobile', 'expo'],
|
|
129
|
+
'Frontend'
|
|
130
|
+
),
|
|
131
|
+
skill(
|
|
132
|
+
'composition-patterns',
|
|
133
|
+
'anthropics/skills',
|
|
134
|
+
'Composition over inheritance in frontend architectures',
|
|
135
|
+
['composition', 'patterns', 'architecture'],
|
|
136
|
+
'Frontend'
|
|
137
|
+
),
|
|
138
|
+
|
|
139
|
+
// ===== Backend (11) =====
|
|
140
|
+
skill(
|
|
141
|
+
'graphql-api-dev',
|
|
142
|
+
'anthropics/skills',
|
|
143
|
+
'GraphQL schema design, resolvers, and federation',
|
|
144
|
+
['graphql', 'apollo', 'api'],
|
|
145
|
+
'Backend'
|
|
146
|
+
),
|
|
147
|
+
skill(
|
|
148
|
+
'apollo-skills',
|
|
149
|
+
'apollographql/skills',
|
|
150
|
+
'Apollo GraphQL server and client best practices',
|
|
151
|
+
['apollo', 'graphql'],
|
|
152
|
+
'Backend'
|
|
153
|
+
),
|
|
154
|
+
skill(
|
|
155
|
+
'backend-patterns',
|
|
156
|
+
'affaan-m/everything-claude-code',
|
|
157
|
+
'Comprehensive backend architecture patterns',
|
|
158
|
+
['backend', 'api', 'architecture'],
|
|
159
|
+
'Backend'
|
|
160
|
+
),
|
|
161
|
+
skill(
|
|
162
|
+
'express-best-practices',
|
|
163
|
+
'anthropics/skills',
|
|
164
|
+
'Express.js middleware, routing, and error handling',
|
|
165
|
+
['express', 'expressjs', 'node'],
|
|
166
|
+
'Backend'
|
|
167
|
+
),
|
|
168
|
+
skill(
|
|
169
|
+
'fastapi-pydantic',
|
|
170
|
+
'anthropics/skills',
|
|
171
|
+
'FastAPI with Pydantic models and dependency injection',
|
|
172
|
+
['fastapi', 'python', 'pydantic'],
|
|
173
|
+
'Backend'
|
|
174
|
+
),
|
|
175
|
+
skill(
|
|
176
|
+
'nodejs-patterns',
|
|
177
|
+
'Jeffallan/claude-skills',
|
|
178
|
+
'Node.js patterns for scalable applications',
|
|
179
|
+
['node', 'nodejs', 'javascript'],
|
|
180
|
+
'Backend'
|
|
181
|
+
),
|
|
182
|
+
skill(
|
|
183
|
+
'python-backend',
|
|
184
|
+
'greyhaven-ai/claude-code-config',
|
|
185
|
+
'Python backend development with best practices',
|
|
186
|
+
['python', 'django', 'flask'],
|
|
187
|
+
'Backend'
|
|
188
|
+
),
|
|
189
|
+
skill(
|
|
190
|
+
'microservices-arch',
|
|
191
|
+
'anthropics/skills',
|
|
192
|
+
'Microservices architecture and communication patterns',
|
|
193
|
+
['microservices', 'distributed', 'event-driven'],
|
|
194
|
+
'Backend'
|
|
195
|
+
),
|
|
196
|
+
skill(
|
|
197
|
+
'websocket-patterns',
|
|
198
|
+
'anthropics/skills',
|
|
199
|
+
'WebSocket real-time communication patterns',
|
|
200
|
+
['websocket', 'ws', 'socket.io', 'real-time'],
|
|
201
|
+
'Backend'
|
|
202
|
+
),
|
|
203
|
+
skill(
|
|
204
|
+
'api-design-mastery',
|
|
205
|
+
'anthropics/skills',
|
|
206
|
+
'REST API design, versioning, and documentation',
|
|
207
|
+
['rest', 'api', 'openapi'],
|
|
208
|
+
'Backend'
|
|
209
|
+
),
|
|
210
|
+
skill(
|
|
211
|
+
'go-backend',
|
|
212
|
+
'anthropics/skills',
|
|
213
|
+
'Go backend patterns with net/http and standard library',
|
|
214
|
+
['go', 'golang'],
|
|
215
|
+
'Backend'
|
|
216
|
+
),
|
|
217
|
+
|
|
218
|
+
// ===== Database (8) =====
|
|
219
|
+
skill(
|
|
220
|
+
'prisma-orm',
|
|
221
|
+
'mcpmarket/skills',
|
|
222
|
+
'Prisma schema design, migrations, and query patterns',
|
|
223
|
+
['prisma', 'orm', 'database'],
|
|
224
|
+
'Database'
|
|
225
|
+
),
|
|
226
|
+
skill(
|
|
227
|
+
'supabase-ops',
|
|
228
|
+
'supabase/agent-skills',
|
|
229
|
+
'Supabase database, auth, storage, and edge functions',
|
|
230
|
+
['supabase', 'postgres', 'auth'],
|
|
231
|
+
'Database'
|
|
232
|
+
),
|
|
233
|
+
skill(
|
|
234
|
+
'mongodb-patterns',
|
|
235
|
+
'anthropics/skills',
|
|
236
|
+
'MongoDB schema design, aggregation, and indexing',
|
|
237
|
+
['mongodb', 'mongoose', 'nosql'],
|
|
238
|
+
'Database'
|
|
239
|
+
),
|
|
240
|
+
skill(
|
|
241
|
+
'postgresql-advanced',
|
|
242
|
+
'anthropics/skills',
|
|
243
|
+
'PostgreSQL advanced queries, indexing, and performance',
|
|
244
|
+
['postgresql', 'postgres', 'pg', 'sql'],
|
|
245
|
+
'Database'
|
|
246
|
+
),
|
|
247
|
+
skill(
|
|
248
|
+
'redis-patterns',
|
|
249
|
+
'anthropics/skills',
|
|
250
|
+
'Redis caching, pub/sub, and data structure patterns',
|
|
251
|
+
['redis', 'cache', 'pub-sub'],
|
|
252
|
+
'Database'
|
|
253
|
+
),
|
|
254
|
+
skill(
|
|
255
|
+
'db-migrations',
|
|
256
|
+
'anthropics/skills',
|
|
257
|
+
'Database migration strategies and zero-downtime changes',
|
|
258
|
+
['migrations', 'database', 'schema'],
|
|
259
|
+
'Database'
|
|
260
|
+
),
|
|
261
|
+
skill(
|
|
262
|
+
'drizzle-orm',
|
|
263
|
+
'anthropics/skills',
|
|
264
|
+
'Drizzle ORM schema definition and type-safe queries',
|
|
265
|
+
['drizzle', 'orm', 'typescript'],
|
|
266
|
+
'Database'
|
|
267
|
+
),
|
|
268
|
+
skill(
|
|
269
|
+
'data-pipelines',
|
|
270
|
+
'K-Dense-AI/claude-scientific-skills',
|
|
271
|
+
'Data pipeline design and ETL patterns',
|
|
272
|
+
['data', 'pipeline', 'etl'],
|
|
273
|
+
'Database'
|
|
274
|
+
),
|
|
275
|
+
|
|
276
|
+
// ===== Testing (10) =====
|
|
277
|
+
skill(
|
|
278
|
+
'tdd-enforcement',
|
|
279
|
+
'jmagly/claude-skills',
|
|
280
|
+
'Test-driven development workflow and patterns',
|
|
281
|
+
['tdd', 'testing', 'test-first'],
|
|
282
|
+
'Testing'
|
|
283
|
+
),
|
|
284
|
+
skill(
|
|
285
|
+
'python-testing',
|
|
286
|
+
'laurigates/claude-plugins',
|
|
287
|
+
'Python testing with pytest, fixtures, and mocks',
|
|
288
|
+
['pytest', 'python', 'testing'],
|
|
289
|
+
'Testing'
|
|
290
|
+
),
|
|
291
|
+
skill(
|
|
292
|
+
'playwright-automation',
|
|
293
|
+
'anthropics/skills',
|
|
294
|
+
'Playwright end-to-end testing and browser automation',
|
|
295
|
+
['playwright', 'e2e', 'testing'],
|
|
296
|
+
'Testing'
|
|
297
|
+
),
|
|
298
|
+
skill(
|
|
299
|
+
'jest-testing',
|
|
300
|
+
'anthropics/skills',
|
|
301
|
+
'Jest unit and integration testing patterns',
|
|
302
|
+
['jest', 'testing', 'javascript'],
|
|
303
|
+
'Testing'
|
|
304
|
+
),
|
|
305
|
+
skill(
|
|
306
|
+
'k6-load-testing',
|
|
307
|
+
'anthropics/skills',
|
|
308
|
+
'k6 performance and load testing scripts',
|
|
309
|
+
['k6', 'load-testing', 'performance'],
|
|
310
|
+
'Testing'
|
|
311
|
+
),
|
|
312
|
+
skill(
|
|
313
|
+
'cypress-e2e',
|
|
314
|
+
'anthropics/skills',
|
|
315
|
+
'Cypress end-to-end testing with component tests',
|
|
316
|
+
['cypress', 'e2e', 'testing'],
|
|
317
|
+
'Testing'
|
|
318
|
+
),
|
|
319
|
+
skill(
|
|
320
|
+
'accessibility-testing',
|
|
321
|
+
'anthropics/skills',
|
|
322
|
+
'Automated accessibility testing with axe and WAVE',
|
|
323
|
+
['a11y', 'accessibility', 'wcag'],
|
|
324
|
+
'Testing'
|
|
325
|
+
),
|
|
326
|
+
skill(
|
|
327
|
+
'unit-test-patterns',
|
|
328
|
+
'anthropics/skills',
|
|
329
|
+
'Unit testing patterns, mocking, and test organization',
|
|
330
|
+
['unit-test', 'testing', 'mocking'],
|
|
331
|
+
'Testing'
|
|
332
|
+
),
|
|
333
|
+
skill(
|
|
334
|
+
'integration-testing',
|
|
335
|
+
'anthropics/skills',
|
|
336
|
+
'Integration testing strategies for APIs and databases',
|
|
337
|
+
['integration', 'testing', 'api-testing'],
|
|
338
|
+
'Testing'
|
|
339
|
+
),
|
|
340
|
+
skill(
|
|
341
|
+
'vitest-framework',
|
|
342
|
+
'anthropics/skills',
|
|
343
|
+
'Vitest fast unit testing with Vite integration',
|
|
344
|
+
['vitest', 'vite', 'testing'],
|
|
345
|
+
'Testing'
|
|
346
|
+
),
|
|
347
|
+
|
|
348
|
+
// ===== DevOps (9) =====
|
|
349
|
+
skill(
|
|
350
|
+
'devops-engineer',
|
|
351
|
+
'Jeffallan/claude-skills',
|
|
352
|
+
'DevOps best practices and infrastructure patterns',
|
|
353
|
+
['devops', 'infrastructure', 'ci-cd'],
|
|
354
|
+
'DevOps'
|
|
355
|
+
),
|
|
356
|
+
skill(
|
|
357
|
+
'devops-cloudskills',
|
|
358
|
+
'ahmedasmar/devops-claude-skills',
|
|
359
|
+
'Cloud-native DevOps with AWS, GCP, and Azure',
|
|
360
|
+
['aws', 'gcp', 'azure', 'cloud'],
|
|
361
|
+
'DevOps'
|
|
362
|
+
),
|
|
363
|
+
skill(
|
|
364
|
+
'github-actions',
|
|
365
|
+
'anthropics/skills',
|
|
366
|
+
'GitHub Actions workflow design and optimization',
|
|
367
|
+
['github-actions', 'ci', 'automation'],
|
|
368
|
+
'DevOps'
|
|
369
|
+
),
|
|
370
|
+
skill(
|
|
371
|
+
'dockerfile-best-practices',
|
|
372
|
+
'anthropics/skills',
|
|
373
|
+
'Dockerfile optimization, multi-stage builds, and security',
|
|
374
|
+
['docker', 'dockerfile', 'containers'],
|
|
375
|
+
'DevOps'
|
|
376
|
+
),
|
|
377
|
+
skill(
|
|
378
|
+
'kubernetes-troubleshooting',
|
|
379
|
+
'anthropics/skills',
|
|
380
|
+
'Kubernetes debugging, scaling, and resource management',
|
|
381
|
+
['kubernetes', 'k8s', 'helm'],
|
|
382
|
+
'DevOps'
|
|
383
|
+
),
|
|
384
|
+
skill(
|
|
385
|
+
'terraform-iac',
|
|
386
|
+
'anthropics/skills',
|
|
387
|
+
'Terraform infrastructure as code patterns',
|
|
388
|
+
['terraform', 'iac', 'infrastructure'],
|
|
389
|
+
'DevOps'
|
|
390
|
+
),
|
|
391
|
+
skill(
|
|
392
|
+
'vercel-deploy',
|
|
393
|
+
'vercel/agent-skills',
|
|
394
|
+
'Vercel deployment, edge functions, and configuration',
|
|
395
|
+
['vercel', 'deployment', 'edge'],
|
|
396
|
+
'DevOps'
|
|
397
|
+
),
|
|
398
|
+
skill(
|
|
399
|
+
'nginx-config',
|
|
400
|
+
'anthropics/skills',
|
|
401
|
+
'Nginx reverse proxy, load balancing, and TLS setup',
|
|
402
|
+
['nginx', 'reverse-proxy', 'tls'],
|
|
403
|
+
'DevOps'
|
|
404
|
+
),
|
|
405
|
+
skill(
|
|
406
|
+
'monitoring-observability',
|
|
407
|
+
'anthropics/skills',
|
|
408
|
+
'Application monitoring with Prometheus, Grafana, and OpenTelemetry',
|
|
409
|
+
['monitoring', 'prometheus', 'grafana'],
|
|
410
|
+
'DevOps'
|
|
411
|
+
),
|
|
412
|
+
|
|
413
|
+
// ===== Security (8) =====
|
|
414
|
+
skill(
|
|
415
|
+
'owasp-2025',
|
|
416
|
+
'agamm/claude-code-owasp',
|
|
417
|
+
'OWASP Top 10 2025 security checks and prevention',
|
|
418
|
+
['owasp', 'security', 'vulnerabilities'],
|
|
419
|
+
'Security'
|
|
420
|
+
),
|
|
421
|
+
skill(
|
|
422
|
+
'security-code-review',
|
|
423
|
+
'harperaa/secure-claude-skills',
|
|
424
|
+
'Security-focused code review patterns',
|
|
425
|
+
['security', 'code-review', 'audit'],
|
|
426
|
+
'Security'
|
|
427
|
+
),
|
|
428
|
+
skill(
|
|
429
|
+
'trail-of-bits',
|
|
430
|
+
'trailofbits/agent-skills',
|
|
431
|
+
'Trail of Bits security analysis patterns',
|
|
432
|
+
['security', 'audit', 'vulnerabilities'],
|
|
433
|
+
'Security'
|
|
434
|
+
),
|
|
435
|
+
skill(
|
|
436
|
+
'input-validation',
|
|
437
|
+
'anthropics/skills',
|
|
438
|
+
'Input validation and sanitization patterns',
|
|
439
|
+
['validation', 'sanitization', 'security'],
|
|
440
|
+
'Security'
|
|
441
|
+
),
|
|
442
|
+
skill(
|
|
443
|
+
'auth-patterns',
|
|
444
|
+
'anthropics/skills',
|
|
445
|
+
'Authentication with JWT, OAuth, and session management',
|
|
446
|
+
['auth', 'jwt', 'oauth', 'session'],
|
|
447
|
+
'Security'
|
|
448
|
+
),
|
|
449
|
+
skill(
|
|
450
|
+
'authz-rbac',
|
|
451
|
+
'anthropics/skills',
|
|
452
|
+
'Authorization with RBAC, ABAC, and policy engines',
|
|
453
|
+
['rbac', 'authorization', 'permissions'],
|
|
454
|
+
'Security'
|
|
455
|
+
),
|
|
456
|
+
skill(
|
|
457
|
+
'security-headers',
|
|
458
|
+
'anthropics/skills',
|
|
459
|
+
'HTTP security headers and CSP configuration',
|
|
460
|
+
['security-headers', 'csp', 'cors'],
|
|
461
|
+
'Security'
|
|
462
|
+
),
|
|
463
|
+
skill(
|
|
464
|
+
'php-security-audit',
|
|
465
|
+
'anthropics/skills',
|
|
466
|
+
'PHP security audit for common vulnerabilities',
|
|
467
|
+
['php', 'security', 'audit'],
|
|
468
|
+
'Security'
|
|
469
|
+
),
|
|
470
|
+
];
|
|
471
|
+
|
|
472
|
+
// =============================================================================
|
|
473
|
+
// Catalog Query Functions
|
|
474
|
+
// =============================================================================
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Get all curated skills.
|
|
478
|
+
* @returns {Object[]} Full curated catalog
|
|
479
|
+
*/
|
|
480
|
+
function getAllCuratedSkills() {
|
|
481
|
+
return CURATED_SKILLS;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* Get curated skills by category.
|
|
486
|
+
* @param {string} category - Category name
|
|
487
|
+
* @returns {Object[]} Skills in that category
|
|
488
|
+
*/
|
|
489
|
+
function getByCategory(category) {
|
|
490
|
+
return CURATED_SKILLS.filter(s => s.category === category);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
* Get all category names with counts.
|
|
495
|
+
* @returns {Object} Map of category name to count
|
|
496
|
+
*/
|
|
497
|
+
function getCategoryCounts() {
|
|
498
|
+
const counts = {};
|
|
499
|
+
for (const s of CURATED_SKILLS) {
|
|
500
|
+
counts[s.category] = (counts[s.category] || 0) + 1;
|
|
501
|
+
}
|
|
502
|
+
return counts;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* Search curated skills by tag.
|
|
507
|
+
* @param {string} tag - Tag to search for
|
|
508
|
+
* @returns {Object[]} Matching skills
|
|
509
|
+
*/
|
|
510
|
+
function searchByTag(tag) {
|
|
511
|
+
const lower = tag.toLowerCase();
|
|
512
|
+
return CURATED_SKILLS.filter(s => s.tags.some(t => t.includes(lower)));
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
/**
|
|
516
|
+
* Search curated skills by keyword (searches name + description + tags).
|
|
517
|
+
* @param {string} keyword - Keyword to search for
|
|
518
|
+
* @returns {Object[]} Matching skills sorted by relevance
|
|
519
|
+
*/
|
|
520
|
+
function searchByKeyword(keyword) {
|
|
521
|
+
const lower = keyword.toLowerCase();
|
|
522
|
+
return CURATED_SKILLS.filter(s => {
|
|
523
|
+
return (
|
|
524
|
+
s.name.toLowerCase().includes(lower) ||
|
|
525
|
+
s.description.toLowerCase().includes(lower) ||
|
|
526
|
+
s.tags.some(t => t.includes(lower))
|
|
527
|
+
);
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* Get the live search command for skills.sh marketplace.
|
|
533
|
+
* @param {string} keyword - Search term
|
|
534
|
+
* @returns {string} Command to run
|
|
535
|
+
*/
|
|
536
|
+
function getLiveSearchCommand(keyword) {
|
|
537
|
+
return `npx skills search ${keyword}`;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
/**
|
|
541
|
+
* Get the full marketplace browse command.
|
|
542
|
+
* @returns {string} Command to run
|
|
543
|
+
*/
|
|
544
|
+
function getBrowseCommand() {
|
|
545
|
+
return 'npx skills find';
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
module.exports = {
|
|
549
|
+
CURATED_SKILLS,
|
|
550
|
+
getAllCuratedSkills,
|
|
551
|
+
getByCategory,
|
|
552
|
+
getCategoryCounts,
|
|
553
|
+
searchByTag,
|
|
554
|
+
searchByKeyword,
|
|
555
|
+
getLiveSearchCommand,
|
|
556
|
+
getBrowseCommand,
|
|
557
|
+
};
|