helm-add-gwapi-route
Add or modernize Gateway API *Route templates (HTTPRoute/GRPCRoute/TLSRoute/TCPRoute/UDPRoute) in a Helm chart.
Skill by lexfrei
Chalk Labs
Need help deploying helm-add-gwapi-route?
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/lexfrei-helm-add-gwapi-route
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: backend, devops, data
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-add-gwapi-route
What's inside
- Skill name
helm-add-gwapi-route- Description
- Add or modernize Gateway API *Route templates (HTTPRoute/GRPCRoute/TLSRoute/TCPRoute/UDPRoute) in a Helm chart. Auto-detects add vs update mode, mirrors the chart's ingress/values conventions, applies current best practices (named rules, typed filters, optional BackendTLSPolicy). Pure file edits — no git, no PR. Trigger proactively on Helm charts with ingress but no routes, or outdated routes needing modernization. See "When to invoke" below for full triggers.
- License
- BSD-3-Clause
- Instructions
- 625 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- body: 625 lines (spec recommends under 500)
- files: referenced but missing: templates/ingress.yaml, templates/httproute.yaml, templates/NOTES.txt
Files (1)
- SKILL.md
SKILL.md (first lines)
# helm-add-gwapi-route
Add or modernize Gateway API *Route resources inside a Helm chart. The skill only edits files — git operations (branch, commit, push, PR) are left to the caller.
## When to invoke
Invoke proactively (without an explicit user command) when any of these hold:
- cwd is a Helm chart (Chart.yaml with `apiVersion: v2`) that has `templates/ingress.yaml` but no `templates/*route.yaml` — candidate for add-mode.
- cwd has `templates/httproute.yaml` / `grpcroute.yaml` / `tlsroute.yaml` declaring `gateway.networking.k8s.io/v1beta1` or `v1alpha2` for resources that are now GA at `v1` — candidate for update-mode.
- cwd has `*Route` templates whose rules lack the `name` field (named rules are best practice since Gateway API v1.4).
- The user mentions migrating a chart from Ingress to Gateway API, adding HTTPRoute/GRPCRoute/TLSRoute support, "gwapi", or modernizing existing routes.
Do not invoke when:
- The chart already has current-spec routes with nothing to modernize.
- cwd is not a Helm chart (no `Chart.yaml` with `apiVersion: v2`).
- The scope is a standalone Kubernetes manifest, not a Helm chart.
- The user is working on an unrelated task — do not interrupt.
## Arguments
Parse `$ARGUMENTS`:
- First positional = `chart-path`. Default: `cwd`.
- `--type=<list>` — comma-separated subset of `httproute,grpcroute,tlsroute,tcproute,udproute`, or `auto` (default). Controls which route kinds to add (add-mode) or update (update-mode).
- `--mode=add|update|auto` — default `auto`. See Phase 3.
- `--with-backend-tls` — also generate `BackendTLSPolicy` for the chart's Service (useful when the backend Service terminates TLS itself).
## Phase 1 — Locate and validate the chart
1. Resolve `chart-path`. If not provided, walk upward from cwd looking for a directory that contains `Chart.yaml`. If multiple `Chart.yaml` files exist under `charts/*` (umbrella chart), ask the user via AskUserQuestion which chart to operate on; multi-select is allowed — process each selected chart independently.
2. Read `Chart.yaml`. Require `apiVersion: v2`. Capture chart `name` and `version`.
3. Inventory `templates/`:
- note which of these exist: `ingress.yaml`, `service.yaml`, `deployment.yaml`, `statefulset.yaml`, `_helpers.tpl`
- note which route templates already exist: `httproute.yaml`, `grpcroute.yaml`, `tlsroute.yaml`, `tcproute.yaml`, `udproute.yaml`, `backendtlspolicy.yaml`
4. Note whether `tests/` exists (used in Phase 8 to decide whether to add helm-unittest tests).
5. Parse `values.yaml`:
- extract the `ingress:` block — record its indent style (2 vs 4 spaces), field naming (`host` vs `hostname`, `path` vs `paths`, `className` style), whether helm-docs `# -- description` comments are used, and the values of any CORS/auth/rate-limit annotations (these are migration targets in update-mode)
- extract the `service:` block — port number, port name, `protocol`, `appProtocol`, type
- detect any existing `httpRoute:`, `grpcRoute:`, `tlsRoute:`, `tcpRoute:`, `udpRoute:` top-level blocks (flat style is canonical; if a chart already uses a nested `gateway:` block, preserve its structure in update-mode rather than flattening)
6. Read `_helpers.tpl`. Extract the exact helper template names the chart defines — typically `<chart>.fullname`, `<chart>.labels`, `<chart>.selectorLabels`, `<chart>.serviceAccountName`. Use the actual names in generated templates; do not assume the prefix matches the directory name.
## Phase 2 — Verify current Gateway API spec
Training data is frequently outdated on API maturity. Before generating any template, fetch fresh data via WebFetch — do not rely on memory or prior conversation.
Fetch:
- <https://gateway-api.sigs.k8s.io/concepts/versioning/> — canonical maturity table.
- <https://kubernetes.io/blog/> — search for the latest Gateway API release post.
Build a fresh status table covering every resource this skill generates: HTTPRoute, GRPCRoute, TLSRoute, TCPRoute, UDPRoute, BackendTLSPolicy, ReferenceGrant. Record the current apiVersion and channel (Standard / Experimental) for each.
Carry that table into Phase 10 (Report). Every run must include a line like:
```text
Verified via WebFetch at <ISO8601 timestamp>: HTTPRoute=v1 (Standard), GRPCRoute=v1 (Standard), ...
```
This forces the model to actually perform the fetch rather than reuse cached claims.
**Minimum cluster Gateway API version required per route kind** — this is a separate question from current apiVersion and changes much less often. As a reference (still verify via the versioning page in case of controller-specific caveats; dates are omitted because they date-drift and the version number alone is enough to gate on):
| Route kind / feature | Min Gateway API version |
| --- | --- |
| HTTPRoute | v1.0 |
| GRPCRoute | v1.1 |
| HTTPRoute timeouts | v1.2 |
| BackendTLSPolicy | v1.4 |
| Named rules on HTTPRoute/GRPCRoute | v1.4 |
| CORS filter in Standard channel | v1.5 |
| TLSRoute | v1.5 |
| TCPRoute / UDPRoute | Experimental (no GA yet) |
Surface the relevant minimum version(s) in Phase 10's PR body so users can gate on controller support.
## Phase 3 — Determine mode (add vs update)
If `--mode` is given, use it and apply it to every selected route kind uniformly.
Otherwise, `--mode=auto` is resolved **per route kind**, not per chart:
- For each route kind selected in Phase 4, check whether the corresponding `templates/<kind>.yaml` exists.
- If it does not exist → that kind is in **add-mode**.
- If it exists → that kind is in **update-mode**.
This handles the common mixed case where a chart already has `httproute.yaml` and the user wants to add a brand-new `grpcroute.yaml` at the same time: HTTPRoute gets update-mode review, GRPCRoute gets add-mode generation.
In the rest of this document, references to "add-mode" and "update-mode" are per-kind decisions.
In **update-mode**, for each existing `*route.yaml`:
1. Render it with `helm template <chart-path>` using default values (and, if the route is gated by `enabled`, with `--set <route>.enabled=true` plus minimal required fields) to get the effective YAML.
2. Compare against the current-spec checklist:
- apiVersion — per-kind judgement, not a blanket rule:
- HTTPRoute `v1beta1` still coexists with `v1` in the Standard channel (v1beta1 was not removed at v1 GA). Bumping it silently breaks compatibility with controllers that only serve v1beta1. **Do not auto-bump HTTPRoute v1beta1 → v1; ask the user.**
- GRPCRoute `v1alpha2` / `v1beta1` → `v1` is a safe bump where v1 is available (graduated v1.1). Treat as safe.
- TLSRoute `v1alpha2` → `v1` is **not always safe**: v1 tightens `rules` to `MaxItems=1` and makes `hostnames` `+required`. Before proposing the bump, parse the existing template: if it produces more than one rule or no hostnames, mark the bump as **unsafe** and require interactive confirmation. Otherwise safe.
- TCPRoute / UDPRoute — still `v1alpha2`; no bump to propose.
- does each `rules[]` entry have a `name` field? (v1.4+ best practice)
- are CORS/auth/rate-limit headers implemented via ingress-style annotations rather than typed `filters`?
- is there an HTTPS backend port (443, `appProtocol: https`, `name: https`) but no `BackendTLSPolicy`?
3. Build a list of discrepancies.
Show the discrepancy list to the user via AskUserQuestion (multiSelect, all pre-selected) and apply the selected ones.
Classify discrepancies into **safe** (applied silently in proactive runs) and **unsafe** (require interactive confirmation):
- safe: bump apiVersion for GA resources; add `name: default` to unnamed rules; add obvious helm-docs comment fixes.
- unsafe: migrate CORS from annotations to filters (changes the chart's public surface); add a new `BackendTLSPolicy` template (introduces a new resource with external dependencies like CA ConfigMaps); remove deprecated fields.
If the skill was invoked proactively (Claude's own decision, not the user's explicit command), only apply safe discrepancies. For unsafe ones, stop and report: "found unsafe migrations — run this skill interactively to review them".
In **add-mode**, skip the discrepancy analysis.
## Phase 4 — Determine route type(s) (add-mode only)
If `--type` is explicit, use it. Otherwise infer from Service ports captured in Phase 1:From lexfrei/ccc, BSD-3-Clause.
More from lexfrei/ccc
- 0.637score
infostyle
lexfrei
Edit Russian prose into информационный стиль (Ilyahov/Sarycheva): strip meaningless words, unfold abstractions into facts and examples, rebuild sentences…
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
taguchi
lexfrei
Plan a minimal set of debugging or testing runs with a Taguchi orthogonal array instead of changing one factor at a time.
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
pairwise
lexfrei
Generate a minimal pairwise covering array for factors with arbitrary mixed level counts, using the bundled deterministic generator.
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
pore-analysis
lexfrei
Measure porosity, pore size/shape, lattice period and ordering (psi6, Voronoi coordination, radial g(r) and orientational correlation length) from a top-view…
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
lore
lexfrei
Read, search, and monitor Linux kernel mailing-list threads on lore.kernel.org.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
brew-cleanup
lexfrei
Reclaim Homebrew disk by removing old formula/cask versions, pruning the download cache, and uninstalling orphaned dependencies (brew autoremove).
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
address-pr-comments
lexfrei
End-to-end closeout of unresolved review feedback across one or more GitHub PRs.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
go-cache
lexfrei
Reclaim Go disk by clearing the build, test, fuzz, and module caches.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
stale-forks
lexfrei
Find personal forks that no longer carry value — their unique commits are already merged upstream, or they hold no unique commits at all — and remove the…
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
worktree-sweep
lexfrei
Find and remove stale git worktrees across one or many repositories.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
docker-prune
lexfrei
Reclaim Docker disk by pruning unused images, containers, networks, build cache, optionally volumes, and the build cache of non-default buildx builders; on…
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
cleanup-all
lexfrei
Run the full local cleanup pipeline — stale git worktrees, dead personal forks, Docker prune, Go caches, and Homebrew — in one pass, each stage report →…
SkillAFreshness: A★ 11Claude Code +9
Signals
- Stars
- 11
- Forks
- 3
- Open issues
- 2
- Last commit (this folder)
- Aug 28, 2026 (2 months ago)
- Last release
- Oct 4, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- BSD-3-Clause
- Repository
- github.com/lexfrei/ccc
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from lexfrei
- 0.637score
infostyle
lexfrei
Edit Russian prose into информационный стиль (Ilyahov/Sarycheva): strip meaningless words, unfold abstractions into facts and examples, rebuild sentences…
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
pore-analysis
lexfrei
Measure porosity, pore size/shape, lattice period and ordering (psi6, Voronoi coordination, radial g(r) and orientational correlation length) from a top-view…
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
pairwise
lexfrei
Generate a minimal pairwise covering array for factors with arbitrary mixed level counts, using the bundled deterministic generator.
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
taguchi
lexfrei
Plan a minimal set of debugging or testing runs with a Taguchi orthogonal array instead of changing one factor at a time.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
cleanup-all
lexfrei
Run the full local cleanup pipeline — stale git worktrees, dead personal forks, Docker prune, Go caches, and Homebrew — in one pass, each stage report →…
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
docker-prune
lexfrei
Reclaim Docker disk by pruning unused images, containers, networks, build cache, optionally volumes, and the build cache of non-default buildx builders; on…
SkillAFreshness: A★ 11Claude 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-add-gwapi-route 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-add-gwapi-route skill. Agent Mart. https://agentmart.dev/skills/lexfrei-helm-add-gwapi-route (last updated 2026-10-24)