Argo CD GitOps Review
Purpose
Review Argo CD Application, AppProject, ApplicationSet, sync windows, RBAC, and the central argocd-cm / argocd-rbac-cm configuration against blast radius, drift handling, and least-privilege sync identity. Argo CD's controller defaults to cluster-admin permissions on every destination cluster - the security posture lives in AppProject boundaries, sync impersonation, and explicit RBAC, not in the controller defaults.
Lean operating rules
- Prefer live cluster evidence (
kubectl get applications,appprojects,applicationsets -n argocd -o yaml plus the argocd-cm and argocd-rbac-cm ConfigMaps) when the active client exposes it; otherwise fall back to official Argo CD documentation and sanitized YAML from the user.
- Separate confirmed facts from inference. If sync history, current health, or RBAC binding state was not queried, say so.
- Treat
application.sync.impersonation.enabled: false (default) in production as a critical finding - every sync runs as the controller's cluster-admin ServiceAccount.
- Treat
AppProject with sourceRepos: ['*'] and destinations: ['*'] as a wide-blast-radius finding - any commit in any repo can deploy anywhere.
- Treat
automated.prune: true + automated.selfHeal: true on production Applications as critical without an explicit allowlist of authorized Git refs and a tested rollback runbook - Git divergence becomes irreversible deletion.
- Challenge
ApplicationSet generators that include unbounded clusters (clusters: {}) or label selectors with no exclusion - one mis-labeled cluster joins the rollout.
- Challenge
syncOptions: ['Replace=true'] and syncOptions: ['ServerSideApply=false'] on stateful resources - Replace deletes-then-creates, breaking PVC bindings.
- Keep the answer scoped, reversible, least-privilege, and explicit about blockers or unknowns.
References
Load these only when needed:
- Evidence path and tooling - use when choosing live cluster evidence, confirming Argo CD install state and version, or switching to documentation mode.
- Workflow and output contract - use when executing the full review, applying stress checks on Application / AppProject / ApplicationSet, or formatting the final answer.
- Official sources - use when you need the detailed Argo CD documentation list, RBAC syntax, and grounded insights from the project.
Response minimum
Return, at minimum:
- the scoped target (
Application, AppProject, ApplicationSet, or argocd-rbac-cm policy) and evidence level,
- the sync identity (controller default cluster-admin, impersonated ServiceAccount, or
destinationServiceAccount),
- the blast radius assessment (
sourceRepos, destinations, clusterResourceWhitelist, namespaceResourceBlacklist),
- the drift handling posture (
automated, prune, selfHeal, syncWindows),
- the safest next actions and rollback plan,
- the assumptions or blockers that prevent stronger conclusions.
1---2name: techtide-argocd-gitops-review3description: Use this skill for Argo CD GitOps review across Application, AppProject, ApplicationSet, sync windows, RBAC, sync impersonation, and Argo CD Agent multi-cluster topologies. Trigger when the user asks whether an Argo CD configuration is safe for production, whether automated sync should be enabled, whether prune+selfHeal is appropriate, whether AppProject scope is too wide, or how to enforce least-privilege sync identity.4---56# Argo CD GitOps Review78## Purpose910Review Argo CD `Application`, `AppProject`, `ApplicationSet`, sync windows, RBAC, and the central `argocd-cm` / `argocd-rbac-cm` configuration against blast radius, drift handling, and least-privilege sync identity. Argo CD's controller defaults to cluster-admin permissions on every destination cluster - the security posture lives in `AppProject` boundaries, sync impersonation, and explicit RBAC, not in the controller defaults.1112## Lean operating rules1314- Prefer live cluster evidence (`kubectl get applications,appprojects,applicationsets -n argocd -o yaml` plus the `argocd-cm` and `argocd-rbac-cm` ConfigMaps) when the active client exposes it; otherwise fall back to official Argo CD documentation and sanitized YAML from the user.15- Separate confirmed facts from inference. If sync history, current health, or RBAC binding state was not queried, say so.16- Treat `application.sync.impersonation.enabled: false` (default) in production as a critical finding - every sync runs as the controller's cluster-admin ServiceAccount.17- Treat `AppProject` with `sourceRepos: ['*']` and `destinations: ['*']` as a wide-blast-radius finding - any commit in any repo can deploy anywhere.18- Treat `automated.prune: true` + `automated.selfHeal: true` on production Applications as critical without an explicit allowlist of authorized Git refs and a tested rollback runbook - Git divergence becomes irreversible deletion.19- Challenge `ApplicationSet` generators that include unbounded clusters (`clusters: {}`) or label selectors with no exclusion - one mis-labeled cluster joins the rollout.20- Challenge `syncOptions: ['Replace=true']` and `syncOptions: ['ServerSideApply=false']` on stateful resources - Replace deletes-then-creates, breaking PVC bindings.21- Keep the answer scoped, reversible, least-privilege, and explicit about blockers or unknowns.2223## References2425Load these only when needed:2627- [Evidence path and tooling](references/mcp-and-evidence.md) - use when choosing live cluster evidence, confirming Argo CD install state and version, or switching to documentation mode.28- [Workflow and output contract](references/workflow-and-output.md) - use when executing the full review, applying stress checks on Application / AppProject / ApplicationSet, or formatting the final answer.29- [Official sources](references/official-sources.md) - use when you need the detailed Argo CD documentation list, RBAC syntax, and grounded insights from the project.3031## Response minimum3233Return, at minimum:3435- the scoped target (`Application`, `AppProject`, `ApplicationSet`, or `argocd-rbac-cm` policy) and evidence level,36- the sync identity (controller default cluster-admin, impersonated ServiceAccount, or `destinationServiceAccount`),37- the blast radius assessment (`sourceRepos`, `destinations`, `clusterResourceWhitelist`, `namespaceResourceBlacklist`),38- the drift handling posture (`automated`, `prune`, `selfHeal`, `syncWindows`),39- the safest next actions and rollback plan,40- the assumptions or blockers that prevent stronger conclusions.