Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Outils : Vue d’ensemble

Les Outils sont les mains de l’agent. Un outil est une capacité que le modèle peut invoquer en cours de conversation, exécuter une commande shell, récupérer une URL HTTP, ouvrir un navigateur, écrire un fichier ou lire un capteur. Chaque appel d’outil est soumis à la politique de sécurité. Les exécutions réussies peuvent inclure un reçu d’outil lorsque les reçus sont activés.

Les outils ne doivent pas être confondus avec les sous-commandes CLI de zeroclaw. Les commandes CLI sont destinées aux opérateurs ; les outils sont destinés à l’agent.

Un agent obtient ses outils via les bundles de compétences, de connaissances et de MCP qu’il référence ; consultez Agents pour savoir comment les bundles sont attachés à un agent. Pour le chemin au niveau de chaque tour, de l’appel d’outil du fournisseur à l’approbation, au dispatch, à la réception, à l’événement observateur et à l’entrée d’historique, consultez Cycle d’exécution des outils.

Avant d’ajouter un outil intégré ou de remplacer l’un d’eux par une intégration externe, consultez l’Inventaire des outils intégrés pour choisir le cadre le plus sobre et pérenne.

Outils intégrés

Une build minimale comprend :

OutilCe que cela fait
shellExécuter une commande shell dans le répertoire de l’espace de travail. Soumis aux listes d’autorisation/de refus des commandes
file_readLire un fichier avec numéros de ligne ; prend en charge les lectures partielles et l’encodage base64 pour les fichiers binaires (le chemin doit être à l’intérieur de l’espace de travail sauf si l’autonomie le permet autrement)
file_writeÉcrire un fichier (contrainte de chemin identique)
file_editRemplacer une correspondance exacte de chaîne dans un fichier par un nouveau contenu
glob_searchLister les fichiers correspondant à un motif glob dans l’espace de travail
content_searchRecherche dans le contenu des fichiers par expression régulière au sein de l’espace de travail (ripgrep avec repli sur grep)
http_requestHTTP GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS vers les domaines autorisés
web_search_toolRecherche web. Le fournisseur est configurable : DuckDuckGo (par défaut, pas de clé), Brave, Tavily, SearXNG, Jina ou Bocha
web_fetchRécupérer une page et renvoyer du texte brut nettoyé
browserAutomatisation de navigateur sans interface graphique. Voir Automatisation de navigateur
memory_recallRechercher dans la mémoire à long terme des faits, préférences ou éléments de contexte pertinents
memory_storeStocker un fait, une préférence ou une note dans la mémoire à long terme
ask_userEnvoie une question au canal actif et attend une réponse. Prend en charge les choices optionnels pour des réponses structurées (clavier intégré sur Telegram, liste numérotée sur la CLI). Sur ACP, les choices sont obligatoires : la question libre attend la RFD d’élicitation ACP. Paramètres : question (obligatoire), choices (liste optionnelle), timeout_secs (600 par défaut).
escalate_to_humanEnvoyer un message d’escalade structuré avec routage par urgence. Une urgence high / critical notifie en plus tous les canaux listés dans [escalation] alert_channels. Paramètres : summary (requis), context (facultatif), urgency (low/medium/high/critical, par défaut medium), wait_for_response (booléen, par défaut false), timeout_secs (par défaut 600). Sur ACP, wait_for_response: true échoue immédiatement si le canal ne peut pas recevoir de réponses en format libre (en attente de la RFD sur l’élicitation ACP).

Toujours enregistrés aux côtés des éléments intégrés :

OutilNotes
cron_*Gérer les tâches planifiées : cron_add, cron_list, cron_remove, cron_update, cron_run, cron_runs
schedulePlanification ponctuelle/récurrente uniquement via le shell
memory_forget, memory_export, memory_purgeGestion de la mémoire à long terme
spawn_subagent, delegateExécuter une sous-tâche dans un agent enfant

Enregistré de manière conditionnelle :

OutilActivé par
knowledge[knowledge].enabled = true. Stocke une mémoire de relations structurée ; voir Mémoire de relations
Sondes matérielles--features hardware : lecture/écriture des GPIO, découverte des appareils, flashage du firmware
outils sop_*Enregistré lorsque l’environnement d’exécution SOP est activé (sop.sops_dir défini sur une valeur non vide ; non défini par défaut, ce qui le désactive ; la valeur documentée est shared/sops) : exécuter et inspecter les SOPs
discord_searchEnregistré lorsqu’un alias Discord a l’option archive activée

Protocoles d’extension

Au-delà des outils intégrés, ZeroClaw prend en charge la surface d’extension MCP (Model Context Protocol). Connectez n’importe quel serveur MCP (le système de fichiers de Claude Code, Playwright, le vôtre) et l’agent récupère ses outils au démarrage.

Pour une intégration côté IDE où un éditeur pilote ZeroClaw en tant que sous-processus, consultez ACP : Agent Client Protocol se trouve sous channels car il s’agit d’une surface entrante de gestion de sessions, et non d’un outil que l’agent invoque.

Création d’un outil

Implémentez le trait Tool dans zeroclaw-api :

#![allow(unused)]
fn main() {
#[async_trait]
pub trait Tool: Send + Sync + Attributable {
    fn name(&self) -> &str;
    fn description(&self) -> &str;
    fn parameters_schema(&self) -> serde_json::Value;   // Schéma JSON pour les arguments
    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult>;
}
}

Chaque Tool est également Attributable, de sorte que les émissions de journaux et les traces d’audit d’un appel d’outil portent la même attribution <kind>.<alias> que celle utilisée par le reste du runtime.

Enregistrez-vous via l’usine d’outils du runtime. Consultez Développement → Protocole des plugins pour le modèle complet.

Décrire des outils au modèle

Les descriptions d’outils sont des chaînes Mozilla Fluent : une par outil, localisée par locale. Cela permet de garder les descriptions d’outils concises dans la fenêtre de contexte du modèle tout en autorisant la localisation de l’interface utilisateur.

Source of truth : crates/zeroclaw-runtime/locales/en/tools.ftl. Les traductions sont générées et maintenues via cargo fluent fill --locale <code> (voir Maintainers → Docs & Translations).

Risques et approbation

Chaque invocation d’outil est classée par niveau de risque :

  • Faible (lecture seule, sans effets de bord) : file_read, memory_recall, http_request GET vers les domaines autorisés
  • Moyen (modifie l’état local) : file_write, shell avec des commandes connues comme sûres
  • Élevé (effets de bord destructeurs ou distants) : shell avec des commandes inconnues, http_request POST vers des URL non restreintes

Le niveau d’autonomie détermine ce que chaque niveau de risque peut faire sans l’approbation de l’opérateur. Par défaut (Supervised) : les exécutions de faible intensité sont autorisées, celles de moyenne intensité demandent une vérification, et celles de haute intensité sont bloquées.

Lorsque les reçus sont activés, les exécutions réussies reçoivent un reçu d’outil. Les appels refusés, bloqués, remplacés, échoués ou interrompus ne reçoivent pas de reçus.

Désactivation des outils sur les canaux non-CLI

Le schéma ne possède pas de champ tools_allow / tools_deny par canal. Le contrôle d’accès aux outils se trouve dans le profil de risque de l’agent ([risk_profiles.<alias>]) :

  • excluded_tools supprime les outils répertoriés de chaque canal non-CLI (Discord, Telegram, Bluesky, Matrix, Slack, etc.) tout en laissant l’interface CLI locale intacte. La granularité est binaire (CLI vs non-CLI), et non par canal. Cela soustrait également les éléments de la liste d’autorisation des délégués agentiques résolue au moment de l’exécution, ce qui constitue le seul moyen de bloquer les noms MCP <server>__<tool> individuels qui seraient autrement automatiquement admis par la règle ci-dessous.
  • allowed_tools est l’inverse : une liste d’autorisation des outils que l’agent peut appeler en mode agentique (vide ou omis signifie aucune contrainte d’autorisation ; la configuration TOML ne distingue pas les deux cas).
  • Exception MCP : lorsque allowed_tools n’est pas vide, les outils MCP découverts au moment de l’exécution (tout nom contenant __, selon la convention <server>__<tool>) sont automatiquement admis dans la liste d’autorisation effective sans avoir à y être répertoriés individuellement. Cela permet de conserver l’utilisation du comportement MCP par défaut postérieur au #7464 pour les agents qui définissent déjà une liste d’autorisation explicite. Pour bloquer des outils MCP individuels, répertoriez-les dans excluded_tools.
  • L’exception MCP s’applique uniquement au champ allowed_tools du profil de risque. Les listes d’autorisation par exécution fournies par l’appelant (le allowed_tools d’une tâche cron, les invocations de délégué restreintes, etc.) sont toujours traitées comme des intersections strictes de listes explicites. Une tâche qui se restreint elle-même à allowed_tools = ["cron_add"] n’exposera pas les wrappers MCP découverts au moment de l’exécution qu’elle n’a pas nommés, même lorsque le profil de risque de l’agent les admettrait automatiquement.

Si vous avez besoin d’un contrôle plus fin, abaissez le level du profil à read_only ou supervised et appuyez-vous sur les listes auto_approve / always_ask propres à chaque profil pour soumettre les outils sensibles à l’approbation d’un opérateur.

Consultez Niveaux d’autonomie pour l’ensemble complet des champs par profil.

Voir aussi