# Shell

Exécutez une commande bash unique dans un conteneur sandbox isolé et récupérez stdout / stderr / code de sortie.

## Vue d'ensemble

`shell` s'exécute sur la même sandbox isolée qui anime `code_interpreter`, avec `language: "bash"`. Le LLM l'appelle avec une chaîne `command` ; la commande s'exécute dans la sandbox et la sortie capturée est renvoyée au modèle.

À utiliser pour du traitement de données court et transitoire :

- `jq` / `grep` / `awk` sur du texte déjà disponible pour le modèle.
- `base64` / `openssl` pour encodage ou hash.
- Petit `curl` (uniquement avec **Autoriser internet** activé et pour des commandes de confiance).
- Lancement ponctuel d'une CLI livrée dans l'image sandbox.

Si vous écrivez du Python via shell, préférez `code_interpreter` — il renvoie ses variables plus proprement.

## Modèle de sécurité

Le sandbox est **la surface défensive la plus importante du produit** :

- **Conteneur éphémère** — détruit après chaque appel. Aucun filesystem partagé entre appels ni entre utilisateurs.
- **Isolation au niveau noyau** — le conteneur ne voit pas le noyau hôte ; les syscalls sont interceptés et confinés.
- **Pas de réseau par défaut** — sorties bloquées. N'activez **Autoriser internet** qu'au cas par cas et seulement pour des commandes de confiance.
- **Aucune métadonnée hôte exposée** — l'image sandbox ne monte ni AWS IMDS, ni Google Metadata, ni le socket Docker, ni aucun credential cloud. Même avec internet, l'agent ne peut atteindre `169.254.169.254`.
- **Timeout strict** — défaut 60 s, max 600 s. Plafonné côté serveur quel que soit ce que le modèle envoie.

Si l'administrateur de votre espace a désactivé les outils d'agent non sûrs, ce tool est indisponible — les agents ne le voient simplement pas.

## Configuration

| Champ | Valeurs | Notes |
| --- | --- | --- |
| Timeout (secondes) | 5–600 | Défaut 60. Kill brutal au-delà. |
| Répertoire de travail | chemin | Défaut `/workspace` dans la modale, `/tmp` côté serveur. Le dossier existe dans l'image sandbox. |
| Autoriser internet | booléen | Désactivé par défaut. **Risqué** — l'UI affiche un avertissement ambre. |

## Exemple

Tour utilisateur : *« Hash cette chaîne en SHA-256 : ‘hello world'. »*

Appel du modèle :

```json
{ "command": "printf 'hello world' | sha256sum" }
```

Réponse renvoyée :

```json
{
  "status": "completed",
  "exit_code": 0,
  "stdout": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9  -\n",
  "stderr": ""
}
```

Le modèle répond ensuite avec le hash.

## Bonnes pratiques

- **Une commande par appel.** Chaînez avec `&&` si nécessaire, mais le modèle débogue mieux quand chaque appel a un seul rôle.
- **Échappez les entrées non fiables.** Si l'agent interpole du texte utilisateur, demandez-lui d'entourer en simples quotes. Pour atteindre un vrai système, préférez `function`.
- **Laissez `Autoriser internet` désactivé.** Tout l'intérêt du sandbox s'effondre s'il peut sortir.

## Pièges

- Le sandbox est détruit après chaque appel — les fichiers écrits dans `/tmp` ne survivent pas. Redirigez vers stdout si le modèle doit voir le résultat.
- `stderr` est renvoyé mais le LLM l'ignore souvent. En cas d'échec silencieux, regardez `exit_code`.
- L'image sandbox est volontairement réduite ; `docker`, `kubectl`, `aws` **ne** sont **pas** présents.

---

*Source: https://agentbuilder.systalink.sn/docs/tool-shell — human documentation.*
*Other language: [/docs-md/en/tool-shell.md](/docs-md/en/tool-shell.md).*
*Machine-readable index: [/llms.txt](/llms.txt).*
