Les espaces IA
Un espace IA est un hôte DNF de profil ai-space, en général un
invité microVM. Il porte un assistant
OpenClaw 🡕 réservé à ses membres, avec ses propres secrets
et ses propres données.
Créer un espace
Section intitulée « Créer un espace »-
Déclarer l’hôte et ses membres
Les
usersde l’hôte sont ses membres : DNF crée pour eux le groupe Kanidmspace-<hôte>.etc/config.yaml - hostname: "ia-pro"zone: "lan:1.40"profile: "ai-space"features: ["microvm-guest:hyperviseur", "monitoring-node"]users: ["alice", "bob"]services:openclaw: {}monitoring-nodeplace l’espace sous la supervision de la zone : sans lui, ni la panne de l’espace ni l’arrêt de l’assistant ne déclenchent d’alerte.Le propriétaire est le membre dont l’abonnement fait tourner l’assistant : il reçoit les demandes de validation et les messages spontanés (rappels, tâches planifiées). Seul membre, il est implicite. Avec plusieurs membres, il se déclare dans
usr/machines/ia-pro/configuration.nix(l’ordre desusersn’est pas conservé) :{ darkone.service.openclaw.owner = "alice"; } -
Initialiser l’espace
just space-init ia-pro: clé d’hôte, secrets (cf. Hôtes isolés) et, si le réseau a Matrix, le bot@ia-pro:<domaine>. Committer ensuiteusr/secrets/etvar/generated/spaces/. -
Déployer
L’hyperviseur, la passerelle de la zone (vhost, DNS) et le HCS (groupe Kanidm) :
just apply hyperviseur,gw,hcs. -
Connecter le fournisseur d’IA
Une fois par espace, depuis l’hôte (
just enter ia-pro), selon le modèle de l’espace (darkone.service.openclaw.model) :Modèle Abonnement Connexion anthropic/*(défaut :anthropic/claude-sonnet-5-5)Claude Pro/Max, par le CLI claudesudo -u openclaw -H claude auth loginopenai/*ChatGPT Plus/Pro, par le plugin codexopenclaw models auth login --provider openaiLa commande
openclawde l’hôte passe d’elle-même sous l’utilisateur du service.openclaw models statusvérifie la connexion, qui reste dans/var/lib/openclaw, persistant.
Les membres écrivent au bot @<hôte>:<domaine> en message direct, chiffré de
bout en bout. Le canal n’existe que si le réseau déclare le service matrix :
sans lui, l’espace fonctionne par son interface web seule.
| Élément | Règle |
|---|---|
| Qui est écouté | Les membres de l’espace (@<login>:<domaine>), en MP seulement ; les autres comptes sont ignorés |
| Salons | Ignorés : des non-membres y liraient les réponses |
| Sessions | Une par membre quand ils sont plusieurs, sinon une seule pour tous les canaux |
| Validation des commandes | Aucune par défaut (cf. Sécurité) ; une demande éventuelle va au propriétaire, en MP |
| Messages spontanés | Envoyés au propriétaire, en MP |
| Clés de chiffrement | Dans /var/lib/openclaw, persistant |
Outils des agents
Section intitulée « Outils des agents »Les MCP, les skills et les outils se déclarent une seule fois par espace, dans
usr/machines/<hôte>/configuration.nix. L’assistant et chaque membre (Claude
Code, Codex) reçoivent les mêmes.
{ pkgs, ... }:{ darkone.host.ai-space = { mcp.fetch = { command = "uvx"; args = [ "mcp-server-fetch" ]; }; mcp.github = { command = "github-mcp-server"; args = [ "stdio" ]; secretEnv = [ "GITHUB_PERSONAL_ACCESS_TOKEN" ]; }; mcp.docs.url = "https://mcp.example.com/mcp"; skills.rapport = ./skills/rapport; # dossier avec SKILL.md packages = [ pkgs.uv pkgs.pandoc pkgs.github-mcp-server ]; };
darkone.service.openclaw = { workspace."AGENTS.md" = ./AGENTS.md; projects.notes = "https://forge.example.com/alice/notes.git"; };}| Option | Rôle |
|---|---|
darkone.host.ai-space.mcp | Serveurs MCP, locaux (command, args, env, secretEnv) ou distants (url, headers) |
darkone.host.ai-space.skills | Skills par nom : contenu de SKILL.md, fichier ou dossier |
darkone.host.ai-space.packages | Outils dans le PATH de l’assistant et chez les membres |
darkone.host.ai-space.enableClaude, enableCodex | Claude Code et Codex, actifs par défaut |
darkone.service.openclaw.exec | Politique des commandes (cf. Sécurité) |
darkone.service.openclaw.identity | Nom, emoji et avatar de l’assistant (name, emoji, avatar) : la configuration étant en lecture seule, l’assistant ne peut pas les changer lui-même |
darkone.service.openclaw.workspace | Fichiers du workspace de l’assistant (AGENTS.md, SOUL.md…) |
darkone.service.openclaw.projects | Dépôts git clonés une fois dans workspace/projects/<nom> |
darkone.service.openclaw.transcription | Transcription locale des notes vocales (whisper.cpp) |
Les notes vocales, Matrix ou web, sont transcrites sur l’espace avec le modèle
small de whisper.cpp (466 Mo, sur CPU), sans service externe. La langue
est détectée à chaque note ; transcription.language = "fr" la fixe.
Comptes des membres
Section intitulée « Comptes des membres »Chaque membre a un compte Linux sur l’espace, allégé :
| Élément | Sur l’espace |
|---|---|
| Profil Home Manager | space-member (zsh, git, vim, tmux), à la place du sien |
| Outils de l’espace | Claude Code et Codex, avec les MCP et skills de l’espace (darkone.home.aiSpace) |
| Personnalisations | usr/users/<login>/space.nix (tous ses espaces), puis usr/users/<login>/spaces/<hôte>.nix (cet espace), s’ils existent |
usr/users/<login>/default.nix | Ignoré : réservé à ses postes |
| Droits | Aucun groupe (pas de sudo), quel que soit son profil |
L’administration de l’espace passe par le compte nix (just enter <hôte>).
Chaque membre connecte ses propres abonnements, une fois : claude (puis
/login) et codex login --device-auth.
| Élément | Règle |
|---|---|
| Adresse | https://openclaw.<zone>.<domaine> |
| Connexion | SSO Kanidm, réservé au groupe space-<hôte> |
| Appareil | Appairé à la première visite, sans droit d’administration ni de validation (propriétaire seul) |
| Administration | openclaw … sur l’hôte, depuis le compte nix |
| Port de l’assistant | Joignable depuis la passerelle de la zone seulement |
Sécurité
Section intitulée « Sécurité »Par défaut, l’assistant exécute ses commandes sans validation, comme
OpenClaw : la barrière est l’espace lui-même (microVM coupée du LAN,
secrets propres à l’espace). Son service est en plus confiné : il n’écrit
que dans /var/lib/openclaw et ne voit ni les dossiers ni les processus des
membres.
darkone.service.openclaw.exec choisit la politique :
| Valeur | Commandes |
|---|---|
full (défaut) | Toutes, sans validation |
ask | Celles de la liste blanche passent, les autres sont soumises au propriétaire |
auto | Un modèle examine celles hors liste blanche et soumet au propriétaire les cas douteux |
allowlist | Celles de la liste blanche seulement |
deny | Aucune |
La liste blanche se remplit sur l’hôte :
openclaw approvals allowlist add --agent main <chemin>.