Helm chart builder
Skill ComeOnOliver/skillshub/skills/alirezarezvani/claude-skills/helm-chart-builder
π§ The right skill, one API call. AI agent skills registry with token-efficient skill resolution. 5,000+ skills from 500+ top repos.
npx -y skills add ComeOnOliver/skillshub --skill helm-chart-builderAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Helm chart development agent skill and plugin for Claude Code, Codex, Gemini CLI, Cursor, OpenClaw β chart scaffolding, values design, template patterns, dependency management, security hardening, and chart testing. Use when: user wants to create or improve Helm charts, design values.yaml files, implement template helpers, audit chart security (RBAC, network policies, pod security), manage subcharts, or run helm lint/test.
The file declares its own license as MIT. That is the authorβs claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
15.1 KB, ~3.5k tokens by cl100k_base, as published. Nobody here has run it
Helm Chart Builder
Production-grade Helm charts. Sensible defaults. Secure by design. No cargo-culting.
Opinionated Helm workflow that turns ad-hoc Kubernetes manifests into maintainable, testable, reusable charts. Covers chart structure, values design, template patterns, dependency management, and security hardening.
Not a Helm tutorial β a set of concrete decisions about how to build charts that operators trust and developers don't fight.
Slash Commands
| Command | What it does |
|---|---|
/helm:create | Scaffold a production-ready Helm chart with best-practice structure |
/helm:review | Analyze an existing chart for issues β missing labels, hardcoded values, template anti-patterns |
/helm:security | Audit chart for security issues β RBAC, network policies, pod security, secrets handling |
When This Skill Activates
Recognize these patterns from the user:
- "Create a Helm chart for this service"
- "Review my Helm chart"
- "Is this chart secure?"
- "Design a values.yaml"
- "Add a subchart dependency"
- "Set up helm tests"
- "Helm best practices for [workload type]"
- Any request involving: Helm chart, values.yaml, Chart.yaml, templates, helpers, _helpers.tpl, subcharts, helm lint, helm test
If the user has a Helm chart or wants to package Kubernetes resources β this skill applies.
Workflow
/helm:create β Chart Scaffolding
-
Identify workload type
- Web service (Deployment + Service + Ingress)
- Worker (Deployment, no Service)
- CronJob (CronJob + ServiceAccount)
- Stateful service (StatefulSet + PVC + Headless Service)
- Library chart (no templates, only helpers)
-
Scaffold chart structure
mychart/ βββ Chart.yaml # Chart metadata and dependencies βββ values.yaml # Default configuration βββ values.schema.json # Optional: JSON Schema for values validation βββ .helmignore # Files to exclude from packaging βββ templates/ β βββ _helpers.tpl # Named templates and helper functions β βββ deployment.yaml # Workload resource β βββ service.yaml # Service exposure β βββ ingress.yaml # Ingress (if applicable) β βββ serviceaccount.yaml # ServiceAccount β βββ hpa.yaml # HorizontalPodAutoscaler β βββ pdb.yaml # PodDisruptionBudget β βββ networkpolicy.yaml # NetworkPolicy β βββ configmap.yaml # ConfigMap (if needed) β βββ secret.yaml # Secret (if needed) β βββ NOTES.txt # Post-install usage instructions β βββ tests/ β βββ test-connection.yaml βββ charts/ # Subcharts (dependencies) -
Apply Chart.yaml best practices
METADATA βββ apiVersion: v2 (Helm 3 only β never v1) βββ name: matches directory name exactly βββ version: semver (chart version, not app version) βββ appVersion: application version string βββ description: one-line summary of what the chart deploys βββ type: application (or library for shared helpers) DEPENDENCIES βββ Pin dependency versions with ~X.Y.Z (patch-level float) βββ Use condition field to make subcharts optional βββ Use alias for multiple instances of same subchart βββ Run helm dependency update after changes -
Generate values.yaml with documentation
- Every value has an inline comment explaining purpose and type
- Sensible defaults that work for development
- Override-friendly structure (flat where possible, nested only when logical)
- No hardcoded cluster-specific values (image registry, domain, storage class)
-
Validate
python3 scripts/chart_analyzer.py mychart/ helm lint mychart/ helm template mychart/ --debug
/helm:review β Chart Analysis
-
Check chart structure
Check Severity Fix Missing _helpers.tpl High Create helpers for common labels and selectors No NOTES.txt Medium Add post-install instructions No .helmignore Low Create one to exclude .git, CI files, tests Missing Chart.yaml fields Medium Add description, appVersion, maintainers Hardcoded values in templates High Extract to values.yaml with defaults -
Check template quality
Check Severity Fix Missing standard labels High Use app.kubernetes.io/*labels via _helpers.tplNo resource requests/limits Critical Add resources section with defaults in values.yaml Hardcoded image tag High Use {{ .Values.image.repository }}:{{ .Values.image.tag }}No imagePullPolicy Medium Default to IfNotPresent, overridableMissing liveness/readiness probes High Add probes with configurable paths and ports No pod anti-affinity Medium Add preferred anti-affinity for HA Duplicate template code Medium Extract into named templates in _helpers.tpl -
Check values.yaml quality
python3 scripts/values_validator.py mychart/values.yaml -
Generate review report
HELM CHART REVIEW β [chart name] Date: [timestamp] CRITICAL: [count] HIGH: [count] MEDIUM: [count] LOW: [count] [Detailed findings with fix recommendations]
/helm:security β Security Audit
-
Pod security audit
Check Severity Fix No securityContext Critical Add runAsNonRoot, readOnlyRootFilesystem Running as root Critical Set runAsNonRoot: true,runAsUser: 1000Writable root filesystem High Set readOnlyRootFilesystem: true+ emptyDir for tmpAll capabilities retained High Drop ALL, add only specific needed caps Privileged container Critical Set privileged: false, use specific capabilitiesNo seccomp profile Medium Set seccompProfile.type: RuntimeDefaultallowPrivilegeEscalation true High Set allowPrivilegeEscalation: false -
RBAC audit
Check Severity Fix No ServiceAccount Medium Create dedicated SA, don't use default automountServiceAccountToken true Medium Set to false unless pod needs K8s API access ClusterRole instead of Role Medium Use namespace-scoped Role unless cluster-wide needed Wildcard permissions Critical Use specific resource names and verbs No RBAC at all Low Acceptable if pod doesn't need K8s API access -
Network and secrets audit
Check Severity Fix No NetworkPolicy Medium Add default-deny ingress + explicit allow rules Secrets in values.yaml Critical Use external secrets operator or sealed-secrets No PodDisruptionBudget Medium Add PDB with minAvailable for HA workloads hostNetwork: true High Remove unless absolutely required (e.g., CNI plugin) hostPID or hostIPC Critical Never use in application charts -
Generate security report
SECURITY AUDIT β [chart name] Date: [timestamp] CRITICAL: [count] HIGH: [count] MEDIUM: [count] LOW: [count] [Detailed findings with remediation steps]
Tooling
scripts/chart_analyzer.py
CLI utility for static analysis of Helm chart directories.
Features:
- Chart structure validation (required files, directory layout)
- Template anti-pattern detection (hardcoded values, missing labels, no resource limits)
- Chart.yaml metadata checks
- Standard labels verification (app.kubernetes.io/*)
- Security baseline checks
- JSON and text output
Usage:
# Analyze a chart directory
python3 scripts/chart_analyzer.py mychart/
# JSON output
python3 scripts/chart_analyzer.py mychart/ --output json
# Security-focused analysis
python3 scripts/chart_analyzer.py mychart/ --security
scripts/values_validator.py
CLI utility for validating values.yaml against best practices.
Features:
- Documentation coverage (inline comments)
- Type consistency checks
- Hardcoded secrets detection
- Default value quality analysis
- Structure depth analysis
- Naming convention validation
- JSON and text output
Usage:
# Validate values.yaml
python3 scripts/values_validator.py values.yaml
# JSON output
python3 scripts/values_validator.py values.yaml --output json
# Strict mode (fail on warnings)
python3 scripts/values_validator.py values.yaml --strict
Template Patterns
Pattern 1: Standard Labels (_helpers.tpl)
{{/*
Common labels for all resources.
*/}}
{{- define "mychart.labels" -}}
helm.sh/chart: {{ include "mychart.chart" . }}
app.kubernetes.io/name: {{ include "mychart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels (subset of common labels β must be immutable).
*/}}
{{- define "mychart.selectorLabels" -}}
app.kubernetes.io/name: {{ include "mychart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
Pattern 2: Conditional Resources
{{- if .Values.ingress.enabled -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "mychart.fullname" . }}
labels:
{{- include "mychart.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
pathType: {{ .pathType }}
backend:
service:
name: {{ include "mychart.fullname" $ }}
port:
number: {{ $.Values.service.port }}
{{- end }}
{{- end }}
{{- end }}
Pattern 3: Security-Hardened Pod Spec
spec:
serviceAccountName: {{ include "mychart.serviceAccountName" . }}
automountServiceAccountToken: false
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 1000
seccompProfile:
type: RuntimeDefault
containers:
- name: {{ .Chart.Name }}
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
resources:
{{- toYaml .Values.resources | nindent 8 }}
volumeMounts:
- name: tmp
mountPath: /tmp
volumes:
- name: tmp
emptyDir: {}
Values Design Principles
STRUCTURE
βββ Flat over nested (image.tag > container.spec.image.tag)
βββ Group by resource (service.*, ingress.*, resources.*)
βββ Use enabled: true/false for optional resources
βββ Document every key with inline YAML comments
βββ Provide sensible development defaults
NAMING
βββ camelCase for keys (replicaCount, not replica_count)
βββ Boolean keys: use adjectives (enabled, required) not verbs
βββ Nested keys: max 3 levels deep
βββ Match upstream conventions (image.repository, image.tag, image.pullPolicy)
ANTI-PATTERNS
βββ Hardcoded cluster URLs or domains
βββ Secrets as default values
βββ Empty strings where null is correct
βββ Deeply nested structures (>3 levels)
βββ Undocumented values
βββ values.yaml that doesn't work without overrides
Dependency Management
SUBCHARTS
βββ Use Chart.yaml dependencies (not requirements.yaml β Helm 3)
βββ Pin versions: version: ~15.x.x (patch float)
βββ Use condition: to make optional: condition: postgresql.enabled
βββ Use alias: for multiple instances of same chart
βββ Override subchart values under subchart name key in values.yaml
βββ Run helm dependency update before packaging
LIBRARY CHARTS
βββ type: library in Chart.yaml β no templates directory
βββ Export named templates only β no rendered resources
βββ Use for shared labels, annotations, security contexts
βββ Version independently from application charts
Proactive Triggers
Flag these without being asked:
- No _helpers.tpl β Create one. Every chart needs standard labels and fullname helpers.
- Hardcoded image tag in template β Extract to values.yaml. Tags must be overridable.
- No resource requests/limits β Add them. Pods without limits can starve the node.
- Running as root β Add securityContext. No exceptions for production charts.
- No NOTES.txt β Create one. Users need post-install instructions.
- Secrets in values.yaml defaults β Remove them. Use placeholders with comments explaining how to provide secrets.
- No liveness/readiness probes β Add them. Kubernetes needs to know if the pod is healthy.
- Missing app.kubernetes.io labels β Add via _helpers.tpl. Required for proper resource tracking.
Installation
One-liner (any tool)
git clone https://github.com/alirezarezvani/claude-skills.git
cp -r claude-skills/engineering/helm-chart-builder ~/.claude/skills/
Multi-tool install
./scripts/convert.sh --skill helm-chart-builder --tool codex|gemini|cursor|windsurf|openclaw
OpenClaw
clawhub install cs-helm-chart-builder
Related Skills
- senior-devops β Broader DevOps scope (CI/CD, IaC, monitoring). Complementary β use helm-chart-builder for chart-specific work, senior-devops for pipeline and infrastructure.
- docker-development β Container building. Complementary β docker-development builds the images, helm-chart-builder deploys them to Kubernetes.
- ci-cd-pipeline-builder β Pipeline construction. Complementary β helm-chart-builder defines the deployment artifact, ci-cd-pipeline-builder automates its delivery.
- senior-security β Application security. Complementary β helm-chart-builder covers Kubernetes-level security (RBAC, pod security), senior-security covers application-level threats.