1
Agents
Augustin ROUX edited this page 2026-04-27 08:46:43 +00:00

Agents IA — crush_run et claude_run

Ces deux outils permettent à Studio de déléguer une tâche complexe à un agent CLI dédié. Les paramètres sont identiques.

Schéma

{
  "task":       "string (obligatoire) — description de la tâche pour l'agent",
  "timeout":    "int (optionnel) — secondes, défaut 1800, max 1800 (30 min)",
  "cwd":        "string (optionnel) — répertoire de travail absolu",
  "wsl_distro": "string (optionnel) — sur Windows : distro WSL",
  "wsl_user":   "string (optionnel) — sur Windows : utilisateur WSL"
}

Comportement

Hôte Linux/macOS, sans wsl_distro

crush run "<task>"

Avec cwd : la commande est exécutée dans ce répertoire (cmd.Dir).

Hôte Windows, avec wsl_distro

L'agent est enveloppé dans wsl :

wsl -d <distro> [-u <user>] [--cd <cwd>] -- crush run "<task>"
  • wsl_distro est obligatoire pour activer cette branche
  • wsl_user reste optionnel (utilise l'utilisateur par défaut de la distro sinon)
  • cwd est passé via --cd (chemin Linux interne à la distro)

Validation

Les noms wsl_distro et wsl_user sont validés par la regex ^[a-zA-Z0-9._-]+$. Si invalide, l'outil retourne une erreur sans tenter d'exécuter.

cwd (hors WSL) est vérifié avec os.Stat — l'erreur est retournée immédiatement si le répertoire n'existe pas ou n'est pas un dossier.

Timeout 30 minutes

Le défaut est passé de 600s (v0.5.0) à 1800s en v0.6.0. La valeur max est aussi de 1800s — au-delà, l'agent est tué (context.DeadlineExceeded).

Gestion des mots de passe sous WSL

wsl -u <user> ne demande pas de mot de passe : WSL utilise l'utilisateur sans authentification pour ouvrir un shell. Si l'agent (Crush ou Claude) a besoin de sudo à l'intérieur de la session WSL, le mécanisme habituel NeedsSudoPassword() + sudo-bypass detection s'applique :

  • Si sudo passwordless est dispo : OK
  • Sinon : la commande sudo … est interceptée et un message clair est retourné à l'utilisateur

Un mot de passe explicite n'est donc jamais stocké côté Muyue pour les agents WSL.

Concurrence

Les crush_run et claude_run sont limités à 2 agents simultanés chacun (constants maxCrushAgents / maxClaudeAgents dans internal/api/server.go). Au-delà, le tool retourne une erreur Limite de N agents atteinte.

Code

  • Définitions : internal/agent/definitions.go::CrushRunParams, ClaudeRunParams
  • Construction de la commande : internal/agent/impl.go::buildAgentCommand
  • Slot limiter : internal/api/server.go::AcquireAgentSlot