Haldir について
Haldirは、ツールや認証情報、予算を扱うAIエージェント向けのガバナンスレイヤーです。セッション権限、暗号化されたシークレット保管庫、改ざん検知可能な監査ログ、承認フローに加え、MCP呼び出しにポリシーを適用するプロキシを備えています。
主な機能
- 01セッション権限、支出上限、有効期限の設定
- 02AES-256-GCMによるシークレット保管
- 03検証可能な監査ログへの操作記録
- 04MCP呼び出しの中継とポリシー適用
- 05人による承認まで操作を保留
活用シーン
- 01セッションごとにエージェントの権限と支出を制限
- 02認証情報をモデルに見せずに管理
- 03エージェントのツール呼び出し履歴を確認・検証
- 04高額な支出操作に事前承認を要求
MCP 対応
Haldirは、セッション、権限、シークレット、監査、承認、コンプライアンスを扱うMCPサーバーを提供します。プロキシは上流のMCPサーバーへの呼び出しを仲介し、記録前にポリシーを適用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Haldir
AI エージェントがツールを呼び出し、資金を動かし、秘密情報を読み取るときに、権限の範囲を限定し、支出上限を設定し、暗号化された保管庫を使い、改ざんされていないことを証明できる監査ログを残します。
この一連の動作をリアルタイムで見せることが、Haldir のすべてです。誰かが監査ログの行を、データベース上で直接、気づかれないように書き換えます。すると、そのエントリーの包含証明は現在の Merkle ルートと一致しなくなり、判定が切り替わります。監視にも差分チェックにも検知されず、算術によって検知されます。ルートはログに実際に含まれる内容のハッシュであり、それより前の Signed Tree Head は、すでにあなたが制御できない場所に固定されているからです。
→ 自分で試す。 haldir serve(以下)を実行して、http://127.0.0.1:8000/demo を開いてください。自分のマシン上のインスタンスを使って、同じ改ざんデモを試せます。パッケージに含まれているため、ダウンロードもアカウント登録も不要です。
利用できる機能
- スコープ付きセッション — エージェントごとに権限と支出上限を設定でき、問題が起きたらすぐに取り消せます。
- 暗号化された保管庫 — AES-256-GCM。エージェントが秘密情報を要求しても、モデルには見えません。すべての暗号文には使用した鍵が記録されるため、秘密情報をひとつも再入力せず、ダウンタイムも発生させずに暗号化キーをローテーションできます。
- 改ざんを検知できる監査ログ — RFC 6962 Merkle ツリーにすべての呼び出しを記録し、署名付きツリーヘッドを使って、履歴を信頼するだけでなく、その真正性を証明できます。
- 人による承認 — 支出がしきい値に達したら実行を一時停止し、Webhook を受け取れます。
pip install haldir
haldir serve
これにより、このマシン上で本物の Haldir が起動します。SQLite を使用し、Docker も Postgres もアカウントも必要ありません。暗号化キーを生成し、スキーマを適用し、API キーを発行して、CLI の接続先を自身に設定するため、次のコマンドをすぐに実行できます。
$ haldir serve
Haldir is running http://127.0.0.1:8000
data: ~/.haldir
Your API key (saved to the Haldir CLI config):
hld_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Try it:
haldir overview
haldir session create --agent my-agent --scopes read
起動後は、CLI、Python SDK、MCP クライアントなど、好きなものを接続してください。または、起動したインスタンスの /docs で API リファレンスを参照できます。Postgres とコンテナを使いたくなったら、haldir init && haldir dev で環境を構築して実行できます。詳しくは SELF_HOSTING.md をご覧ください。
Claude Code、Cursor、LangChain、CrewAI、AutoGen、LlamaIndex、Vercel AI SDK に対応しています。HTTP リクエストを送信できるもの、または MCP を利用できるものであれば使えます。MIT ライセンスのため、セルフホストすることも、haldir.xyz(無料プラン、登録不要)に接続することもできます。
実際の動作を見る
Haldir の実際の見た目をご覧ください。図や仕様書ではなく、実物のスクリーンショットです。
Haldir がないと、エージェントは好きな API を呼び出し、好きなだけ支出し、見つけたシークレットにアクセスできます。監視も監査証跡もありません。Haldir があれば、すべてのアクションにスコープが設定され、支出が制限され、不変のログに記録され、シークレットがボールトの外に出ることもありません。
初めて訪れた人が目にする、3 つの要素を順に紹介します。
-
ランディングページ — ダークモード、上部に表示されるライブターミナルアニメーション、4 つの製品カード(Gate、Vault、Watch、Proxy)、セルフホストとクラウドの比較、そしてデザインパートナー枠への申し込み案内があります。1 ページで、初めて訪れた人に必要な情報がすべてわかります。
-
クラウドダッシュボード — サインイン後に表示されます。左側のサイドバーから、アカウント、クォータ、セッション、監査、Webhook、承認、コンプライアンス、設定の各ページに移動できます。アカウント画面には、テナント、プラン、リアルタイムの件数、プレフィックス別の API キーが表示されます(キーは発行後に全体が再表示されることはなく、失効させる際にデータベースのシェルを開く必要もありません)。
-
監査証跡 — これが最大の目玉です。セッション、エージェント、ツールで絞り込めます。任意の行をクリックすると、MCP 呼び出しの詳細をすべて確認できます。呼び出されたツール、アクセスした上流 API、所要時間、送信された引数、返された内容がわかります。この機能によって製品の価値がひと目でわかります。すべてのエージェントが、いつ、何をしたのかを正確に確認できます。
重要な部分にラベルを付けたダッシュボードはこちらです。
左側のサイドバーから、どこへでも移動できます。番号付きのマーカーは、実際に使う部分を示しています。テナントとプラン、リアルタイムの件数、プレフィックス別の API キーです。失効ボタンもすぐそばにあるので、エージェントのアクセスを終了するためにデータベースのシェルを開く必要はありません。
実際に試してみる
これらはすべてパッケージに含まれており、haldir serve で提供されるため、アカウントもデプロイも不要で、お使いのマシンで動作します。
→ 改ざんデモ(/demo/tamper)— 上の GIF にあるデモです。実際のログ行を書き換えて、包含証明が Merkle ルートと一致しなくなる様子をご覧ください。シミュレーションではありません。API に同梱されているものと同じ Merkle コードを使っています。
→ プレイグラウンド(/demo)— 4 つのステップで通常の流れを体験できます(キーを発行し、スコープを限定したセッションを開始し、権限を確認し、監査証跡に書き込む)。その後、3 つの方法で動作を破ろうとします。上限を超えて支出する、処理中にセッションを失効させる、失効後に操作する、という内容です。ステップ 03 で付与されていないスコープを選び、拒否と承認の両方を確認してみてください。
→ ギャラリー(/gallery)— このページのすべてのスクリーンショットをまとめて見られます。読むより見るほうがよい場合にどうぞ。
インストール不要ですぐに実行できるものをお探しですか? Python もリポジトリのクローンも不要な、単一ファイルのデモバイナリと、パッケージに同梱された 3 つのプローブ用フィクスチャがあります。実行方法、表示される内容、各プローブが検出するものは、DEMO.md に記載されています。
API のその他の情報
完全なリファレンスは、実行中のインスタンスの /docs および /openapi.json にあります。以下では、Python のクイックスタート、パフォーマンスの数値、コンプライアンス対応表を紹介します。
haldir.xyz ではホステッド版を利用できます。無料プランがあり、登録も不要です。現在利用できる方法は haldir serve です。クラウドを使わない場合にも、こちらをご利用ください。
実行方法は2通り
どちらの方法でも、同じ製品を利用できます。
| セルフホスト | クラウド(haldir.xyz) | |
|---|---|---|
| 価格 | 永久無料 | 無料プラン+有料プラン |
| ご自身で運用するもの | API+Postgres | なし |
| おすすめの用途 | 規制対象、エアギャップ環境、「データを自分で管理する必要がある」 | 「とにかく動かしたい」 |
クラウドプランは無料で利用を開始でき、サインアップも不要です。現在、デザインパートナーを5社募集しています。30日間、すべての機能を利用でき、創業者に直接連絡できます:[email protected]。
5分でセルフホスト
git clone https://github.com/ExposureGuard/haldir.git
cd haldir
cp .env.example .env
python3 -c 'import base64, os; print(base64.urlsafe_b64encode(os.urandom(32)).decode())'
# paste the output into .env as HALDIR_ENCRYPTION_KEY, then:
docker compose up -d
curl http://localhost:8000/healthz
セルフホストの詳細なガイド:SELF_HOSTING.md
クラウド(セットアップ不要)
pip install haldir
以上です。https://haldir.xyz を指定するだけで、無料プランならサインアップも不要です。
CLI
一度インストールすれば、ターミナルからプラットフォーム全体を操作できます。
$ haldir overview
Haldir tenant overview
acct_xyz123 · tier free · 2026-09-30T18:42:11+00:00
Status ● ok
API calls 4,217 / 10,000 ████████░░░░░░░░░░░░ 42.2%
Spend $ 47.30 this month
Sessions 3 active · 1/1 agents
Vault 8 secrets · 62 accesses this month
Audit 1,847 entries · 0 flagged (7d) · chain ✓
Webhooks 2 registered · 541 deliveries (24h) · 99.82% success
Approvals 1 pending
pip install haldir
haldir login # one-time; stashes API key
haldir overview --watch # top-style live dashboard
haldir status # green/yellow/red component pills
haldir ready # exits 0/1, perfect for CI
haldir audit trail --agent my-bot # the last N entries
haldir audit export --format=jsonl --out audit-2026-04.jsonl
haldir audit verify # hash chain integrity check
haldir webhooks deliveries # last 20 retry attempts
haldir migrate up # apply pending schema migrations
haldir --help で全コマンドを確認できます。詳細なリファレンスは CLI.md をご覧ください。各コマンドの機能、使用できるフラグ、--json に対応しているコマンド(すべてのコマンドが対応しているわけではありません。対応状況はリファレンスに記載されています)を説明しています。
Haldirを選ぶ理由
AI エージェントは、監視されることなく API を呼び出し、費用を使い、認証情報にアクセスしています。Haldir は、そこに欠けているレイヤーを提供します。
| Haldirがない場合 | Haldirがある場合 |
|---|---|
| エージェントが無制限にアクセスできる | 権限を設定したスコープ付きセッション |
| シークレットが平文の環境変数に保存される | AES-256-GCM で暗号化された Vault |
| 支出上限がない | セッションごとの予算を適用 |
| 実行内容の記録がない | 改ざんを検知できる不変の監査ログ |
| 人による監視がない | Webhook を使った承認ワークフロー |
| エージェントがツールと直接通信する | プロキシが通信を傍受して制御 |
右側にある機能はすべて、ツールの前段に置かれる単一のプロセスで実現します。エージェントは既存のツール呼び出しをそのまま使用し、まず Haldir が応答します。
クイックスタート(Python)
from haldir import HaldirClient
# The key and URL that `haldir serve` printed above.
h = HaldirClient(api_key="hld_xxx", base_url="http://127.0.0.1:8000")
# Create a governed agent session
session = h.create_session("my-agent", scopes=["read", "spend:50"])
# Store secrets agents never see directly
h.store_secret("stripe_key", "sk_live_xxx")
# Retrieve with scope enforcement
key = h.get_secret("stripe_key", session_id=session["session_id"])
# Authorize payments against budget
h.authorize_payment(session["session_id"], 29.99)
# Every action is logged
h.log_action(session["session_id"], tool="stripe", action="charge", cost_usd=29.99)
# Revoke when done
h.revoke_session(session["session_id"])
内部では、キーの発行、セッションの開始、権限の確認、監査チェーンへの書き込みという4つの HTTP 呼び出しを行います。
製品
Gate — エージェントの ID と認証
権限、支出上限、TTL を設定したスコープ付きセッションです。セッションがなければアクセスできません。
curl -X POST https://haldir.xyz/v1/sessions \
-H "Authorization: Bearer hld_xxx" \
-H "Content-Type: application/json" \
-d '{"agent_id": "my-bot", "scopes": ["read", "browse", "spend:50"], "ttl": 3600}'
Vault — 暗号化されたシークレットと支払い
AES で暗号化されたストレージです。エージェントからのアクセス要求に対し、Vault がセッションのスコープを確認します。セッションごとの予算に基づいて支払いを承認します。
curl -X POST https://haldir.xyz/v1/secrets \
-H "Authorization: Bearer hld_xxx" \
-H "Content-Type: application/json" \
-d '{"name": "api_key", "value": "sk_live_xxx", "scope_required": "read"}'
Watch — 監査ログとコンプライアンス
あらゆるアクションの不変ログです。異常を検知し、コストを追跡し、コンプライアンス用のエクスポートを作成します。
curl https://haldir.xyz/v1/audit?agent_id=my-bot \
-H "Authorization: Bearer hld_xxx"
Proxy — 制御レイヤー
エージェントと MCP サーバーの間に配置します。すべてのツール呼び出しを傍受し、承認して記録します。許可リスト、拒否リスト、支出上限、レート制限、時間帯などのポリシー適用に対応しています。
# Register an upstream MCP server
curl -X POST https://haldir.xyz/v1/proxy/upstreams \
-H "Authorization: Bearer hld_xxx" \
-H "Content-Type: application/json" \
-d '{"name": "myserver", "url": "https://my-mcp-server.com/mcp"}'
# Call through the proxy — governance enforced
curl -X POST https://haldir.xyz/v1/proxy/call \
-H "Authorization: Bearer hld_xxx" \
-H "Content-Type: application/json" \
-d '{"tool": "scan_domain", "arguments": {"domain": "example.com"}, "session_id": "ses_xxx"}'
Approvals — 人間が介在する承認
人による確認のためにエージェントの実行を一時停止します。Webhook 通知に対応し、ダッシュボードまたは API から承認または拒否できます。
# Require approval for spend over $100
curl -X POST https://haldir.xyz/v1/approvals/rules \
-H "Authorization: Bearer hld_xxx" \
-H "Content-Type: application/json" \
-d '{"type": "spend_over", "threshold": 100}'
MCP サーバー
Haldir は、Claude、Cursor、Windsurf、および MCP 互換の AI で利用できる、19 個のツールを備えた MCP サーバーです。
{
"mcpServers": {
"haldir": {
"command": "haldir-mcp",
"env": {
"HALDIR_API_KEY": "hld_xxx"
}
}
}
}
MCP ツール(上記のプロセスで 19 個すべてが登録されます):
| ガバナンス | 改ざん検知 | 承認とコンプライアンス |
|---|---|---|
haldir_create_session | haldir_verify_audit_chain | haldir_request_approval |
haldir_get_session | haldir_get_tree_head | haldir_get_approval_status |
haldir_check_permission | haldir_get_inclusion_proof | haldir_compliance_score |
haldir_revoke_session | haldir_get_consistency_proof | haldir_build_evidence_pack |
haldir_store_secret | haldir_log_audit_action | haldir_authorize_payment |
haldir_get_secret | haldir_query_audit_trail | |
haldir_list_secrets | haldir_get_spend |
ツールカタログは 1 つです。stdio サーバー(haldir-mcp、または haldir mcp serve)は 19 個すべてを登録し、ホスト型の POST /mcp エンドポイントは、同じ 名前でそのうち 10 個のサブセットを実装しています。どちらの接続方式でも名前の意味は同じなので、一方を対象に書かれたクライアントは、もう一方でも動作します。
MCP HTTP エンドポイント: POST https://haldir.xyz/mcp
パフォーマンス
Haldir は、ボトルネックにならずに、すべてのエージェントのツール呼び出しのホットパスに組み込めるほど高速です。
単一マシンでの HTTP スループット(gunicorn 4 ワーカー、同時クライアント数 32、チューニング済み SQLite バックエンド。すべてのリクエストが認証、検証、冪等性、メトリクス、構造化ログを含むミドルウェアスタック全体を通過):
| エンドポイント | RPS | p50 | p95 | p99 |
|---|---|---|---|---|
GET /healthz | 1,638 | 19.1 ms | 32.5 ms | 41.6 ms |
GET /v1/status | 1,382 | 22.2 ms | 30.8 ms | 45.4 ms |
GET /v1/sessions/:id | 903 | 29.2 ms | 95.5 ms | 172.1 ms |
POST /v1/sessions (作成) | 1,142 | 27.7 ms | 35.2 ms | 39.9 ms |
POST /v1/audit (ハッシュチェーン) | 1,092 | 28.7 ms | 37.6 ms | 52.6 ms |
ハードウェア:第 12 世代 Intel Core i3-1215U(8 コア、8 GB RAM)。SQLite は WAL + synchronous=NORMAL + 256 MiB mmap + メモリ内一時ストアで構成されています。チューニングなしの場合と比べ、セッション検索の p99 は 52 % 低下しました。Postgres のデプロイでは(HALDIR_PG_POOL_MIN/MAX でプールを設定可能)、p99 はさらに平坦化されます。DATABASE_URL=postgresql://... で有効にできます。
プリミティブのコスト(純粋な Python、I/O なし):
| プリミティブ | p50 | 備考 |
|---|---|---|
Vault.store_secret(AES-256-GCM 暗号化 + AAD) | < 10 µs | メモリ内、DB 書き込みなし |
Vault.get_secret(AES-256-GCM 復号 + AAD) | < 10 µs | メモリ内 |
AuditEntry.compute_hash(ペイロードに対する SHA-256) | < 10 µs | |
REST 経由の Gate.check_permission | ~50-120 ms | ネットワーク + DB ラウンドトリップ、Cloudflare 経由 |
REST 経由の Watch.log_action | ~50-150 ms | チェーン検索 + DB 書き込みを含む |
| ガバナンス対象ツールの完全なエンベロープ(チェック + ログ) | ~100-250 ms |
エージェントが LLM の応答を待つ時間は通常 500~3000 ms、上流 API 呼び出しを待つ時間は 100~1000 ms なので、Haldir のオーバーヘッドは誤差の範囲内です。ローカルで再現するには:
# Concurrent HTTP throughput (launches a local gunicorn, ~60s total)
python bench/bench_http.py --duration 10 --concurrency 32 --workers 4
# Primitive cost only (no API key needed)
python bench/bench_primitives.py --local
# End-to-end against the hosted service
export HALDIR_API_KEY=hld_...
python bench/bench_primitives.py
コンプライアンス
1 つのエンドポイントで、SOC2 の信頼サービス基準に基づく 8 つのセクションを網羅した、監査人向けの管理策証明パックを生成します。
haldir compliance evidence --since 2026-01-01 --out evidence-q1-2026.md
| # | セクション | SOC2 |
|---|---|---|
| 1 | ID(テナント、サブスクリプション、期間) | — |
| 2 | アクセス制御(API キー+キーごとのスコープ) | CC6.1 |
| 3 | 暗号化(AES-256-GCM、AAD バインディング) | CC6.7 |
| 4 | 監査証跡(エントリー数、ハッシュチェーン) | CC7.2 |
| 5 | 支出ガバナンス(セッションごとの上限) | CC5.2 |
| 6 | 人による承認(リクエスト/判断のライフサイクル) | CC8.1 |
| 7 | アウトバウンドアラート(Webhook 配信率) | CC7.3 |
| 8 | ドキュメント署名(SHA-256 自己ハッシュ) | — |
このパックは自ら署名します。セクション 1〜7 の正規化された JSON の SHA-256 を使用します。アーカイブされたパックを受け取った監査人は、/v1/compliance/evidence/manifest を再度呼び出し、ダイジェストが一致することを確認できます。これは、発行後にドキュメントが変更されていないことの証明です。
証拠保管庫へのアップロード用 JSON と、「監査人に見せる」場面で使う Markdown を、どちらも同じ /v1/compliance/evidence エンドポイントから取得できます。
保持と削除
監査データは、デフォルトでは永久に保持されます。ポリシー上それ以外が求められる場合は、保持期間を設定してその期間に合わせて削除できます。削除の証明も維持されます。
haldir retention set 90 # keep 90 days (0 = forever)
haldir retention show # what a prune would remove, before running it
haldir retention prune --yes
監査ログはハッシュチェーンになっているため、古いエントリーを単純に削除すると、残ったチェーンが存在しないハッシュを指すことになり、正常に機能していた監査証跡が検証に失敗するようになります。そこで、何も削除する前にログの Signed Tree Head を取得し、最後に削除したエントリーのハッシュを境界をまたぐリンクとして記録します。
その結果、削除が秘密裏に行われることはありません。haldir audit verify は引き続き成功し、削除された内容と、それを確定する署名付き Merkle ルートを報告します。そのため、監査人には「この時点より前のエントリーは保持ポリシーに従って削除されました。削除時に生成されたルートはこちらです」と正直に説明できます。このコミットメントを生成できない場合、何も削除されません。
API リファレンス
詳細なドキュメントは haldir.xyz/docs をご覧ください。OpenAPI 3.1 の完全な仕様は haldir.xyz/openapi.json にあります。
主なエンドポイント(全機能については仕様をご覧ください):
| エンドポイント | メソッド | 説明 |
|---|---|---|
/v1/keys | POST | API キーを作成する |
/v1/sessions | POST | エージェントセッションを作成する |
/v1/sessions/:id | GET/DEL | セッションを取得/取り消す |
/v1/sessions/:id/check | POST | 権限を確認する |
/v1/secrets | POST/GET/DEL | シークレットを保存/一覧表示/削除する |
/v1/payments/authorize | POST | 支払いを承認する |
/v1/audit | POST/GET | アクションを記録/照会する |
/v1/audit/spend | GET | 支出の概要 |
/v1/audit/retention | GET/PUT | 保持期間を読み取る/設定する |
/v1/audit/retention/prune | POST | 保持期間に合わせて削除する(confirm が必要) |
/v1/audit/retention/checkpoints | GET | 削除履歴と署名済みコミットメント |
/v1/approvals/rules | POST | 承認ルールを追加する |
/v1/approvals/request | POST | 承認をリクエストする |
/v1/approvals/:id/approve | POST | 承認する |
/v1/approvals/:id/deny | POST | 拒否する |
/v1/webhooks | POST/GET | Webhook を登録/一覧表示する |
/v1/proxy/upstreams | POST | アップストリーム MCP サーバーを登録する |
/v1/proxy/call | POST | プロキシ経由で呼び出す |
/v1/usage | GET | 使用状況の統計 |
/v1/metrics | GET | プラットフォームのメトリクス |
エージェントの検出
Haldir は主要なすべてのプロトコルから検出できます。
| URL | プロトコル |
|---|---|
haldir.xyz/openapi.json | OpenAPI 3.1 |
haldir.xyz/llms.txt | LLM 対応ドキュメント |
haldir.xyz/.well-known/ai-plugin.json | ChatGPT プラグイン |
haldir.xyz/.well-known/mcp/server-card.json | MCP 検出 |
haldir.xyz/mcp | MCP JSON-RPC |
smithery.ai/server/haldir/haldir | Smithery レジストリ |
pypi.org/project/haldir | PyPI |
デザインパートナーを募集しています
公開中: haldir.xyz · API ドキュメント · OpenAPI 仕様 · Smithery
デザインパートナーを5社募集しています。30日間無料で、すべての機能を利用でき、創業者に直接連絡できます。AI エージェントを本番環境にデプロイしている場合は、[email protected] までメールでご連絡ください。
ライセンス
MIT
リンク
- ウェブサイト: haldir.xyz
- API ドキュメント: haldir.xyz/docs
- Smithery: Smithery で表示
- PyPI: haldir
- OpenAPI: haldir.xyz/openapi.json
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。