---
title: "ハーネス"
description: "1つのセッションでは、標準ハーネス または実験的ハーネスのいずれか1つのエージェントハーネスが実行されます。このページでは、プロジェクトでの選択方法と、それぞれがサポートする機能を説明します。"
---

ハーネスは、セッションのサンドボックス内で動作するエージェントランタイムです。モデルの
ループを実行し、ツールを呼び出し、トランスクリプトを生成します。Beeuni には2つあります。
**標準ハーネス**（デフォルト）と **実験的ハーネス** です。1つのセッションで実行されるのは必ず1つだけです。

どちらのハーネスも同じプロジェクトを読み取ります。`beeuni.yaml`、`agents/` のエージェントファイル、
`skills/` のスキル、ルートの `AGENTS.md`、および `memory/` です。
クライアント（Web、CLI、TUI、モバイル、SDK）は、同じセッション API を通じて両方を読み取ります。
違いは、以下の [マトリックス](#what-each-harness-supports) と、各ハーネスが独自の設定のために読み取るファイルにあります。

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

## セッションがハーネスを選択する方法

Beeuni は、セッションの開始、再起動、または再開時に判断します。実行中のセッションは、その時点までハーネスを維持します。

| ルール（上から順に） | ハーネス |
| --- | --- |
| プロジェクトの `llm_gateway` フラグがオフ |標準ハーネス|
| プロジェクトの `pi_harness` フラグがオン |実験的ハーネス|
| `beeuni.yaml` が `runtime: pi` を設定 |実験的ハーネス|
| その他 |標準ハーネス|

-実験的ハーネスは Beeuni LLM ゲートウェイ経由でのみモデルを呼び出します。`llm_gateway` がオフのプロジェクトは、フラグやマニフェストの記述にかかわらず標準ハーネスを起動します。[Models](/docs/ja/project/models) を参照してください。
- `runtime` は `beeuni_version: 2` マニフェストキーです。レガシーの `beeuni.toml` プロジェクトでは設定できません。[マニフェストリファレンス](/docs/ja/project/manifest) を参照してください。
- `pi_harness` はプロジェクトごとの機能フラグで、デフォルトではオフです。[機能フラグ](/docs/ja/feature-flags) を参照してください。

セッションで実行されているハーネスを確認するには、サンドボックスデーモンの `GET /beeuni/health` の回答にある `harness.id` を読み取ります。値は `opencode` または `pi` です。

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

## 各ハーネスがサポートする機能

ハーネスは、`GET /beeuni/health` の `capabilities` 配列に、提供するオプションのセッション機能を列挙します。クライアントは、セッションの `capabilities` に ID がない場合、そのコントロールを非表示にします。SDK での確認は `runtimeSupports` です。

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

### 両方のハーネス

| 機能 |標準ハーネス|実験的ハーネス|
| --- | --- | --- |
| チャットターン、ストリーミング、停止 | はい | はい |
| エージェント `.md`：prompt、`model`、`variant`、`mode`、`permission`、`temperature`、`top_p`、`steps` | はい | はい。実験的ハーネス は `options`（プロバイダーオプション）を適用しません。 |
| エージェントごとの [ツールアクセス](/docs/ja/project/tools#who-may-use-which-tool)（`beeuni.yaml` 内の `agents.<name>.tools`：`all`、`none`、リスト、`exclude`） | はい | はい |
| エージェントごとの `permission` ルールと権限リクエスト | はい | はい |
| 質問（`question` ツール） | はい | はい |
| プロジェクトのルート `AGENTS.md` ルールファイル。ルートに `AGENTS.md` がない場合は `CLAUDE.md` | はい。標準ハーネス は `/workspace` の親ディレクトリ内のファイルも読み取り、設定リリースの実行中は `/workspace` も読み取ります。 | はい、ルートファイルのみ。これはセッションおよび各サブエージェントのシステムプロンプトの一部です。[設定リリースを有効にした場合](#agentsmd-on-pi)、実験的ハーネス はリリースのコピーを読み取ります。 |
| サブエージェント（`task` ツール）、`session.subagents` | はい | はい：`general`、`explore`（読み取り専用）、および `mode: subagent` または `all` を持つ各プロジェクトエージェント。サブエージェントは別のサブエージェントを開始できません。 |
| エージェントの `skills` 付与を伴うスキル（`skills/` と管理対象の `beeuni-*` スキル） | はい。エージェントは `skill` ツールでスキルを読み込みます。 | はい。システムプロンプトに付与された各スキルが列挙され、エージェントがファイルを読み取ります。 |
| [Beeuni ツール](/docs/ja/project/tools#beeuni-tools-in-beeuniyaml)：`web_search`、`image_search`、`scrape_webpage`、`memory`、`show`。`beeuni.yaml` に `tools:` キーがない場合は5つすべて、ある場合は `beeuni:<name>` として列挙されたもの | はい | はい |
| [プロジェクトツール](/docs/ja/project/tools)（`beeuni.yaml` 内の `tools:`） | はい | はい |
| [設定リリース](/docs/ja/work/runtime#config-convergence)、`config.release.v1` | はい | はい |
| 会話をオンデマンドで、またモデルのコンテキストウィンドウ付近で自動的にコンパクト（要約）する `session.compact` | はい | はい。ウィンドウを超過したモデルリクエストはコンパクト化され、1回だけ再試行されます。 |
| プロジェクトのスラッシュコマンド、`session.commands` | はい。標準ハーネス 設定ディレクトリの `commands/` から。 | はい。実験的ハーネス 設定ディレクトリの `prompts/` と実験的ハーネスパッケージ内のプロンプトテンプレートから。実験的ハーネス は標準ハーネスの `commands/` を読み取りません。 |
| サンドボックス内のターミナル（PTY） | はい | はい |
| `bash`、`read`、`write`、`edit`、`glob`、`grep` ツール、シェル内の [シークレット](/docs/ja/project/secrets)、`beeuni` CLI | はい | はい |

Beeuni ツールとプロジェクトツールは [ハーネス中立](/docs/ja/project/tools) です。サンドボックスデーモンは両方のハーネスに対して、ツールごとに1つのモジュールを実行し、同じ名前、引数、出力を提供します。実験的ハーネス はデーモンのプロセス内で呼び出し、標準ハーネス はデーモンが書き込むプラグイン経由で呼び出します。両方のハーネスが同じリストを取得します。プロジェクトの `tools:` キーに列挙されていない Beeuni ツールは、どちらでも使用できません。`harnesses/opencode/tools/` に Beeuni ツールのコピーが残っているプロジェクトでは、削除するまで標準ハーネス上でそのコピーが有効です。

Web ツールは、両方のハーネスで `websearch`（`web_search`、`image_search`）および `webfetch`（`scrape_webpage`）権限キーに従います。標準ハーネス では、`ask` ルールによって拒否されるため、これらのツールは確認を求められません。実験的ハーネス では、`ask` ルールによって権限リクエストが発生します。実験的ハーネス でファイルを変更する `memory` コマンドは `edit` に従い、`view` は `read` に従います。標準ハーネス では `memory` ルールのみがツールを制御します。

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

###実験的ハーネスの `AGENTS.md`

実験的ハーネス はプロジェクトのルート `AGENTS.md` を、`<project_instructions path="AGENTS.md">` という1つのセクションとして、エージェントのプロンプトの後にシステムプロンプトへ追加します。`AGENTS.md` のないルートでは、標準ハーネス と同様に代わりに `CLAUDE.md` が使用されます。実験的ハーネス はサブディレクトリや親ディレクトリの `AGENTS.md` を読み取りません。

- **ソース。** [設定リリース](/docs/ja/work/runtime#config-convergence) がオフの場合、実験的ハーネス は `/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` です。

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

### 現時点で標準ハーネスのみ

| 機能 | Capability |標準ハーネス|実験的ハーネス|
| --- | --- | --- | --- |
| メッセージまで巻き戻して復元する。編集して再送する場合は巻き戻しを使用します。 | `session.rewind` | はい | いいえ |
| MCP サーバー（`opencode.jsonc` 内の `mcp`） | `session.mcp` | はい | いいえ。MCP クライアントなし。[コネクター](/docs/ja/connect/connectors) は `beeuni connectors` CLI 経由で両方のハーネスで動作します。 |
| Todo リスト（`todowrite` ツール）とプランカード | `session.todo` | はい | いいえ。プランカードは空のままです。 |
| ハーネス独自のターミナルクライアント（`beeuni connect`、TUI `Alt+o`）を接続する | `session.attach` | はい | いいえ。[TUI](/docs/ja/cli#sessions) を参照してください。 |
| ランタイム設定ドキュメント（`/global/config`） | `session.config` | はい | いいえ。両方ともエージェントとモデルはプロジェクトから取得します。 |
| メッセージ時点でセッションをフォークする | `session.fork` | はい | いいえ |
| ターンとして実行するシェルコマンド | `session.shell` | はい | いいえ |
| LLM ゲートウェイを使用しないモデルプロバイダー | — | はい | いいえ。実験的ハーネス では `llm_gateway` をオンにする必要があります。 |

実験的ハーネス セッションは、提供していない機能のリクエストに対して `501 feature_not_supported` で応答し、存在しないドキュメントには `404` で応答します（`/global/config`）。リクエストを無視することはありません。

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

## ハーネス設定ファイル

各ハーネスには、そのハーネスだけが読み取るファイル用のディレクトリが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` 内の [実験的ハーネス パッケージ](/docs/ja/project/manifest#harnesses) と `extensions/` 内の拡張ファイル |

実験的ハーネス セッションは `opencode.jsonc`、`plugins/`、`tools/`、`commands/` を読み取りません。標準ハーネス セッションは実験的ハーネスディレクトリを読み取りません。両方のハーネスに必要なツールは [プロジェクトツール](/docs/ja/project/tools) であり、`beeuni.yaml` で宣言します。どちらのディレクトリ内のファイルでもありません。

実験的ハーネス パッケージは packages から取得します。パッケージは、MCP アダプターや Todo ツールなど、実験的ハーネス にないツールを追加できます。Beeuni はパッケージを読み込みますが、サードパーティ製パッケージをテストすることはありません。
