feat(openclaw): implement 9-agent specialist architecture and agents-as-code (ADR 0001)
This commit is contained in:
+15
-1
@@ -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
|
||||
|
||||
@@ -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`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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.
Reference in New Issue
Block a user