Files
infrapuzzle/k8s/openclaw/AGENTS.md
T

4.5 KiB

OpenClaw Agent Guide (Operator-Managed)

This document provides a technical reference for AI agents managing the OpenClaw deployment in this repository.


🏗️ Architecture & Configuration Lifecycle

The deployment has been migrated to the OpenClaw Operator framework.

1. Persistent Storage & State Protection

  • Storage Claim: Uses the existing PVC openclaw-data (openebs-hostpath).
  • Zero-Drift Merge: Configured with mergeMode: merge. Any declarative base config applied via K8s is safely deep-merged with runtime configuration mutations (e.g. linked channels, active sessions) written by the agent inside the PVC at /home/openclaw/.openclaw/openclaw.json.
  • Stateful Memory: The agent's wisdom (MEMORY.md, SOUL.md, SQLite databases) resides in the persistent claim and survives pod restarts naturally.

2. Sidecar Mapping

The multi-container pod structure is managed natively by the operator controller:

Legay Pod Container Operator Controller Replacement
chromium-sidecar Managed natively under spec.chromium with autowired CDP endpoint
sidecar-proxy Managed natively by operator gateway proxy sidecar
git-sync Retained under spec.sidecars to fetch skills from private git repository
skill-stabilizer Retained under spec.sidecars to copy skills to the flat PVC structure
install-uv-python (init) Managed natively by the operator under spec.runtimeDeps.python: true

3. Multi-Agent Architecture & Agents-as-Code (ADR 0001)

  • Conductor: The main session runs as the lean front-of-house coordinator (SOUL.md), handling fast actions (< 2s) directly with MCP tools and delegating complex domain tasks via sessions_spawn.
  • Specialist Subagents: 9 specialized subagents defined as code in the knowledge wiki:
    • 🩺 agents/hebamme.md (Baby development & sleep, pediatrician safety boundaries)
    • 🍳 agents/koch.md (Ninja CREAMi Deluxe, Airfryer, KitchenAid, leftover utilization)
    • 🏡 agents/grabengasse.md (Home Assistant, Hue, Sonos multiroom, Grabengasse 7)
    • 🏰 agents/regensburg.md (Stadtamhof insider, RVV, playgrounds, local dining)
    • ✈️ agents/travel.md (Vacation itineraries, packing lists, travel concierge)
    • 🎬 agents/media.md (Jellyfin streaming/requests, Jellyseerr, Spotify audiobooks)
    • 🔍 agents/recherche.md (Deep research, ALLRIS Stadtrat, Friday bridge tracking)
    • 🛒 agents/shopping.md (Supermarket deals, Geizhals best prices, Bring! lists)
    • 🏋️ agents/fitness.md (Garmin Connect 148 tools, Tacx Flux 2, home gym supersets)
  • Modifying & Adding Agents: To update prompt logic, tone, or tool instructions for any agent, edit its markdown file directly in knowledge-wiki/agents/<name>.md and commit to git. No Kubernetes pod restarts required!
  • Multi-Turn Domain Stickiness: When a conversation spans multiple turns in a subagent domain (e.g. refining a recipe or planning a trip), the Conductor detects domain continuity and routes to the same agent with the state bridge <!-- DOMAIN_STATE -->.

🔧 Applying Configuration Changes

To perform modifications or rotate api keys:

  1. Secrets: Edit string fields in openclaw.secret.yaml.
  2. Declarative Base Config: Edit fields under spec.config.raw in openclaw-instance.secret.yaml.
  3. Apply & Rollout: Apply the files. The operator tracks config hashes and performs an automated rolling update of the StatefulSet automatically (no manual restart needed!):
    kubectl apply -f k8s/openclaw/openclaw.secret.yaml
    kubectl apply -f k8s/openclaw/openclaw-instance.secret.yaml
    kubectl apply -f k8s/openclaw/cronjob-wiki-backup.secret.yaml
    

🚨 Troubleshooting & Live Verification

If the agent is offline or failing:

1. Verify Deployment Health

Ensure that the OpenClawInstance is successfully reconciled:

kubectl get openclawinstance openclaw -n openclaw
# Expected: PHASE=Running, READY=True

2. Verify Pod & Container States

Check that all 6 containers inside the StatefulSet are fully functional:

kubectl get pods -n openclaw -l app.kubernetes.io/instance=openclaw

3. Check Live Logs

Inspect the core gateway engine:

kubectl logs -n openclaw openclaw-0 -c openclaw --tail=100

Inspect the Chromium browser engine:

kubectl logs -n openclaw openclaw-0 -c chromium --tail=100