| name | argocd-ops | ||||
|---|---|---|---|---|---|
| description | Operate existing ArgoCD applications via the argocd CLI — check sync status, refresh or hard-refresh apps, look up Application names from ApplicationSets, toggle auto-sync and self-heal, and log into ArgoCD via SSO. Use this skill whenever the user mentions ArgoCD sync status, ArgoCD app refresh, ArgoCD login, disabling or enabling auto-sync or self-heal, looking up ArgoCD applications, or checking if a deploy has synced. This is for day-to-day ArgoCD operations, not for installing ArgoCD, writing ApplicationSet manifests, configuring RBAC, or setting up notifications. | ||||
| model | claude-haiku-4-5-20251001 | ||||
| allowed-tools |
|
Manage ArgoCD applications via CLI for common deployment and debugging tasks.
Use this skill when:
- Verifying sync status after deploying changes
- Looking up Application names from ApplicationSets
- Refreshing an app to re-evaluate state
- Toggling auto-sync or self-heal settings
- Manually triggering a Job from a CronJob and watching logs
Ensure these tools are available:
argocd- ArgoCD CLIkubectl- configured with cluster contextsjq- for JSON parsing
Ask the user for:
- Cluster - Which cluster to connect to (e.g.,
test,staging,prod,apps,ops) - Operation - What they want to do (sync check, refresh, toggle settings, run job)
Login via SSO:
# Determine server
ARGOCD_SERVER="argocd.<cluster>.tatari.dev"
# Login via SSO
argocd login "$ARGOCD_SERVER" --sso --grpc-webCheck current sync and health status:
argocd app get <app-name> -o json | jq '{
name: .metadata.name,
syncStatus: .status.sync.status,
healthStatus: .status.health.status,
revision: .status.sync.revision
}'Wait for sync to complete:
argocd app wait <app-name> --sync --timeout 300Find the Application name generated by an ApplicationSet:
argocd app list -o json | jq -r --arg appset "<appset-name>" \
'.[] | select(.metadata.ownerReferences[]?.name == $appset) | .metadata.name'Soft refresh (re-read git, compare):
argocd app get <app-name> --refreshHard refresh (invalidate cache, force manifest regeneration):
argocd app get <app-name> --hard-refreshEnable auto-sync:
argocd app set <app-name> --sync-policy automatedDisable auto-sync:
argocd app set <app-name> --sync-policy manualEnable self-heal:
argocd app set <app-name> --self-healDisable self-heal (requires patch since no direct flag exists):
argocd app patch <app-name> --type merge \
--patch '{"spec":{"syncPolicy":{"automated":{"selfHeal":false}}}}'Note: Disabling auto-sync entirely (--sync-policy manual) also stops self-heal behavior.
Create a Job from an existing CronJob and watch its logs:
# Create job with timestamp suffix
JOB_NAME="<cronjob-name>-manual-$(date +%s)"
kubectl --context <cluster> create job "$JOB_NAME" \
--from=cronjob/<cronjob-name> -n <namespace>
# Wait for pod to start
kubectl --context <cluster> wait --for=condition=Ready pod \
-l job-name="$JOB_NAME" -n <namespace> --timeout=120s
# Stream logs until completion
kubectl --context <cluster> logs -f -l job-name="$JOB_NAME" -n <namespace>
# Check final status
kubectl --context <cluster> get job "$JOB_NAME" -n <namespace> \
-o jsonpath='{.status.conditions[0].type}'# Verify cluster context exists
kubectl config get-contexts | grep <cluster>
# Ensure a browser is available for the SSO flow
# If running headless or over SSH, SSO login will not work# List all apps
argocd app list
# Check if app exists via kubectl
kubectl --context <cluster> get applications -n argocdThe --self-heal flag only enables, it cannot disable. Use the patch command:
argocd app patch <app-name> --type merge \
--patch '{"spec":{"syncPolicy":{"automated":{"selfHeal":false}}}}'# Check job status
kubectl --context <cluster> describe job <job-name> -n <namespace>
# Check for pending pods
kubectl --context <cluster> get pods -l job-name=<job-name> -n <namespace>
# Check events
kubectl --context <cluster> get events -n <namespace> --sort-by='.lastTimestamp' | tail -20