opencode-skills-collection 3.0.31 → 3.0.33

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 (51) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +14 -1
  2. package/bundled-skills/bilig-workpaper/SKILL.md +12 -3
  3. package/bundled-skills/bumblebee/SKILL.md +6 -2
  4. package/bundled-skills/bun-development/SKILL.md +5 -3
  5. package/bundled-skills/cloud-penetration-testing/SKILL.md +5 -3
  6. package/bundled-skills/container-security-hardening/SKILL.md +1001 -0
  7. package/bundled-skills/container-security-hardening/references/base-image-comparison.md +245 -0
  8. package/bundled-skills/container-security-hardening/references/kubernetes-pod-security.md +567 -0
  9. package/bundled-skills/container-security-hardening/references/seccomp-profile-template.json +337 -0
  10. package/bundled-skills/doc2math/SKILL.md +102 -0
  11. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  12. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  13. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  14. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  15. package/bundled-skills/docs/users/bundles.md +1 -1
  16. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  17. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  18. package/bundled-skills/docs/users/getting-started.md +6 -2
  19. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  20. package/bundled-skills/docs/users/usage.md +4 -4
  21. package/bundled-skills/docs/users/visual-guide.md +4 -4
  22. package/bundled-skills/environment-setup-guide/SKILL.md +10 -6
  23. package/bundled-skills/evolution/SKILL.md +5 -3
  24. package/bundled-skills/github-actions-advanced/SKILL.md +1100 -0
  25. package/bundled-skills/gitops-workflow/SKILL.md +5 -3
  26. package/bundled-skills/ii-commons/SKILL.md +15 -1
  27. package/bundled-skills/lemmaly/SKILL.md +15 -6
  28. package/bundled-skills/linkerd-patterns/SKILL.md +5 -3
  29. package/bundled-skills/longbridge/SKILL.md +95 -0
  30. package/bundled-skills/mercury-mcp/SKILL.md +9 -1
  31. package/bundled-skills/moatmri/SKILL.md +84 -0
  32. package/bundled-skills/nextjs-seo-indexing/SKILL.md +263 -0
  33. package/bundled-skills/openclaw-github-repo-commander/scripts/repo-audit.sh +42 -0
  34. package/bundled-skills/photopea-embedded-editor/SKILL.md +7 -3
  35. package/bundled-skills/runaway-guard/SKILL.md +331 -0
  36. package/bundled-skills/schema-markup-generator/SKILL.md +319 -0
  37. package/bundled-skills/sendblue/sendblue-api/SKILL.md +6 -1
  38. package/bundled-skills/sendblue/sendblue-cli/SKILL.md +6 -1
  39. package/bundled-skills/sendblue/sendblue-notify/SKILL.md +6 -1
  40. package/bundled-skills/sendblue/textme/SKILL.md +4 -0
  41. package/bundled-skills/social-metadata-hardening/SKILL.md +230 -0
  42. package/bundled-skills/socialclaw/SKILL.md +6 -1
  43. package/bundled-skills/uv-package-manager/resources/implementation-playbook.md +5 -3
  44. package/bundled-skills/varlock/SKILL.md +10 -6
  45. package/bundled-skills/vibe-code-cleanup/SKILL.md +231 -0
  46. package/bundled-skills/vibecode-production-qa-validator/SKILL.md +237 -0
  47. package/bundled-skills/wordpress-centric-high-seo-optimized-blogwriting-skill/SKILL.md +229 -162
  48. package/bundled-skills/yield-intelligence/SKILL.md +121 -0
  49. package/bundled-skills/youtube-full/SKILL.md +144 -0
  50. package/package.json +1 -1
  51. package/skills_index.json +330 -28
@@ -0,0 +1,567 @@
1
+ # Kubernetes Pod Security Reference
2
+
3
+ Full reference for hardening workloads in Kubernetes — NetworkPolicy, RBAC, Pod Security Admission, admission controllers (Kyverno/OPA), and service account hardening.
4
+
5
+ ## Table of Contents
6
+
7
+ 1. [Pod Security Admission (PSA)](#pod-security-admission)
8
+ 2. [NetworkPolicy — Zero-Trust Networking](#networkpolicy)
9
+ 3. [RBAC — Least Privilege](#rbac)
10
+ 4. [Admission Controllers (Kyverno / OPA Gatekeeper)](#admission-controllers)
11
+ 5. [Service Account Hardening](#service-account-hardening)
12
+ 6. [Runtime Security — Falco](#runtime-security--falco)
13
+ 7. [Secrets Management in K8s](#secrets-management-in-k8s)
14
+
15
+ ---
16
+
17
+ ## Pod Security Admission
18
+
19
+ Built-in K8s 1.25+ policy engine (replaces deprecated PodSecurityPolicy).
20
+
21
+ ### Three Built-In Policy Levels
22
+
23
+ | Level | What It Blocks |
24
+ |---|---|
25
+ | `privileged` | No restrictions (cluster default) |
26
+ | `baseline` | Blocks hostNetwork, hostPID, hostIPC, privileged containers, dangerous volume types, hostPath |
27
+ | `restricted` | Everything in baseline + requires non-root, read-only FS, drops capabilities, requires seccomp |
28
+
29
+ ### Three Modes Per Level
30
+
31
+ | Mode | Behavior |
32
+ |---|---|
33
+ | `enforce` | Reject pods that violate the policy |
34
+ | `audit` | Allow but log a violation in audit log |
35
+ | `warn` | Allow but return a warning to the user |
36
+
37
+ ### Applying PSA Labels
38
+
39
+ ```bash
40
+ # Audit before enforcing — find what would fail
41
+ kubectl label namespace production \
42
+ pod-security.kubernetes.io/audit=restricted \
43
+ pod-security.kubernetes.io/audit-version=latest
44
+
45
+ # Gradual rollout: warn in staging, enforce in production
46
+ kubectl label namespace staging \
47
+ pod-security.kubernetes.io/warn=restricted \
48
+ pod-security.kubernetes.io/warn-version=latest
49
+
50
+ kubectl label namespace production \
51
+ pod-security.kubernetes.io/enforce=restricted \
52
+ pod-security.kubernetes.io/enforce-version=latest
53
+ ```
54
+
55
+ ### Check What Would Fail Before Enforcing
56
+
57
+ ```bash
58
+ # Dry-run check against a namespace
59
+ kubectl --dry-run=server apply -f manifests/ --namespace production
60
+
61
+ # Check a specific pod spec
62
+ kubectl run test-pod --image=nginx --dry-run=server -n production
63
+ ```
64
+
65
+ ### Minimum Pod Spec for `restricted` Level
66
+
67
+ ```yaml
68
+ spec:
69
+ securityContext:
70
+ runAsNonRoot: true
71
+ runAsUser: 10001
72
+ runAsGroup: 10001
73
+ fsGroup: 10001
74
+ seccompProfile:
75
+ type: RuntimeDefault # or Localhost with a custom profile
76
+ containers:
77
+ - name: app
78
+ securityContext:
79
+ allowPrivilegeEscalation: false
80
+ readOnlyRootFilesystem: true
81
+ capabilities:
82
+ drop: ["ALL"]
83
+ # Resource limits are required for restricted PSA
84
+ resources:
85
+ requests:
86
+ memory: "64Mi"
87
+ cpu: "50m"
88
+ limits:
89
+ memory: "256Mi"
90
+ cpu: "250m"
91
+ ```
92
+
93
+ ---
94
+
95
+ ## NetworkPolicy — Zero-Trust Networking
96
+
97
+ By default all pods in a cluster can reach all other pods on any port. Lock down with NetworkPolicy.
98
+
99
+ > **Prerequisite:** Your CNI plugin must support NetworkPolicy (Calico, Cilium, Weave Net — but NOT Flannel by default).
100
+
101
+ ### Step 1: Default Deny All
102
+
103
+ Apply a default-deny to every namespace that holds workloads:
104
+
105
+ ```yaml
106
+ apiVersion: networking.k8s.io/v1
107
+ kind: NetworkPolicy
108
+ metadata:
109
+ name: default-deny-all
110
+ namespace: production
111
+ spec:
112
+ podSelector: {} # Selects all pods in this namespace
113
+ policyTypes:
114
+ - Ingress
115
+ - Egress
116
+ ```
117
+
118
+ ### Step 2: Allow Only Required Traffic
119
+
120
+ ```yaml
121
+ # Allow ingress from nginx ingress controller, egress to postgres + DNS
122
+ apiVersion: networking.k8s.io/v1
123
+ kind: NetworkPolicy
124
+ metadata:
125
+ name: allow-myapp
126
+ namespace: production
127
+ spec:
128
+ podSelector:
129
+ matchLabels:
130
+ app: myapp
131
+ policyTypes:
132
+ - Ingress
133
+ - Egress
134
+ ingress:
135
+ - from:
136
+ - namespaceSelector:
137
+ matchLabels:
138
+ kubernetes.io/metadata.name: ingress-nginx
139
+ podSelector:
140
+ matchLabels:
141
+ app.kubernetes.io/name: ingress-nginx
142
+ ports:
143
+ - protocol: TCP
144
+ port: 3000
145
+ egress:
146
+ - to:
147
+ - podSelector:
148
+ matchLabels:
149
+ app: postgres
150
+ namespaceSelector:
151
+ matchLabels:
152
+ kubernetes.io/metadata.name: production
153
+ ports:
154
+ - protocol: TCP
155
+ port: 5432
156
+ - to: # Allow DNS resolution to cluster DNS only
157
+ - namespaceSelector:
158
+ matchLabels:
159
+ kubernetes.io/metadata.name: kube-system
160
+ podSelector:
161
+ matchLabels:
162
+ k8s-app: kube-dns
163
+ ports:
164
+ - protocol: UDP
165
+ port: 53
166
+ - protocol: TCP
167
+ port: 53
168
+ ```
169
+
170
+ ### Allow Access to External Services (e.g., cloud APIs)
171
+
172
+ ```yaml
173
+ egress:
174
+ - to:
175
+ - ipBlock:
176
+ cidr: 0.0.0.0/0 # All external IPs
177
+ except:
178
+ - 10.0.0.0/8 # But not internal cluster ranges
179
+ - 172.16.0.0/12
180
+ - 192.168.0.0/16
181
+ ports:
182
+ - protocol: TCP
183
+ port: 443 # HTTPS only
184
+ ```
185
+
186
+ ### Validate NetworkPolicy with Cilium or Calico CLI
187
+
188
+ ```bash
189
+ # Cilium — test connectivity between pods
190
+ cilium connectivity test
191
+
192
+ # Calico — list effective policies
193
+ kubectl exec -it deploy/myapp -- calicoctl get networkpolicy -n production
194
+ ```
195
+
196
+ ---
197
+
198
+ ## RBAC — Least Privilege
199
+
200
+ ### Principle: Scope Narrowly, Avoid Wildcards
201
+
202
+ ```yaml
203
+ # ❌ DANGEROUS — grants everything to everything
204
+ apiVersion: rbac.authorization.k8s.io/v1
205
+ kind: ClusterRoleBinding
206
+ metadata:
207
+ name: full-admin
208
+ subjects:
209
+ - kind: ServiceAccount
210
+ name: myapp-sa
211
+ namespace: production
212
+ roleRef:
213
+ kind: ClusterRole
214
+ name: cluster-admin
215
+ apiGroup: rbac.authorization.k8s.io
216
+
217
+ ---
218
+ # ✅ CORRECT — minimal namespace-scoped role with specific resource names
219
+ apiVersion: rbac.authorization.k8s.io/v1
220
+ kind: Role
221
+ metadata:
222
+ name: myapp-role
223
+ namespace: production
224
+ rules:
225
+ - apiGroups: [""]
226
+ resources: ["configmaps"]
227
+ resourceNames: ["myapp-config"] # Lock to specific named resources
228
+ verbs: ["get", "list"] # Never ["*"]
229
+ - apiGroups: [""]
230
+ resources: ["secrets"]
231
+ resourceNames: ["myapp-db-creds"]
232
+ verbs: ["get"]
233
+
234
+ ---
235
+ apiVersion: rbac.authorization.k8s.io/v1
236
+ kind: RoleBinding
237
+ metadata:
238
+ name: myapp-rolebinding
239
+ namespace: production
240
+ subjects:
241
+ - kind: ServiceAccount
242
+ name: myapp-sa
243
+ namespace: production
244
+ roleRef:
245
+ kind: Role
246
+ name: myapp-role
247
+ apiGroup: rbac.authorization.k8s.io
248
+ ```
249
+
250
+ ### Audit RBAC
251
+
252
+ ```bash
253
+ # What can a service account do?
254
+ kubectl auth can-i --list \
255
+ --as=system:serviceaccount:production:myapp-sa \
256
+ -n production
257
+
258
+ # Find all cluster-admin bindings (security anti-pattern)
259
+ kubectl get clusterrolebindings -o json | \
260
+ jq '.items[] | select(.roleRef.name=="cluster-admin") | {name:.metadata.name, subjects:.subjects}'
261
+
262
+ # Find overly broad wildcard permissions
263
+ kubectl get roles,clusterroles -A -o json | \
264
+ jq '.items[] | select(.rules[]?.verbs[]? == "*") | .metadata.name'
265
+
266
+ # Use rbac-tool for a full audit
267
+ kubectl rbac-tool who-can get secrets -n production
268
+ ```
269
+
270
+ ---
271
+
272
+ ## Admission Controllers
273
+
274
+ ### Kyverno (Policy as Kubernetes Resources)
275
+
276
+ Kyverno validates, mutates, and generates resources — no Rego knowledge required.
277
+
278
+ ```bash
279
+ # Install Kyverno
280
+ helm repo add kyverno https://kyverno.github.io/kyverno/
281
+ helm install kyverno kyverno/kyverno -n kyverno --create-namespace
282
+ ```
283
+
284
+ **Essential Policies:**
285
+
286
+ ```yaml
287
+ # 1. Require non-root containers
288
+ apiVersion: kyverno.io/v1
289
+ kind: ClusterPolicy
290
+ metadata:
291
+ name: require-non-root
292
+ spec:
293
+ validationFailureAction: Enforce
294
+ rules:
295
+ - name: check-run-as-non-root
296
+ match:
297
+ resources:
298
+ kinds: [Pod]
299
+ validate:
300
+ message: "runAsNonRoot: true is required"
301
+ pattern:
302
+ spec:
303
+ containers:
304
+ - securityContext:
305
+ runAsNonRoot: true
306
+
307
+ ---
308
+ # 2. Require image digest pinning
309
+ apiVersion: kyverno.io/v1
310
+ kind: ClusterPolicy
311
+ metadata:
312
+ name: require-image-digest
313
+ spec:
314
+ validationFailureAction: Enforce
315
+ rules:
316
+ - name: check-digest
317
+ match:
318
+ resources:
319
+ kinds: [Pod]
320
+ validate:
321
+ message: "Images must use @sha256: digest, not floating tags"
322
+ pattern:
323
+ spec:
324
+ containers:
325
+ - image: "*@sha256:*"
326
+
327
+ ---
328
+ # 3. Disallow privileged containers
329
+ apiVersion: kyverno.io/v1
330
+ kind: ClusterPolicy
331
+ metadata:
332
+ name: disallow-privileged
333
+ spec:
334
+ validationFailureAction: Enforce
335
+ rules:
336
+ - name: check-privileged
337
+ match:
338
+ resources:
339
+ kinds: [Pod]
340
+ validate:
341
+ message: "Privileged containers are not allowed"
342
+ pattern:
343
+ spec:
344
+ containers:
345
+ - =(securityContext):
346
+ =(privileged): "false"
347
+
348
+ ---
349
+ # 4. Require resource limits (prevents resource starvation)
350
+ apiVersion: kyverno.io/v1
351
+ kind: ClusterPolicy
352
+ metadata:
353
+ name: require-resource-limits
354
+ spec:
355
+ validationFailureAction: Enforce
356
+ rules:
357
+ - name: check-limits
358
+ match:
359
+ resources:
360
+ kinds: [Pod]
361
+ validate:
362
+ message: "Resource limits (memory and cpu) must be set"
363
+ pattern:
364
+ spec:
365
+ containers:
366
+ - resources:
367
+ limits:
368
+ memory: "?*"
369
+ cpu: "?*"
370
+
371
+ ---
372
+ # 5. Auto-mutate: add drop ALL capabilities if not set
373
+ apiVersion: kyverno.io/v1
374
+ kind: ClusterPolicy
375
+ metadata:
376
+ name: drop-all-capabilities
377
+ spec:
378
+ rules:
379
+ - name: add-drop-all
380
+ match:
381
+ resources:
382
+ kinds: [Pod]
383
+ mutate:
384
+ patchStrategicMerge:
385
+ spec:
386
+ containers:
387
+ - (name): "*"
388
+ securityContext:
389
+ capabilities:
390
+ drop: ["ALL"]
391
+ ```
392
+
393
+ ### OPA Gatekeeper (Policy as Rego)
394
+
395
+ ```bash
396
+ # Install Gatekeeper
397
+ kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/release-3.17/deploy/gatekeeper.yaml
398
+ ```
399
+
400
+ ```yaml
401
+ # ConstraintTemplate — define the Rego policy
402
+ apiVersion: templates.gatekeeper.sh/v1
403
+ kind: ConstraintTemplate
404
+ metadata:
405
+ name: k8srequiredlabels
406
+ spec:
407
+ crd:
408
+ spec:
409
+ names:
410
+ kind: K8sRequiredLabels
411
+ validation:
412
+ openAPIV3Schema:
413
+ properties:
414
+ labels:
415
+ type: array
416
+ items:
417
+ type: string
418
+ targets:
419
+ - target: admission.k8s.gatekeeper.sh
420
+ rego: |
421
+ package k8srequiredlabels
422
+ violation[{"msg": msg}] {
423
+ provided := {label | input.review.object.metadata.labels[label]}
424
+ required := {label | label := input.parameters.labels[_]}
425
+ missing := required - provided
426
+ count(missing) > 0
427
+ msg := sprintf("Missing required labels: %v", [missing])
428
+ }
429
+
430
+ ---
431
+ # Constraint — apply the policy
432
+ apiVersion: constraints.gatekeeper.sh/v1beta1
433
+ kind: K8sRequiredLabels
434
+ metadata:
435
+ name: require-app-label
436
+ spec:
437
+ enforcementAction: deny
438
+ match:
439
+ kinds:
440
+ - apiGroups: ["apps"]
441
+ kinds: ["Deployment"]
442
+ parameters:
443
+ labels: ["app", "version", "owner"]
444
+ ```
445
+
446
+ ---
447
+
448
+ ## Service Account Hardening
449
+
450
+ ```yaml
451
+ # Dedicated service account per workload (never use 'default')
452
+ apiVersion: v1
453
+ kind: ServiceAccount
454
+ metadata:
455
+ name: myapp-sa
456
+ namespace: production
457
+ annotations:
458
+ # EKS — IAM Roles for Service Accounts (IRSA)
459
+ eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/myapp-role
460
+ # GKE — Workload Identity
461
+ iam.gke.io/gcp-service-account: myapp@my-project.iam.gserviceaccount.com
462
+ automountServiceAccountToken: false # Disable unless app calls K8s API
463
+
464
+ ---
465
+ # In the pod spec — also disable token mounting
466
+ spec:
467
+ serviceAccountName: myapp-sa
468
+ automountServiceAccountToken: false
469
+ ```
470
+
471
+ **Why use Workload Identity instead of K8s Secrets for cloud credentials?**
472
+ - Credentials are short-lived (1h) and auto-rotated
473
+ - No secret to leak, rotate, or store
474
+ - Audit trail tied to workload identity, not a shared key
475
+
476
+ ---
477
+
478
+ ## Runtime Security — Falco
479
+
480
+ Falco detects anomalous runtime behaviour (unexpected syscalls, network connections, file reads).
481
+
482
+ ```bash
483
+ # Install via Helm
484
+ helm repo add falcosecurity https://falcosecurity.github.io/charts
485
+ helm install falco falcosecurity/falco \
486
+ --namespace falco --create-namespace \
487
+ --set falco.grpc.enabled=true \
488
+ --set falco.grpcOutput.enabled=true
489
+ ```
490
+
491
+ **Example rules:**
492
+
493
+ ```yaml
494
+ # Alert on shell spawned inside a container
495
+ - rule: Terminal shell in container
496
+ desc: A shell was spawned in a container with an attached terminal
497
+ condition: >
498
+ spawned_process and container
499
+ and shell_procs and proc.tty != 0
500
+ and container_entrypoint
501
+ output: >
502
+ Shell spawned in a container (user=%user.name container=%container.name
503
+ shell=%proc.name parent=%proc.pname)
504
+ priority: WARNING
505
+
506
+ # Alert on sensitive file read
507
+ - rule: Read sensitive file untrusted
508
+ desc: An attempt to read a sensitive file by a non-trusted program
509
+ condition: >
510
+ open_read and sensitive_files
511
+ and not proc.name in (trusted_programs)
512
+ output: >
513
+ Sensitive file opened for reading (file=%fd.name user=%user.name
514
+ container=%container.name)
515
+ priority: WARNING
516
+ ```
517
+
518
+ ---
519
+
520
+ ## Secrets Management in K8s
521
+
522
+ **Kubernetes Secrets are base64-encoded, not encrypted by default.** Use one of these:
523
+
524
+ | Solution | Mechanism | Best For |
525
+ |---|---|---|
526
+ | **External Secrets Operator** | Sync from AWS Secrets Manager / GCP Secret Manager / Vault | Production — secrets never live in etcd |
527
+ | **Sealed Secrets (Bitnami)** | Asymmetric encryption of secrets in Git | GitOps workflows |
528
+ | **HashiCorp Vault** | Dynamic secrets, PKI, lease management | Complex multi-cloud setups |
529
+ | **SOPS + Age/GPG** | Encrypted secret files in Git | Small teams, simple workflows |
530
+
531
+ ```yaml
532
+ # External Secrets Operator — sync from AWS Secrets Manager
533
+ apiVersion: external-secrets.io/v1beta1
534
+ kind: ExternalSecret
535
+ metadata:
536
+ name: myapp-db-creds
537
+ namespace: production
538
+ spec:
539
+ refreshInterval: 1h
540
+ secretStoreRef:
541
+ name: aws-secrets-manager
542
+ kind: ClusterSecretStore
543
+ target:
544
+ name: myapp-db-creds
545
+ creationPolicy: Owner
546
+ data:
547
+ - secretKey: DB_PASSWORD
548
+ remoteRef:
549
+ key: production/myapp/db
550
+ property: password
551
+ ```
552
+
553
+ ```bash
554
+ # Enable etcd encryption at rest (K8s)
555
+ # In kube-apiserver: --encryption-provider-config=encryption-config.yaml
556
+ # encryption-config.yaml:
557
+ apiVersion: apiserver.config.k8s.io/v1
558
+ kind: EncryptionConfiguration
559
+ resources:
560
+ - resources: [secrets]
561
+ providers:
562
+ - aescbc:
563
+ keys:
564
+ - name: key1
565
+ secret: <base64-encoded-32-byte-key>
566
+ - identity: {}
567
+ ```