ハーネス
1つのセッションでは、標準ハーネス または実験的ハーネスのいずれか1つのエージェントハーネスが実行されます。このページでは、プロジェクトでの選択方法と、それぞれがサポートする機能を説明します。
ハーネスは、セッションのサンドボックス内で動作するエージェントランタイムです。モデルの ループを実行し、ツールを呼び出し、トランスクリプトを生成します。Beeuni には2つあります。 標準ハーネス(デフォルト)と 実験的ハーネス です。1つのセッションで実行されるのは必ず1つだけです。
どちらのハーネスも同じプロジェクトを読み取ります。beeuni.yaml、agents/ のエージェントファイル、
skills/ のスキル、ルートの AGENTS.md、および memory/ です。
クライアント(Web、CLI、TUI、モバイル、SDK)は、同じセッション API を通じて両方を読み取ります。
違いは、以下の マトリックス と、各ハーネスが独自の設定のために読み取るファイルにあります。
セッションがハーネスを選択する方法
Beeuni は、セッションの開始、再起動、または再開時に判断します。実行中のセッションは、その時点までハーネスを維持します。
| ルール(上から順に) | ハーネス |
|---|---|
プロジェクトの llm_gateway フラグがオフ |
標準ハーネス |
プロジェクトの pi_harness フラグがオン |
実験的ハーネス |
beeuni.yaml が runtime: pi を設定 |
実験的ハーネス |
| その他 | 標準ハーネス |
-実験的ハーネスは Beeuni LLM ゲートウェイ経由でのみモデルを呼び出します。llm_gateway がオフのプロジェクトは、フラグやマニフェストの記述にかかわらず標準ハーネスを起動します。Models を参照してください。
runtimeはbeeuni_version: 2マニフェストキーです。レガシーのbeeuni.tomlプロジェクトでは設定できません。マニフェストリファレンス を参照してください。pi_harnessはプロジェクトごとの機能フラグで、デフォルトではオフです。機能フラグ を参照してください。
セッションで実行されているハーネスを確認するには、サンドボックスデーモンの GET /beeuni/health の回答にある harness.id を読み取ります。値は opencode または pi です。
各ハーネスがサポートする機能
ハーネスは、GET /beeuni/health の capabilities 配列に、提供するオプションのセッション機能を列挙します。クライアントは、セッションの capabilities に ID がない場合、そのコントロールを非表示にします。SDK での確認は runtimeSupports です。
両方のハーネス
| 機能 | 標準ハーネス | 実験的ハーネス |
|---|---|---|
| チャットターン、ストリーミング、停止 | はい | はい |
エージェント .md:prompt、model、variant、mode、permission、temperature、top_p、steps |
はい | はい。実験的ハーネス は options(プロバイダーオプション)を適用しません。 |
エージェントごとの ツールアクセス(beeuni.yaml 内の agents.<name>.tools:all、none、リスト、exclude) |
はい | はい |
エージェントごとの permission ルールと権限リクエスト |
はい | はい |
質問(question ツール) |
はい | はい |
プロジェクトのルート AGENTS.md ルールファイル。ルートに AGENTS.md がない場合は CLAUDE.md |
はい。標準ハーネス は /workspace の親ディレクトリ内のファイルも読み取り、設定リリースの実行中は /workspace も読み取ります。 |
はい、ルートファイルのみ。これはセッションおよび各サブエージェントのシステムプロンプトの一部です。設定リリースを有効にした場合、実験的ハーネス はリリースのコピーを読み取ります。 |
サブエージェント(task ツール)、session.subagents |
はい | はい:general、explore(読み取り専用)、および mode: subagent または all を持つ各プロジェクトエージェント。サブエージェントは別のサブエージェントを開始できません。 |
エージェントの skills 付与を伴うスキル(skills/ と管理対象の beeuni-* スキル) |
はい。エージェントは skill ツールでスキルを読み込みます。 |
はい。システムプロンプトに付与された各スキルが列挙され、エージェントがファイルを読み取ります。 |
Beeuni ツール:web_search、image_search、scrape_webpage、memory、show。beeuni.yaml に tools: キーがない場合は5つすべて、ある場合は beeuni:<name> として列挙されたもの |
はい | はい |
プロジェクトツール(beeuni.yaml 内の tools:) |
はい | はい |
設定リリース、config.release.v1 |
はい | はい |
会話をオンデマンドで、またモデルのコンテキストウィンドウ付近で自動的にコンパクト(要約)する session.compact |
はい | はい。ウィンドウを超過したモデルリクエストはコンパクト化され、1回だけ再試行されます。 |
プロジェクトのスラッシュコマンド、session.commands |
はい。標準ハーネス 設定ディレクトリの commands/ から。 |
はい。実験的ハーネス 設定ディレクトリの prompts/ と実験的ハーネスパッケージ内のプロンプトテンプレートから。実験的ハーネス は標準ハーネスの commands/ を読み取りません。 |
| サンドボックス内のターミナル(PTY) | はい | はい |
bash、read、write、edit、glob、grep ツール、シェル内の シークレット、beeuni CLI |
はい | はい |
Beeuni ツールとプロジェクトツールは ハーネス中立 です。サンドボックスデーモンは両方のハーネスに対して、ツールごとに1つのモジュールを実行し、同じ名前、引数、出力を提供します。実験的ハーネス はデーモンのプロセス内で呼び出し、標準ハーネス はデーモンが書き込むプラグイン経由で呼び出します。両方のハーネスが同じリストを取得します。プロジェクトの tools: キーに列挙されていない Beeuni ツールは、どちらでも使用できません。harnesses/opencode/tools/ に Beeuni ツールのコピーが残っているプロジェクトでは、削除するまで標準ハーネス上でそのコピーが有効です。
Web ツールは、両方のハーネスで websearch(web_search、image_search)および webfetch(scrape_webpage)権限キーに従います。標準ハーネス では、ask ルールによって拒否されるため、これらのツールは確認を求められません。実験的ハーネス では、ask ルールによって権限リクエストが発生します。実験的ハーネス でファイルを変更する memory コマンドは edit に従い、view は read に従います。標準ハーネス では memory ルールのみがツールを制御します。
###実験的ハーネスの AGENTS.md
実験的ハーネス はプロジェクトのルート AGENTS.md を、<project_instructions path="AGENTS.md"> という1つのセクションとして、エージェントのプロンプトの後にシステムプロンプトへ追加します。AGENTS.md のないルートでは、標準ハーネス と同様に代わりに CLAUDE.md が使用されます。実験的ハーネス はサブディレクトリや親ディレクトリの AGENTS.md を読み取りません。
- ソース。 設定リリース がオフの場合、実験的ハーネス は
/workspace/AGENTS.mdを読み取ります。オンの場合、リリース内のコピーを読み取り、/workspaceにあるコピーは決して読み取りません。/workspaceの編集は、ベースブランチにマージされてからセッションに反映されます。オンで、提供するリリースがない場合(config.source: image-default)、実験的ハーネス はAGENTS.mdを読み取りません。プロジェクトスキルを読み取らない場合と同じです。 - **タイミング。**実験的ハーネスはランタイム起動時、設定の再読み込み時(新しいリリース、
/beeuni/envのプッシュ)、およびリポジトリの更新後にファイルを読み取ります。各ターンの前には読み取りません。新しいリリースは再起動なしで次のターンに反映されます。実行中のターンでは古いファイルが維持されます。 - スキップ。 空のファイル、通常のファイルではないファイル、リポジトリ外を指すシンボリックリンクは何も追加しません。後者2つの場合、デーモンログに警告が1件書き込まれます。
- 確認。 デーモンの
GET /beeuni/healthにあるharness.details.agentsMdは、実験的ハーネス が読み込んだファイルを示します。source(releaseまたはworkspace)、path、bytes、およびsha(sha256 の先頭12文字)です。実験的ハーネス が何も読み込まなかった場合はnullです。
現時点で標準ハーネスのみ
| 機能 | Capability | 標準ハーネス | 実験的ハーネス |
|---|---|---|---|
| メッセージまで巻き戻して復元する。編集して再送する場合は巻き戻しを使用します。 | session.rewind |
はい | いいえ |
MCP サーバー(opencode.jsonc 内の mcp) |
session.mcp |
はい | いいえ。MCP クライアントなし。コネクター は beeuni connectors CLI 経由で両方のハーネスで動作します。 |
Todo リスト(todowrite ツール)とプランカード |
session.todo |
はい | いいえ。プランカードは空のままです。 |
ハーネス独自のターミナルクライアント(beeuni connect、TUI Alt+o)を接続する |
session.attach |
はい | いいえ。TUI を参照してください。 |
ランタイム設定ドキュメント(/global/config) |
session.config |
はい | いいえ。両方ともエージェントとモデルはプロジェクトから取得します。 |
| メッセージ時点でセッションをフォークする | session.fork |
はい | いいえ |
| ターンとして実行するシェルコマンド | session.shell |
はい | いいえ |
| LLM ゲートウェイを使用しないモデルプロバイダー | — | はい | いいえ。実験的ハーネス では llm_gateway をオンにする必要があります。 |
実験的ハーネス セッションは、提供していない機能のリクエストに対して 501 feature_not_supported で応答し、存在しないドキュメントには 404 で応答します(/global/config)。リクエストを無視することはありません。
ハーネス設定ファイル
各ハーネスには、そのハーネスだけが読み取るファイル用のディレクトリが1つあります。
| 標準ハーネス | 実験的ハーネス | |
|---|---|---|
| ディレクトリ | harnesses/opencode/、または opencode.config_dir |
harnesses/pi/、または pi.config_dir |
| レガシーディレクトリ | .beeuni/opencode/ |
.beeuni/pi/ |
| 内容 | opencode.jsonc、plugins/、tools/、commands/ |
settings.json、extensions/、skills/、prompts/ |
| 拡張機能 | そのディレクトリ内のプラグインと標準ハーネス専用ツール | harnesses.pi.packages 内の 実験的ハーネス パッケージ と extensions/ 内の拡張ファイル |
実験的ハーネス セッションは opencode.jsonc、plugins/、tools/、commands/ を読み取りません。標準ハーネス セッションは実験的ハーネスディレクトリを読み取りません。両方のハーネスに必要なツールは プロジェクトツール であり、beeuni.yaml で宣言します。どちらのディレクトリ内のファイルでもありません。
実験的ハーネス パッケージは packages から取得します。パッケージは、MCP アダプターや Todo ツールなど、実験的ハーネス にないツールを追加できます。Beeuni はパッケージを読み込みますが、サードパーティ製パッケージをテストすることはありません。