helm-conventions
Helm charts: values, security context, KSV, templates, helm-docs, resources.
Skill by leroyguillaume
Chalk Labs
Need help deploying helm-conventions?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/leroyguillaume-helm-conventions
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: devops, data, security, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/helm-conventions
What's inside
- Skill name
helm-conventions- Description
- Helm charts: values, security context, KSV, templates, helm-docs, resources. TRIGGER when: editing a chart's `templates/`, `values.yaml`, `values-*.yaml`, `Chart.yaml`, `.helmignore` or `README.md`; adding a Kubernetes object to a chart; user asks about Helm values, RBAC, security context, KSV findings or helm-docs. SKIP when: no chart file is touched and the user isn't asking about Helm.
- License
- MIT
- Instructions
- 312 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- files: referenced but missing: templates/api/deployment.yaml, templates/api/service.yaml, templates/api/secret/database.yaml, templates/api/service/grpc.yaml, templates/ingress.yaml
Files (1)
- SKILL.md
SKILL.md (first lines)
# Helm chart conventions
**Always:**
- Expose `extraEnv`, `extraVolumes`, and `extraVolumeMounts` in `values.yaml`
with empty defaults (`[]`) and wire them into every relevant workload
template (Deployment, StatefulSet, Job, etc.).
- Define pod and container security context in `values.yaml`, defaulting to
a **restricted** profile aligned with Kubernetes Pod Security Standards:
```yaml
podSecurityContext:
runAsNonRoot: true
runAsUser: 65532
runAsGroup: 65532
fsGroup: 65532
seccompProfile:
type: RuntimeDefault
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
```
The IDs must be **> 10000** (Trivy `KSV-0020` / `KSV-0021`: a low container
UID collides with the host's user table). 65532 is the `nonroot` UID used
by distroless and Chainguard images — keep it in sync with the `USER` baked
into the image (see `docker-conventions`), otherwise a
`readOnlyRootFilesystem` pod hits permission errors on its own state
directory.
- Lay out `templates/` with **one Kubernetes object per file**, and
derive every filename from the object's `kind` in kebab-case (split
CamelCase on word boundaries, replace spaces with hyphens, lowercase —
e.g. `ClusterRoleBinding` → `cluster-role-binding.yaml`,
`MutatingWebhookConfiguration` → `mutating-webhook-configuration.yaml`).
How files are grouped depends on how many objects a component renders:
- A component that renders **two or more** objects gets its own
directory `templates/<component>/` (matching its `values.yaml`
block), with one kind-named file per object — e.g.
`templates/api/deployment.yaml`, `templates/api/service.yaml`.
- When a component renders **two or more objects of the same Kind**,
nest those in a per-kind subdirectory
`templates/<component>/<kind>/<qualifier>.yaml`. The directory carries
the Kind, so each file is named by its distinguishing qualifier only —
e.g. four Secrets become `templates/api/secret/database.yaml`,
`.../jwt.yaml`, `.../oidc.yaml`, `.../bootstrap-admin.yaml`. This is
Kind-agnostic: it applies equally to multiple Services
(`templates/api/service/grpc.yaml`, `.../http.yaml`), ConfigMaps,
`Job`s, etc. A Kind with a single instance in that component stays flat
as `templates/<component>/<kind>.yaml` (one Service → `service.yaml`,
not `service/http.yaml`).
- A component that renders a **single** object — typically shared
infrastructure such as an `Ingress`, a Gateway route, or a database
`Cluster` — gets **no directory**: put the file at the root,
`templates/<kind>.yaml` (e.g. `templates/ingress.yaml`,
`templates/http-route.yaml`, `templates/cnpg-cluster.yaml`). Qualify
the bare Kind with the component name when the Kind alone would be
ambiguous (the generic `Cluster` → `cnpg-cluster.yaml`).
Never place one component's template under another component's directory.
- Give **each component its own `ServiceAccount`** (and its own
`ClusterRole` + `ClusterRoleBinding`, in separate files, when it needs
cluster RBAC) so components stay least-privilege and independent.
- When a chart attaches a route to shared gateway infrastructure, create
**only the route resource** and attach it to a **pre-existing** gateway
referenced by name (and namespace) via `values.yaml`. This applies to
Gateway API and Envoy (AI) Gateway: create the `MCPRoute` / `HTTPRoute` /
`GRPCRoute`, but **never** the `Gateway` or `GatewayClass`. Make the
gateway name **required** (`required` in the template / helper) so the
chart fails fast when it is missing, and default the gateway namespace to
the release namespace. The `Gateway` and `GatewayClass` are
cluster-shared infrastructure owned outside the app chart.
- Structure `values.yaml` as exactly two kinds of top-level blocks: a
`global:` block holding values shared by more than one component, plus
one `<component>:` block per app/component holding that component's
own values. As soon as a knob is needed by **two or more components**,
it must live in `global:` at the top level — never duplicated across
the component blocks, and never moved into one component's block
"because that's where it's mostly used". Conversely, values used by a
single component live only in that component's block. Every `global.*`
key must be **overridable per component** by setting the same key in
that component's block (resolve via a deep-merge helper:
`mergeOverwrite (deepCopy global) (pick component …)`), so a component
can deviate from a shared default without forcing the value to move
out of `global`.
- **Group values by domain into a nested object as soon as two or more
keys concern the same concern.** Within any block (`global:` or a
component), when more than one key relates to the same domain
(database, OIDC, TLS, signing keys, a sidecar, …), nest them under a
single object named for that domain instead of leaving a flat run of
prefixed scalars. Drop the now-redundant prefix from each sub-key —
the object name carries it. For example, prefer
```yaml
database:
# -- (string) Connection string. Unset → built from the managed cluster.
url: ~
existingSecret:
# -- (string) Name of a pre-existing Secret holding the connection string. Set → takes precedence over the generated one.
name: ~
# -- Key in that Secret holding the connection string.
key: DATABASE_URL
# -- Maximum size of the connection pool.
maxConns: 25
# -- Minimum number of idle pooled connections.
minConns: 5
```
over the flat `databaseUrl` / `databaseUrlSecret` / `dbMaxConns` /
`dbMinConns`. A lone key for a domain stays flat — only group once the
second related key appears (the rule of two for grouping). The object's
shape still maps cleanly onto its env vars / flags at the template
boundary (e.g. `database.maxConns` → `DATABASE_MAX_CONNS`); grouping is a
`values.yaml` ergonomics rule, it does not change the wire/env contract.
- **An `existingSecret` value is always an object `{ name, key }`, never a
bare string.** Whenever a chart lets the user point at a pre-existing
Secret instead of generating one, model it as a nested object: `name`
(default `~` — unset means "generate the Secret from the inline value")
and `key` (the entry to read, defaulting to the same key the generated
Secret would use, e.g. `DATABASE_URL` / `UPSTREAM_HEADERS`). A bare
`existingSecret: ~` string hardcodes the key and cannot consume a Secret
whose entry is named differently — which is exactly the caseFrom leroyguillaume/claude, MIT.
More from leroyguillaume/claude
- 0.624score
adr-conventions
leroyguillaume
Architecture Decision Records in `docs/adr/`.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
api-conventions
leroyguillaume
HTTP/RPC API payloads in any language: DTOs, JSON casing, pagination, OpenAPI docs.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
architecture-conventions
leroyguillaume
ARCHITECTURE.md: the system as it stands, in the present tense.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
argocd-conventions
leroyguillaume
Argo CD objects in any GitOps repository.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
ci-conventions
leroyguillaume
Platform-agnostic CI pipelines: quality gate, Trivy scans, path filters, caching, releases.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
contributing-conventions
leroyguillaume
CONTRIBUTING.md: dev setup, tests, pre-commit and CI.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
dependency-update-conventions
leroyguillaume
Dependabot and Renovate configuration and their PRs.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
diagram-conventions
leroyguillaume
Diagrams in committed files: format and diagram type.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
docker-conventions
leroyguillaume
Dockerfiles: base images, multi-stage builds, non-root USER, hadolint and Trivy.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
documentation-conventions
leroyguillaume
Docs a human can maintain: one home per fact, links not copies.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
frontend-conventions
leroyguillaume
Frontend code: TypeScript, React, Biome, mobile-first.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
github-actions-conventions
leroyguillaume
GitHub Actions mechanics: workflows, pinned actions, SARIF, release notes, Releases, Pages.
SkillAFreshness: A★ 7Claude Code +9
Signals
- Stars
- 7
- Forks
- 3
- Open issues
- 0
- Last commit (this folder)
- Oct 4, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/leroyguillaume/claude
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from leroyguillaume
- 0.624score
api-conventions
leroyguillaume
HTTP/RPC API payloads in any language: DTOs, JSON casing, pagination, OpenAPI docs.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
architecture-conventions
leroyguillaume
ARCHITECTURE.md: the system as it stands, in the present tense.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
argocd-conventions
leroyguillaume
Argo CD objects in any GitOps repository.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
ci-conventions
leroyguillaume
Platform-agnostic CI pipelines: quality gate, Trivy scans, path filters, caching, releases.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
contributing-conventions
leroyguillaume
CONTRIBUTING.md: dev setup, tests, pre-commit and CI.
SkillAFreshness: A★ 7Claude Code +9 - 0.624score
adr-conventions
leroyguillaume
Architecture Decision Records in `docs/adr/`.
SkillAFreshness: A★ 7Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get helm-conventions running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
helm-conventions skill. Agent Mart. https://agentmart.dev/skills/leroyguillaume-helm-conventions (last updated 2026-10-24)