Distri: A Composable Agent Framework について
DistriはRust製のオープンソースAIエージェントフレームワークです。CLI、API、Reactアプリでエージェントを実行・構成でき、Markdownでの定義、サブエージェント、スキル、トレース、A2A呼び出しに対応します。
主な機能
- 01Markdownによるエージェント定義
- 02CLI、API、Reactでの実行
- 03組み込み・HTTP・外部・MCPツール
- 04スキル読み込みとサブエージェントへの委任
- 05サンドボックスコンテナでのリモート実行
- 06A2Aプロトコルと呼び出しトレース
活用シーン
- 01CLIから単一のエージェントタスクを実行
- 02Reactアプリにエージェントを組み込む
- 03専門のサブエージェントへ作業を委任
- 04エージェント、LLM、ツールの呼び出しを追跡
MCP 対応
エージェントの実行フローにMCPツールを組み込めます。外部のクライアント側ツールにも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Distri
Distri は Rust で構築されたオープンソースの AI エージェントフレームワークです。エージェントを Markdown で定義し、製品の関数をツールとして接続して、CLI、API サーバー、または React UI に組み込んで実行できます。
ドキュメント · ウェブサイト · Distri Cloud

Distri を選ぶ理由
- Markdown でエージェントを定義 — 動作、ツール、モデル設定を、TOML フロントマター付きの単一の
.mdファイルで定義できます - 組み込みのツールシステム — 組み込み機能(検索、シェル、ブラウザー)、動的な HTTP ツール、外部のクライアント側ツール、MCP に対応しています
- スキル — エージェントが実行時に
load_skillを使って読み込む、必要に応じたナレッジドキュメントです。コンテキストの圧縮後も自動で再注入されます - サブエージェント — エージェントが、分離されたコンテキストとトークン予算を持つ専門の子エージェントにタスクを委任します
- リモート実行 — 信頼できないコードやリソースの分離のために、サンドボックス化されたコンテナでエージェントを実行できます
- React SDK — ストリーミング、ツールレンダラー、音声、開発者モードに対応した
<Chat />コンポーネントをすぐに利用できます - A2A 互換 — エージェントの検出と呼び出しのための A2A プロトコルを実装しています
- セルフホスト可能 — SQLite を使って独自のインフラストラクチャで実行できます。外部依存関係は必要ありません。
インストール
# Install script (macOS / Linux)
curl -fsSL https://distri.dev/install.sh | sh
# Homebrew
brew tap distrihub/distri && brew install distri
# Verify
distri --version
その他のプラットフォーム
直接ダウンロード:
# darwin-arm64 | darwin-x86_64 | linux-arm64 | linux-x86_64
TARGET=darwin-arm64
curl -L "https://github.com/distrihub/distri/releases/latest/download/distri-${TARGET}.tar.gz" -o distri.tar.gz
sudo tar -xzf distri.tar.gz -C /usr/local/bin distri
Windows(PowerShell):
Invoke-WebRequest https://github.com/distrihub/distri/releases/latest/download/distri-windows-x86_64.zip -OutFile distri.zip
Expand-Archive distri.zip -DestinationPath $Env:LOCALAPPDATA\distri -Force
$Env:Path += ";$Env:LOCALAPPDATA\distri"
実行
インストール後、サーバーとウェブ UI を起動します。
distri serve
初回起動時に、対応する distri-server バイナリと UI バンドルが
github.com/distrihub/distri/releases
から ~/.distri/ にダウンロードされます。ブラウザーが自動的に起動し、http://localhost:7777 を開きます。
serve オプション
| フラグ | 動作 |
|---|---|
distri serve | デフォルト:distri-server を解決して起動し、UI を提供してブラウザーを開きます |
--port 8080 | ポートを指定します(デフォルトは 7777) |
--no-ui | API のみのモード(ウェブインターフェースなし) |
--no-browser | ブラウザーを自動で開きません |
--server-version 0.5.3 | 特定のサーバーバージョンを固定します |
--ui-version 0.5.7 | 特定の UI バージョンを固定します |
ライフサイクルコマンド
| コマンド | 動作 |
|---|---|
distri serve | distri-server を解決して起動し、UI を提供します |
distri update | 互換性のある範囲内で最新のサーバーと UI を取得します |
distri update --pre | プレリリースバージョンを許可します |
distri version | インストール済みの CLI/サーバー/UI のバージョンを表示します |
distri uninstall | ~/.distri/{bin, ui, cache} を消去します |
クイックスタート
組み込みエージェントを実行する
distri run search --task "What are the top programming languages in 2026?"
独自のエージェントを定義する
agents/my_agent.md を作成します。
---
name = "my_agent"
description = "A helpful assistant with web search"
max_iterations = 15
[tools]
builtin = ["final", "search"]
---
# My Agent
You are a helpful assistant. Use the search tool to find current information.
{{task}}
実行する
# Interactive chat
distri tui my_agent
# Single task
distri run --agent my_agent --task "Find the latest SpaceX launch date"
# Start as API server
distri serve --port 8080
Distri Cloud にプッシュする
distri login
distri agents push agents/my_agent.md
組み込みエージェント
| エージェント | 目的 | 例 |
|---|---|---|
| search | Web 検索とスクレイピング | distri run search --task "latest AI news" |
| fast_search | 単一クエリの高速な検索 | distri run fast_search --task "population of Tokyo" |
| web | ブラウザーの自動化とスクレイピング | distri run web --task "scrape HN top 5 stories" |
| code | サンドボックスでのコード実行 | distri run code --task "sum of primes below 1000" |
| deepresearch | サブエージェントに委任する多段階の調査 | distri run deepresearch --task "state of quantum computing" |
| distri | マスターオーケストレーター | distri run distri --task "find and calculate..." |
| coder | フル機能のコーディングエージェント(シェル、Web、ファイル) | distri run coder --task "build a REST API" |
| agent_designer | 新しいエージェント定義を設計 | distri run agent_designer --task "design a stock alert agent" |
検索、ブラウザー、シェルのツールには
BROWSR_BASE_URLとBROWSR_API_KEYが必要です。Distri Cloud では自動的に設定されます。
エージェント定義の形式
エージェントは TOML フロントマターを含む Markdown ファイルです。
---
name = "my_agent"
description = "What this agent does"
max_iterations = 25
context_size = 80000
sub_agents = ["search", "code"] # delegate to other agents
[tools]
builtin = ["final", "search", "load_skill"]
external = ["Read", "Write", "Edit"] # client-side tools
[[tools.dynamic]]
name = "my_api"
type = "http"
description = "Call my API"
config = { base_url = "$API_URL", headers = { "Authorization" = "Bearer $TOKEN" } }
[[available_skills]]
id = "*"
name = "*"
---
# System Prompt
Your instructions here. Supports Handlebars templates:
- {{task}} — the user's message
- {{> skills}} — available skills listing
- {{> connections}} — available connections
スキーマの詳細については、エージェント定義のドキュメントをご覧ください。
スキル
スキルは、エージェントが必要に応じて読み込む再利用可能な指示ドキュメントです。
---
name = "data_pipeline"
description = "How to run the data transformation pipeline"
tags = ["data", "etl"]
context = "inline"
---
# Data Pipeline
## Steps
1. Fetch data with `my_api` tool...
2. Transform using Python...
# Push skills
distri skills push skills/data_pipeline.md
distri skills list
エージェントは実行時に load_skill("data_pipeline") を呼び出します。モードは 2 種類あります。
- Inline(デフォルト)— 内容を会話に挿入します。コンテキストの圧縮後も保持されます
- Fork — スキルを指示として持つ、分離された子エージェントを起動します
React SDK(DistriJS)
エージェントを React アプリに組み込みます。
npm install @distri/react
import { useAgent, Chat } from '@distri/react';
function App() {
const { agent } = useAgent({ agentIdOrDef: 'my_agent' });
return <Chat agent={agent} threadId="conversation-1" />;
}
機能:SSE ストリーミング、カスタムレンダラーによるツール実行、音声入出力、開発者モード、ブラウザー側のファイルツール(IndexedDB を利用した Read/Write/Edit/Glob/Grep)。
統合ガイドの詳細については、DistriJS のドキュメントをご覧ください。
CLI リファレンス
サーバーと UI
distri serve # Start server + UI on port 7777
distri serve --port 8080 # Custom port
distri serve --no-ui # API-only
distri update # Pull latest server + UI
distri version # Show versions
distri uninstall # Clean ~/.distri/
エージェントとスキルの管理
distri # Interactive TUI
distri run --task "..." [--agent A] # Run a task
distri run --task "..." --remote # Run in sandboxed container
distri agents list / push / delete # Manage agents
distri skills list [-a] / push # Manage skills
デバッグとツール
distri traces list / show ID [-v] # Debug with trace viewer
distri tools list / invoke # Inspect and test tools
接続と設定
distri connections list / token # OAuth connections
distri secrets list / set / delete # Manage secrets
distri workflows run / push # DAG workflows
distri login # Auth with Distri Cloud
distri profile list / use / config # Multi-profile management
呼び出しとトレース
Distri には 2 つの呼び出し API があり、どちらも Traces ビュー/distri traces list で完全にトレースされます(エージェント → ステップ → LLM → ツール、トークン数/コスト/レイテンシー、プロベナンスを含む)。
| API | エンドポイント | 機能 |
|---|---|---|
execute | POST /v1/agents/{id}(A2A message/send | message/stream) | エージェントを完全に実行 |
llm_execute | POST /v1/llm/execute | 単一の LLM 呼び出し(大量の評価/抽出に最適) |
// JS (@distri/core)
const agent = await Agent.create('scoring_agent', client)
await agent.invoke({ /* messages */, contextId, tags: { team: 'growth' } }) // execute
await client.llm(messages, tools, { agent_id: 'scoring_agent', thread_id, title }) // llm_execute
// Rust (distri client)
run_agent(&client, RunOptions { agent: Some("scoring_agent".into()), task, thread_id,
tags: Some(tags), trace_context: None, ..Default::default() }, cb).await?; // execute
client.llm_execute(LlmExecuteOptions::new(LLmContext { thread_id, label, messages, ..Default::default() })
.with_agent_id("scoring_agent".into())).await?; // llm_execute
distri run --agent scoring_agent --task "grade: 2+2=4" --tag team=growth # CLI
複数の呼び出しを 1 つのトレースにまとめる: 関連する呼び出しに同じスレッド/コンテキスト IDを指定します(execute では contextId、llm_execute では thread_id)。Distri はその ID からトレース ID を導出するため、呼び出しが 1 つのトレースにまとめられます(例:1 回の評価実行におけるすべての評価呼び出し)。
プロセス間で伝播させるには、execute に明示的な trace_context { trace_id, parent_span_id } を渡し、呼び出し元の既存のトレースの下にエージェントのスパンをネストします。
詳細なガイドについては、**トレースとトレースコンテキスト**をご覧ください。
アーキテクチャ
distri/
├── distri-types/ # Shared type definitions
├── distri-cli/ # CLI binary
├── distri/ # Client library
├── distri-formatter/ # Output formatting
│
├── server/
│ ├── distri-core/ # Agent engine (orchestrator, loop, tools, LLM)
│ ├── distri-server/ # HTTP server (actix-web, A2A endpoints)
│ ├── distri-stores/ # Storage backends (SQLite, Postgres)
│ ├── distri-auth/ # Auth providers
│ ├── distri-parsers/ # Parsing utilities
│ └── agents/ # Built-in agent definitions (.md)
│
└── samples/ # Example applications
└── scraper/ # Web scraping agent
実行フロー
User message → AgentOrchestrator
→ Load agent definition
→ Create ExecutorContext (thread, task, run)
→ AgentLoop
→ PlanningStrategy.plan() → LLM produces plan
→ ExecutionStrategy.execute_step() per step
→ Tool calls (builtin, dynamic, external, MCP)
→ Event streaming (SSE)
→ Loop until final tool or max iterations
→ Return result
開発
# Build
cargo build
# Run tests
cargo test
# Test a specific crate
cargo test -p distri-core
このリポジトリに含まれるのは Rust バックエンドのみです。TypeScript SDK(@distri/core、
@distri/react、@distri/components)は
distrihub/distrijs にあります。
サンプル
| サンプル | 種類 | 説明 |
|---|---|---|
| scraper | CLI/Rust | Web スクレイピングとデータ抽出を行うエージェント |
ライセンス
- ルートおよび共通コンポーネント:MIT License
- サーバーコンポーネント(
server/):Elastic License 2.0 — フェアコードの原則に準拠
リンク
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。