Skip to main content
エージェントは、BRICKS Buttress サーバーの設定で宣言する LLM ループです。サーバープロセス内で動作し、ローカル関数(および MCP サーバー)をツールとして使い、会話履歴をディスク上の session ファイルに保持します。 主な利用者は自動化処理です。ローカル関数や daemon が context.agents.run(...) を呼び出し、サーバーサイドのワークフローに多段階の推論を組み込みます。同じエージェントを操作・確認するための対話型 CLI も用意されています。
Agents は実験的機能です。[[agents]][agents_options] の設定キー、/agents エンドポイント、SSE イベントの構造、context.agents API は、非推奨期間を挟まずにリリース間で変更される可能性があります。サーバーは起動時にこの注意を表示します。これを前提に開発する場合は bricks-buttress のバージョンを固定し、アップグレード後は本ページを読み直してください。

エージェントを定義する

設定に [[agents]] テーブルが 1 つ以上宣言されるまで、agents は無効です。
上表にないキーは生成にそのまま渡されるため、temperaturetop_p はそのまま記述できます。 エージェント定義は初回実行時ではなく起動時に検証されます。未知の buttress/ モデル、存在しないプロンプトファイル、不正なツール名、エージェント名の重複があると、そのエージェントを黙って無視するのではなく、サーバーがエラーで停止します。

グローバルオプション

[agents_options] はすべてのエージェントに適用されます。

モデル

modelprovider/model-id 形式で、最初のスラッシュで分割されます。そのため model id 自体にスラッシュを含められます。 buttress/<repo_id> は、このサーバーがすでにホストしているモデルを指します。この id は設定済みの ggml-llm または mlx-llm [[generators]] エントリの repo_id と一致する必要があり、サーバーが起動時に検証します。通信はプロセス内のループバック経由で generator に届きます — ソケットを介さず、追加設定も不要です。[openai_compat] を有効にする必要はありません。このキーは引き続き外部 HTTP ルートのみを制御します。
それ以外のプレフィックスはホスト型プロバイダー(anthropic/…openai/…google/…)を指し、各プロバイダーの通常の環境変数(ANTHROPIC_API_KEYOPENAI_API_KEY など)で認証されます。[env] またはプロセス環境で設定してください。
OAuth によるプロバイダーログインには対応していません。ホスト型プロバイダーを使う場合は、環境に API キーが必要です。

ツール

tools にはローカル関数名を明示的に列挙します。各ツール呼び出しは通常の関数エグゼキューターを経由するため、HTTP や MCP から呼び出したときと同じ遅延リロード、スクラッチディレクトリ、プロセス追跡、meta.timeout の期限が適用されます。またモデルが参照するのは、その関数の meta.parameters の JSON Schema です。 実行を中止すると、進行中のツール呼び出しと、その呼び出しが起動したプロセスも中止されます。 列挙された関数が存在しない場合、その実行はエラーで失敗します。無人の自動化処理が、欠けている機能を勝手に迂回することはありません。

MCP サーバー

[agents.mcp_servers.<name>] で、ローカル関数に加えて MCP サーバーのツールを追加できます。各サーバーには url(Streamable HTTP)か command(stdio)のどちらか一方だけを指定します。
MCP ツールはサーバー名で修飾された名前(mcp__github__create_issue)で公開されるため、ローカル関数名と衝突しません。サーバーは、それを必要とする最初の実行時に遅延接続します。接続できないサーバーがあると、optional = true が指定されていない限りその実行は失敗します。指定されている場合、エージェントはそのツールなしで実行を続けます。

エージェントを実行する

ローカル関数から

これが主要なインターフェースです。設定済みのエージェントはすべて context.agents から利用できます。
実行は呼び出し元の関数のライフタイムと期限を引き継ぎます。context.signal — 関数の meta.timeout の満了や呼び出し元の切断 — によって実行とそのツール呼び出しが中止されます。エージェントのループは通常の関数呼び出しよりはるかに時間がかかるため、meta.timeout を引き上げるか、期限のない daemon に処理を移してください。 エージェントの進捗は、関数自身の SSE ストリームに agent イベントとしてミラーされます。そのため関数の SSE 呼び出し元は、追加の配線なしにエージェントの動作を確認できます。 サーバーに [[agents]] が 1 つも設定されていない場合、これらのメソッドはすべて例外を投げます。

HTTP 経由

実行が失敗すると AGENT_RUN_FAILEDsessionId 付きで返るため、トランスクリプトには引き続きアクセスできます。中止された実行は 499、それ以外の失敗は 500 を返します。存在しないエージェントや session は 404 NOT_FOUND を返します。 ストリーミングレスポンスが運ぶのは、スリム化されたエージェントイベントです。生成途中のアシスタントメッセージや完全なツール結果は、ストリームを圧迫するため含まれません。完全な記録が必要な場合は、sessions エンドポイントからトランスクリプトを取得してください。

CLI から

bricks-buttress agent は、実行中のサーバー上のエージェントと対話するストリーミングチャットクライアントです。サーバーと同じ設定ファイルを指定すれば、ポートとローカルトークンを自動的に見つけます。
チャットでは、テキスト・思考内容・ツール呼び出しがリアルタイムにストリーミングされます。チャット中は /exit で終了、/new で新しい session を開始、Ctrl+C で現在の実行を中止します(もう一度 Ctrl+C を押すと終了)。

実行結果

context.agents.runPOST /agents/<name>/run は、いずれも次の内容を返します。 stopReasonend_turn(エージェントが回答した)、max_turnstoken_budgetabortederror のいずれかです。end_turn 以外はすべて、回答が未完了だとみなしてください。

Sessions

すべての実行はいずれかの session に属します。sessionId を省略すると新しい session が始まり、渡すと会話を継続します。あわせて fork: true を指定すると、元の session はそのままに、親を記録した新しい session に分岐します。 session は sessions_dir 配下の JSONL ファイルで、エージェント名でスコープが分かれ、実行のストリーミングと同時に書き込まれます。そのため、中止されたりタイムアウトした実行でも、継続可能なトランスクリプトが残ります。 同じ session への実行はキューに入って順番に処理され、異なる session は並列に実行されます。 自動削除処理が、経過時間(session_max_age)と件数(session_max_count、エージェントごと)に基づいて古い session を削除します。
session はエージェントの name でスコープが決まります。エージェント名を変更すると既存の session は孤立します — ファイルはディスク上に残りますが、名前を変更したエージェントからは一覧にも表示されず、継続もできません。

セキュリティ

/agents の認証は、公開された推論エンドポイントではなく、ローカル関数のインターフェースと同じ方式です。
  • バインド済みのサーバーでは、workspace のアクセストークンが必要です。ワークスペースへのバインドを参照してください。
  • 未バインドのサーバーは、[agents_options] allow_unauthenticated = true が設定されていない限り、リモートからの呼び出しをすべて拒否します。
  • クロスサイトのブラウザーリクエストは常に拒否されます。
サーバーは起動時に、sessions_dir の隣に一時的なランタイムトークンruntime-token ファイル(パーミッション 0600)として書き出します。同一ホスト上のツール(上記の CLI など)はこれを読み取り、バインドの有無にかかわらず自動的に認証します。
allow_unauthenticated = true を設定すると、そのポートに到達できる誰もがすべてのエージェントを — ひいてはエージェントに与えたすべてのツールを — 実行できます。信頼できるネットワークでのみ使用してください。
エージェント定義は、設定ファイルや関数ファイルと同様に信頼された入力です。エージェントの安全性は、与えたローカル関数と MCP サーバーの安全性で決まります。いつ呼び出すかを決めるのはモデルであるため、エージェントには目的を果たすのに必要な最小限のツールだけを与えてください。 バインド済みのサーバーが自分自身のために workspace トークンを発行することはありません。buttress/ モデルへのループバックは内部トークンで認可され、workspace の資格情報は一切使われません。

サンプル

サーバーパッケージには config/function-samples/run-agent.ts が同梱されています。これは設定済みのエージェントを実行し、その結論・session id・ターン数・停止理由を返すローカル関数です。config/sample.toml にはコメントアウトされた [[agents]] ブロックが含まれています。その他のサンプルはローカル関数を参照してください。

次のステップ

ローカル関数

エージェントがツールとして使う関数を書きます。

設定

エージェントが動作する generator を含む、TOML の完全なリファレンス。