# 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/.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 ``. --- ## 🔧 Applying Configuration Changes To perform modifications or rotate api keys: 1. **Secrets**: Edit string fields in [openclaw.secret.yaml](file:///Users/moritz/src/infrapuzzle/k8s/openclaw/openclaw.secret.yaml). 2. **Declarative Base Config**: Edit fields under `spec.config.raw` in [openclaw-instance.secret.yaml](file:///Users/moritz/src/infrapuzzle/k8s/openclaw/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!): ```bash 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: ```bash 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: ```bash kubectl get pods -n openclaw -l app.kubernetes.io/instance=openclaw ``` ### 3. Check Live Logs Inspect the core gateway engine: ```bash kubectl logs -n openclaw openclaw-0 -c openclaw --tail=100 ``` Inspect the Chromium browser engine: ```bash kubectl logs -n openclaw openclaw-0 -c chromium --tail=100 ```