GitOps Deployment
2 min read
NClaw’s Helm chart can be deployed declaratively using GitOps tools. Below are ready-to-use manifests for FluxCD and ArgoCD.
FluxCD
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: nclaw
namespace: flux-system
spec:
type: oci
interval: 10m
url: oci://ghcr.io/nickalie/charts
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: nclaw
namespace: nclaw
spec:
interval: 10m
chart:
spec:
chart: nclaw
sourceRef:
kind: HelmRepository
name: nclaw
namespace: flux-system
values:
env:
whitelistChatIds: "123456789"
webhookBaseDomain: "example.com"
existingSecret: nclaw-secrets
claudeCredentialsSecret: claude-credentials
persistence:
size: 5Gi
The existingSecret should contain the Telegram bot token under the key telegram-bot-token. Create it separately:
kubectl create secret generic nclaw-secrets \
--namespace nclaw \
--from-literal=telegram-bot-token=your-token
ArgoCD
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nclaw
namespace: argocd
spec:
project: default
source:
chart: nclaw
repoURL: ghcr.io/nickalie/charts
targetRevision: "*"
helm:
valuesObject:
env:
whitelistChatIds: "123456789"
webhookBaseDomain: "example.com"
existingSecret: nclaw-secrets
claudeCredentialsSecret: claude-credentials
persistence:
size: 5Gi
destination:
server: https://kubernetes.default.svc
namespace: nclaw
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
targetRevision: "*" tracks the latest chart version. Pin to a specific version (e.g. "0.1.0") for stricter control over upgrades.
Secrets Setup
Create the credential secret for your chosen CLI agent before deploying:
# Claude
kubectl create secret generic claude-credentials \
--namespace nclaw \
--from-file=credentials.json=$HOME/.claude/.credentials.json
# Codex
kubectl create secret generic codex-credentials \
--namespace nclaw \
--from-file=auth.json=$HOME/.codex/auth.json
# Copilot
kubectl create secret generic copilot-credentials \
--namespace nclaw \
--from-file=config.json=$HOME/.copilot/config.json
# Gemini
kubectl create secret generic gemini-credentials \
--namespace nclaw \
--from-file=oauth_creds.json=$HOME/.gemini/oauth_creds.json
Then reference the secret name in your Helm values (e.g. claudeCredentialsSecret, codexCredentialsSecret, etc.).
See Configuration for the full list of Helm values.