ma-agents 1.2.0 → 1.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/DEVELOPMENT.md +173 -0
- package/README.md +201 -309
- package/SKILLS_STRUCTURE.md +392 -0
- package/bin/cli.js +135 -28
- package/index.js +8 -6
- package/lib/agents.js +26 -8
- package/lib/installer.js +312 -45
- package/package.json +1 -1
- package/skills/code-review/SKILL.md +39 -0
- package/skills/commit-message/SKILL.md +75 -0
- package/skills/create-hardened-docker-skill/SKILL.md +0 -5
- package/skills/git-workflow-skill/SKILL.md +0 -5
- package/skills/js-ts-security-skill/SKILL.md +0 -4
- package/skills/skill-creator/SKILL.md +211 -0
- package/skills/skill-creator/claude-code.md +6 -8
- package/skills/skill-creator/generic.md +0 -5
- package/skills/test-generator/SKILL.md +61 -0
- package/skills/vercel-react-best-practices/SKILL.md +105 -0
- package/skills/verify-hardened-docker-skill/SKILL.md +0 -5
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# Skill Creator
|
|
2
|
+
|
|
3
|
+
This skill provides guidance for creating effective skills.
|
|
4
|
+
|
|
5
|
+
## About Skills
|
|
6
|
+
|
|
7
|
+
Skills are modular, self-contained packages that extend Claude's capabilities by providing
|
|
8
|
+
specialized knowledge, workflows, and tools. Think of them as "onboarding guides" for specific
|
|
9
|
+
domains or tasks—they transform Claude from a general-purpose agent into a specialized agent
|
|
10
|
+
equipped with procedural knowledge that no model can fully possess.
|
|
11
|
+
|
|
12
|
+
### What Skills Provide
|
|
13
|
+
|
|
14
|
+
1. Specialized workflows - Multi-step procedures for specific domains
|
|
15
|
+
2. Tool integrations - Instructions for working with specific file formats or APIs
|
|
16
|
+
3. Domain expertise - Company-specific knowledge, schemas, business logic
|
|
17
|
+
4. Bundled resources - Scripts, references, and assets for complex and repetitive tasks
|
|
18
|
+
|
|
19
|
+
## Core Principles
|
|
20
|
+
|
|
21
|
+
### Concise is Key
|
|
22
|
+
|
|
23
|
+
The context window is a public good. Skills share the context window with everything else Claude needs: system prompt, conversation history, other Skills' metadata, and the actual user request.
|
|
24
|
+
|
|
25
|
+
**Default assumption: Claude is already very smart.** Only add context Claude doesn't already have. Challenge each piece of information: "Does Claude really need this explanation?" and "Does this paragraph justify its token cost?"
|
|
26
|
+
|
|
27
|
+
Prefer concise examples over verbose explanations.
|
|
28
|
+
|
|
29
|
+
### Set Appropriate Degrees of Freedom
|
|
30
|
+
|
|
31
|
+
Match the level of specificity to the task's fragility and variability:
|
|
32
|
+
|
|
33
|
+
**High freedom (text-based instructions)**: Use when multiple approaches are valid, decisions depend on context, or heuristics guide the approach.
|
|
34
|
+
|
|
35
|
+
**Medium freedom (pseudocode or scripts with parameters)**: Use when a preferred pattern exists, some variation is acceptable, or configuration affects behavior.
|
|
36
|
+
|
|
37
|
+
**Low freedom (specific scripts, few parameters)**: Use when operations are fragile and error-prone, consistency is critical, or a specific sequence must be followed.
|
|
38
|
+
|
|
39
|
+
### Anatomy of a Skill
|
|
40
|
+
|
|
41
|
+
Every skill consists of a `skill.json` metadata file, a `SKILL.md` instruction file, and optional bundled resources:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
skill-name/
|
|
45
|
+
├── skill.json (required)
|
|
46
|
+
│ ├── name: (required)
|
|
47
|
+
│ ├── description: (required)
|
|
48
|
+
│ ├── version: (required)
|
|
49
|
+
│ ├── author: (optional)
|
|
50
|
+
│ └── tags: (optional)
|
|
51
|
+
├── SKILL.md (required) - Pure Markdown instructions, NO frontmatter
|
|
52
|
+
└── Bundled Resources (optional)
|
|
53
|
+
├── scripts/ - Executable code (Python/Bash/etc.)
|
|
54
|
+
├── references/ - Documentation intended to be loaded into context as needed
|
|
55
|
+
├── examples/ - Sample outputs showing expected format
|
|
56
|
+
├── hooks/ - Git hooks or other hook scripts
|
|
57
|
+
└── assets/ - Files used in output (templates, icons, fonts, etc.)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
#### skill.json (required - single source of truth)
|
|
61
|
+
|
|
62
|
+
Contains all metadata. The installer reads this to list skills and automatically injects YAML frontmatter (`name`, `description`) into the installed SKILL.md at install time. You never write frontmatter manually in `.md` files.
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"name": "My Skill",
|
|
67
|
+
"description": "What this skill does and when to use it",
|
|
68
|
+
"version": "1.0.0",
|
|
69
|
+
"author": "Your Name",
|
|
70
|
+
"tags": ["category", "keywords"]
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The `description` field is critical — it determines when the skill triggers. Include both what the skill does AND specific triggers/contexts.
|
|
75
|
+
|
|
76
|
+
#### SKILL.md (required)
|
|
77
|
+
|
|
78
|
+
Pure Markdown instructions — no YAML frontmatter. Only loaded AFTER the skill triggers based on the description in `skill.json`.
|
|
79
|
+
|
|
80
|
+
#### Bundled Resources (optional)
|
|
81
|
+
|
|
82
|
+
##### Scripts (`scripts/`)
|
|
83
|
+
|
|
84
|
+
Executable code for tasks that require deterministic reliability or are repeatedly rewritten.
|
|
85
|
+
|
|
86
|
+
- **When to include**: When the same code is being rewritten repeatedly or deterministic reliability is needed
|
|
87
|
+
- **Benefits**: Token efficient, deterministic, may be executed without loading into context
|
|
88
|
+
|
|
89
|
+
##### References (`references/`)
|
|
90
|
+
|
|
91
|
+
Documentation intended to be loaded as needed into context.
|
|
92
|
+
|
|
93
|
+
- **When to include**: For documentation that Claude should reference while working
|
|
94
|
+
- **Use cases**: Database schemas, API documentation, domain knowledge, company policies
|
|
95
|
+
- **Best practice**: If files are large (>10k words), include grep search patterns in SKILL.md
|
|
96
|
+
- **Avoid duplication**: Information lives in either SKILL.md or references files, not both
|
|
97
|
+
|
|
98
|
+
##### Assets (`assets/`)
|
|
99
|
+
|
|
100
|
+
Files not intended to be loaded into context, but used within the output Claude produces.
|
|
101
|
+
|
|
102
|
+
- **When to include**: When the skill needs files for final output
|
|
103
|
+
- **Use cases**: Templates, images, icons, boilerplate code, fonts, sample documents
|
|
104
|
+
|
|
105
|
+
#### What NOT to Include
|
|
106
|
+
|
|
107
|
+
Do NOT create: README.md, INSTALLATION_GUIDE.md, QUICK_REFERENCE.md, CHANGELOG.md, or other auxiliary documentation. The skill should only contain information needed for an AI agent to execute tasks.
|
|
108
|
+
|
|
109
|
+
### Progressive Disclosure Design Principle
|
|
110
|
+
|
|
111
|
+
Three-level loading system:
|
|
112
|
+
|
|
113
|
+
1. **Metadata (name + description)** - Always in context (~100 words)
|
|
114
|
+
2. **SKILL.md body** - When skill triggers (<5k words)
|
|
115
|
+
3. **Bundled resources** - As needed by Claude (Unlimited)
|
|
116
|
+
|
|
117
|
+
Keep SKILL.md body under 500 lines. Split content into separate files when approaching this limit.
|
|
118
|
+
|
|
119
|
+
**Pattern 1: High-level guide with references**
|
|
120
|
+
|
|
121
|
+
```markdown
|
|
122
|
+
# PDF Processing
|
|
123
|
+
## Quick start
|
|
124
|
+
Extract text with pdfplumber: [code example]
|
|
125
|
+
## Advanced features
|
|
126
|
+
- **Form filling**: See [FORMS.md](FORMS.md) for complete guide
|
|
127
|
+
- **API reference**: See [REFERENCE.md](REFERENCE.md) for all methods
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Pattern 2: Domain-specific organization**
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
bigquery-skill/
|
|
134
|
+
├── SKILL.md (overview and navigation)
|
|
135
|
+
└── references/
|
|
136
|
+
├── finance.md (revenue, billing metrics)
|
|
137
|
+
├── sales.md (opportunities, pipeline)
|
|
138
|
+
└── product.md (API usage, features)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Pattern 3: Conditional details**
|
|
142
|
+
|
|
143
|
+
```markdown
|
|
144
|
+
# DOCX Processing
|
|
145
|
+
## Creating documents
|
|
146
|
+
Use docx-js for new documents. See [DOCX-JS.md](DOCX-JS.md).
|
|
147
|
+
## Editing documents
|
|
148
|
+
For simple edits, modify the XML directly.
|
|
149
|
+
**For tracked changes**: See [REDLINING.md](REDLINING.md)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Skill Creation Process
|
|
153
|
+
|
|
154
|
+
1. Understand the skill with concrete examples
|
|
155
|
+
2. Plan reusable skill contents (scripts, references, assets)
|
|
156
|
+
3. Initialize the skill (run scripts/init_skill.py)
|
|
157
|
+
4. Edit the skill (implement resources and write SKILL.md)
|
|
158
|
+
5. Package the skill (run scripts/package_skill.py)
|
|
159
|
+
6. Iterate based on real usage
|
|
160
|
+
|
|
161
|
+
### Step 1: Understanding the Skill with Concrete Examples
|
|
162
|
+
|
|
163
|
+
Gather concrete examples of how the skill will be used. Ask users clarifying questions about functionality and triggers. Conclude when there's clear understanding of supported functionality.
|
|
164
|
+
|
|
165
|
+
### Step 2: Planning the Reusable Skill Contents
|
|
166
|
+
|
|
167
|
+
Analyze each concrete example:
|
|
168
|
+
1. Consider how to execute the example from scratch
|
|
169
|
+
2. Identify what scripts, references, and assets would be helpful for repeated execution
|
|
170
|
+
|
|
171
|
+
### Step 3: Initializing the Skill
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
scripts/init_skill.py <skill-name> --path <output-directory>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Creates skill directory with skill.json, SKILL.md template, example resource directories, and placeholder files.
|
|
178
|
+
|
|
179
|
+
### Step 4: Edit the Skill
|
|
180
|
+
|
|
181
|
+
**Writing guideline:** Always use imperative/infinitive form.
|
|
182
|
+
|
|
183
|
+
**Update skill.json:**
|
|
184
|
+
- `name`: The skill display name
|
|
185
|
+
- `description`: Include both what the skill does AND specific triggers/contexts for when to use it
|
|
186
|
+
- `version`: Semantic version (e.g., "1.0.0")
|
|
187
|
+
|
|
188
|
+
**Update SKILL.md (pure Markdown, no frontmatter):**
|
|
189
|
+
- Write instructions for using the skill and bundled resources
|
|
190
|
+
- For multi-step processes: See references/workflows.md
|
|
191
|
+
- For specific output formats: See references/output-patterns.md
|
|
192
|
+
|
|
193
|
+
**Start with Reusable Skill Contents:**
|
|
194
|
+
- Implement scripts, references, and assets first
|
|
195
|
+
- Test scripts by running them
|
|
196
|
+
- Delete example files not needed for the skill
|
|
197
|
+
|
|
198
|
+
### Step 5: Packaging a Skill
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
scripts/package_skill.py <path/to/skill-folder> [output-directory]
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Validates and packages the skill into a distributable .skill file (zip format).
|
|
205
|
+
|
|
206
|
+
### Step 6: Iterate
|
|
207
|
+
|
|
208
|
+
1. Use the skill on real tasks
|
|
209
|
+
2. Notice struggles or inefficiencies
|
|
210
|
+
3. Identify how SKILL.md or bundled resources should be updated
|
|
211
|
+
4. Implement changes and test again
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: skill-creator
|
|
3
|
-
description: Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
1
|
# Skill Creator
|
|
7
2
|
|
|
8
3
|
## Description
|
|
@@ -34,15 +29,18 @@ Follow these steps in order:
|
|
|
34
29
|
|
|
35
30
|
```
|
|
36
31
|
skill-name/
|
|
37
|
-
├──
|
|
32
|
+
├── skill.json (required — single source of truth for metadata)
|
|
33
|
+
├── SKILL.md (required — pure Markdown, no frontmatter)
|
|
38
34
|
├── scripts/ (executable code, Python/Bash)
|
|
39
35
|
├── references/ (documentation loaded into context as needed)
|
|
36
|
+
├── examples/ (sample outputs showing expected format)
|
|
37
|
+
├── hooks/ (git hooks or other hook scripts)
|
|
40
38
|
└── assets/ (files used in output: templates, images, fonts)
|
|
41
39
|
```
|
|
42
40
|
|
|
43
|
-
###
|
|
41
|
+
### skill.json (metadata)
|
|
44
42
|
|
|
45
|
-
|
|
43
|
+
Contains `name`, `description`, `version`, `author`, `tags`. The `description` is the primary trigger mechanism — include both what the skill does AND when to use it. The installer automatically injects YAML frontmatter from skill.json into the installed SKILL.md.
|
|
46
44
|
|
|
47
45
|
### Bundled Resources
|
|
48
46
|
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: skill-creator
|
|
3
|
-
description: Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
1
|
# Skill Creator
|
|
7
2
|
|
|
8
3
|
This skill provides guidance for creating effective skills.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Test Generator
|
|
2
|
+
|
|
3
|
+
Generate comprehensive unit and integration tests for code.
|
|
4
|
+
|
|
5
|
+
## Process
|
|
6
|
+
|
|
7
|
+
1. **Analyze**: Understand code purpose, paths, dependencies, edge cases
|
|
8
|
+
2. **Framework**: Determine or ask for testing framework
|
|
9
|
+
3. **Generate**: Create test cases covering:
|
|
10
|
+
- Happy path (normal behavior)
|
|
11
|
+
- Edge cases (boundaries, empty/null inputs)
|
|
12
|
+
- Error cases (invalid inputs, exceptions)
|
|
13
|
+
- Integration scenarios (if applicable)
|
|
14
|
+
|
|
15
|
+
## Test Structure (AAA Pattern)
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
- Arrange: Setup test data
|
|
19
|
+
- Act: Execute code
|
|
20
|
+
- Assert: Verify results
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Coverage Goals
|
|
24
|
+
|
|
25
|
+
- 80%+ code coverage
|
|
26
|
+
- All public methods
|
|
27
|
+
- All conditional branches
|
|
28
|
+
- Positive and negative cases
|
|
29
|
+
|
|
30
|
+
## Best Practices
|
|
31
|
+
|
|
32
|
+
- One assertion per test
|
|
33
|
+
- Independent tests
|
|
34
|
+
- Descriptive test names
|
|
35
|
+
- Mock external dependencies
|
|
36
|
+
- Clear assertion messages
|
|
37
|
+
|
|
38
|
+
## Example Output
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
describe('ComponentName', () => {
|
|
42
|
+
test('should [behavior] when [condition]', () => {
|
|
43
|
+
// Arrange
|
|
44
|
+
const input = setupTestData();
|
|
45
|
+
|
|
46
|
+
// Act
|
|
47
|
+
const result = functionUnderTest(input);
|
|
48
|
+
|
|
49
|
+
// Assert
|
|
50
|
+
expect(result).toEqual(expectedOutput);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test('should handle edge case', () => {
|
|
54
|
+
// ...
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test('should throw on invalid input', () => {
|
|
58
|
+
expect(() => fn(invalid)).toThrow();
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
```
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Vercel React Best Practices
|
|
2
|
+
|
|
3
|
+
A thorough performance optimization framework for React and Next.js projects. Contains 57 actionable rules organized into 8 categories, ranked by potential impact.
|
|
4
|
+
|
|
5
|
+
## When to Apply
|
|
6
|
+
|
|
7
|
+
Reference these guidelines when:
|
|
8
|
+
- Writing new React components
|
|
9
|
+
- Implementing data fetching
|
|
10
|
+
- Reviewing code for performance concerns
|
|
11
|
+
- Refactoring existing applications
|
|
12
|
+
- Reducing bundle sizes and load times
|
|
13
|
+
|
|
14
|
+
## Rule Categories (Priority-Ordered)
|
|
15
|
+
|
|
16
|
+
### 1. Eliminating Waterfalls (CRITICAL)
|
|
17
|
+
Prefix: `async-`
|
|
18
|
+
|
|
19
|
+
- Avoid sequential data fetching — use parallel requests (`Promise.all`, `Promise.allSettled`)
|
|
20
|
+
- Prefetch data at the layout/page level rather than in deeply nested components
|
|
21
|
+
- Use `loading.tsx` and `Suspense` boundaries to stream content progressively
|
|
22
|
+
- Avoid `await` chains where requests don't depend on each other
|
|
23
|
+
- Colocate data fetching with the component that uses the data, but fetch in parallel at the route level
|
|
24
|
+
- Use React Server Components to move data fetching to the server and eliminate client-server waterfalls
|
|
25
|
+
|
|
26
|
+
### 2. Bundle Size Optimization (CRITICAL)
|
|
27
|
+
Prefix: `bundle-`
|
|
28
|
+
|
|
29
|
+
- Prefer `next/dynamic` or `React.lazy` for heavy components not needed on initial load
|
|
30
|
+
- Audit dependencies with `@next/bundle-analyzer` — remove or replace bloated packages
|
|
31
|
+
- Use tree-shakeable libraries and import only what you need (`import { x } from 'lib'` not `import lib from 'lib'`)
|
|
32
|
+
- Mark client components with `'use client'` only at the lowest necessary level
|
|
33
|
+
- Avoid importing server-only code into client components
|
|
34
|
+
- Use `next/image` instead of raw `<img>` tags for automatic optimization
|
|
35
|
+
- Use `next/font` to self-host fonts and eliminate external font requests
|
|
36
|
+
|
|
37
|
+
### 3. Server-Side Performance (HIGH)
|
|
38
|
+
Prefix: `server-`
|
|
39
|
+
|
|
40
|
+
- Default to React Server Components — only add `'use client'` when interactivity is needed
|
|
41
|
+
- Use the `cache()` function to deduplicate identical requests within a single render
|
|
42
|
+
- Leverage `unstable_cache` or `fetch` cache options for cross-request caching
|
|
43
|
+
- Set proper `revalidate` values — avoid `revalidate: 0` unless data truly changes on every request
|
|
44
|
+
- Use `generateStaticParams` for static generation of dynamic routes
|
|
45
|
+
- Move database queries and API calls to Server Components or Route Handlers
|
|
46
|
+
- Use streaming (`loading.tsx`, `Suspense`) to avoid blocking the entire page on slow data
|
|
47
|
+
|
|
48
|
+
### 4. Client-Side Data Fetching (MEDIUM-HIGH)
|
|
49
|
+
Prefix: `client-`
|
|
50
|
+
|
|
51
|
+
- Use SWR or React Query for client-side data fetching with caching, revalidation, and deduplication
|
|
52
|
+
- Implement optimistic updates for mutations to improve perceived performance
|
|
53
|
+
- Set appropriate `staleTime` and `cacheTime` to avoid unnecessary refetches
|
|
54
|
+
- Use `prefetchQuery` or `preload` to start fetching before navigation
|
|
55
|
+
- Avoid `useEffect` + `fetch` patterns — prefer dedicated data fetching libraries
|
|
56
|
+
- Paginate or infinitely scroll large datasets instead of loading everything at once
|
|
57
|
+
|
|
58
|
+
### 5. Re-render Optimization (MEDIUM)
|
|
59
|
+
Prefix: `rerender-`
|
|
60
|
+
|
|
61
|
+
- Lift state up only as far as necessary — keep state close to where it's used
|
|
62
|
+
- Split contexts to avoid triggering unnecessary re-renders on unrelated state changes
|
|
63
|
+
- Use `useMemo` and `useCallback` only for expensive computations or stable references passed to memoized children
|
|
64
|
+
- Avoid creating new objects/arrays in render — extract them as constants or memoize them
|
|
65
|
+
- Use `React.memo` for pure components that re-render often with the same props
|
|
66
|
+
- Prefer `useRef` over `useState` for values that don't need to trigger re-renders
|
|
67
|
+
- Avoid prop drilling — use composition (`children` prop) instead of deep prop chains
|
|
68
|
+
|
|
69
|
+
### 6. Rendering Performance (MEDIUM)
|
|
70
|
+
Prefix: `rendering-`
|
|
71
|
+
|
|
72
|
+
- Virtualize long lists with `react-window` or `@tanstack/virtual`
|
|
73
|
+
- Debounce rapid user inputs (search, resize, scroll handlers)
|
|
74
|
+
- Use CSS for animations and transitions instead of JS-driven re-renders
|
|
75
|
+
- Use `content-visibility: auto` for off-screen content
|
|
76
|
+
- Avoid layout thrashing — batch DOM reads and writes
|
|
77
|
+
- Use `will-change` sparingly and only on elements that will actually animate
|
|
78
|
+
- Prefer `transform` and `opacity` for GPU-accelerated animations
|
|
79
|
+
|
|
80
|
+
### 7. JavaScript Performance (LOW-MEDIUM)
|
|
81
|
+
Prefix: `js-`
|
|
82
|
+
|
|
83
|
+
- Avoid blocking the main thread — use `requestIdleCallback` or Web Workers for heavy computation
|
|
84
|
+
- Use `Map` and `Set` for frequent lookups instead of arrays
|
|
85
|
+
- Minimize closures in hot paths
|
|
86
|
+
- Prefer `for...of` or `Array.prototype` methods over manual loops for readability, but use manual loops in performance-critical sections
|
|
87
|
+
- Avoid deep cloning — use structural sharing (Immer) or shallow copies where possible
|
|
88
|
+
- Use `AbortController` to cancel stale requests and avoid race conditions
|
|
89
|
+
|
|
90
|
+
### 8. Advanced Patterns (LOW)
|
|
91
|
+
Prefix: `advanced-`
|
|
92
|
+
|
|
93
|
+
- Use the `Offscreen` API (when stable) for pre-rendering hidden UI
|
|
94
|
+
- Implement route-level code splitting with parallel route segments
|
|
95
|
+
- Use Edge Runtime for latency-sensitive API routes
|
|
96
|
+
- Implement partial prerendering (PPR) for hybrid static/dynamic pages
|
|
97
|
+
- Use `Server Actions` for form mutations to avoid manual API routes
|
|
98
|
+
- Profile with React DevTools Profiler and Chrome Performance tab before optimizing
|
|
99
|
+
|
|
100
|
+
## General Principles
|
|
101
|
+
|
|
102
|
+
- **Measure before optimizing** — use Lighthouse, Web Vitals, and React DevTools
|
|
103
|
+
- **Higher-priority categories yield larger gains** — focus on waterfalls and bundle size first
|
|
104
|
+
- **Don't prematurely optimize** — only apply lower-priority rules after addressing critical ones
|
|
105
|
+
- **Test performance changes** — verify improvements with real metrics, not just intuition
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: verify-hardened-docker
|
|
3
|
-
description: Comprehensive security verification for Docker configurations. Checks Dockerfile, docker-compose.yml, and running containers against CIS Docker Benchmark, OWASP, and NIST SP 800-190 standards. Scans for vulnerabilities, leaked secrets, insecure configurations, and missing hardening controls.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
1
|
# Verify Hardened Docker
|
|
7
2
|
|
|
8
3
|
## Overview
|