ma-agents 1.1.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.
Files changed (54) hide show
  1. package/CONTRIBUTING.md +96 -0
  2. package/LICENSE +20 -0
  3. package/QUICK_START.md +148 -0
  4. package/README.md +420 -0
  5. package/bin/cli.js +198 -0
  6. package/examples/programmatic-usage.js +62 -0
  7. package/index.js +20 -0
  8. package/lib/agents.js +131 -0
  9. package/lib/installer.js +120 -0
  10. package/package.json +35 -0
  11. package/skills/README.md +312 -0
  12. package/skills/code-review/claude-code.md +64 -0
  13. package/skills/code-review/cline.md +55 -0
  14. package/skills/code-review/generic.md +39 -0
  15. package/skills/code-review/skill.json +7 -0
  16. package/skills/commit-message/generic.md +75 -0
  17. package/skills/commit-message/skill.json +7 -0
  18. package/skills/create-hardened-docker-skill/README.md +85 -0
  19. package/skills/create-hardened-docker-skill/SKILL.md +638 -0
  20. package/skills/create-hardened-docker-skill/scripts/create-all.sh +489 -0
  21. package/skills/create-hardened-docker-skill/skill.json +7 -0
  22. package/skills/git-workflow-skill/README.md +135 -0
  23. package/skills/git-workflow-skill/SKILL.md +182 -0
  24. package/skills/git-workflow-skill/hooks/commit-msg +61 -0
  25. package/skills/git-workflow-skill/hooks/pre-commit +38 -0
  26. package/skills/git-workflow-skill/hooks/prepare-commit-msg +56 -0
  27. package/skills/git-workflow-skill/scripts/finish-feature.sh +192 -0
  28. package/skills/git-workflow-skill/scripts/install-hooks.sh +55 -0
  29. package/skills/git-workflow-skill/scripts/start-feature.sh +110 -0
  30. package/skills/git-workflow-skill/scripts/validate-workflow.sh +229 -0
  31. package/skills/git-workflow-skill/skill.json +7 -0
  32. package/skills/js-ts-security-skill/README.md +28 -0
  33. package/skills/js-ts-security-skill/SKILL.md +64 -0
  34. package/skills/js-ts-security-skill/scripts/verify-security.sh +136 -0
  35. package/skills/js-ts-security-skill/skill.json +7 -0
  36. package/skills/skill-creator/claude-code.md +66 -0
  37. package/skills/skill-creator/generic.md +197 -0
  38. package/skills/skill-creator/references/output-patterns.md +82 -0
  39. package/skills/skill-creator/references/workflows.md +28 -0
  40. package/skills/skill-creator/scripts/init_skill.py +208 -0
  41. package/skills/skill-creator/scripts/package_skill.py +99 -0
  42. package/skills/skill-creator/scripts/quick_validate.py +113 -0
  43. package/skills/skill-creator/skill.json +8 -0
  44. package/skills/test-generator/claude-code.md +103 -0
  45. package/skills/test-generator/cline.md +69 -0
  46. package/skills/test-generator/generic.md +61 -0
  47. package/skills/test-generator/skill.json +7 -0
  48. package/skills/vercel-react-best-practices/claude-code.md +80 -0
  49. package/skills/vercel-react-best-practices/generic.md +105 -0
  50. package/skills/vercel-react-best-practices/skill.json +8 -0
  51. package/skills/verify-hardened-docker-skill/README.md +85 -0
  52. package/skills/verify-hardened-docker-skill/SKILL.md +443 -0
  53. package/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +439 -0
  54. package/skills/verify-hardened-docker-skill/skill.json +7 -0
@@ -0,0 +1,229 @@
1
+ #!/bin/bash
2
+ # validate-workflow.sh - Check if current state follows git workflow rules
3
+ # Usage: validate-workflow.sh [--list]
4
+ #
5
+ # Worktree-aware: detects whether you're in a worktree or main repo
6
+ # and validates accordingly.
7
+
8
+ set -e
9
+
10
+ RED='\033[0;31m'
11
+ GREEN='\033[0;32m'
12
+ YELLOW='\033[1;33m'
13
+ CYAN='\033[0;36m'
14
+ NC='\033[0m'
15
+
16
+ ERRORS=0
17
+ WARNINGS=0
18
+
19
+ error() { echo -e "${RED}x ERROR: $1${NC}"; ERRORS=$((ERRORS + 1)); }
20
+ warn() { echo -e "${YELLOW}! WARNING: $1${NC}"; WARNINGS=$((WARNINGS + 1)); }
21
+ ok() { echo -e "${GREEN}+ $1${NC}"; }
22
+ info() { echo -e " $1"; }
23
+
24
+ # Handle --list flag to show active worktrees
25
+ if [[ "$1" == "--list" ]]; then
26
+ echo "Active Worktrees"
27
+ echo "================"
28
+ git worktree list 2>/dev/null || echo "Not in a git repository"
29
+ exit 0
30
+ fi
31
+
32
+ echo "Git Workflow Validation (Worktree-Aware)"
33
+ echo "========================================="
34
+ echo ""
35
+
36
+ # Check we're in a git repo
37
+ if ! git rev-parse --git-dir > /dev/null 2>&1; then
38
+ error "Not in a git repository"
39
+ exit 1
40
+ fi
41
+
42
+ # Detect worktree status
43
+ GIT_COMMON=$(git rev-parse --git-common-dir 2>/dev/null)
44
+ GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
45
+ CURRENT_DIR=$(git rev-parse --show-toplevel)
46
+
47
+ IS_WORKTREE=false
48
+ if [[ "$GIT_COMMON" != "$GIT_DIR" && "$GIT_COMMON" != "." ]]; then
49
+ IS_WORKTREE=true
50
+ MAIN_REPO=$(cd "$GIT_COMMON/.." && pwd)
51
+ echo -e "${CYAN}Context: Inside worktree${NC}"
52
+ info "Worktree: $CURRENT_DIR"
53
+ info "Main repo: $MAIN_REPO"
54
+ else
55
+ MAIN_REPO="$CURRENT_DIR"
56
+ echo -e "${CYAN}Context: Main repository${NC}"
57
+ info "Repo: $MAIN_REPO"
58
+ fi
59
+
60
+ # Get current branch
61
+ CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
62
+ echo "Branch: $CURRENT_BRANCH"
63
+ echo ""
64
+
65
+ # Check 1: Not on protected branch
66
+ echo "Checking branch..."
67
+ if [[ "$CURRENT_BRANCH" == "dev" || "$CURRENT_BRANCH" == "main" || "$CURRENT_BRANCH" == "master" ]]; then
68
+ if [[ "$IS_WORKTREE" == true ]]; then
69
+ error "Worktree is on protected branch '$CURRENT_BRANCH'. Worktrees should be on feature branches."
70
+ else
71
+ # Main repo on dev is fine — that's the expected state
72
+ ok "Main repo is on '$CURRENT_BRANCH' (expected)"
73
+ fi
74
+ else
75
+ ok "On feature branch '$CURRENT_BRANCH'"
76
+ fi
77
+
78
+ # Check 2: Branch naming convention (only for feature branches)
79
+ if [[ "$CURRENT_BRANCH" != "dev" && "$CURRENT_BRANCH" != "main" && "$CURRENT_BRANCH" != "master" ]]; then
80
+ if echo "$CURRENT_BRANCH" | grep -qE '^(feature|bugfix|hotfix|chore)/[a-z0-9-]+$'; then
81
+ ok "Branch name follows convention"
82
+ else
83
+ warn "Branch name '$CURRENT_BRANCH' doesn't follow convention: <type>/<description>"
84
+ info "Expected: feature|bugfix|hotfix|chore followed by lowercase alphanumeric with dashes"
85
+ fi
86
+ fi
87
+
88
+ # Check 3: dev branch exists
89
+ echo ""
90
+ echo "Checking repository setup..."
91
+ git fetch origin 2>/dev/null || warn "Could not fetch from origin"
92
+
93
+ if git branch -a | grep -qE '(^|\s)origin/dev$'; then
94
+ ok "Remote 'dev' branch exists"
95
+ else
96
+ error "Remote 'dev' branch not found. Create it before using this workflow."
97
+ fi
98
+
99
+ # Check 4: Up to date with dev (for feature branches)
100
+ echo ""
101
+ echo "Checking sync status..."
102
+ if [[ "$CURRENT_BRANCH" != "dev" && "$CURRENT_BRANCH" != "main" && "$CURRENT_BRANCH" != "master" ]]; then
103
+ if git branch -a | grep -qE '(^|\s)origin/dev$'; then
104
+ BEHIND=$(git rev-list --count HEAD..origin/dev 2>/dev/null || echo "0")
105
+ if [[ "$BEHIND" == "0" ]]; then
106
+ ok "Branch is up to date with dev"
107
+ else
108
+ warn "Branch is $BEHIND commit(s) behind dev. Consider rebasing."
109
+ info "Run: git fetch origin dev && git rebase origin/dev"
110
+ fi
111
+ fi
112
+ else
113
+ ok "On base branch — sync check not needed"
114
+ fi
115
+
116
+ # Check 5: Uncommitted changes
117
+ echo ""
118
+ echo "Checking working directory..."
119
+ if git diff-index --quiet HEAD -- 2>/dev/null; then
120
+ ok "No uncommitted changes"
121
+ else
122
+ warn "Uncommitted changes detected"
123
+ info "Run: git status"
124
+ fi
125
+
126
+ # Check 6: Untracked files (that aren't ignored)
127
+ UNTRACKED=$(git ls-files --others --exclude-standard | wc -l)
128
+ if [[ "$UNTRACKED" -gt 0 ]]; then
129
+ warn "$UNTRACKED untracked file(s) found"
130
+ info "Run: git status"
131
+ else
132
+ ok "No untracked files"
133
+ fi
134
+
135
+ # Check 7: Validate recent commit messages (for feature branches)
136
+ echo ""
137
+ echo "Checking commit messages..."
138
+ if [[ "$CURRENT_BRANCH" != "dev" && "$CURRENT_BRANCH" != "main" && "$CURRENT_BRANCH" != "master" ]]; then
139
+ COMMITS=$(git rev-list --count origin/dev..HEAD 2>/dev/null || echo "0")
140
+ if [[ "$COMMITS" -gt 0 ]]; then
141
+ INVALID=0
142
+ while IFS= read -r msg; do
143
+ if ! echo "$msg" | grep -qE '^(feat|fix|chore|docs|refactor|test)(\([^)]+\))?: .+'; then
144
+ INVALID=$((INVALID + 1))
145
+ fi
146
+ done < <(git log origin/dev..HEAD --pretty=format:"%s" 2>/dev/null)
147
+
148
+ if [[ "$INVALID" -eq 0 ]]; then
149
+ ok "All $COMMITS commit(s) follow conventional format"
150
+ else
151
+ warn "$INVALID of $COMMITS commit(s) don't follow conventional format"
152
+ info "Format: <type>(<scope>): <description>"
153
+ info "Types: feat, fix, chore, docs, refactor, test"
154
+ fi
155
+ else
156
+ info "No commits ahead of dev yet"
157
+ fi
158
+ else
159
+ info "On base branch — commit check not needed"
160
+ fi
161
+
162
+ # Check 8: Git hooks installed
163
+ echo ""
164
+ echo "Checking git hooks..."
165
+ HOOKS_DIR="${GIT_COMMON}/hooks"
166
+ if [[ "$IS_WORKTREE" == true ]]; then
167
+ # Worktrees share hooks with the main repo
168
+ HOOKS_DIR="${GIT_COMMON}/hooks"
169
+ fi
170
+
171
+ if [[ -f "$HOOKS_DIR/pre-commit" && -x "$HOOKS_DIR/pre-commit" ]]; then
172
+ ok "pre-commit hook installed"
173
+ else
174
+ warn "pre-commit hook not installed"
175
+ info "Run: ./scripts/install-hooks.sh"
176
+ fi
177
+
178
+ if [[ -f "$HOOKS_DIR/commit-msg" && -x "$HOOKS_DIR/commit-msg" ]]; then
179
+ ok "commit-msg hook installed"
180
+ else
181
+ warn "commit-msg hook not installed"
182
+ info "Run: ./scripts/install-hooks.sh"
183
+ fi
184
+
185
+ # Check 9: Worktree health
186
+ echo ""
187
+ echo "Checking worktrees..."
188
+ WORKTREE_COUNT=$(git worktree list | wc -l)
189
+ ok "$WORKTREE_COUNT worktree(s) registered"
190
+
191
+ # Check for stale worktrees
192
+ STALE_COUNT=$(git worktree list --porcelain | grep -c "^prunable" 2>/dev/null || echo "0")
193
+ if [[ "$STALE_COUNT" -gt 0 ]]; then
194
+ warn "$STALE_COUNT stale worktree(s) found"
195
+ info "Run: git worktree prune"
196
+ else
197
+ ok "No stale worktrees"
198
+ fi
199
+
200
+ # Check .worktrees in .gitignore
201
+ if [[ -f "${MAIN_REPO}/.gitignore" ]]; then
202
+ if grep -q '^\.worktrees' "${MAIN_REPO}/.gitignore" 2>/dev/null; then
203
+ ok ".worktrees/ is in .gitignore"
204
+ else
205
+ warn ".worktrees/ is NOT in .gitignore"
206
+ info "Add '.worktrees/' to your .gitignore"
207
+ fi
208
+ fi
209
+
210
+ # List active worktrees
211
+ echo ""
212
+ echo "Active worktrees:"
213
+ git worktree list | while IFS= read -r line; do
214
+ echo " $line"
215
+ done
216
+
217
+ # Summary
218
+ echo ""
219
+ echo "========================================="
220
+ if [[ $ERRORS -gt 0 ]]; then
221
+ echo -e "${RED}Validation failed: $ERRORS error(s), $WARNINGS warning(s)${NC}"
222
+ exit 1
223
+ elif [[ $WARNINGS -gt 0 ]]; then
224
+ echo -e "${YELLOW}Validation passed with $WARNINGS warning(s)${NC}"
225
+ exit 0
226
+ else
227
+ echo -e "${GREEN}Validation passed: All checks OK${NC}"
228
+ exit 0
229
+ fi
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "Git Workflow",
3
+ "description": "Worktree-based feature branch workflow for parallel multi-agent development with conventional commits and PR-based merging",
4
+ "version": "2.0.0",
5
+ "author": "AI Agent Skills",
6
+ "tags": ["git", "worktrees", "workflow", "branching", "conventional-commits", "pull-requests", "multi-agent"]
7
+ }
@@ -0,0 +1,28 @@
1
+ # JS/TS Security Skill (OWASP 2025)
2
+
3
+ Comprehensive security verification for JavaScript and TypeScript codebases following **OWASP Top 10 2025** standards.
4
+
5
+ ## Usage
6
+
7
+ ```bash
8
+ # Verify security of the current project
9
+ ./skills/js-ts-security-skill/scripts/verify-security.sh
10
+ ```
11
+
12
+ ## Features
13
+
14
+ - ✅ **Dependency Auditing**: Checks for known vulnerabilities in `node_modules`.
15
+ - ✅ **Static Analysis**: Detects dangerous code patterns (eval, unsafe regex, etc.).
16
+ - ✅ **Secret Scanning**: Finds hardcoded credentials and API keys.
17
+ - ✅ **OWASP Compliance**: Maps findings to OWASP Top 10 categories.
18
+ - ✅ **Actionable Reports**: Provides clear instructions on how to fix identified issues.
19
+
20
+ ## Requirements
21
+
22
+ - Node.js and npm/yarn
23
+ - `eslint` (installed in the project or globally)
24
+ - `eslint-plugin-security` (recommended for better results)
25
+
26
+ ## Configuration
27
+
28
+ You can customize the audit by adding a `.securityrc` or specifying excludes in the script, though the default settings are designed to be comprehensive.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: js-ts-security-skill
3
+ description: Verify the security of JavaScript and TypeScript codebases against OWASP Top 10 2025 standards.
4
+ ---
5
+
6
+ # JS/TS Security Skill
7
+
8
+ This skill provides a set of tools and best practices to ensure that JavaScript and TypeScript code (both client-side and server-side) is secure and compliant with the latest security standards, specifically the **OWASP Top 10 2025**.
9
+
10
+ ## When to Use
11
+ - Before committing code to a repository.
12
+ - During a security audit of an existing codebase.
13
+ - When adding new dependencies or updating CI/CD pipelines.
14
+ - When implementing critical features like authentication, authorization, or error handling.
15
+
16
+ ## Security Checks (OWASP 2025 Mapping)
17
+
18
+ ### A01:2025 - Broken Access Control
19
+ - Verification of authorization logic.
20
+ - **SSRF (Server-Side Request Forgery)**: Detecting unvalidated URL fetching in `fetch`, `axios`, `http.get`.
21
+
22
+ ### A02:2025 - Security Misconfiguration
23
+ - Auditing configuration files (`.env`, `docker-compose.yml`).
24
+ - Checking for insecure defaults and exposed debug endpoints.
25
+
26
+ ### A03:2025 - Software Supply Chain Failures
27
+ - **NEW**: Focusing on dependency integrity.
28
+ - Verification of lockfiles (`package-lock.json`, `yarn.lock`).
29
+ - Checking for insecure registry URLs (HTTP).
30
+
31
+ ### A04:2025 - Cryptographic Failures
32
+ - Detecting weak hashing (MD5, SHA1).
33
+ - Checking for insecure randomness (`Math.random()`).
34
+
35
+ ### A05:2025 - Injection
36
+ - Expanded detection for OS commands (`child_process.exec`), SQL injection, and NoSQL injection.
37
+
38
+ ### A06:2025 - Insecure Design
39
+ - Documentation on secure design principles (e.g., Fail Secure, Least Privilege).
40
+
41
+ ### A07:2025 - Authentication Failures
42
+ - Checking for insecure cookies (`httpOnly: false`).
43
+ - Hardcoded credentials and weak session management.
44
+
45
+ ### A08:2025 - Software or Data Integrity Failures
46
+ - Detecting unsafe deserialization (`unserialize`, `JSON.parse` of untrusted input).
47
+
48
+ ### A09:2025 - Logging & Alerting Failures
49
+ - Identifying lack of security logging.
50
+ - Empty catch blocks that swallow security errors.
51
+
52
+ ### A10:2025 - Mishandling of Exceptional Conditions
53
+ - **NEW**: Identifying insecure error handling.
54
+ - Detecting empty `catch` blocks and `console.log(err)` in critical paths.
55
+
56
+ ## Usage
57
+
58
+ ### Run OWASP 2025 Security Scan
59
+ The primary method for automated security verification is the `verify-security.sh` script. This script executes multiple scanning phases (SAST, Audit, Secret Scanning) and maps all findings directly to OWASP 2025 categories.
60
+
61
+ Run the scan from the project root:
62
+ ```bash
63
+ /d/Code/agents/skills/js-ts-security-skill/scripts/verify-security.sh
64
+ ```
@@ -0,0 +1,136 @@
1
+ #!/bin/bash
2
+
3
+ # JS/TS Security Verification Script (OWASP Top 10 2025)
4
+ # This script performs a series of security checks on a JavaScript/TypeScript project.
5
+
6
+ RED='\033[0;31m'
7
+ GREEN='\033[0;32m'
8
+ YELLOW='\033[1;33m'
9
+ CYAN='\033[0;36m'
10
+ NC='\033[0m' # No Color
11
+
12
+ echo -e "${CYAN}====================================================${NC}"
13
+ echo -e "${CYAN} JS/TS Security Audit - OWASP Top 10 2025 ${NC}"
14
+ echo -e "${CYAN}====================================================${NC}\n"
15
+
16
+ # A03:2025 - Software Supply Chain Failures
17
+ echo -e "${YELLOW}[1/5] A03:2025 - Software Supply Chain Failures${NC}"
18
+ SUPPLY_CHAIN_ISSUES=0
19
+ if [ ! -f "package-lock.json" ] && [ ! -f "yarn.lock" ] && [ ! -f "pnpm-lock.yaml" ]; then
20
+ echo -e "${RED}✗ CRITICAL: No lockfile found (package-lock.json, yarn.lock, or pnpm-lock.yaml).${NC}"
21
+ echo " Impact: Non-deterministic builds increase supply chain vulnerability."
22
+ SUPPLY_CHAIN_ISSUES=$((SUPPLY_CHAIN_ISSUES + 1))
23
+ fi
24
+
25
+ HTTP_REGISTRY=$(grep -r "http://" package.json 2>/dev/null)
26
+ if [ ! -z "$HTTP_REGISTRY" ]; then
27
+ echo -e "${RED}✗ WARNING: Insecure registry found in package.json (using HTTP instead of HTTPS).${NC}"
28
+ echo "$HTTP_REGISTRY"
29
+ SUPPLY_CHAIN_ISSUES=$((SUPPLY_CHAIN_ISSUES + 1))
30
+ fi
31
+
32
+ if [ $SUPPLY_CHAIN_ISSUES -eq 0 ]; then
33
+ echo -e "${GREEN}✓ No immediate supply chain issues found.${NC}\n"
34
+ else
35
+ echo -e "${RED}✗ Total supply chain issues: $SUPPLY_CHAIN_ISSUES${NC}\n"
36
+ fi
37
+
38
+ # A03:2025 / A06:2021 - Dependency Audit
39
+ echo -e "${YELLOW}[2/5] A03:2025 - Vulnerable Components (Audit)${NC}"
40
+ if [ -f "package-lock.json" ]; then
41
+ npm audit --audit-level=high
42
+ AUDIT_EXIT=$?
43
+ elif [ -f "yarn.lock" ]; then
44
+ yarn audit --level high
45
+ AUDIT_EXIT=$?
46
+ else
47
+ echo -e "${YELLOW} Skipping dependency audit: No lockfile found.${NC}"
48
+ AUDIT_EXIT=0
49
+ fi
50
+
51
+ if [ $AUDIT_EXIT -eq 0 ]; then
52
+ echo -e "${GREEN}✓ No high-severity vulnerabilities in dependencies.${NC}\n"
53
+ else
54
+ echo -e "${RED}✗ Vulnerabilities found. Run 'npm audit fix'.${NC}\n"
55
+ fi
56
+
57
+ # A01/A04/A05/A08 - Static Analysis (SAST)
58
+ echo -e "${YELLOW}[3/5] Static Analysis (OWASP A01, A04, A05, A08)${NC}"
59
+ declare -A DANGEROUS_PATTERNS
60
+ DANGEROUS_PATTERNS["A01: SSRF/Access Control"]="fetch\(\`|axios\.get\(\`|http\.get\(\`"
61
+ DANGEROUS_PATTERNS["A05: Injection"]="eval\(|new Function\(|child_process\.exec\(|require\('child_process'\)\.exec"
62
+ DANGEROUS_PATTERNS["A04: Cryptographic Failures"]="crypto\.createHash\('md5'\)|crypto\.createHash\('sha1'\)|Math\.random\(\)"
63
+ DANGEROUS_PATTERNS["A08: Software/Data Integrity"]="unserialize\(|JSON\.parse\("
64
+ DANGEROUS_PATTERNS["A07: Authentication Failures"]="res\.cookie\(.*httpOnly: false|res\.cookie\(.*secure: false"
65
+
66
+ FOUND_ISSUES=0
67
+ for cat in "A01: SSRF/Access Control" "A05: Injection" "A04: Cryptographic Failures" "A08: Software/Data Integrity" "A07: Authentication Failures"; do
68
+ pattern=${DANGEROUS_PATTERNS[$cat]}
69
+ MATCHES=$(grep -rnE "$pattern" --include="*.js" --include="*.ts" --exclude-dir=node_modules . 2>/dev/null)
70
+ if [ ! -z "$MATCHES" ]; then
71
+ echo -e "${RED}✗ Found Risk: [$cat]${NC}"
72
+ echo "$MATCHES" | sed 's/^/ /'
73
+ FOUND_ISSUES=$((FOUND_ISSUES + 1))
74
+ fi
75
+ done
76
+
77
+ if [ $FOUND_ISSUES -eq 0 ]; then
78
+ echo -e "${GREEN}✓ No dangerous patterns detected via SAST.${NC}\n"
79
+ else
80
+ echo -e "${RED}✗ Total dangerous patterns: $FOUND_ISSUES${NC}\n"
81
+ fi
82
+
83
+ # A10:2025 - Mishandling of Exceptional Conditions
84
+ echo -e "${YELLOW}[4/5] A10:2025 - Mishandling of Exceptional Conditions${NC}"
85
+ EMPTY_CATCH=$(grep -rnE "catch\s*\(\w*\)\s*\{\s*\}" --include="*.js" --include="*.ts" --exclude-dir=node_modules . 2>/dev/null)
86
+ FOUND_EXCEPTION_ISSUES=0
87
+ if [ ! -z "$EMPTY_CATCH" ]; then
88
+ echo -e "${RED}✗ Found Risk: Empty catch blocks (Swallowing exceptions)${NC}"
89
+ echo "$EMPTY_CATCH" | sed 's/^/ /'
90
+ FOUND_EXCEPTION_ISSUES=$((FOUND_EXCEPTION_ISSUES + 1))
91
+ fi
92
+
93
+ if [ $FOUND_EXCEPTION_ISSUES -eq 0 ]; then
94
+ echo -e "${GREEN}✓ Exception handling patterns appear secure.${NC}\n"
95
+ else
96
+ echo -e "${RED}✗ Total exception handling issues: $FOUND_EXCEPTION_ISSUES${NC}\n"
97
+ fi
98
+
99
+ # Secret Detection (A01/A07)
100
+ echo -e "${YELLOW}[5/5] A01/A07 - Hardcoded Secrets Scanning${NC}"
101
+ SECRET_PATTERNS=("AIza[0-9A-Za-z-_]{35}" "sk_live_[0-9a-zA-Z]{24}" "xox[pb]-[0-9]{12}-[0-9]{12}-[0-9]{12}-[a-z0-9]{32}" "-----BEGIN RSA PRIVATE KEY-----")
102
+
103
+ FOUND_SECRETS=0
104
+ for pattern in "${SECRET_PATTERNS[@]}"; do
105
+ MATCHES=$(grep -rnE "$pattern" --include="*.js" --include="*.ts" --include="*.env" --exclude-dir=node_modules . 2>/dev/null)
106
+ if [ ! -z "$MATCHES" ]; then
107
+ echo -e "${RED}✗ Found Risk: Potential secret leakage ($pattern)${NC}"
108
+ echo "$MATCHES" | sed 's/^/ /'
109
+ FOUND_SECRETS=$((FOUND_SECRETS + 1))
110
+ fi
111
+ done
112
+
113
+ if [ $FOUND_SECRETS -eq 0 ]; then
114
+ echo -e "${GREEN}✓ No hardcoded secrets detected.${NC}\n"
115
+ else
116
+ echo -e "${RED}✗ Total secrets found: $FOUND_SECRETS${NC}\n"
117
+ fi
118
+
119
+ # Summary
120
+ echo -e "${CYAN}----------------------------------------------------${NC}"
121
+ echo -e "${CYAN} OWASP 2025 Audit Summary ${NC}"
122
+ echo -e "${CYAN}----------------------------------------------------${NC}"
123
+ [ $SUPPLY_CHAIN_ISSUES -eq 0 ] && echo -e "A03: Supply Chain - ${GREEN}PASS${NC}" || echo -e "A03: Supply Chain - ${RED}FAIL${NC}"
124
+ [ $AUDIT_EXIT -eq 0 ] && echo -e "A03: Vulnerabilities - ${GREEN}PASS${NC}" || echo -e "A03: Vulnerabilities - ${RED}FAIL${NC}"
125
+ [ $FOUND_ISSUES -eq 0 ] && echo -e "A01/04/05/08: Code Patterns - ${GREEN}PASS${NC}" || echo -e "A01/04/05/08: Code Patterns - ${RED}FAIL${NC}"
126
+ [ $FOUND_EXCEPTION_ISSUES -eq 0 ] && echo -e "A10: Exception Handling - ${GREEN}PASS${NC}" || echo -e "A10: Exception Handling - ${RED}FAIL${NC}"
127
+ [ $FOUND_SECRETS -eq 0 ] && echo -e "A01/A07: Secrets - ${GREEN}PASS${NC}" || echo -e "A01/A07: Secrets - ${RED}FAIL${NC}"
128
+ echo -e "${CYAN}----------------------------------------------------${NC}"
129
+
130
+ if [ $AUDIT_EXIT -eq 0 ] && [ $FOUND_ISSUES -eq 0 ] && [ $FOUND_SECRETS -eq 0 ] && [ $SUPPLY_CHAIN_ISSUES -eq 0 ] && [ $FOUND_EXCEPTION_ISSUES -eq 0 ]; then
131
+ echo -e "${GREEN}Final Result: SECURE${NC}"
132
+ exit 0
133
+ else
134
+ echo -e "${RED}Final Result: VULNERABLE${NC}"
135
+ exit 1
136
+ fi
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "JS/TS Security",
3
+ "description": "Verify security of JavaScript and TypeScript codebases against OWASP Top 10 2025 standards",
4
+ "version": "1.0.0",
5
+ "author": "AI Agent Skills",
6
+ "tags": ["javascript", "typescript", "security", "OWASP", "vulnerability-scanning"]
7
+ }
@@ -0,0 +1,66 @@
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
+ # Skill Creator
7
+
8
+ ## Description
9
+ Guide for creating effective skills that extend Claude's capabilities with specialized knowledge, workflows, and tool integrations.
10
+
11
+ ## Usage
12
+ Invoke this skill when creating or updating a skill package.
13
+
14
+ ## Instructions
15
+
16
+ ### Skill Creation Process
17
+
18
+ Follow these steps in order:
19
+
20
+ 1. **Understand** the skill with concrete examples
21
+ 2. **Plan** reusable skill contents (scripts, references, assets)
22
+ 3. **Initialize** the skill (run `scripts/init_skill.py <name> --path <dir>`)
23
+ 4. **Edit** the skill (implement resources, write SKILL.md)
24
+ 5. **Package** the skill (run `scripts/package_skill.py <path>`)
25
+ 6. **Iterate** based on real usage
26
+
27
+ ### Core Principles
28
+
29
+ - **Concise is key**: Claude is already smart — only add context it doesn't have. Challenge each piece of information: "Does Claude really need this?"
30
+ - **Appropriate freedom**: Match specificity to task fragility. High freedom for flexible tasks, low freedom for fragile operations.
31
+ - **Progressive disclosure**: Keep SKILL.md under 500 lines. Use references/ for detailed content.
32
+
33
+ ### Skill Structure
34
+
35
+ ```
36
+ skill-name/
37
+ ├── SKILL.md (required — YAML frontmatter + markdown body)
38
+ ├── scripts/ (executable code, Python/Bash)
39
+ ├── references/ (documentation loaded into context as needed)
40
+ └── assets/ (files used in output: templates, images, fonts)
41
+ ```
42
+
43
+ ### SKILL.md Frontmatter
44
+
45
+ Only `name` and `description` are required. Description is the primary trigger mechanism — include both what the skill does AND when to use it.
46
+
47
+ ### Bundled Resources
48
+
49
+ - **scripts/**: For code that's rewritten repeatedly or needs deterministic reliability
50
+ - **references/**: For documentation Claude should reference while working (schemas, APIs, policies)
51
+ - **assets/**: For files used in output but not loaded into context (templates, images, fonts)
52
+
53
+ ### What NOT to Include
54
+
55
+ Do NOT create README.md, INSTALLATION_GUIDE.md, QUICK_REFERENCE.md, CHANGELOG.md, or other auxiliary docs. Only include what an AI agent needs to execute tasks.
56
+
57
+ ### Design Patterns
58
+
59
+ - **Multi-step processes**: See [references/workflows.md](references/workflows.md)
60
+ - **Output formats**: See [references/output-patterns.md](references/output-patterns.md)
61
+
62
+ ### Tools
63
+
64
+ - **Initialize**: `scripts/init_skill.py <skill-name> --path <output-dir>`
65
+ - **Validate**: `scripts/quick_validate.py <skill-dir>`
66
+ - **Package**: `scripts/package_skill.py <skill-dir> [output-dir]`