# Harnesses

Eine Sitzung verwendet ein Agent-Harness: Standard-Harness oder Experimental-Harness. Auf dieser Seite erfahren Sie, wie ein Projekt eines auswählt und welche Funktionen die jeweiligen Harnesses unterstützen.

Canonical page: https://beeuni.ai/docs/de/work/harnesses

Ein Harness ist die Agent-Laufzeit innerhalb der Sandbox einer Sitzung. Es führt die Modellausführung aus, ruft Tools auf und erstellt das Transkript. Beeuni bietet zwei Harnesses: **Standard-Harness** (Standard) und **Experimental-Harness**. Eine Sitzung führt genau eines davon aus.

Beide Harnesses lesen dasselbe Projekt: `beeuni.yaml`, die Agent-Dateien in `agents/`, die Skills in `skills/`, die Stammdatei `AGENTS.md` und `memory/`. Die Clients (Web, CLI, TUI, Mobilgerät, SDK) greifen über dieselbe Sitzungs-API auf beide zu. Die Unterschiede betreffen die Sitzungsfunktionen in der [Matrix](#what-each-harness-supports) unten sowie die Dateien, die jedes Harness für seine eigene Konfiguration liest.

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

## So wählt eine Sitzung ihr Harness aus

Beeuni entscheidet, wenn eine Sitzung gestartet, neu gestartet oder fortgesetzt wird. Bis dahin behält eine laufende Sitzung ihr Harness bei.

| Regel, der Reihe nach | Harness |
| --- | --- |
| Das Flag `llm_gateway` des Projekts ist deaktiviert | Standard-Harness |
| Das Flag `pi_harness` des Projekts ist aktiviert | Experimental-Harness |
| `beeuni.yaml` setzt `runtime: pi` | Experimental-Harness |
| Alles andere | Standard-Harness |

- Experimental-Harness ruft Modelle ausschließlich über das Beeuni-LLM-Gateway auf. Ein Projekt, bei dem `llm_gateway` deaktiviert ist, startet Standard-Harness, unabhängig vom Flag oder Manifest. Siehe [Modelle](/docs/de/project/models).
- `runtime` ist ein Manifest-Schlüssel vom Typ `beeuni_version: 2`. Ein Projekt mit dem veralteten `beeuni.toml` kann ihn nicht festlegen. Siehe [Manifestreferenz](/docs/de/project/manifest).
- `pi_harness` ist ein projektbezogenes Feature-Flag, das standardmäßig deaktiviert ist. Siehe [Feature-Flags](/docs/de/feature-flags).

Um zu sehen, welches Harness eine Sitzung ausführt, lesen Sie `harness.id` in der Antwort `GET /beeuni/health` des Sandbox-Daemons: `opencode` oder `pi`.

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

## Unterstützte Funktionen der einzelnen Harnesses

Ein Harness führt die optionalen Sitzungsfunktionen, die es bereitstellt, im Array `capabilities` von `GET /beeuni/health` auf. Ein Client blendet ein Steuerelement aus, wenn `capabilities` der Sitzung die ID nicht enthält. Die SDK-Prüfung lautet `runtimeSupports`.

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

### Beide Harnesses

| Funktion | Standard-Harness | Experimental-Harness |
| --- | --- | --- |
| Chat-Nachrichten, Streaming, Abbrechen | Ja | Ja |
| Agent-`.md`: Prompt, `model`, `variant`, `mode`, `permission`, `temperature`, `top_p`, `steps` | Ja | Ja. Experimental-Harness wendet `options` (Anbieteroptionen) nicht an. |
| [Toolzugriff](/docs/de/project/tools#who-may-use-which-tool) pro Agent (`agents.<name>.tools` in `beeuni.yaml`: `all`, `none`, eine Liste, `exclude`) | Ja | Ja |
| `permission`-Regeln und Berechtigungsanfragen pro Agent | Ja | Ja |
| Fragen (Tool `question`) | Ja | Ja |
| Die Regeldatei `AGENTS.md` im Projektstamm oder `CLAUDE.md`, wenn der Stamm kein `AGENTS.md` enthält | Ja. Standard-Harness liest auch die Datei in den übergeordneten Verzeichnissen von `/workspace` und liest `/workspace`, während es eine Konfigurationsversion ausführt. | Ja, nur die Datei im Stammverzeichnis. Sie ist Teil des System-Prompts der Sitzung und jedes Subagents. [Mit aktivierten Konfigurationsversionen](#agentsmd-on-pi) liest Experimental-Harness die Kopie der Version. |
| Subagents (Tool `task`), `session.subagents` | Ja | Ja: `general`, `explore` (schreibgeschützt) und jeder Projekt-Agent mit `mode: subagent` oder `all`. Ein Subagent kann keinen weiteren Subagent starten. |
| Skills (`skills/` und verwaltete Skills aus `beeuni-*`) mit der Freigabe `skills` des Agents | Ja. Der Agent lädt einen Skill mit dem Tool `skill`. | Ja. Der System-Prompt führt jeden freigegebenen Skill auf; der Agent liest die Datei. |
| [Beeuni-Tools](/docs/de/project/tools#beeuni-tools-in-beeuniyaml): `web_search`, `image_search`, `scrape_webpage`, `memory`, `show`. Alle fünf, wenn `beeuni.yaml` keinen Schlüssel `tools:` enthält; andernfalls diejenigen, die darin als `beeuni:<name>` aufgeführt sind | Ja | Ja |
| [Projekt-Tools](/docs/de/project/tools) (`tools:` in `beeuni.yaml`) | Ja | Ja |
| [Konfigurationsversionen](/docs/de/work/runtime#config-convergence), `config.release.v1` | Ja | Ja |
| Unterhaltung bei Bedarf und automatisch nahe dem Kontextfenster des Modells zusammenfassen (kompakt halten), `session.compact` | Ja | Ja. Wenn eine Modellanfrage das Kontextfenster überschreitet, wird die Unterhaltung kompakt gehalten und die Anfrage einmal wiederholt. |
| Projekt-Slash-Befehle, `session.commands` | Ja, aus `commands/` im Standard-Harness-Konfigurationsverzeichnis. | Ja, aus den Prompt-Vorlagen in `prompts/` im Experimental-Harness-Konfigurationsverzeichnis und in Experimental-Harness-Paketen. Experimental-Harness liest `commands/` von Standard-Harness nicht. |
| Terminal in der Sandbox (PTY) | Ja | Ja |
| Tools `bash`, `read`, `write`, `edit`, `glob`, `grep`; [Secrets](/docs/de/project/secrets) in der Shell; die CLI `beeuni` | Ja | Ja |

Die Beeuni-Tools und die Projekt-Tools sind [Harness-unabhängig](/docs/de/project/tools): Der Sandbox-Daemon führt für beide Harnesses pro Tool ein Modul mit denselben Namen, Argumenten und Ausgaben aus. Experimental-Harness ruft sie im Prozess des Daemons auf; Standard-Harness ruft sie über ein Plugin auf, das der Daemon erstellt. Beide Harnesses erhalten dieselbe Liste: Ein Beeuni-Tool, das der Schlüssel `tools:` des Projekts nicht aufführt, steht keinem der beiden zur Verfügung. Ein Projekt, das noch Kopien der Beeuni-Tools in `harnesses/opencode/tools/` hat, behält diese Kopien in Standard-Harness, bis es sie löscht.

Die Web-Tools beachten bei beiden Harnesses die Berechtigungsschlüssel `websearch` (`web_search`, `image_search`) und `webfetch` (`scrape_webpage`). In Standard-Harness können diese Tools keine Berechtigungsanfrage stellen: Eine Regel `ask` verweigert den Zugriff. In Experimental-Harness löst eine Regel `ask` eine Berechtigungsanfrage aus. In Experimental-Harness beachtet ein Befehl `memory`, der eine Datei ändert, `edit`, und `view` beachtet `read`; in Standard-Harness regelt das Tool nur eine Regel `memory`.

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

### `AGENTS.md` in Experimental-Harness

Experimental-Harness fügt das `AGENTS.md` im Projektstamm als Abschnitt `<project_instructions path="AGENTS.md">` im System-Prompt ein, nach dem Prompt des Agents. Wenn der Stamm kein `AGENTS.md` enthält, verwendet Experimental-Harness stattdessen `CLAUDE.md`, wie bei Standard-Harness. Experimental-Harness liest kein `AGENTS.md` in einem Unterverzeichnis oder übergeordneten Verzeichnis.

- **Quelle.** Bei deaktivierten [Konfigurationsversionen](/docs/de/work/runtime#config-convergence) liest Experimental-Harness `/workspace/AGENTS.md`. Bei aktivierten Versionen liest Experimental-Harness die Kopie in der Version und niemals die in `/workspace`: Eine Änderung in `/workspace` wird erst nach dem Zusammenführen mit dem Basis-Branch in der Sitzung übernommen. Sind Konfigurationsversionen aktiviert und gibt es keine Version, die bereitgestellt werden kann (`config.source: image-default`), liest Experimental-Harness kein `AGENTS.md`, genauso wie Experimental-Harness keinen Projekt-Skill liest.
- **Zeitpunkt.** Experimental-Harness liest die Datei beim Start der Laufzeit, beim Neuladen der Konfiguration (eine neue Version, ein `/beeuni/env`-Push) und nach einer Repository-Aktualisierung. Die Datei wird nicht vor jeder Nachrichtenrunde gelesen. Eine neue Version wird in der nächsten Runde übernommen, ohne dass ein Neustart erforderlich ist; eine laufende Runde verwendet weiterhin die alte Datei.
- **Übersprungen.** Eine leere Datei, eine Datei, die keine reguläre Datei ist, und ein symbolischer Link, der außerhalb des Repositorys aufgelöst wird, tragen nichts bei. In den letzten beiden Fällen wird jeweils eine Warnung in das Daemon-Protokoll geschrieben.
- **Prüfen.** `harness.details.agentsMd` in `GET /beeuni/health` des Daemons nennt die Datei, die Experimental-Harness geladen hat: `source` (`release` oder `workspace`), `path`, `bytes` und `sha` (die ersten 12 hexadezimalen Zeichen der sha256-Prüfsumme). Wenn Experimental-Harness keine Datei geladen hat, ist der Wert `null`.

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

### Derzeit nur in Standard-Harness

| Funktion | Fähigkeit | Standard-Harness | Experimental-Harness |
| --- | --- | --- | --- |
| Zu einer Nachricht zurückkehren und sie wiederherstellen. Bei Bearbeiten und erneutem Senden wird zurückgesprungen. | `session.rewind` | Ja | Nein |
| MCP-Server (`mcp` in `opencode.jsonc`) | `session.mcp` | Ja | Kein MCP-Client. [Connectors](/docs/de/connect/connectors) funktionieren mit beiden Harnesses über die CLI `beeuni connectors`. |
| Aufgabenliste (Tool `todowrite`) und Planungskarte | `session.todo` | Ja | Nein. Die Planungskarte bleibt leer. |
| Den eigenen Terminal-Client des Harnesses anhängen (`beeuni connect`, TUI `Alt+o`) | `session.attach` | Ja | Nein. Siehe [TUI](/docs/de/cli#sessions). |
| Laufzeit-Konfigurationsdokument (`/global/config`) | `session.config` | Ja | Nein. Agents und Modelle stammen bei beiden aus dem Projekt. |
| Sitzung an einer Nachricht verzweigen | `session.fork` | Ja | Nein |
| Shell-Befehl als Nachrichtenrunde ausführen | `session.shell` | Ja | Nein |
| Modellanbieter ohne LLM-Gateway | — | Ja | Nein. Für Experimental-Harness muss `llm_gateway` aktiviert sein. |

Eine Experimental-Harness-Sitzung beantwortet eine Anfrage nach einer nicht unterstützten Funktion mit `501 feature_not_supported` oder mit `404`, wenn das angeforderte Dokument nicht vorhanden ist (`/global/config`). Die Anfrage wird nicht ignoriert.

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

## Konfigurationsdateien der Harnesses

Jedes Harness hat ein eigenes Verzeichnis für die Dateien, die nur dieses Harness liest.

| | Standard-Harness | Experimental-Harness |
| --- | --- | --- |
| Verzeichnis | `harnesses/opencode/` oder `opencode.config_dir` | `harnesses/pi/` oder `pi.config_dir` |
| Veraltetes Verzeichnis | `.beeuni/opencode/` | `.beeuni/pi/` |
| Inhalt | `opencode.jsonc`, `plugins/`, `tools/`, `commands/` | `settings.json`, `extensions/`, `skills/`, `prompts/` |
| Erweiterungen | Plugins und Standard-Harness-spezifische Tools in diesem Verzeichnis | [Experimental-Harness-Pakete](/docs/de/project/manifest#harnesses) in `harnesses.pi.packages` sowie Erweiterungsdateien in `extensions/` |

Eine Experimental-Harness-Sitzung liest weder `opencode.jsonc` noch `plugins/`, `tools/` oder `commands/`. Eine Standard-Harness-Sitzung liest das Experimental-Harness-Verzeichnis nicht. Ein Tool, das beide Harnesses benötigen, ist ein [Projekt-Tool](/docs/de/project/tools), das in `beeuni.yaml` deklariert wird, und keine Datei in einem der beiden Verzeichnisse.

Experimental-Harness-Pakete stammen von packages. Ein Paket kann Tools hinzufügen, die Experimental-Harness nicht mitbringt, zum Beispiel einen MCP-Adapter oder ein Aufgabenlisten-Tool. Beeuni lädt das Paket, testet aber keine Pakete von Drittanbietern.
