---
title: "Environnements d’agent"
description: "Une session utilise un environnement d’agent, harness standard ou harness expérimental. Cette page explique comment un projet choisit son environnement et les fonctionnalités prises en charge par chacun."
---

Un harnais est l’environnement d’exécution de l’agent dans le bac à sable d’une session. Il exécute la boucle du modèle, appelle les outils et produit la transcription. Beeuni en propose deux : **harness standard** (celui par défaut) et **harness expérimental**. Une session en exécute exactement un.

Les deux harnais lisent le même projet : `beeuni.yaml`, les fichiers d’agent dans `agents/`, les compétences dans `skills/`, le `AGENTS.md` racine et `memory/`. Les clients (Web, CLI, TUI, mobile, SDK) y accèdent tous deux via la même API de session. Les différences concernent les fonctionnalités de session indiquées dans la [matrice](#what-each-harness-supports) ci-dessous et les fichiers que chaque harnais lit pour sa propre configuration.

<a id="how-a-session-selects-its-harness"></a>

## Comment une session sélectionne son harnais

Beeuni décide au démarrage, au redémarrage ou à la reprise d’une session. Une session en cours conserve son harnais jusque-là.

| Règle, dans l’ordre | Harnais |
| --- | --- |
| Le drapeau `llm_gateway` du projet est désactivé | harness standard |
| Le drapeau `pi_harness` du projet est activé | harness expérimental |
| `beeuni.yaml` définit `runtime: pi` | harness expérimental |
| Tout autre cas | harness standard |

- harness expérimental appelle les modèles uniquement via la passerelle LLM de Beeuni. Un projet dont `llm_gateway` est désactivé démarre harness standard, quels que soient le drapeau ou le manifeste. Voir [Modèles](/docs/fr/project/models).
- `runtime` est une clé de manifeste `beeuni_version: 2`. Un projet `beeuni.toml` hérité ne peut pas la définir. Voir [la référence du manifeste](/docs/fr/project/manifest).
- `pi_harness` est un indicateur de fonctionnalité par projet, désactivé par défaut. Voir [Indicateurs de fonctionnalité](/docs/fr/feature-flags).

Pour savoir quel harnais une session exécute, lisez `harness.id` dans la réponse `GET /beeuni/health` du démon du bac à sable : `opencode` ou `pi`.

<a id="what-each-harness-supports"></a>

## Fonctionnalités prises en charge par chaque harnais

Un harnais répertorie les fonctionnalités de session facultatives qu’il fournit dans le tableau `capabilities` de `GET /beeuni/health`. Un client masque un contrôle lorsque l’`capabilities` de la session ne contient pas l’identifiant correspondant. La vérification du SDK est `runtimeSupports`.

<a id="both-harnesses"></a>

### Les deux harnais

| Fonctionnalité | harness standard | harness expérimental |
| --- | --- | --- |
| Tours de conversation, diffusion en continu, arrêt | Oui | Oui |
| `.md` de l’agent : prompt, `model`, `variant`, `mode`, `permission`, `temperature`, `top_p`, `steps` | Oui | Oui. harness expérimental n’applique pas `options` (options du fournisseur). |
| [Accès aux outils](/docs/fr/project/tools#who-may-use-which-tool) par agent (`agents.<name>.tools` dans `beeuni.yaml` : `all`, `none`, une liste, `exclude`) | Oui | Oui |
| Règles `permission` par agent et demandes d’autorisation | Oui | Oui |
| Questions (outil `question`) | Oui | Oui |
| Le fichier de règles `AGENTS.md` à la racine du projet, ou `CLAUDE.md` si la racine ne contient pas de `AGENTS.md` | Oui. harness standard lit aussi le fichier dans les répertoires parents de `/workspace` et lit `/workspace` lorsqu’il exécute une publication de configuration. | Oui, le fichier racine uniquement. Il fait partie du prompt système de la session et de chaque sous-agent. [Avec les publications de configuration activées](#agentsmd-on-pi), harness expérimental lit la copie de la publication. |
| Sous-agents (outil `task`), `session.subagents` | Oui | Oui : `general`, `explore` (en lecture seule) et chaque agent du projet avec `mode: subagent` ou `all`. Un sous-agent ne peut pas démarrer un autre sous-agent. |
| Compétences (`skills/` et compétences `beeuni-*` gérées), avec l’autorisation `skills` de l’agent | Oui. L’agent charge une compétence avec l’outil `skill`. | Oui. Le prompt système répertorie chaque compétence autorisée ; l’agent lit le fichier. |
| [Outils Beeuni](/docs/fr/project/tools#beeuni-tools-in-beeuniyaml) : `web_search`, `image_search`, `scrape_webpage`, `memory`, `show`. Les cinq outils en l’absence de clé `tools:` dans `beeuni.yaml` ; avec une clé, ceux qu’elle répertorie comme `beeuni:<name>` | Oui | Oui |
| [Outils du projet](/docs/fr/project/tools) (`tools:` dans `beeuni.yaml`) | Oui | Oui |
| [Publications de configuration](/docs/fr/work/runtime#config-convergence), `config.release.v1` | Oui | Oui |
| Compacter (résumer) la conversation, à la demande et automatiquement lorsque le modèle approche de la limite de sa fenêtre de contexte, `session.compact` | Oui | Oui. Si une requête au modèle dépasse la limite, la conversation est compactée et la requête réessayée une fois. |
| Commandes slash du projet, `session.commands` | Oui, depuis `commands/` dans le répertoire de configuration d’harness standard. | Oui, à partir des modèles de prompt dans `prompts/` du répertoire de configuration de harness expérimental et dans les packages harness expérimental. harness expérimental ne lit pas `commands/` d’harness standard. |
| Terminal dans le bac à sable (PTY) | Oui | Oui |
| Outils `bash`, `read`, `write`, `edit`, `glob`, `grep` ; [secrets](/docs/fr/project/secrets) dans le shell ; CLI `beeuni` | Oui | Oui |

Les outils Beeuni et les outils du projet sont [indépendants du harnais](/docs/fr/project/tools) : le démon du bac à sable exécute un module par outil pour les deux harnais, avec les mêmes noms, arguments et sorties. harness expérimental les appelle dans le processus du démon ; harness standard les appelle via un plug-in écrit par le démon. Les deux harnais obtiennent la même liste : un outil Beeuni qui ne figure pas dans la clé `tools:` du projet n’est activé dans aucun des deux. Un projet qui possède encore des copies des outils Beeuni dans `harnesses/opencode/tools/` conserve ces copies dans harness standard jusqu’à ce qu’il les supprime.

Les outils Web suivent les clés d’autorisation `websearch` (`web_search`, `image_search`) et `webfetch` (`scrape_webpage`) dans les deux harnais. Dans harness standard, ces outils ne peuvent pas demander d’autorisation : une règle `ask` les refuse. Dans harness expérimental, une règle `ask` déclenche une demande d’autorisation. Dans harness expérimental, une commande `memory` qui modifie un fichier suit `edit`, et `view` suit `read` ; dans harness standard, seule une règle `memory` régit l’outil.

<a id="agentsmd-on-pi"></a>

### `AGENTS.md` dans harness expérimental

harness expérimental place le `AGENTS.md` racine du projet dans le prompt système en tant que section unique, `<project_instructions path="AGENTS.md">`, après le prompt de l’agent. Si la racine ne contient pas de `AGENTS.md`, harness expérimental utilise `CLAUDE.md`, comme dans harness standard. harness expérimental ne lit aucun `AGENTS.md` dans un sous-répertoire ou un répertoire parent.

- **Source.** Lorsque les [publications de configuration](/docs/fr/work/runtime#config-convergence) sont désactivées, harness expérimental lit `/workspace/AGENTS.md`. Lorsqu’elles sont activées, harness expérimental lit la copie de la publication, jamais celle de `/workspace` : une modification dans `/workspace` n’est transmise à la session qu’après sa fusion dans la branche de base. Si elles sont activées et qu’aucune publication n’est disponible (`config.source: image-default`), harness expérimental ne lit aucun `AGENTS.md`, tout comme il ne lit aucune compétence du projet.
- **Moment de lecture.** harness expérimental lit le fichier au démarrage de l’environnement d’exécution, au rechargement de sa configuration (nouvelle publication, push `/beeuni/env`) et après l’actualisation d’un dépôt. Il ne le relit pas avant chaque tour. Une nouvelle publication est prise en compte au tour suivant sans redémarrage ; un tour en cours conserve l’ancien fichier.
- **Fichiers ignorés.** Un fichier vide, un fichier qui n’est pas un fichier ordinaire et un lien symbolique dont la cible se trouve hors du dépôt n’ajoutent rien. Les deux derniers cas produisent chacun un avertissement dans le journal du démon.
- **Vérification.** `harness.details.agentsMd` dans `GET /beeuni/health` du démon indique le fichier chargé par harness expérimental : `source` (`release` ou `workspace`), `path`, `bytes` et `sha` (les 12 premiers caractères hexadécimaux de son sha256). La valeur est `null` lorsque harness expérimental n’a chargé aucun fichier.

<a id="opencode-only-today"></a>

### Fonctionnalités actuellement réservées à harness standard

| Fonctionnalité | Capacité | harness standard | harness expérimental |
| --- | --- | --- | --- |
| Revenir à un message et le restaurer. Modifier puis renvoyer un message utilise cette fonction. | `session.rewind` | Oui | Non |
| Serveurs MCP (`mcp` dans `opencode.jsonc`) | `session.mcp` | Oui | Pas de client MCP. Les [connecteurs](/docs/fr/connect/connectors) fonctionnent avec les deux harnais via le CLI `beeuni connectors`. |
| Liste de tâches (outil `todowrite`) et carte de plan | `session.todo` | Oui | Non. La carte de plan reste vide. |
| Connecter le client de terminal propre au harnais (`beeuni connect`, TUI `Alt+o`) | `session.attach` | Oui | Non. Voir [TUI](/docs/fr/cli#sessions). |
| Document de configuration d’exécution (`/global/config`) | `session.config` | Oui | Non. Les agents et les modèles proviennent du projet dans les deux cas. |
| Créer une bifurcation de session à un message | `session.fork` | Oui | Non |
| Exécuter une commande shell comme un tour | `session.shell` | Oui | Non |
| Fournisseurs de modèles sans passerelle LLM | — | Oui | Non. harness expérimental nécessite que `llm_gateway` soit activé. |

Une session harness expérimental répond à une demande de fonctionnalité qu’elle ne fournit pas avec `501 feature_not_supported`, ou avec `404` pour un document qu’elle ne possède pas (`/global/config`). Elle n’ignore pas la demande.

<a id="harness-configuration-files"></a>

## Fichiers de configuration des harnais

Chaque harnais possède un répertoire dédié aux fichiers qu’il est le seul à lire.

| | harness standard | harness expérimental |
| --- | --- | --- |
| Répertoire | `harnesses/opencode/` ou `opencode.config_dir` | `harnesses/pi/` ou `pi.config_dir` |
| Répertoire hérité | `.beeuni/opencode/` | `.beeuni/pi/` |
| Contenu | `opencode.jsonc`, `plugins/`, `tools/`, `commands/` | `settings.json`, `extensions/`, `skills/`, `prompts/` |
| Extensions | Plug-ins et outils propres à harness standard dans ce répertoire | [Packages harness expérimental](/docs/fr/project/manifest#harnesses) dans `harnesses.pi.packages` et fichiers d’extension dans `extensions/` |

Une session harness expérimental ne lit pas `opencode.jsonc`, `plugins/`, `tools/` ni `commands/`. Une session harness standard ne lit pas le répertoire harness expérimental. Un outil nécessaire aux deux harnais est un [outil du projet](/docs/fr/project/tools), déclaré dans `beeuni.yaml`, et non un fichier de l’un ou l’autre répertoire.

Les packages harness expérimental proviennent de packages. Un package peut ajouter des outils absents de harness expérimental, par exemple un adaptateur MCP ou un outil de liste de tâches. Beeuni charge le package, mais ne teste pas les packages tiers.
