Harness
Una sessione esegue un harness per agenti, harness standard o harness sperimentale. In questa pagina trovi come un progetto ne seleziona uno e le funzionalità supportate da ciascuno.
Un harness è il runtime dell’agente all’interno della sandbox di una sessione. Esegue il ciclo del modello, chiama gli strumenti e produce la trascrizione. Beeuni ne offre due: harness standard (predefinito) e harness sperimentale. Ogni sessione ne esegue esattamente uno.
Entrambi gli harness leggono lo stesso progetto: beeuni.yaml, i file dell’agente in
agents/, le skill in skills/, il AGENTS.md radice e memory/. I client (web, CLI, TUI, dispositivi mobili, SDK) li leggono entrambi tramite la stessa API di sessione. Le differenze riguardano le funzionalità di sessione nella
matrice qui sotto e i file che ciascun harness legge per la propria configurazione.
Come una sessione seleziona il proprio harness
Beeuni decide quando una sessione viene avviata, riavviata o ripresa. Una sessione in esecuzione mantiene il proprio harness fino a quel momento.
| Regola, in ordine | Harness |
|---|---|
Il flag llm_gateway del progetto è disattivato |
harness standard |
Il flag pi_harness del progetto è attivato |
harness sperimentale |
beeuni.yaml imposta runtime: pi |
harness sperimentale |
| Qualsiasi altro caso | harness standard |
- harness sperimentale chiama i modelli solo tramite il gateway LLM di Beeuni. Un progetto con
llm_gatewaydisattivato avvia harness standard, indipendentemente dal flag o da quanto indicato nel manifest. Vedi Modelli. runtimeè una chiave del manifestbeeuni_version: 2. Un progetto legacybeeuni.tomlnon può impostarla. Vedi il riferimento del manifest.pi_harnessè un flag di funzionalità per progetto, disattivato per impostazione predefinita. Vedi Flag di funzionalità.
Per sapere quale harness esegue una sessione, leggi harness.id nella risposta GET /beeuni/health del daemon della sandbox: opencode o pi.
Funzionalità supportate da ciascun harness
Un harness elenca le funzionalità di sessione opzionali che fornisce nell’array capabilities di GET /beeuni/health. Un client nasconde un controllo quando capabilities della sessione non contiene l’id. Il controllo dell’SDK è runtimeSupports.
Entrambi gli harness
| Funzionalità | harness standard | harness sperimentale |
|---|---|---|
| Turni di chat, streaming, interruzione | Sì | Sì |
.md dell’agente: prompt, model, variant, mode, permission, temperature, top_p, steps |
Sì | Sì. harness sperimentale non applica options (opzioni del provider). |
Accesso agli strumenti per agente (agents.<name>.tools in beeuni.yaml: all, none, un elenco, exclude) |
Sì | Sì |
Regole permission per agente e richieste di autorizzazione |
Sì | Sì |
Domande (strumento question) |
Sì | Sì |
Il file delle regole AGENTS.md nella radice del progetto, oppure CLAUDE.md se la radice non contiene AGENTS.md |
Sì. harness standard legge anche il file nelle directory genitrici di /workspace e legge /workspace mentre applica una release di configurazione. |
Sì, solo il file radice. Fa parte del prompt di sistema della sessione e di ogni subagente. Con le release di configurazione attive, harness sperimentale legge la copia della release. |
Subagenti (strumento task), session.subagents |
Sì | Sì: general, explore (sola lettura) e ogni agente del progetto con mode: subagent o all. Un subagente non può avviare un altro subagente. |
Skill (skills/ e le skill gestite di beeuni-*), con l’autorizzazione skills dell’agente |
Sì. L’agente carica una skill con lo strumento skill. |
Sì. Il prompt di sistema elenca ogni skill autorizzata; l’agente legge il file. |
Strumenti Beeuni: web_search, image_search, scrape_webpage, memory, show. Tutti e cinque se in beeuni.yaml non è presente la chiave tools:; se è presente, quelli indicati come beeuni:<name> |
Sì | Sì |
Strumenti di progetto (tools: in beeuni.yaml) |
Sì | Sì |
Release di configurazione, config.release.v1 |
Sì | Sì |
Compattare (riepilogare) la conversazione, su richiesta e automaticamente quando si avvicina alla finestra di contesto del modello, session.compact |
Sì | Sì. Una richiesta al modello che supera la finestra compatta la conversazione e viene ritentata una volta. |
Comandi slash del progetto, session.commands |
Sì, da commands/ nella directory di configurazione di harness standard. |
Sì, dai modelli di prompt in prompts/ nella directory di configurazione di harness sperimentale e nei pacchetti harness sperimentale. harness sperimentale non legge commands/ di harness standard. |
| Terminale nella sandbox (PTY) | Sì | Sì |
Strumenti bash, read, write, edit, glob, grep; segreti nella shell; CLI beeuni |
Sì | Sì |
Gli strumenti Beeuni e gli strumenti di progetto sono indipendenti dall’harness: il daemon della sandbox esegue un modulo per ogni strumento, per entrambi gli harness, con gli stessi nomi, argomenti e output. harness sperimentale li chiama nel processo del daemon; harness standard li chiama tramite un plugin scritto dal daemon. Entrambi gli harness ricevono lo stesso elenco: uno strumento Beeuni non incluso nella chiave tools: del progetto non è disponibile in nessuno dei due. Un progetto che conserva copie degli strumenti Beeuni in harnesses/opencode/tools/ mantiene le proprie copie in harness standard finché non le elimina.
Gli strumenti web seguono le chiavi di autorizzazione websearch (web_search, image_search) e webfetch (scrape_webpage) in entrambi gli harness. In harness standard questi strumenti non possono chiedere: una regola ask li nega. In harness sperimentale una regola ask genera una richiesta di autorizzazione. In harness sperimentale, un comando memory che modifica un file segue edit e view segue read; in harness standard lo strumento è regolato solo da una regola memory.
AGENTS.md su harness sperimentale
harness sperimentale inserisce AGENTS.md del progetto nella radice del prompt di sistema come un’unica sezione, <project_instructions path="AGENTS.md">, dopo il prompt dell’agente. Se la radice non contiene AGENTS.md, usa CLAUDE.md, come in harness standard. harness sperimentale non legge alcun AGENTS.md in una sottodirectory o directory genitrice.
- Origine. Con le release di configurazione disattivate, harness sperimentale legge
/workspace/AGENTS.md. Quando sono attive, harness sperimentale legge la copia nella release e non quella in/workspace: una modifica in/workspaceraggiunge la sessione dopo l’unione nel ramo di base. Se sono attive e non c’è una release disponibile (config.source: image-default), harness sperimentale non legge alcunAGENTS.md, così come non legge alcuna skill di progetto. - Quando. harness sperimentale legge il file all’avvio del runtime, quando la configurazione viene ricaricata (una nuova release, un push di
/beeuni/env) e dopo un aggiornamento del repository. Non lo legge prima di ogni turno. Una nuova release diventa disponibile al turno successivo senza riavvio; un turno già in corso mantiene il file precedente. - Esclusioni. Un file vuoto, un file che non è un file regolare e un collegamento simbolico che rimanda al di fuori del repository non aggiungono nulla. Gli ultimi due casi generano un avviso nel log del daemon.
- Verifica.
harness.details.agentsMdnella rispostaGET /beeuni/healthdel daemon indica il file caricato da harness sperimentale:source(releaseoworkspace),path,bytesesha(i primi 12 caratteri esadecimali del suo sha256). Valenullquando harness sperimentale non ha caricato alcun file.
Funzionalità disponibili oggi solo in harness standard
| Funzionalità | Capacità | harness standard | harness sperimentale |
|---|---|---|---|
| Tornare a un messaggio e ripristinarlo. Modifica e nuovo invio usa il riavvolgimento. | session.rewind |
Sì | No |
Server MCP (mcp in opencode.jsonc) |
session.mcp |
Sì | Nessun client MCP. I connettori funzionano su entrambi gli harness tramite la CLI beeuni connectors. |
Elenco delle attività (strumento todowrite) e scheda del piano |
session.todo |
Sì | No. La scheda del piano rimane vuota. |
Collegare il client terminale dell’harness (beeuni connect, TUI Alt+o) |
session.attach |
Sì | No. Vedi TUI. |
Documento di configurazione runtime (/global/config) |
session.config |
Sì | No. Agenti e modelli provengono dal progetto in entrambi gli harness. |
| Creare un fork di una sessione a un messaggio | session.fork |
Sì | No |
| Eseguire un comando shell come turno | session.shell |
Sì | No |
| Provider di modelli senza il gateway LLM | — | Sì | No. harness sperimentale richiede llm_gateway attivo. |
Una sessione harness sperimentale risponde a una richiesta per una funzionalità che non offre con 501 feature_not_supported, oppure con 404 per un documento che non ha (/global/config). Non ignora la richiesta.
File di configurazione degli harness
Ogni harness ha una directory dedicata ai file letti solo da quell’harness.
| harness standard | harness sperimentale | |
|---|---|---|
| Directory | harnesses/opencode/, oppure opencode.config_dir |
harnesses/pi/, oppure pi.config_dir |
| Directory legacy | .beeuni/opencode/ |
.beeuni/pi/ |
| Contenuti | opencode.jsonc, plugins/, tools/, commands/ |
settings.json, extensions/, skills/, prompts/ |
| Estensioni | Plugin e strumenti esclusivi di harness standard in quella directory | Pacchetti harness sperimentale in harnesses.pi.packages e file di estensione in extensions/ |
Una sessione harness sperimentale non legge opencode.jsonc, plugins/, tools/ o commands/. Una sessione harness standard non legge la directory di harness sperimentale. Uno strumento necessario a entrambi gli harness è uno strumento di progetto, dichiarato in beeuni.yaml, non un file presente in una delle due directory.
I pacchetti harness sperimentale provengono da packages. Un pacchetto può aggiungere strumenti non disponibili in harness sperimentale, ad esempio un adattatore MCP o uno strumento per le attività. Beeuni carica il pacchetto, ma non verifica i pacchetti di terze parti.