Retour

10. OpenClaw : routage multi-Agent et isolation des sessions

Cet article approfondit l'architecture multi-Agent d'OpenClaw, incluant la configuration de plusieurs instances Agent, les règles de routage des messages, les stratégies d'isolation des sessions, et les meilleures pratiques pour la collaboration en équipe.

Compatible avec OpenClaw v2026.2 | Cet article s’adresse aux équipes ou aux utilisateurs ayant besoin d’isoler les contextes.

TL;DR : Configuration multi-Agent : "agents": {"instances": {"personal": {...}, "work": {...}}}. Règles de routage : "routing": {"rules": [{"match": {"channel": "telegram"}, "agent": "personal"}]}. Isolation des sessions : "sessions": {"isolation": "user"}. Mode sandbox : "sandbox": {"mode": "non-main"}. Adapté aux scénarios multi-utilisateurs, multi-projets et multi-usages.

Pourquoi le multi-Agent ?

Limites du mono-Agent

Scénario Problème mono-Agent Solution multi-Agent
Multi-utilisateurs Contexte mélangé, problèmes de confidentialité Un Agent indépendant par utilisateur
Multi-projets Informations projet mélangées Un Agent indépendant par projet
Multi-usages Un Agent pour plusieurs rôles Des Agents spécialisés
Multi-équipes Permissions difficiles à contrôler Isolation des Agents par équipe
Contrôle des coûts Impossible de distinguer la consommation Facturation indépendante par modèle

Cas d’usage du multi-Agent

flowchart TB
    subgraph Users["Utilisateurs"]
        U1[Utilisateur A]
        U2[Utilisateur B]
        U3[Équipe X]
        U4[Équipe Y]
    end
    
    subgraph Router["Routage des messages"]
        R[Règles de routage]
    end
    
    subgraph Agents["Instances Agent"]
        A1[Agent personnel A]
        A2[Agent personnel B]
        A3[Agent équipe X]
        A4[Agent équipe Y]
    end
    
    subgraph Models["Modèles"]
        M1[Claude Opus]
        M2[Claude Sonnet]
        M3[GPT-4o]
        M4[Haiku]
    end
    
    U1 --> R
    U2 --> R
    U3 --> R
    U4 --> R
    R --> A1
    R --> A2
    R --> A3
    R --> A4
    A1 --> M1
    A2 --> M2
    A3 --> M3
    A4 --> M4

Configuration multi-Agent

Structure de base

{
  "agents": {
    "defaults": {
      "model": "anthropic/claude-sonnet-4",
      "workspace": "~/.openclaw/workspace"
    },
    "instances": {
      "personal": {
        "model": "anthropic/claude-opus-4-6",
        "workspace": "~/.openclaw/workspaces/personal",
        "thinkingLevel": "high"
      },
      "work": {
        "model": "anthropic/claude-sonnet-4",
        "workspace": "~/.openclaw/workspaces/work",
        "skills": ["github", "jira", "confluence"]
      },
      "assistant": {
        "model": "anthropic/claude-haiku-3.5",
        "workspace": "~/.openclaw/workspaces/assistant"
      }
    }
  }
}

Paramètres de configuration d’un Agent

Paramètre Description Exemple
model Modèle utilisé anthropic/claude-opus-4-6
workspace Répertoire de travail ~/.openclaw/workspaces/personal
thinkingLevel Niveau de réflexion high, medium, low
skills Compétences activées ["gmail", "calendar"]
sandbox Configuration sandbox { "mode": "non-main" }
contextWindow Fenêtre de contexte 200000

Structure du Workspace

~/.openclaw/
├── workspace/              # Workspace par défaut
│   ├── AGENTS.md
│   ├── SOUL.md
│   └── skills/
├── workspaces/
│   ├── personal/          # Agent personnel
│   │   ├── AGENTS.md
│   │   ├── SOUL.md
│   │   └── USER.md
│   ├── work/              # Agent professionnel
│   │   ├── AGENTS.md
│   │   └── skills/
│   └── assistant/         # Agent assistant
│       └── AGENTS.md
└── openclaw.json          # Configuration principale

Règles de routage des messages

Configuration du routage

{
  "routing": {
    "rules": [
      {
        "match": {
          "channel": "telegram",
          "sender": "123456789"
        },
        "agent": "personal"
      },
      {
        "match": {
          "channel": "discord",
          "guild": "987654321"
        },
        "agent": "work"
      },
      {
        "match": {
          "session": "main"
        },
        "agent": "personal"
      }
    ],
    "default": "personal"
  }
}

Détail des règles de routage

Champ de correspondance Description Exemple
channel Type de canal telegram, discord, slack
sender ID de l’expéditeur 123456789
guild ID du serveur Discord 987654321
group ID du groupe -100123456789
session ID de session main, telegram:user:123
pattern Correspondance regex ^work-

Exemple de routage complexe

{
  "routing": {
    "rules": [
      {
        "name": "Telegram personnel",
        "match": {
          "channel": "telegram",
          "sender": ["123456789", "987654321"]
        },
        "agent": "personal"
      },
      {
        "name": "Discord professionnel",
        "match": {
          "channel": "discord",
          "guild": "111222333"
        },
        "agent": "work"
      },
      {
        "name": "Groupe professionnel",
        "match": {
          "channel": "telegram",
          "group": "-100111222333"
        },
        "agent": "work"
      },
      {
        "name": "Environnement de test",
        "match": {
          "pattern": "^test-"
        },
        "agent": "assistant",
        "config": {
          "sandbox": { "mode": "always" }
        }
      }
    ],
    "default": "personal"
  }
}

Priorité du routage

flowchart TB
    MSG[Message reçu] --> R1{Correspond à la règle 1 ?}
    R1 -->|Oui| A1[Agent 1]
    R1 -->|Non| R2{Correspond à la règle 2 ?}
    R2 -->|Oui| A2[Agent 2]
    R2 -->|Non| R3{Correspond à la règle 3 ?}
    R3 -->|Oui| A3[Agent 3]
    R3 -->|Non| D[Agent par défaut]

Les règles sont évaluées dans l’ordre ; la première règle correspondante s’applique.

Isolation des sessions

Niveaux d’isolation

Niveau Description Cas d’usage
Sans isolation Contexte partagé Mono-utilisateur, mono-usage
Isolation par canal Contexte indépendant par canal Accès multi-canaux
Isolation par utilisateur Contexte indépendant par utilisateur Partage multi-utilisateurs
Isolation par session Chaque session est indépendante Isolation totale
Isolation par Agent Chaque Agent est indépendant Déploiement multi-Agent

Configurer l’isolation des sessions

{
  "sessions": {
    "isolation": "user",
    "persistence": true,
    "retention": {
      "maxAge": 604800000,
      "maxSessions": 100
    }
  }
}

Configuration détaillée de l’isolation

{
  "sessions": {
    "isolation": "user",
    "storage": {
      "type": "file",
      "path": "~/.openclaw/sessions"
    },
    "encryption": {
      "enabled": true,
      "algorithm": "aes-256-gcm"
    },
    "retention": {
      "maxAge": 604800000,
      "maxSessions": 100,
      "cleanupInterval": 86400000
    }
  }
}
Paramètre Description Valeur par défaut
isolation Niveau d’isolation user
storage.type Type de stockage file
encryption.enabled Activer le chiffrement true
retention.maxAge Durée max de rétention 7 jours
retention.maxSessions Nombre max de sessions 100

Scénarios de collaboration en équipe

Scénario 1 : Partage en petite équipe

{
  "agents": {
    "instances": {
      "team": {
        "model": "anthropic/claude-sonnet-4",
        "workspace": "~/.openclaw/workspaces/team",
        "skills": ["github", "jira", "slack"]
      }
    }
  },
  "routing": {
    "rules": [
      {
        "match": { "channel": "slack" },
        "agent": "team"
      },
      {
        "match": { "channel": "discord" },
        "agent": "team"
      }
    ],
    "default": "team"
  }
}

Scénario 2 : Isolation par département

{
  "agents": {
    "instances": {
      "engineering": {
        "model": "anthropic/claude-opus-4-6",
        "workspace": "~/.openclaw/workspaces/engineering",
        "skills": ["github", "jira", "pagerduty"],
        "sandbox": { "mode": "off" }
      },
      "marketing": {
        "model": "anthropic/claude-sonnet-4",
        "workspace": "~/.openclaw/workspaces/marketing",
        "skills": ["mailchimp", "analytics"],
        "sandbox": { "mode": "non-main" }
      },
      "support": {
        "model": "anthropic/claude-haiku-3.5",
        "workspace": "~/.openclaw/workspaces/support",
        "skills": ["zendesk", "intercom"],
        "sandbox": { "mode": "always" }
      }
    }
  },
  "routing": {
    "rules": [
      {
        "name": "Engineering Discord",
        "match": { "channel": "discord", "guild": "111111111" },
        "agent": "engineering"
      },
      {
        "name": "Marketing Slack",
        "match": { "channel": "slack", "team": "T22222222" },
        "agent": "marketing"
      },
      {
        "name": "Support Telegram",
        "match": { "channel": "telegram", "group": "-100333333333" },
        "agent": "support"
      }
    ],
    "default": "support"
  }
}

Scénario 3 : SaaS multi-tenant

{
  "agents": {
    "dynamic": true,
    "template": {
      "model": "anthropic/claude-sonnet-4",
      "workspace": "~/.openclaw/workspaces/tenants/{{tenantId}}",
      "skills": ["base"],
      "sandbox": { "mode": "always" }
    },
    "limits": {
      "maxAgents": 100,
      "maxSessionsPerAgent": 50,
      "maxTokensPerMonth": 1000000
    }
  },
  "routing": {
    "rules": [
      {
        "name": "Tenant Routing",
        "match": { "header": "X-Tenant-Id" },
        "agent": "tenant_{{tenantId}}",
        "createIfNotExists": true
      }
    ]
  }
}

Permissions et sécurité

Contrôle des permissions des Agents

{
  "agents": {
    "instances": {
      "trusted": {
        "model": "anthropic/claude-opus-4-6",
        "sandbox": { "mode": "off" },
        "permissions": {
          "filesystem": { "read": true, "write": true },
          "network": { "outbound": true },
          "process": { "execute": true }
        }
      },
      "restricted": {
        "model": "anthropic/claude-haiku-3.5",
        "sandbox": { "mode": "always" },
        "permissions": {
          "filesystem": { 
            "read": ["~/allowed/"],
            "write": ["~/allowed/"]
          },
          "network": { 
            "outbound": ["api.example.com"]
          },
          "process": { "execute": false }
        }
      }
    }
  }
}

Modes sandbox

Mode Description Cas d’usage
off Pas de sandbox Agent de confiance
non-main Sandbox pour les sessions non principales Partage en équipe
always Toujours en sandbox Environnement non fiable

Configuration du sandbox

{
  "sandbox": {
    "mode": "non-main",
    "container": {
      "image": "openclaw/sandbox:latest",
      "timeout": 30000,
      "memory": "512m",
      "cpu": "0.5"
    },
    "allowlist": ["read", "write", "edit", "bash"],
    "denylist": ["browser", "canvas", "nodes"],
    "networkPolicy": {
      "allow": ["api.example.com"],
      "deny": ["*"]
    }
  }
}

Monitoring et gestion

Surveillance de l’état des Agents

# Lister toutes les instances Agent
openclaw agents list

# Exemple de sortie :
# Name        Model                  Sessions  Status   Last Active
# personal    claude-opus-4-6        3         active   2 min ago
# work        claude-sonnet-4        5         active   5 min ago
# assistant   claude-haiku-3.5       2         idle     1 hour ago

# Voir les détails d'un Agent
openclaw agents show personal

# Voir les règles de routage
openclaw routing list

Gestion des sessions

# Lister toutes les sessions
openclaw sessions list --agent personal

# Exemple de sortie :
# Session ID              Channel    Sender      Created      Messages
# telegram:user:123       telegram   123456789   2026-02-26   42
# main                    cli        -           2026-02-25   128

# Voir les détails d'une session
openclaw sessions show telegram:user:123

# Exporter une session
openclaw sessions export telegram:user:123 --format json

# Supprimer une session
openclaw sessions delete telegram:user:123

Statistiques de consommation

# Voir la consommation par Agent
openclaw usage --by-agent

# Exemple de sortie :
# Agent       Tokens In    Tokens Out   Cost      Requests
# personal    125,000     45,000      $2.10     128
# work        89,000      32,000      $1.25     95
# assistant   15,000      8,000       $0.15     42

# Statistiques sur une période donnée
openclaw usage --by-agent --from 2026-02-01 --to 2026-02-28

Bonnes pratiques

1. Répartition judicieuse des Agents

Critère de répartition Description Exemple
Usage Par fonction coding, research, assistant
Projet Par projet project-alpha, project-beta
Équipe Par équipe engineering, marketing
Modèle Par modèle opus, sonnet, haiku

2. Héritage de configuration

{
  "agents": {
    "defaults": {
      "model": "anthropic/claude-sonnet-4",
      "workspace": "~/.openclaw/workspace",
      "thinkingLevel": "medium",
      "sandbox": { "mode": "non-main" }
    },
    "instances": {
      "opus": {
        "model": "anthropic/claude-opus-4-6",
        "thinkingLevel": "high"
        // Hérite du workspace et sandbox de defaults
      },
      "haiku": {
        "model": "anthropic/claude-haiku-3.5",
        "thinkingLevel": "minimal"
        // Hérite des autres paramètres de defaults
      }
    }
  }
}

3. Principe du moindre privilège

{
  "agents": {
    "instances": {
      "restricted": {
        "model": "anthropic/claude-haiku-3.5",
        "sandbox": { "mode": "always" },
        "permissions": {
          "filesystem": {
            "read": ["~/allowed/read"],
            "write": ["~/allowed/write"]
          },
          "network": {
            "outbound": []
          },
          "process": {
            "execute": false
          }
        }
      }
    }
  }
}

4. Monitoring et alertes

{
  "monitoring": {
    "alerts": [
      {
        "condition": "usage > 1000000",
        "action": "notify"
      },
      {
        "condition": "error_rate > 0.1",
        "action": "notify"
      },
      {
        "condition": "response_time > 10000",
        "action": "notify"
      }
    ],
    "webhook": "https://your-monitoring.com/webhook"
  }
}

Dépannage

Le routage ne fonctionne pas

# Voir les règles de routage actuelles
openclaw routing list

# Tester le routage
openclaw routing test --channel telegram --sender 123456789

# Exemple de sortie :
# Matched Rule: Telegram personnel
# Target Agent: personal
# Route Path: default -> rule 1 -> personal

Problèmes d’isolation des sessions

# Vérifier la configuration d'isolation
openclaw config get sessions.isolation

# Vérifier la liste des sessions
openclaw sessions list --all

# Réinitialiser l'isolation des sessions
openclaw sessions reset --agent personal

Problèmes de permissions

# Vérifier la configuration des permissions
openclaw agents permissions show personal

# Tester une permission
openclaw agents test-permission personal --action filesystem.read --path ~/test

# Exemple de sortie :
# Permission: filesystem.read
# Path: ~/test
# Result: ALLOWED

Résumé

L’architecture multi-Agent est une fonctionnalité avancée d’OpenClaw offrant un support puissant pour les scénarios d’équipe et d’entreprise :

  • Routage flexible : Assigner différents Agents selon le canal, l’utilisateur ou le projet
  • Isolation des sessions : Protéger la confidentialité, éviter la confusion de contexte
  • Contrôle des permissions : Gestion fine et granulaire des permissions
  • Optimisation des coûts : Choisir différents modèles selon l’usage
  • Extensibilité : Création et gestion dynamiques des Agents

Résumé de cet article :

  • Compréhension de la valeur et des scénarios de l’architecture multi-Agent
  • Maîtrise de la configuration des Agents et des règles de routage des messages
  • Apprentissage de la configuration de l’isolation des sessions
  • Découverte des bonnes pratiques pour la collaboration en équipe
  • Maîtrise du contrôle des permissions et du monitoring

Historique des mises à jour :

  • 2026-02-26 : Publication initiale, basée sur OpenClaw v2026.2

Navigation de la série :