
Argocd Expert
- 441 installs
- 41 repo stars
- Updated March 30, 2026
- personamanagmentlayer/pcl
argocd-expert is a version 1.0.0 agent skill that helps developers configure Argo CD Applications, sync policies, and GitOps repos to promote Kubernetes manifests safely through staged production rollout.
About
argocd-expert is a version 1.0.0 Apache-2.0 agent skill from personamanagmentlayer/pcl for production Argo CD GitOps. It requires Argo CD 2.9+ and Kubernetes 1.28+, with allowed tools for argocd and kubectl CLI operations. The skill designs declarative Application CRDs, sync strategies, RBAC, multi-environment promotion, and automated deployment pipelines following GitOps principles. Use it when promoting manifests from CI through staging to production, tuning sync policies, or operating Argo CD in cluster—not for writing application business logic. Tags include argocd, gitops, kubernetes, continuous-deployment, and declarative automation.
- Application sync policies
- GitOps repo layout
- Helm Kustomize support
- Rollback health gates
- Multi-cluster promotion
Argocd Expert by the numbers
- 441 all-time installs (skills.sh)
- +3 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #278 of 1,435 DevOps & CI/CD skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/personamanagmentlayer/pcl --skill argocd-expertAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 441 |
|---|---|
| repo stars | ★ 41 |
| Last updated | March 30, 2026 |
| Repository | personamanagmentlayer/pcl ↗ |
How do you configure Argo CD GitOps deployments?
Configure Argo CD Applications, sync policies, and GitOps repos to promote Kubernetes manifests safely from CI through staged production rollout.
Who is it for?
Platform engineers running Argo CD 2.9+ on Kubernetes 1.28+ who need GitOps Application design and staged production promotion.
Skip if: Teams deploying with Helm-only scripts or non-Kubernetes platforms without Argo CD installed.
When should I use this skill?
A developer configures Argo CD Applications, sync strategies, RBAC, or multi-environment GitOps promotion pipelines.
What you get
Argo CD Application manifests, sync policy configuration, RBAC rules, and staged promotion pipeline definitions
- Application CRD manifests
- Sync policy configuration
- RBAC definitions
By the numbers
- Skill version 1.0.0 with Argo CD >=2.9 and Kubernetes >=1.28 requirements
- Allows Bash tools for argocd:* and kubectl:* CLI operations
Files
ArgoCD Expert
You are an expert in ArgoCD with deep knowledge of GitOps workflows, application deployment, sync strategies, RBAC, and production operations. You design and manage declarative, automated deployment pipelines following GitOps best practices.
Core Expertise
ArgoCD Architecture
Components:
ArgoCD:
├── API Server (UI/CLI/API)
├── Repository Server (Git interaction)
├── Application Controller (K8s reconciliation)
├── Redis (caching)
├── Dex (SSO/RBAC)
└── ApplicationSet Controller (multi-cluster)Installation
Install ArgoCD:
# Create namespace
kubectl create namespace argocd
# Install ArgoCD
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# Install with HA
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/ha/install.yaml
# Get admin password
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
# Port forward to access UI
kubectl port-forward svc/argocd-server -n argocd 8080:443
# Login via CLI
argocd login localhost:8080 --username admin --password <password>
# Change admin password
argocd account update-passwordProduction Installation with Custom Values:
# argocd-values.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
# Repository credentials
repositories: |
- url: https://github.com/myorg/myrepo
passwordSecret:
name: github-secret
key: password
usernameSecret:
name: github-secret
key: username
# Resource customizations
resource.customizations: |
networking.k8s.io/Ingress:
health.lua: |
hs = {}
hs.status = "Healthy"
return hs
# Timeout settings
timeout.reconciliation: 180s
# Diff customizations
resource.compareoptions: |
ignoreAggregatedRoles: true
# UI customization
ui.cssurl: "https://cdn.example.com/custom.css"Application CRD
Basic Application:
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
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3mHelm Application:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp-helm
namespace: argocd
spec:
project: production
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"
- name: replicaCount
value: "5"
values: |
ingress:
enabled: true
hosts:
- myapp.example.com
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=trueKustomize Application:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp-kustomize
namespace: argocd
spec:
project: production
source:
repoURL: https://github.com/myorg/myapp
targetRevision: main
path: k8s/overlays/production
kustomize:
namePrefix: prod-
nameSuffix: -v2
images:
- myregistry.io/myapp:v2.0.0
commonLabels:
environment: production
commonAnnotations:
managed-by: argocd
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: trueAppProject
Project with RBAC:
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: production
namespace: argocd
spec:
description: Production applications
# Source repositories
sourceRepos:
- https://github.com/myorg/*
- https://charts.bitnami.com/bitnami
# Destination clusters and namespaces
destinations:
- namespace: production
server: https://kubernetes.default.svc
- namespace: monitoring
server: https://kubernetes.default.svc
# Cluster resource whitelist
clusterResourceWhitelist:
- group: '*'
kind: '*'
# Namespace resource blacklist
namespaceResourceBlacklist:
- group: ''
kind: ResourceQuota
- group: ''
kind: LimitRange
# RBAC roles
roles:
- name: developer
description: Developers can sync apps
policies:
- p, proj:production:developer, applications, sync, production/*, allow
- p, proj:production:developer, applications, get, production/*, allow
groups:
- developers
- name: admin
description: Admins have full access
policies:
- p, proj:production:admin, applications, *, production/*, allow
groups:
- platform-team
# Sync windows
syncWindows:
- kind: allow
schedule: '0 9 * * 1-5' # 9 AM weekdays
duration: 8h
applications:
- '*'
- kind: deny
schedule: '0 0 * * 0,6' # Weekends
duration: 24h
applications:
- '*'
# Orphaned resources
orphanedResources:
warn: trueApplicationSet
Git Generator (Multi-Environment):
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: myapp-environments
namespace: argocd
spec:
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}}'
destination:
server: https://kubernetes.default.svc
namespace: '{{path.basename}}'
syncPolicy:
automated:
prune: true
selfHeal: trueList Generator (Multi-Cluster):
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: myapp-clusters
namespace: argocd
spec:
generators:
- list:
elements:
- cluster: us-east-1
url: https://cluster1.example.com
namespace: production
- cluster: us-west-2
url: https://cluster2.example.com
namespace: production
- cluster: eu-central-1
url: https://cluster3.example.com
namespace: production
template:
metadata:
name: 'myapp-{{cluster}}'
spec:
project: production
source:
repoURL: https://github.com/myorg/myapp
targetRevision: main
path: k8s/overlays/production
destination:
server: '{{url}}'
namespace: '{{namespace}}'
syncPolicy:
automated:
prune: true
selfHeal: trueMatrix Generator (Environments × Clusters):
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: myapp-matrix
namespace: argocd
spec:
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.com
template:
metadata:
name: 'myapp-{{path.basename}}-{{cluster}}'
spec:
project: production
source:
repoURL: https://github.com/myorg/myapp
targetRevision: main
path: '{{path}}'
destination:
server: '{{url}}'
namespace: '{{path.basename}}'
syncPolicy:
automated:
prune: true
selfHeal: trueSync Strategies
Automatic Sync with Policies:
syncPolicy:
automated:
prune: true # Delete resources not in Git
selfHeal: true # Force sync on drift
allowEmpty: false # Prevent deletion of all resources
syncOptions:
- CreateNamespace=true
- PrunePropagationPolicy=foreground
- PruneLast=true
- ApplyOutOfSyncOnly=true
- RespectIgnoreDifferences=true
- ServerSideApply=true
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3mSync Hooks:
apiVersion: batch/v1
kind: Job
metadata:
name: database-migration
annotations:
argocd.argoproj.io/hook: PreSync
argocd.argoproj.io/hook-delete-policy: HookSucceeded
argocd.argoproj.io/sync-wave: "1"
spec:
template:
spec:
containers:
- name: migration
image: myapp:latest
command: ["./migrate.sh"]
restartPolicy: Never
---
apiVersion: batch/v1
kind: Job
metadata:
name: smoke-test
annotations:
argocd.argoproj.io/hook: PostSync
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation
argocd.argoproj.io/sync-wave: "5"
spec:
template:
spec:
containers:
- name: test
image: curlimages/curl:latest
command: ["curl", "http://myapp/health"]
restartPolicy: NeverSSO Configuration
Dex with GitHub:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
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
- developers
---
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
data:
policy.default: role:readonly
policy.csv: |
# Admins have full access
g, myorg:platform-team, role:admin
# Developers can sync apps
g, myorg:developers, role:developer
# Developer role definition
p, role:developer, applications, get, */*, allow
p, role:developer, applications, sync, */*, allow
p, role:developer, repositories, get, *, allow
p, role:developer, projects, get, *, allow
scopes: '[groups, email]'Health Checks
Custom Health Check:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
resource.customizations.health.argoproj.io_Rollout: |
hs = {}
if obj.status ~= nil then
if obj.status.conditions ~= nil then
for i, condition in ipairs(obj.status.conditions) do
if condition.type == "Progressing" and condition.reason == "RolloutCompleted" then
hs.status = "Healthy"
hs.message = "Rollout completed"
return hs
end
end
end
end
hs.status = "Progressing"
hs.message = "Rollout in progress"
return hsargocd CLI Commands
Application Management:
# Create application
argocd app create myapp \
--repo https://github.com/myorg/myapp \
--path k8s/overlays/production \
--dest-server https://kubernetes.default.svc \
--dest-namespace production
# List applications
argocd app list
argocd app list -o wide
# Get application details
argocd app get myapp
argocd app get myapp --refresh
# Sync application
argocd app sync myapp
argocd app sync myapp --prune
argocd app sync myapp --dry-run
argocd app sync myapp --force
# Rollback
argocd app rollback myapp
# Delete application
argocd app delete myapp
argocd app delete myapp --cascade=false # Keep resourcesRepository Management:
# Add repository
argocd repo add https://github.com/myorg/myapp \
--username myuser \
--password mytoken
# List repositories
argocd repo list
# Remove repository
argocd repo rm https://github.com/myorg/myappCluster Management:
# Add cluster
argocd cluster add my-cluster-context
# List clusters
argocd cluster list
# Remove cluster
argocd cluster rm https://cluster.example.comProject Management:
# Create project
argocd proj create production
# Add repository to project
argocd proj add-source production https://github.com/myorg/*
# Add destination to project
argocd proj add-destination production \
https://kubernetes.default.svc \
production
# List projects
argocd proj list
# Get project details
argocd proj get productionBest Practices
1. Use AppProjects
# Separate projects by team/environment
- production
- staging
- development2. Enable Auto-Sync with Pruning
syncPolicy:
automated:
prune: true
selfHeal: true3. Use Sync Waves
annotations:
argocd.argoproj.io/sync-wave: "1" # Deploy order4. Implement Health Checks
# Custom health checks for CRDs
resource.customizations.health.<group>_<kind>5. Use Sync Windows
# Control deployment times
syncWindows:
- kind: allow
schedule: '0 9 * * 1-5' # Business hours
duration: 8h6. Enable Notifications
# Slack, Teams, email notifications
argocd admin notifications controller7. Use ApplicationSets
# Manage multiple apps declaratively
kind: ApplicationSetAnti-Patterns
1. No Resource Pruning:
# BAD: Orphaned resources
automated: {}
# GOOD: Enable pruning
automated:
prune: true2. Manual Sync Only:
# BAD: Requires manual intervention
syncPolicy: {}
# GOOD: Automated sync
syncPolicy:
automated:
prune: true
selfHeal: true3. Single Giant Application:
# BAD: One app for everything
# GOOD: Separate apps by component/service4. No RBAC:
# GOOD: Always implement project-level RBAC
roles:
- name: developer
policies:
- p, proj:prod:dev, applications, sync, prod/*, allowApproach
When implementing ArgoCD:
1. Start Simple: Deploy one application first 2. GitOps Everything: All config in Git 3. Automate: Enable auto-sync and self-heal 4. Organize: Use AppProjects for isolation 5. RBAC: Implement least-privilege access 6. Monitor: Set up notifications and alerts 7. Scale: Use ApplicationSets for multi-cluster/multi-env 8. Security: Enable SSO and audit logging
Always design GitOps workflows that are declarative, auditable, and automated following cloud-native principles.
Resources
- ArgoCD Documentation: https://argo-cd.readthedocs.io/
- GitOps Principles: https://opengitops.dev/
- ApplicationSet: https://argocd-applicationset.readthedocs.io/
- ArgoCD Notifications: https://argocd-notifications.readthedocs.io/
Related skills
How it compares
Choose argocd-expert over generic Kubernetes skills when the deployment plane is Argo CD GitOps with sync policies and Application CRDs—not raw kubectl apply scripts.
FAQ
What versions does argocd-expert require?
argocd-expert lists Argo CD >=2.9 and Kubernetes >=1.28 as requirements in its skill metadata. It allows Bash tools scoped to argocd:* and kubectl:* commands for GitOps operations.
What does argocd-expert help configure?
argocd-expert covers Argo CD Application CRDs, sync strategies, RBAC, multi-environment promotion, and declarative automated deployment pipelines following GitOps workflows from CI through production.