argocd
Skill1 starsChanged 8 months agoMITView on GitHub
ArgoCD GitOps operations -- Application and AppProject authoring, multi-source apps, ApplicationSet generators (Go templates, progressive sync), sync strategies, RBAC, SSO, health checks, CLI commands, and troubleshooting. Use when writing ArgoCD manifests, managing deployments, configuring sync policies, debugging sync/health status, or when the user mentions ArgoCD, GitOps, ApplicationSet, AppProject, argocd CLI, sync wave, or self-heal.
- Reads credentials
5 other projects use a version of this.
Adopted by
Most recently taken up by
- rezkam/boring-but-goodtheir own version, first seen Nov 1, 2026
- TeddyAlbina/skillstheir own version, first seen Nov 1, 2026
- abevz/devops-skillstheir own version, first seen Oct 15, 2026
- G1Joshi/Agent-Skillstheir own version, first seen Oct 13, 2026
- greedychipmunk/agent-skillstheir own version, first seen May 25, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- greedychipmunk/agent-skills★ 24same name
- G1Joshi/Agent-Skills★ 15same name
- TeddyAlbina/skills★ 2same name
- rezkam/boring-but-good★ 1same name
- abevz/devops-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository33 other files it gives its agents.
- c-cpp-compilersSkill
- coding-guidelinesSkill
- devops-iac-engineerSkill
- dag-flowdSkill
- flowd-rules-authorSkill
- frontend-designSkill
- ghSkill
- grafana-dashboardsSkill
- helmSkill
- kustomizeSkill
- legalizerSkill
- lua-projectsSkill
- markdown-documentationSkill
- mermaid-diagramsSkill
- meta-cognition-parallelSkill
- podmasterSkill
- practical-haskellSkill
- rcaSkill
- researcherSkill
- security-auditSkill
- solidity-securitySkill
- svg-genSkill
- tdd-red-green-refactorSkill
- tmux-masterySkill
- tokenomics-designSkill
- ultimate-dbSkill
- ultimate-nixosSkill
- ultimate-rustSkill
- ultimate-web3Skill
- web3-frontendSkill
- web3-testingSkill
- web3-whitepaperSkill
- ziglangSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 3 are distinctive, and 7 are very specific to this project.
0
Common
Most of the 5 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 89
Use spec.sources (plural) to combine manifests from multiple repositories -- for example, a Helm chart from one repo with …
- Very specific: line 427
Check the conditions field in argocd app get output for the render error.
- Very specific: line 430
Check hook pod logs: argocd app logs <app>.
- Very specific: line 431
Verify hook-delete-policy -- HookSucceeded leaves failed hook pods visible for inspection.
- Distinctive: line 443
Use AppProjects to enforce source/destination boundaries per team.
- Distinctive: line 444
Use sync waves to sequence dependent resources (e.g., CRDs before CRs).
- Very specific: line 445
Use syncWindows to gate production deployments to business hours.
- Very specific: line 447
Prefer ServerSideApply=true for large resources to avoid annotation size limits.
- Very specific: line 449
Use spec.sources (multi-source) when Helm values live in a separate repo from the chart.
- Distinctive: line 454
No AppProject -- loses namespace/repo isolation, no RBAC boundaries.
“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
ArgoCD
Architecture
argocd (namespace)
api-server -- UI / CLI / API gateway
repo-server -- Git interaction, manifest rendering
application-controller -- K8s reconciliation loop
applicationset-controller -- ApplicationSet reconciliation
redis -- caching
dex -- SSO / OIDCApplication (single source)
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: production
source:
repoURL: https://github.com/myorg/myapp
targetRevision: main
path: k8s/overlays/production
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
allowEmpty: false
syncOptions:
- CreateNamespace=true
- ServerSideApply=true
- ApplyOutOfSyncOnly=true
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3mHelm source
source:
repoURL: https://github.com/myorg/helm-charts
targetRevision: main
path: charts/myapp
helm:
releaseName: myapp
valueFiles:
- values.yaml
- values-production.yaml
parameters:
- name: image.tag
value: "v2.0.0"Kustomize source
source:
repoURL: https://github.com/myorg/myapp
targetRevision: main
path: k8s/overlays/production
kustomize:
images:
- myregistry.io/myapp:v2.0.0
commonLabels:
environment: productionApplication (multi-source)
Use spec.sources (plural) to combine manifests from multiple repositories -- for example, a Helm chart from one repo with environment-specific values from another.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: billing-app
namespace: argocd
spec:
project: default
destination:
server: https://kubernetes.default.svc
namespace: billing
sources:
- repoURL: https://github.com/myorg/helm-charts
targetRevision: v3.2.0
path: charts/billing
helm:
valueFiles:
- $values/envs/production/values.yaml
- repoURL: https://github.com/myorg/config
targetRevision: main
ref: valuesThe ref: values entry makes that repo accessible as $values in valueFiles paths. spec.sources replaces spec.source -- they are mutually exclusive.
AppProject
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: production
namespace: argocd
spec:
sourceRepos:
- https://github.com/myorg/*
destinations:
- namespace: production
server: https://kubernetes.default.svc
clusterResourceWhitelist:
- group: '*'
kind: '*'
roles:
- name: developer
policies:
- p, proj:production:developer, applications, sync, production/*, allow
- p, proj:production:developer, applications, get, production/*, allow
groups:
- developers
syncWindows:
- kind: allow
schedule: '0 9 * * 1-5'
duration: 8h
applications:
- '*'
orphanedResources:
warn: trueApplicationSet generators
Enable Go templates with goTemplate: true and goTemplateOptions: ["missingkey=error"] (recommended). Go template syntax uses {{.field}} instead of the legacy {{field}} fasttemplate syntax.
Git (directory per environment)
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: myapp-envs
namespace: argocd
spec:
goTemplate: true
goTemplateOptions: ["missingkey=error"]
generators:
- git:
repoURL: https://github.com/myorg/myapp
revision: main
directories:
- path: k8s/overlays/*
template:
metadata:
name: 'myapp-{{.path.basename}}'
spec:
project: production
source:
repoURL: https://github.com/myorg/myapp
targetRevision: main
path: '{{.path.path}}'
destination:
server: https://kubernetes.default.svc
namespace: '{{.path.basename}}'
syncPolicy:
automated:
prune: true
selfHeal: trueList (multi-cluster)
generators:
- list:
elements:
- cluster: us-east-1
url: https://cluster1.example.com
- cluster: eu-central-1
url: https://cluster2.example.com
template:
metadata:
name: 'myapp-{{.cluster}}'
spec:
destination:
server: '{{.url}}'
namespace: productionMatrix (environments x clusters)
generators:
- matrix:
generators:
- git:
repoURL: https://github.com/myorg/myapp
revision: main
directories:
- path: k8s/overlays/*
- list:
elements:
- cluster: prod-us
url: https://prod-us.example.com
- cluster: prod-eu
url: https://prod-eu.example.comProgressive sync (RollingSync)
Stages rollouts across environments. Each step matches applications by label and controls how many can update concurrently.
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: myapp-rolling
namespace: argocd
spec:
goTemplate: true
goTemplateOptions: ["missingkey=error"]
generators:
- list:
elements:
- cluster: dev
url: https://dev.example.com
env: env-dev
- cluster: staging
url: https://staging.example.com
env: env-staging
- cluster: prod
url: https://prod.example.com
env: env-prod
strategy:
type: RollingSync
rollingSync:
steps:
- matchExpressions:
- key: envLabel
operator: In
values: [env-dev]
- matchExpressions:
- key: envLabel
operator: In
values: [env-staging]
maxUpdate: 0
- matchExpressions:
- key: envLabel
operator: In
values: [env-prod]
maxUpdate: 10%
template:
metadata:
name: 'myapp-{{.cluster}}'
labels:
envLabel: '{{.env}}'
spec:
project: production
source:
repoURL: https://github.com/myorg/myapp
targetRevision: main
path: 'k8s/overlays/{{.cluster}}'
destination:
server: '{{.url}}'
namespace: myappmaxUpdate: 0 means the step requires manual promotion (or an external trigger). maxUpdate: 10% limits concurrent updates to 10% of matching apps.
Ignore application differences
Prevents the ApplicationSet controller from overwriting fields that operators modify manually (e.g., pinning a branch for debugging).
spec:
ignoreApplicationDifferences:
- jqPathExpressions:
- .spec.sources[] | select(.repoURL == "https://github.com/myorg/repo").targetRevisionCaveat: MergePatch replaces entire lists on any change, so modifying other sources in the same sources list can still reset the ignored field.
Sync hooks and waves
# PreSync job -- runs before sync, deleted on success
metadata:
annotations:
argocd.argoproj.io/hook: PreSync
argocd.argoproj.io/hook-delete-policy: HookSucceeded
argocd.argoproj.io/sync-wave: "1"
# PostSync smoke test
metadata:
annotations:
argocd.argoproj.io/hook: PostSync
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation
argocd.argoproj.io/sync-wave: "5"Waves are ordered lowest-first. Resources in the same wave are applied together.
RBAC (argocd-rbac-cm)
data:
policy.default: role:readonly
policy.csv: |
g, myorg:platform-team, role:admin
p, role:developer, applications, get, */*, allow
p, role:developer, applications, sync, */*, allow
p, role:developer, repositories, get, *, allow
scopes: '[groups, email]'SSO (Dex + GitHub)
# argocd-cm
data:
url: https://argocd.example.com
dex.config: |
connectors:
- type: github
id: github
name: GitHub
config:
clientID: $dex.github.clientId
clientSecret: $dex.github.clientSecret
orgs:
- name: myorg
teams:
- platform-team
- developersCustom health checks
# argocd-cm
data:
resource.customizations.health.argoproj.io_Rollout: |
hs = {}
if obj.status ~= nil then
if obj.status.phase == "Healthy" then
hs.status = "Healthy"
return hs
end
end
hs.status = "Progressing"
hs.message = "Rollout in progress"
return hsCLI reference
# Application lifecycle
argocd app list
argocd app get <app> [--refresh] [--hard-refresh]
argocd app sync <app> [--prune] [--dry-run] [--force] [--timeout 300]
argocd app diff <app>
argocd app history <app>
argocd app rollback <app> <revision>
argocd app logs <app> [--follow] [--container <name>]
argocd app resources <app>
argocd app delete <app> [--cascade=false]
# Repo management
argocd repo add <url> --username <u> --password <token>
argocd repo list
# Cluster management
argocd cluster add <context>
argocd cluster list
# Project management
argocd proj list
argocd proj get <project>Status reference
| Sync status | Meaning |
| Synced | Live state matches Git |
| OutOfSync | Drift detected |
| Unknown | Cannot determine |
| Health status | Meaning |
| Healthy | All resources healthy |
| Progressing | Resources being updated |
| Degraded | One or more resources unhealthy |
| Suspended | Resources suspended |
| Missing | Resources absent from cluster |
Troubleshooting
App stuck OutOfSync after correct Git state:
argocd app get <app> --hard-refresh
argocd app diff <app>ComparisonError (Kustomize/Helm render failure):
- Hard-refresh to clear the repo-server cache.
- Check the
conditionsfield inargocd app getoutput for the render error.
Sync stuck / hook not completing:
- Check hook pod logs:
argocd app logs <app>. - Verify
hook-delete-policy--HookSucceededleaves failed hook pods visible for inspection.
Authentication expired:
argocd login <server> --username admin --password <password> [--insecure]Best practices
- One Application per logical component, not one giant app per cluster.
- Enable
prune: trueandselfHeal: truein production. - Use AppProjects to enforce source/destination boundaries per team.
- Use sync waves to sequence dependent resources (e.g., CRDs before CRs).
- Use
syncWindowsto gate production deployments to business hours. - Implement
orphanedResources.warn: trueto surface drift early. - Prefer
ServerSideApply=truefor large resources to avoid annotation size limits. - Enable Go templates with
goTemplateOptions: ["missingkey=error"]in all ApplicationSets. - Use
spec.sources(multi-source) when Helm values live in a separate repo from the chart.
Anti-patterns
- No
prune-- leaves orphaned resources that accumulate silently. - No AppProject -- loses namespace/repo isolation, no RBAC boundaries.
- Manual syncs only -- defeats the point of GitOps; drift goes undetected.
- Overloading one Application with unrelated resources -- makes rollback and diff noisy.
- Using legacy fasttemplate syntax (
{{field}}) in new ApplicationSets -- Go templates withmissingkey=errorcatch typos at render time.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

