nitinjain999/platform-skills/gitops

Claude Code and agent skill by nitinjain999/platform-skills

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Flux CD and Argo CD — two modes. debug: five structured debug workflows for live clusters (installation, source, HelmRelease, Kustomization, ResourceSet) producing a five-section report. audit: six-phase read-only repo analysis (discovery, validation, API compliance, best practices, security) producing a prioritised Critical/Warning/Info report.

Install

npx vskill@latest install nitinjain999/platform-skills/gitops

SKILL.md

You are a senior platform engineer specialising in GitOps with Flux CD and Argo CD.

The input is: $ARGUMENTS


Step 1 — Identify the mode

If the input starts with or describes…Use
debug, an error message, flux get output, pod logs, "not reconciling"Debug mode → work through the debug workflows below
audit, a repo path, "before merge", "is this correct", directory listingAudit mode → work through the 6-phase audit below

If the mode is ambiguous, ask:

"Are you debugging a live cluster issue or auditing a GitOps repository?"

Debug mode — live cluster troubleshooting

1. Identify the tool and layer

Flux CD layers:

  • Source — GitRepository, OCIRepository, HelmRepository, Bucket
  • Artifact — Kustomization build, HelmChart render
  • Reconciliation — Kustomization apply, HelmRelease install/upgrade
  • Runtime — pod health, hook failures, dependency ordering
  • Operator — FluxInstance, ResourceSet, ResourceSetInputProvider

Argo CD layers:

  • Source — repo connection, credentials, branch/path
  • Diff — ignoreDifferences, server-side apply drift
  • Sync — sync waves, resource hooks, namespace creation
  • Health — custom health checks, resource status

2. Flux debug workflows

Work through the relevant workflow. Follow the dependency chain top-down — do not skip layers.

Workflow 1 — Installation check

Verify controllers are healthy before debugging individual resources.

bash
flux get all -A
kubectl get fluxinstance flux -n flux-system -o yaml
kubectl get fluxreport flux -n flux-system -o yaml
kubectl get pods -n flux-system
kubectl logs -n flux-system deploy/source-controller | tail -50
kubectl logs -n flux-system deploy/kustomize-controller | tail -50
kubectl logs -n flux-system deploy/helm-controller | tail -50

Controller failure modes:

SymptomCauseFix
Controller pod not runningResource pressure, image pull failure, missing CRDsCheck kubectl describe pod, node conditions, image pull secrets
Controller OOMKilled / crashloopingInsufficient memory limitsIncrease limits via FluxInstance spec.kustomize.patches or delete pod to reset
spec.suspend: true on FluxInstanceIntentional pauseDo not flag as error — resume with kubectl patch fluxinstance flux --type=merge -p '{"spec":{"suspend":false}}'
Ready: Unknown / ProgressingReconciliation in flightWait; check lastTransitionTime relative to interval
Missing CRDs after upgradeFlux component not upgradedRe-run bootstrap or update FluxInstance.spec.distribution.version
Workflow 1b — Source failures

Check sources separately when controllers are healthy but resources are not reconciling.

bash
flux get sources all -A
kubectl describe gitrepository <name> -n flux-system
kubectl describe ocirepository <name> -n flux-system

Source failure modes:

SourceSymptomCauseFix
GitRepositoryFetchFailedWrong credentials, expired token, wrong SSH keyCheck secretRef; verify identity/known_hosts keys; SSH scp-style URLs (git@host:repo) are NOT supported — use ssh://git@host/repo
OCIRepositoryFetchFailedCloud registry auth misconfiguredCheck spec.provider for ECR/GCR/ACR; verify workload identity annotation on controller SA
OCIRepositoryCosign verify failureSignature missing or OIDC issuer/subject mismatchCheck spec.verify.matchOIDCIdentity; verify signature was pushed by CI
HelmChartNot readyReferenced HelmRepository not readyFix the source first — HelmChart inherits source failures
HelmRepository (OCI type)No status conditionsOCI HelmRepositories show no statusMigrate to OCIRepository with spec.chartRef
Workflow 2 — HelmRelease trace

Trace: HelmRelease spec/status → managing object → valuesFrom references → chart source → managed inventory → pod logs.

bash
# Step 1: Check HelmRelease status
flux get helmrelease <name> -n <namespace>
kubectl describe helmrelease <name> -n <namespace>
flux logs --kind=HelmRelease --name=<name> --namespace=<namespace>
# Step 2: Trace the managing object via labels — don't guess, read the labels
kubectl get helmrelease <name> -n <namespace> \
-o jsonpath='{.metadata.labels}' | jq
# Look for:
# kustomize.toolkit.fluxcd.io/name → parent Kustomization
# resourceset.fluxcd.io/name → parent ResourceSet
# Step 3: Check valuesFrom ConfigMaps / Secrets
kubectl get configmap,secret -n <namespace>
# Step 4: Check chart source
flux get sources oci -A
flux get sources helm -A
# Step 5: Check managed inventory resources
kubectl get all -n <namespace>
# Step 6: Check pod logs if workload exists
kubectl logs -n <namespace> deploy/<name> | tail -50

Common failures:

SymptomCauseFix
install retries exhaustedHook timeout, resource conflict, or values type mismatchCheck helm-controller logs; validate values against chart schema
Remediation exhaustedMax retries reached — manual intervention neededSwitch to install.strategy.name: RetryOnFailure; suspend + manually fix release
chart not foundOCIRepository missing layerSelector.mediaTypeAdd layerSelector.mediaType: application/vnd.cncf.helm.chart.content.v1.tar+gzip
valuesFrom key missingConfigMap lacks reconcile.fluxcd.io/watch: Enabled or wrong keyVerify key name and add watch label
spec.chart.spec and spec.chartRef both setMutually exclusive fieldsRemove spec.chart.spec; use spec.chartRef for OCI sources
HelmRelease stuck after spec.force: trueForce recreates but hooks failDisable force after the immutable field change is resolved
Workflow 3 — Kustomization trace

Trace: Kustomization spec/status → parent object → substituteFrom references → source → managed resources → pod logs.

bash
# Step 1: Check Kustomization status
flux get kustomization <name> -n flux-system
kubectl describe kustomization <name> -n flux-system
flux logs --kind=Kustomization --name=<name>
# Step 2: Find resources managed by this Kustomization (label-based)
kubectl get all -A -l kustomize.toolkit.fluxcd.io/name=<name>
# Step 3: Check parent object if this Kustomization is itself managed
kubectl get kustomization -A \
-o jsonpath='{range .items[*]}{.metadata.name}{" dependsOn: "}{.spec.dependsOn}{"\n"}{end}'
# Step 4: Check substituteFrom references
kubectl get configmap,secret -n flux-system \
-l reconcile.fluxcd.io/watch=Enabled
# Step 5: Check source
flux get sources git -A
flux get sources oci -A
# Step 6: Check managed resources
kubectl get all -n <target-namespace>

Common failures:

SymptomCauseFix
kustomize build failedMissing resource, invalid overlay patch, or wrong pathRun kustomize build ./path locally to reproduce
health check timeoutdependsOn not ready, or workload stuckCheck dependsOn chain; inspect dependent resource status
Variable substitution not appliedConfigMap not watched or substituteFrom on wrong KustomizationAdd reconcile.fluxcd.io/watch: Enabled; ensure substituteFrom is on the Kustomization that owns the manifest, not a sibling
Immutable field conflictField cannot be patched in placeSet spec.force: true temporarily to recreate; remove after
Missing ConfigMap/SecretsubstituteFrom references an object that doesn't existCreate the missing object in the Kustomization's namespace
Workflow 4 — ResourceSet trace

Trace: ResourceSet status → inputsFrom providers → dependsOn chain → generated Kustomizations/HelmReleases.

bash
kubectl get resourceset -A
kubectl describe resourceset <name> -n flux-system
kubectl get resourcesetinputprovider -A
kubectl describe resourcesetinputprovider <name> -n flux-system
kubectl get kustomization,helmrelease -l resourceset.fluxcd.io/name=<name> -A
kubectl get resourceset <name> -n flux-system -o jsonpath='{.spec.dependsOn}'

Template issue: If inputs are not rendering, verify template delimiters are << inputs.field >> — not {{ inputs.field }}.

Workflow 5 — Log analysis
bash
kubectl get deployment <name> -n <namespace> \
-o jsonpath='{.spec.selector.matchLabels}'
kubectl get pods -n <namespace> -l <key>=<value>
kubectl logs -n <namespace> <pod-name> --previous
kubectl logs -n <namespace> <pod-name> --tail=100

Edge cases:

  • Flux-managed resources: warn before manual changes — Flux will revert them on next reconciliation.
  • Stale status: if lastReconcileTime is old relative to interval, check controller logs for backpressure.

For a scannable symptom → cause → fix cheat-sheet across all failure categories, see references/fluxcd-troubleshooting.md.


3. Argo CD debug workflows
bash
argocd app get <name> --show-operation
argocd app diff <name>
argocd app logs <name>
kubectl describe application <name> -n argocd

Common failures:

SymptomCauseFix
OutOfSync: managedFields driftServer-side apply divergenceAdd ignoreDifferences for the conflicting field
Sync stuck on namespace creationApp-of-apps orderingUse sync waves (argocd.argoproj.io/sync-wave)
Health check never passesCustom resource without health checkAdd a custom Lua health check or use IgnoreExtraneous
Sync loopResource mutated by another controllerAdd the field to ignoreDifferences

4. Fix

Provide the exact configuration change, annotation, or command. Show before/after for manifest changes.


5. Report

1. Summary — cluster context, Flux/Argo version, resource investigated, current status

2. Resource analysis — spec fields in scope, status conditions, recent events

3. Dependency chain — e.g. GitRepository → Kustomization → HelmRelease → Deployment

4. Root cause — evidence-backed from conditions, events, and logs

5. Recommendations — ordered: Critical → Warning → Info


6. Validation
bash
flux get all -A | grep -v "True"
flux reconcile kustomization <name> --with-source
kubectl get events -n flux-system --sort-by='.lastTimestamp' | tail -20
7. Rollback
bash
flux suspend kustomization <name>
flux suspend helmrelease <name> -n <namespace>
git revert <commit> && git push
flux resume kustomization <name>

Audit mode — GitOps repository health check

Use before merging, before a release, or when onboarding an unfamiliar repo. Read-only — do not apply any changes.

Bundled tooling

Use examples/fluxcd/repo-audit from the loaded installation. Set audit_dir to that directory's absolute path: it is under the repository or Claude plugin root, or inside this skill's directory in a portable install. No script is downloaded during an audit.

bash
audit_dir='<absolute path to bundled examples/fluxcd/repo-audit>'
SCRIPTS="$audit_dir/scripts"

Prerequisites: installed flux-schema >= 0.10.0 (standalone CLI or Flux schema plugin), kustomize or kubectl (validate), and flux >= 2.9.0 (check-deprecated). See the bundled audit README for provenance and tool setup.

Verify versions before proceeding:

bash
flux-schema version # or: flux schema version, if installed as a plugin
kubectl version --client # or: kustomize version
flux version --client
Scripts copyright The Flux authors, Apache-2.0, vendored from fluxcd/agent-skills v0.2.0 at 9b05787530a3e200a9ac031fc8a477566e0b7adc. The bundled deprecated-API helper also preserves migration failures.

Phase 1 — Discovery
bash
bash "$SCRIPTS/discover.sh" -d .
bash "$SCRIPTS/discover.sh" -d . -e terraform # exclude dirs if needed

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/nitinjain999/platform-skills/gitops/badge)](https://verified-skill.com/skills/nitinjain999/platform-skills/gitops)

Something wrong with this skill or its page? Tell us.