Claude Skills Guide

Claude Code for ArgoCD App of Apps Workflow

The App of Apps pattern is one of the most powerful ways to manage complex Kubernetes deployments with ArgoCD. Instead of manually creating dozens of Application resources, you define a single “root” Application that spawns all others. Claude Code can help you design, implement, and maintain this pattern efficiently.

Understanding the App of Apps Pattern

At its core, the App of Apps pattern uses a parent Application to reference a directory or Helm chart containing child Application manifests. When ArgoCD syncs the parent, it automatically creates or updates all children.

Here’s a basic root Application YAML that Claude might help you generate:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: platform-root
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  project: default
  source:
    repoURL: https://github.com/your-org/argocd-manifests.git
    targetRevision: main
    path: apps
  destination:
    server: https://kubernetes.default.svc
    namespace: argocd
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

The apps directory referenced here contains the child Application definitions that get deployed automatically.

How Claude Code Helps Generate App of Apps Configurations

When you’re first setting up this pattern, Claude can generate the directory structure and initial YAML files. Simply describe your desired architecture:

“Create an App of Apps structure for a microservices platform with frontend, backend API, auth service, and database services. Each should be in its own namespace.”

Claude will generate the appropriate directory structure:

apps/
├── backend-api/
│   └── application.yaml
├── frontend/
│   └── application.yaml
├── auth-service/
│   └── application.yaml
└── database/
    └── application.yaml

Each child Application follows a consistent pattern:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: backend-api
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  project: default
  source:
    repoURL: https://github.com/your-org/backend-api.git
    targetRevision: main
    path: deploy/k8s
  destination:
    server: https://kubernetes.default.svc
    namespace: backend
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Using Claude for Environment-Specific Variations

One common challenge is managing different configurations for development, staging, and production environments. Claude can help you create a flexible structure that handles this elegantly:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: platform-root
  namespace: argocd
spec:
  source:
    repoURL: https://github.com/your-org/argocd-manifests.git
    targetRevision: main
    path: apps
    directory:
      recurse: true
      jsonnet:
        - extVar: environment=production

You can ask Claude to create environment-specific overlays using Kustomize or Helm values:

“Generate App of Apps with Kustomize overlays for dev, staging, and prod environments. Each environment should have different replica counts and resource limits.”

Claude will create the appropriate Kustomize structure with base configurations and environment-specific patches.

Automating App of Apps Updates

When you need to add a new service to your platform, Claude can automate the process. Simply describe what you want to add:

“Add a new notification service to our App of Apps. It should deploy to the notifications namespace and reference our notification microservice repository.”

Claude will generate the new Application manifest and add it to your apps directory:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: notification-service
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  project: default
  source:
    repoURL: https://github.com/your-org/notification-service.git
    targetRevision: main
    path: k8s/overlays/production
  destination:
    server: https://kubernetes.default.svc
    namespace: notifications
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
  ignoreMissingSchemas: true

Managing Application Dependencies

A more sophisticated pattern uses App of Apps to manage dependencies between services. Claude can help you set up proper sync waves using sync options:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: database-layer
  namespace: argocd
spec:
  # ... source configuration ...
  syncPolicy:
    syncOptions:
      - CreateNamespace=true
      - PrunePropagationPolicy=foreground
    retry:
      limit: 5
      backoff:
        duration: 5s
        factor: 2
        maxDuration: 3m

For services that depend on the database, you can use wait sync options to ensure proper ordering:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: backend-api
  namespace: argocd
spec:
  # ... source configuration ...
  syncPolicy:
    syncOptions:
      - PrunePropagationPolicy=foreground
    managedNamespaceMetadata:
      labels:
        environment: production

Claude can explain the different propagation policies and help you choose the right one based on your cleanup requirements.

Best Practices for App of Apps with Claude

When working with Claude to generate and maintain App of Apps configurations, keep these practices in mind:

Use finalizers consistently: Always include the resources-finalizer to ensure proper cleanup when Applications are deleted. Claude will include these by default when generating manifests.

Set appropriate sync policies: Automated sync with prune: true and selfHeal: true keeps your cluster in the desired state, but be cautious in production environments where you might want manual approval.

Organize by capability, not just by service: Instead of one Application per microservice, consider grouping related components:

# Core platform services
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: core-platform
  namespace: argocd
spec:
  source:
    path: apps/core
---
# User-facing services
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: user-services
  namespace: argocd
spec:
  source:
    path: apps/user-facing

Leverage Claude for validation: Before applying configurations, ask Claude to validate your YAML structure and check for common issues like missing required fields or incorrect API versions.

Troubleshooting App of Apps with Claude

When your App of Apps isn’t behaving as expected, Claude can help diagnose the issue. Describe the problem and share relevant output:

“One of my child Applications is stuck in a Syncing state. The error says ‘failed to create service’.”

Claude can help you identify common causes such as resource conflicts, missing CRDs, or synchronization issues between the parent and child Applications.

For complex debugging scenarios, you can ask Claude to generate diagnostic commands:

# Check parent Application status
kubectl get application platform-root -n argocd

# View child Applications
kubectl get applications -n argocd -l app.kubernetes.io/instance=platform-root

# Check sync status
argocd app get platform-root --hard-refresh

Conclusion

Claude Code significantly accelerates your App of Apps workflow by automating YAML generation, explaining complex patterns, and helping troubleshoot issues. Whether you’re setting up a new platform or managing an existing deployment, having Claude assist with the repetitive YAML configurations lets you focus on the architectural decisions that really matter.

Start with a simple two-level structure and expand as your platform grows. Claude can help you evolve the pattern from basic deployments to sophisticated multi-environment, multi-tenant configurations as your needs become more complex.

Built by theluckystrike — More at zovo.one