feat(openclaw): implement 9-agent specialist architecture and agents-as-code (ADR 0001)

This commit is contained in:
Moritz Graf
2026-09-16 08:29:29 +02:00
parent bcff777228
commit 707a1b02ef
6 changed files with 49 additions and 35 deletions
+15 -1
View File
@@ -25,6 +25,21 @@ The multi-container pod structure is managed natively by the operator controller
| `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
@@ -34,7 +49,6 @@ To perform modifications or rotate api keys:
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/attachment-patch.yaml
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
+5
View File
@@ -20,6 +20,11 @@ The deployment is managed by the official **OpenClaw Operator** (`openclaw-opera
* **Vector Search**: Semantic memory search via OpenRouter `/v1/embeddings` (`text-embedding-3-small`).
* **Memory Wiki**: Bundled `memory-wiki` compiles structured entities, concepts, and dashboards into an Obsidian-compatible vault (`wiki/main`).
* **Automated Backup**: `openclaw-wiki-backup` CronJob runs daily at 03:30 AM UTC to commit and push the knowledge vault to `git.moritzgraf.de/moritz/knowledge-wiki`.
* **Multi-Agent Specialist Delegation (ADR 0001)**:
* **Conductor + 9 Subagents**: Lean front-of-house coordinator orchestrates 9 specialized domain subagents defined as code in the knowledge wiki (`agents/*.md`).
* **Direct Fast Path (< 2s)**: Simple status, home automation toggles, and single calendar entries run directly in-place.
* **Domain Stickiness**: Multi-turn dialogue (e.g. step-by-step cooking or vacation planning) stays pinned to the active subagent with state carried over via `<!-- DOMAIN_STATE -->`.
* **Active MCP Servers**: `stadtrat` (ALLRIS Net), `supermarket` (Marktguru), `geizhals` (price histories), `ebay`, `garmin` (148 health tools), `bring` (4 lists), `spotify`, `calendar` (family + city), `jelly` (Jellyfin/Jellyseerr), `homeassistant`, `prometheus`, `gitea`, `weather`.
---
-29
View File
@@ -1,29 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: openclaw-attachment-patch
namespace: openclaw
data:
attachment-allowlist-loader.mjs: |
import { register } from "node:module";
register(new URL("./attachment-allowlist-hook.mjs", import.meta.url));
attachment-allowlist-hook.mjs: |
export async function load(url, context, nextLoad) {
const result = await nextLoad(url, context);
if (url.includes("web-media-") && result.source) {
let source = typeof result.source === "string"
? result.source
: Buffer.isBuffer(result.source)
? result.source.toString("utf8")
: new TextDecoder().decode(result.source);
if (source.includes("function assertHostReadMediaAllowed(params) {")) {
source = source.replace(
"function assertHostReadMediaAllowed(params) {",
"function assertHostReadMediaAllowed(params) { return; /* allow all files */ "
);
return { ...result, source };
}
}
return result;
}
Binary file not shown.