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_distroest obligatoire pour activer cette branchewsl_userreste optionnel (utilise l'utilisateur par défaut de la distro sinon)cwdest 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