mcpField
A
ambit

ambit

ローカル
zz-plant.github.ioAI・エージェント11 日前に更新

ambit について

ambitは、対応するエージェントランタイムの設定を読み込み、利用可能な機能、次に追加できる機能、失敗している依存関係をローカルの能力グラフに示します。エージェントのツール構成を把握・計画したい人向けで、作業時間や変更承認も記録できます。

主な機能

  1. 01設定からローカル能力グラフを作成
  2. 02設定済みツールの動作を検証
  3. 03能力を解放する手順を提示
  4. 04依存関係の障害影響を追跡
  5. 05作業量と注意コストを記録
  6. 06権限に基づいてエージェントの操作を制御

活用シーン

  1. 01複数ランタイムのツール構成を一覧化
  2. 02新たな能力を解放する前提条件を確認
  3. 03認証情報やサービス障害の影響を調査
  4. 04ツールのコンテキスト使用量と人の作業時間を測定

MCP 対応

ambit自体がMCPサーバーです。エージェントは利用可能な機能や制限、制限を解消する手順を問い合わせられ、変更案はユーザーの承認を待ちます。通常のツール呼び出しのルーティングや実行は行いません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"zz-plant-ambit": {
"command": "npx",
"args": [
"-y",
"ambit-cli"
]
}
}
}
起動コマンドnpx -y ambit-cli

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmambit-cli0.6.0

ツール

60

掲載時のツール一覧 · 3 週間前に更新

このツールにパラメーターはありません。

詳細

Ambit

あなた、エージェント、マシンが共同でできること。そして、あなた自身の時間がどこに使われているか。

それがあなたの ambit です。Ambit は、Claude Code、Cursor、OpenCode、および対応しているその他のエージェントランタイムの設定を読み込み、ローカルの機能マップを作成します。現在できること、もう一歩進めば可能になること、設定されているのに動作していないツールがわかります。

CI Release Node License: MIT Glama Score

ライブデモを試す · 始める · エージェントに接続する · よくある質問 · ドキュメント


Ambit は開発者の環境をマップとして表示します。次のステップである Embeddings を選択してシミュレーションすると、それによって利用可能になる4つの機能が緑色に点灯します。次に Shell Execution をオフにすると、それに依存する機能が赤くなり、動作中の9つの機能が停止することが示されます。別の表示では、最も頻繁に人の作業を中断するツールに色を付け、提案された設定変更を承認待ちで表示します

1つの環境をマップにします。次のステップを選ぶと、それによって利用可能になるもの(さらに4つの機能)が表示されます。頼りにしている機能を選んでオフにすると、それとともに停止する動作中の機能が9つあるとわかります。さらに、最も頻繁に作業を中断するツールと、承認待ちの変更も確認できます。

npx ambit-cli、または brew install zz-plant/tap/ambit && ambit を実行するか、ホスト版デモを開いてください。インストールは不要です。


Ambit とは

ambit(ラテン語の ambitus に由来し、巡回、周縁、行動範囲を意味します)とは、ある人が届く範囲の境界です。エージェントと連携する場合、その範囲は LLM プロバイダー、MCP サーバー、ローカル CLI ツール、スキルディレクトリ、認証情報、マシンにまたがるスタックによって決まり、それぞれに独自の設定ファイルがあります。

エージェントのセットアップで何ができるかは、どの設定ファイルにも書かれていません。 個別に設定された要素を組み合わせて構成されますが、設定した要素が動作するとは限らず、そのセットアップで何をしてよいかを示すものもありません。Ambit はその範囲を計算し、広げる手助けをします。宣言されたチェックで要素が動作するかを確認し、設定した許可によって確認なしで実行できる内容を定め、作業台帳によって変更が時間の節約につながったかを記録します。

Ambit はそれらの設定を読み込み、機能グラフというひとつのモデルにまとめます。各サーバー、モデル、スキル、宣言された認証情報がノードとなり、厳選されたツリーの各機能もノードとなります。エッジは、ある要素が別の要素に何を必要とするか、または何を提供するかを記録します。[マイセットアップ]には設定で宣言された内容が表示され、マップには厳選されたツリーとその中の現在位置が描かれます。届く範囲の境界はフロンティアで、そのすぐ先に次のステップがあります。このグラフから、Ambit は次のことに答えます。

  1. あと一歩で何が使えますか? すでに前提条件を満たしている機能を、推定セットアップ時間とともに表示します。また、前提条件があとひとつかふたつそろえば、追加のツールを利用できる組み合わせも表示します。個別に設定したツール同士を組み合わせることもできます。たとえば、ベクトルストアとローカル埋め込みを組み合わせると、どちらの設定ファイルにも単独では記載されていないセマンティック検索の前提条件を満たせます。
  2. 次にセットアップする価値があるものは何ですか? エージェントの妨げになっている頻度と、各ステップで利用可能になる機能の数に基づいて順位付けします。さらに、作業台帳に数週間分の記録が蓄積されると、節約できる人間の作業時間も考慮します。
  3. 実際に動作するものは何ですか? 設定されたツールが必ずしも動作するとは限りません。Ambit は各機能に宣言された検証チェック(ambit verify)を実行し、installed ≠ working ≠ authorized の状態を区別して管理します。未検証の機能は引き続き利用可能です。チェックに失敗した機能は、再び合格するまでプランや許可の対象から除外されます。
  4. 依存関係が失敗すると何が壊れますか? Ambit は推移的な依存関係を追跡します。冗長性があるように見える3つのプロバイダーが同じ API 認証情報を共有している場合、それらは単一障害点として表示されます。

端末から質問できます。エージェントは MCP 経由で、実行する前に何ができるかを尋ねます。また、限界に達したときには、それを解消する方法を、承認できる変更案として尋ねます。Ambit 自体も MCP サーバーであり、読み取るツールと同じプロトコルで通信します。つまり、メタ MCP サーバーです。

Ambit で使われる用語

ターミナルとマップでは、同じ用語を使います。

  • Capability:セットアップでできることを1つ表します。設定に含まれるすべての MCP サーバー、エージェント、スキル、プロバイダー、モデル、コマンドがそれぞれ1つとなり、キュレーションされたツリーの各ノードも同様です。
  • 到達済み、次のステップ、ブロック中:到達済みとは、設定済みのプロバイダーがその機能を満たし、必須の前提条件も満たされている状態です。次のステップは、必須の前提条件をすべて満たしているものの、設定済みのプロバイダーがない状態です。フロンティアのすぐ先に位置し、ambit goal に表示されます。ブロック中とは、必須の前提条件が不足している状態です。
  • 検証済み:到達済みであり、宣言されたチェックに最近合格した状態です。ambit status では、これらは証明済みとして報告されます。到達済みは設定についての事実であり、検証済みは実行されたチェックについての事実です。
  • 必須の前提条件と任意の前提条件:必須の前提条件は、その機能を利用可能にするための条件です。任意の前提条件は、利用可能にする条件ではありませんが、その機能を強化します。ノードをブロックするのは必須の前提条件だけです。データモデルと CLI では、それぞれハード、ソフトと呼びます。
  • コンボ:ベクトルストアとローカル埋め込みからのセマンティック検索のように、他の機能を組み合わせて構成されるものとしてキュレーションされたツリーで定義される機能です。マップ上のすべてのノードがコンボであり、そのため ID は combo: で始まります。
  • 時代:機能がツリーのどの段階に位置するかを示します。後の時代は前の時代に依存します。時代は順序を表すもので、重要度を表すものではありません。
Ambit の機能マップ:テーマごとの時代に、ツールとスキルがつながったノードとして描かれています
塗りつぶされたノードは到達済み · 明るいリングのノードは次のステップで、セットアップにかかる時間も表示されます · 破線のノードはブロック中で、前提条件が不足しています · 上部の線はマップが見つけた内容です

対象ユーザー

AI エージェントを実行していて、より多くのことをさせたいすべての人が対象です。ランタイム1つと少数の MCP サーバーからなる小規模なセットアップでは、Ambit は主に次に何を追加すべきか、前提条件が1つ不足していると何が利用可能になるかを示します。複数のランタイム、数十のサーバー、2台目のマシンを含む大規模なセットアップでは、主にどの設定済みツールがチェックに失敗するか、それとともに何が停止するかを示します。

デモではサンプルのセットアップにおける次のステップが最初に表示され、それによって利用可能になるものが強調されます。また、どのエージェントを使っているかを尋ねます。そのエージェントの設定を貼り付けるか、実行するサーバーにチェックを入れると、何もアップロードされることなく、あなたのセットアップが同じマップ上に配置されます。ツリーのどこまで到達しているかと、取り組む価値のある次の3つのステップが、マシン上で npx ambit-cli が順位付けする方法と同じ基準で表示されます。サンプルの残りの内容は、詳しく知りたい人向けです。到達範囲の基盤を示す停止、すでに失敗していたチェック、そしてあらゆる変更の前に必要な承認が含まれます。

はじめに

利用方法できること
ブラウザーでホストされたデモを開くと、サンプル構成を確認できます。または、Claude Code、Claude Desktop、Cursor、Windsurf、Gemini CLI、Cline、Roo Code、Copilot CLI、Kiro、OpenCode の MCP 設定を読み込むと、何もアップロードせず、あと一手で何を開けるかとともに、タブ内のマップに配置されます。設定ファイルが手元にない場合は、利用しているサーバーにチェックを入れてください。
お使いのマシンでnpx ambit-cli(Node 22.18 以降)、または brew install zz-plant/tap/ambit && ambit を実行すると、実際のエージェント設定を読み取り、見つかったものの名前と、あと一手で何を開けるかを表示します。最後に、実行する操作をひとつ示します。npx ambit-cli web を実行すると、同じ結果をマップ上に表示し、localhost で配信します。npm install -g ambit-cli を実行すると、ambit が PATH から使えるようになります。
マップを使ってgit clone https://github.com/zz-plant/ambit.git && cd ambit && ./bootstrap.sh web を実行すると、ご自身の設定からグラフを構築し、このページに掲載されている画像と同じマップを配信します。
クラウド IDE でGitHub Codespaces で開く マップが実行中の状態で、マシンには何も触れず、ブラウザーのタブ内に完全なチェックアウトを用意します。コンテナーには設定が一切含まれていないため、表示されるマップにもご自身の情報はありません。コードを試すための方法であり、ご自身の環境をマップ化するためのものではありません。
エージェントからAmbit を MCP 経由で登録すると、エージェントは実行を試みる前に、自分に何ができるかを確認できます。エージェントに接続するに設定例があります。

npm と Homebrew は、macOS または Linux にタグ付きリリースをインストールします。./bootstrap.sh は OpenCode、Claude Code、Cursor、Windsurf、Gemini CLI、Claude Desktop、Codex CLI、Cline、Roo Code、Continue、Zed、VS Code、Copilot CLI、Amp、Goose、Kiro、スキルディレクトリ ~/.agents/skills、~/.opencode/skills、~/.config/opencode/skills、および Ollama と LM Studio がディスク上に保持しているモデルを検出します。ローカルの SQLite グラフを構築し、npx ambit-cli と同じ結果を表示します。また、そのディレクトリが PATH に含まれている場合は ambit を ~/.local/bin にリンクし、含まれていない場合は ln -s のコマンドを表示します。./bootstrap.sh --dry-run は何も書き込みません。OpenCode の設定、実行中の Ollama、スキルディレクトリがあるかどうかを報告します。

「My Setup」ビュー:ローカル設定から読み込んだ MCP サーバー、エージェント、モデルをそれぞれ1行で表示し、エンジンが確認した内容と、各項目が提供する機能を示します
「My Setup」には、マシン上で見つかったすべてのサーバー、エージェント、モデルが一覧表示されます。有効かどうか、チェック結果、マップ上で提供する機能を確認できます

スタックにおける Ambit の位置

Ambit はプロトコル層の上、ワークフローオーケストレーションの下に位置します。CLI、MCP サーバー、ゲートはいずれも、エージェントの呼び出しをルーティングしたり、実行したりしません。エージェントのステップを実行できるのはコントロールプレーンだけです。これはチェックアウトからご自身で起動するものであり、オプトイン方式の Docker アダプターを使用する場合に限られます。

システムツールを見つける前提条件の順序を把握する動作中と設定済みを見分ける人の注意を要する作業を記録するエージェントが実行できる操作を制限する
ベクトル検索型ツール RAG類似度による––––
ワークフロー状態機械(LangGraph)–ひとつのタスク内––ひとつのタスク内
パッケージマネージャー(Nix、Homebrew)–バイナリーについて–––
フラットな MCP カタログ(Smithery、レジストリ)名前による––––
Ambit必要なものに基づくホスト全体にわたって✓ 宣言されたチェック✓ 作業台帳✓ 権限契約、署名付き承認

アーキテクチャの基盤、経済的なループ、先行研究との比較については、Ambit のアイデア、A から B までのロードアウト、ひとりで作り上げるをご覧ください。


ターミナルから尋ねる

コマンド回答内容
ambit status環境の健全性:何に到達でき、どれだけ実証されているか、宣言されたチェックに失敗しているもの、プロバイダーが1つしかないもの、保留中の承認、次に入力するコマンド
ambit goal <name>機能を利用可能にするまでの手順と、セットアップの所要時間の見積もり
ambit impact <id>この依存関係が失敗した場合に、下流で何が機能しなくなるか
ambit graph combos複合機能と、前提条件があと1つでそろう機能
ambit authorityアクションごとの権限:自動実行されるもの、確認が必要なもの
ambit verify [id]機能に宣言されたチェックを実行し、合格するかどうかを記録します
ambit weigh各ツールサーバーのツール一覧が、セッションごと、ランタイムごとにコンテキストをどれだけ消費するか、また台帳で呼び出しが一度も確認されていないもの
ambit history [since <when> [<until>]]獲得したものと新たに現れたものを分けて、フロンティアがどう変化したか
ambit shareマップの自己完結型 HTML スナップショットをローカルに書き出します。投稿しても安全です

ambit help では初回のセッションについて、ambit help --all ではすべての機能について、ambit help <term> では各概念について説明します。

上記のコマンドは機能グラフを読み取ります。2つ目のコマンド群(attention、work、usage、opportunities、roi、audit)は、ローカルの作業台帳、つまりスタックを運用する人の時間とコストを読み取ります。セッションが記録されるまでは数値を表示せず、データが不足していることを示します。数週間分が記録されると、より多くの情報を表示します。FAQでは、記録の開始方法を説明しています。

ambit status — 環境の状態
$ ambit status

    39 of 70 reached · 0 proven · 8 with a single provider
    ──────────────────────────────────────────────────────
    proven          0
  › unproven       15  11 provable now · 4 with no check
    failing         0
    entries        24  from your config; checks run on what they provide
    last check  never

    actions: 18/66 reached
    provable now: Automated Tests, Browser Automation, Code Intelligence, Continuous Delivery, Data Access, File Editing, Local Runtime, Shell Execution and 3 more
    domains:
      ████░░░░░░ ai-ml     5/13
      ██████░░░░ backend   7/11
      █████░░░░░ devops    4/8
    …

    Next  ambit verify · turns 11 of the unproven into evidence

これは、チェックをまだ実行していない新しいグラフです。到達済みと実証済みが先に表示され、4つのカウントの合計は到達済みの数と一致します。› は人の対応が必要なカウントを示し、最後の行には次に入力するコマンドが表示されます。CI はフィクスチャグラフからこのブロックを取得し、コマンドの出力と異なる場合は失敗します。

ambit impact — 下流の依存関係への影響
$ ambit impact mcp:playwright

    If playwright went away
    ───────────────────────
  › Stops working  Automated Tests, Browser Automation, Continuous Delivery, Observability · and the 3 actions they confer
    Survives  Tool Protocol (12 other providers)

影響を受ける機能は、依存関係チェーン全体にわたって › を付けて最初に表示されます。たとえば、継続的デリバリーが自動テストを必要とする場合、自動テストが失敗すると継続的デリバリーも失敗します。維持される機能には、同時に失敗する共有認証情報を考慮したうえで、残りのプロバイダー数が表示されます。認証情報を指定すると、impact はそれを取り消すと何が使えなくなるかを回答します。これは ambit credentials と同様です。

ambit share — グラフから共有できるもの、できないもの

ambit share は許可リストをもとに HTML を作成します。含まれるのは名前、種類、カテゴリ、ドメイン、時代、状態、ライフサイクル、エッジです。コマンド、URL、パス、説明、コスト情報はファイルに含まれず、人は「ある人」として表示されます。また、--redact を指定すると、キュレーション対象外の名前はすべてカテゴリに置き換えられます。何もアップロードされません。ファイルをローカルに書き出すことが、このコマンドのすべてです。

スクリプトまたはエージェントのシェルから

--json は任意の回答をデータとして出力します。色が付くのはターミナル上だけで、終了コードはコマンドが成功したかどうかを示します。git diff --exit-code と同様に、次の2つのコマンドでスクリプトを制御できます。

ambit can shell-execution --exit-code     # 0 go ahead, 1 put it to the person, 2 stop
ambit verify shell-execution --exit-code  # 1 unless every check that ran passed

CLI リファレンスには、すべての終了コードとフラグが記載されています。


エージェントに接続する

何かに接続する前に Ambit を試すことができます。ambit status はローカルのエージェント設定とセッションのトークンログ(Claude Code、Codex、OpenCode、Amp)を読み取り、Ambit 独自のデータベース(~/.local/share/ambit/graph.db)にのみ書き込みます。設定ファイルは変更せず、ネットワークリクエストも行いません。このファイルを削除すれば、記録された内容は消去されます。llms.txtでは、エージェントが Ambit を推奨すべきタイミングを説明しています。また、エージェント向けでは、セッション指標の導入前と導入後を紹介しています。

Claude Code

マーケットプレイスからプラグインをインストールします。

claude plugin marketplace add zz-plant/ambit
claude plugin install ambit@ambit

セッション内で /ambit と入力すると、セットアップ状況を確認できます。読み取られた内容、そこからツリーのどの範囲まで到達できるか、そして最も多くの範囲を開く手順が表示されます。このプラグインは MCP サーバーを登録し、セッション開始時にエージェントへ概要を提供し、ツールの実行と承認の記録を ~/.local/state/ambit/claude-code.jsonl に記録します。トークン使用量はローカルのセッションログから読み取り、ログには書き込みません。記録を無効にするには、AMBIT_NO_LEDGER=1 を設定します。

プラグインを使わずに手動で登録するには、次のようにします。

claude mcp add ambit -- ambit mcp --profile=agent

--profile=agent を指定すると、エージェントが実行前の確認に使う計画・検証用のツールを含む10個のツールが、約4.4KBのプロンプトコンテキストで提示されます。このフラグを省略すると、すべてのツール(約19.5KB)が提示されます。いずれの場合も、サーバーは一覧にないツールを名前で呼び出せますが、ほとんどのクライアントは提示されたツールのみを呼び出します。そのため、--profile=agent では、接続手順で残りの機能を使うためにエージェントを ambit コマンドへ誘導します。単一障害点、予算、インシデント、監査証跡など、ambit help --all に記載されたすべての機能が対象です。詳しい解説にはすべてのツールが記載されており、呼び出しの処理方法も説明されています。

ambit-gate@ambit は、すべてのツール呼び出しで ambit gate を実行する補助プラグインです。Ambit で拒否した操作や、最初に確認するよう設定した操作を、拒否したり、ユーザーに確認したりできます。以下のフックブロックを使って、同じ設定を手動で行うこともできます。

Ambit は ambit://briefing も公開します。これはクライアントが接続時に読み取るリソースで、約1,200トークンで、到達・検証済みの内容、失敗している内容、ユーザーの対応待ちの内容、過去1週間に作業を妨げた要因、そして次に到達する価値のある対象と各手順で到達できる範囲を示します。毎回のセッションの冒頭に表示するには、~/.claude/settings.json にフックを追加します。

{
  "hooks": {
    "SessionStart": [{ "hooks": [{ "type": "command", "command": "ambit briefing" }] }],
    "PreToolUse": [{ "matcher": "*", "hooks": [{ "type": "command", "command": "ambit gate", "timeout": 10 }] }]
  }
}

PreToolUse フックは、Ambit のゲートを Claude Code に結び付けます。ツール呼び出しの前に、ambit gate が実行される機能を特定します。禁止された操作は拒否され、人間の確認が必要な操作ではユーザーに確認が求められ、許可された操作やマッピングされていない操作は Claude Code の標準的な権限フローに委ねられます。ゲートが権限を制限することはできますが、拡張することはできません。呼び出しごとに約130ミリ秒が加算されます(Apple M1 Max で 0.6.0 を使用して計測)。ターミナルで ambit gate を直接実行すると、その出力を確認できます。

ambit statusline は、Claude Code のステータスバーに表示するセグメントを出力し、メッセージごとに更新します。失敗中のチェック、保留中の提案、検証済みの機能数が表示されます(例:! 1 failing: Browser Automation · › 2 proposals to decide)。非アクティブなカテゴリは省略されるため、正常なグラフでは 12 verified と表示されます。データベースは読み取り専用で照会し、何も書き込まず、約80ミリ秒で処理されます(Apple M1 Max で 0.6.0 を使用して計測)。プラグインではステータスラインを自動設定できないため、ambit connect claude-code --statusline を実行すると、既存のファイルを settings.json.bak にバックアップしたうえで ~/.claude/settings.json にエントリーを追加します。すでに設定されているステータスラインが上書きされることはありません。手動で設定するには、次のようにします。

{ "statusLine": { "type": "command", "command": "ambit statusline" } }

Claude Code で実行できるステータスラインコマンドは1つです。既存のものを維持しながら Ambit を追加するには、次の2行をスクリプトとして保存し、npx ccstatusline の部分をお使いのコマンドに置き換えて、command がそのスクリプトを指すようにします。

input=$(cat)
printf '%s  %s\n' "$(printf '%s' "$input" | npx ccstatusline)" "$(printf '%s' "$input" | ambit statusline)"
OpenCode

ambit connect opencode は、ファイルがすでに使っている形式(OpenCode 1 の形式または 2 の形式)で ~/.config/opencode/opencode.json にエントリーを追加し、まずファイルの内容を opencode.json.bak に保存します。コメントを含むファイルは、書き戻すとコメントが削除されるため、そのままにします。手動で設定する場合、OpenCode 1 の形式は次のとおりです。

{
  "mcp": {
    "ambit": {
      "type": "local",
      "command": ["ambit", "mcp", "--profile=agent"],
      "enabled": true
    }
  }
}

OpenCode 2 では、同じエントリーを mcp.servers の下に置き、"enabled": true の代わりに "disabled": false を指定します。

どちらのクライアントも、ambit が PATH に含まれていることを前提としています。Homebrew と npm install -g ambit-cli を使うと PATH に追加されます。また、~/.local/bin がすでに PATH に含まれていれば、bootstrap.sh でも追加されます。そうでない場合は、npx -y ambit-cli mcp --profile=agent または cli.js の絶対パスを使ってください。エージェントはマップを読み取り、目標に不足しているものを尋ね、設定の変更を提案できます。変更を適用するには必ず承認が必要です。承認は MCP ツールではなく、別途ローカルで行う操作です。

Cursor

ambit connect cursor は、サーバーを ~/.cursor/mcp.json に追加します。--ledger を指定すると、すでにあるフックはそのままに、4 つのイベントに対するフックも ~/.cursor/hooks.json に追加し、まずファイルの内容を hooks.json.bak に保存します。--dry-run はフックのコマンドとイベントを表示するだけで、何も書き込みません。このフックは、Claude Code プラグインが書き込むファイル ~/.local/state/ambit/claude-code.jsonl に、イベントごとに 1 行を追加します。記録されるのは、フックの実行時刻と会話の ID、実行されたシェルコマンドまたは MCP 呼び出しのサーバー名とツール名、および Cursor が報告する所要時間(承認待ち時間は含みません)、失敗した呼び出しについての Cursor 側の ID、エラーテキスト、失敗の種類、およびユーザーが中断したかどうか、そして会話の終了理由です。コマンドのテキストや出力、MCP 呼び出しの引数や結果、ファイル、プロンプト、メールアドレスは記録しません。Cursor のフックはトークン数や承認プロンプトを報告しないため、Cursor の実行ではどちらも記録されません。このフックは Cursor に何も要求しないため、呼び出しをブロックすることも許可することもできません。また、AMBIT_NO_LEDGER=1 を設定すると無効になります。手動で設定する場合は、ドライランで表示されるパスを使います。

{
  "version": 1,
  "hooks": {
    "afterShellExecution": [{ "command": "node /path/to/ambit-cli/plugins/cursor/ambit-ledger.mjs", "timeout": 5 }],
    "afterMCPExecution": [{ "command": "node /path/to/ambit-cli/plugins/cursor/ambit-ledger.mjs", "timeout": 5 }],
    "postToolUseFailure": [{ "command": "node /path/to/ambit-cli/plugins/cursor/ambit-ledger.mjs", "timeout": 5 }],
    "sessionEnd": [{ "command": "node /path/to/ambit-cli/plugins/cursor/ambit-ledger.mjs", "timeout": 5 }]
  }
}
教える価値のある、たった一つの習慣

今回のセッションでまだ使っていないツールを実行する前に、その機能を指定して ambit_can を呼び出します。結果が yes なら実行します。ask ならユーザーに確認します。no の場合、不足はすでに記録されているため、別の名前で再試行しないでください。

サーバーは MCP ハンドシェイクでこの指示を送ります。サーバーの指示をモデルコンテキストに公開しないクライアントでは、ambit init-rules を使うと、ガイダンスを CLAUDE.md、AGENTS.md、または .cursorrules に書き込めます。MCP 接続はなくてもシェルにアクセスできるエージェントは、ambit can <capability> --exit-code で権限を確認できます。拒否は作業台帳に不足として記録され、繰り返し発生する不足は、次にセットアップする項目のランキングで順位が上がります。

エージェントが不足している機能に遭遇し、MCP 経由で Ambit に理由を尋ねて提案を作成します。ユーザーが承認して適用すると、フロンティアが広がり、機能の組み合わせによって Local Embeddings が利用可能になります
エージェント:行き詰まりに遭遇し、不足を記録し、goal を尋ねて提案を作成 · 人間:approve、apply · 1 つの設定パッチで 4 つの機能を実現。すべてのフレームは実際のエンジン出力で、scripts/demo-agent-loop.ts により再記録されています。

マップ

./bootstrap.sh web を実行すると、CLI が読み取るグラフを、5 つのビューで表示します。

  • マップ:到達済みの項目を示す、精選されたツリーです。上部の行には、マップで見つかった内容が表示されます。チェックに失敗した場合はその内容が、そうでない場合は、次に進むことで最も多くの項目に到達できるステップが表示されます。
  • マイセットアップ:設定で宣言されている項目、そのチェック履歴、各項目が提供する機能を表示し、最後に、マップ上のどのノードにも対応しない、エージェントが使用した項目を示します。「ブリーフィング」セクションには、接続時にエージェントに提供されるコンテキストペイロードが表示され、「環境」セクションには、リポジトリとインフラストラクチャのスキャン結果が示されます。各セクションは URL の一部となっているため、リンクからそのセクションを直接開けます。
  • 時間とコスト:作業台帳、確認なしで実行できる操作、次に進む先、過去 1 週間のフロンティアの変遷を表示します。
  • 監査:提案、承認、チェックの実行、作業セッションを新しい順に記録した監査ログです。クエリで検索できます。
  • 提案:エージェントが作成した変更ごとにカードを表示する、意思決定キューです。複数の変更をまとめて決定できます。

ノードを選択すると、そのノードが停止した場合に失敗する下流の依存関係、または到達するために必要な未充足の前提条件と推定セットアップ時間が表示されます。停止をシミュレートすると、その連鎖が描画されます。失敗する依存関係は赤く塗られ、未設定のノードは赤い枠で囲まれ、冗長なプロバイダーを失う機能は琥珀色で示されます。ロック解除をシミュレートすると、単一の前提条件を満たすことで到達可能になるノードが強調表示されます。どちらのシミュレーションもデータを書き込みません。3 つのレンズでマップを絞り込めます。標準(到達済み、次のステップ、ブロック中)、注意(頻繁に人間の介入を要するツール)、権限(無人で実行可能、人間の確認が必要、禁止)。

エージェントが MCP 経由で設定変更を提案すると、提案ビューに、署名する前に計画として表示されます。手順、取り消せない手順、解除される機能、コスト、関連する過去の承認を確認できます。承認すると署名済みの成果物が作成され、ambit apply は変更を Claude Code、Cursor、OpenCode、または --to で指定したランタイムに書き込みます。書き込みに対応していない場合は、そのランタイム独自のコマンドを出力します。

リファレンスでは、各マークの意味、フォーカス、ミニマップ、過去のマップを再現するタイムライン、複数の下書きをまとめて決定する方法、下書きをスマートフォンに送る方法など、その他の内容を説明しています。


仕組み

ディスカバリーでは、ホストの設定を組み込み SQLite グラフに読み込みます。CLI、MCP サーバー、マップの 3 つのインターフェースから、そのグラフを読み取れます。ディスカバリー、検証、作業台帳はグラフに書き込みます。エージェント設定を変更できるのは、承認した提案を通じてか、既存の項目に対するマップの切り替えを通じてのみです。後者で新しい項目が作成されることはありません。

各クライアントは、それぞれの標準設定パスから読み取られます。また、サーバーは、それを登録したクライアントに紐付けられたままです。2 つのランタイムが同じサーバーを参照している場合、Ambit はそれを 2 つのプロバイダーを持つ単一の機能としてモデル化します。そのため、同じバイナリを 2 回登録しても冗長性としてカウントされません。ローカルモデルは Ollama と LM Studio がディスク上に保持するフォルダーから検出されるため、どちらのサーバーも起動している必要はありません。それぞれは local プロバイダーとして分類され、ホスト型推論のコストとは分けて扱われます。

検出された機能は、9 つの時代からなる精選ツリーに配置されます。エージェントのセットアップ用の 7 つは、基盤とモデルアクセスから、ツールの使用、メモリ、自律性、保証を経て、主権に至ります。構築する製品用の 2 つは、製品(ホスティング、本番データベース、アカウント、決済、メール)と運用(エラー追跡、分析、稼働状況、バックアップ、およびローンチチェックリストが完了すると到達するローンチ準備完了)です。各機能には前提条件が設定されているため、到達済みかどうかは設定が主張する内容ではなく、その前提条件に基づいて算出されます。

設定済みでも動作するとは限りません

Ambit では、次の 2 つのプロパティを分けて管理します。

  • state は構造を表します。これは設定済みかどうか、また何に依存しているかを示します。フロンティア台帳にはこの情報が記録されます。
  • lifecycle は健全性を表します。宣言された検証コマンドが実際に成功したかどうかを示します。ケイパビリティは完全に設定済みでも broken の場合があり、degraded の場合は復旧中を意味します。つまり、直近のチェックが、その前の失敗後に成功しています。

利用可能かどうかは state ではなく lifecycle によって決まり、チェックによって利用可能性が下がることはあっても、上がることはありません。未検証のケイパビリティは計画に残りますが、チェックに失敗したものは、計画、シミュレーション、目標、権限チェック、機会のランキングから除外されます。チェックに一度成功すれば、壊れたケイパビリティは未証明の状態に戻り、チェックに 5 回連続で成功するまでは復旧中としてマークされます。ambit status は、証明済み、未証明、失敗中の件数を報告します。また、マップでは到達した各ノードにバッジが付きます。チェックに成功していれば ✓、失敗していれば !、設定済みでも一度も検証されていなければ何も表示されず、復旧中の場合はその状態が表示されます。

脆弱性は推測ではなく計算で求められます
  • 単一障害点:プロバイダーが 1 つだけのケイパビリティです。
  • ボトルネック:ほかのケイパビリティからの依存数に基づいて順位付けされたケイパビリティです。マップでは、上位のものにキーストーンが表示されます。
  • 共有認証情報:1 つの API トークンを共有するプロバイダーは同時に失敗するため、冗長性にはなりません。credentials ブロックで共有認証情報を宣言すると、ambit impact credential:... で失効の影響を分析できます。

コントロールプレーン

Ambit は、あるステップが要求された場所で実行を許可されるかどうかを判断し、その判断は次の3か所で有効になります。常に ambit apply、このインターセプターを経由して実行がルーティングされる場合はこのインターセプター、そして ambit gate フックがインストールされている場合は Claude Code のツール呼び出しです。それ以外のランタイムでは、ambit_can に問い合わせるかどうかを選択できます。

チェックアウトから実行します。 インターセプターはリファレンス実装であり、ambit コマンドの一部ではないため、npm や Homebrew ではインストールされません。クローン内で npm run demo:incident を実行すると、このセクションの最後にあるウォークスルーが使い捨てのグラフ上で再生され、node --experimental-sqlite src/control_plane/cli.ts --help を実行するとコマンドの一覧が表示されます。exec <envDir> <dbPath> '<request>' は、dbPath のグラフに対してゲート経由で1つのステップをルーティングします。それ以外のコマンドはウォークスルー用です。setup-env は指定されたグラフにフィクスチャのアクターと機能を書き込み、同じ ID の行があれば置き換えます。verify-node はチェックを実行せずにライフサイクルを設定するため、どちらも新しいファイルを指定し、ambit where が表示するグラフには決して指定しないでください。

ホストレベルのエージェントツールは実際の攻撃対象領域となるため、インターセプターをエージェントとシェルの間に配置できます。インターセプター経由のツール呼び出しがマシンに届く前に、src/control_plane/proxy.ts のプロキシが3つの条件を検証します。前提となる機能が存在すること、その機能が検証済みで稼働していること、呼び出し元に明示的な権限が与えられていることです。いずれかの条件を満たさない呼び出しは拒否され(AMBIT_BLOCKED_UNAUTHORIZED、終了コード 2)、システムの状態は変更されません。ブロックされた呼び出しでは、提案の下書きと HMAC チャレンジが生成されます。ambit approve <proposal-id> --by=<person> を実行すると、実行側で検証される署名付き認可アーティファクトが作成されます。このアーティファクトは、提案が変更されると期限切れになるか無効になります。スパンには、各評価、チャレンジ、受領記録が記録されます。

判断は、指定したグラフに対して実行されます。ゲートの先に何を配置するかはコントロールプレーンの起動時に選択され、すべてのスパンにその名前が記録されます。デフォルトの simulatedAdapter はフィクスチャです。変更を JSON ファイルにマージしますが、何も実行しません。

AMBIT_ADAPTER=docker を指定するか、src/control_plane/cli.ts に --adapter=docker を指定すると、代わりに Docker アダプターが使用され、承認されたステップの payload.command が使い捨てコンテナー内で実行されます。承認はコマンドを指定します。人が署名するステップにはそのコマンドが表示され、別のコマンドを指定した再試行は拒否されます。ブレークグラスでは何も実行されません。エージェント自身がコマンドを認可することはできないためです。各ステップには、自分で取得したイメージ(AMBIT_DOCKER_IMAGE に別のイメージが指定されていない場合は alpine:3.20)から専用のコンテナーが作成されます。コンテナーはネットワークなし、読み取り専用のルートファイルシステム、すべての Linux ケイパビリティの削除、非特権ユーザーで実行され、メモリ、CPU、プロセス数に制限が設けられます。実行後にコンテナーは削除され、上限付きの出力が結果として返されます。ステップがゼロ以外の終了コードで終了すると、実行は失敗として終了します。コントロールプレーンの起動時に AMBIT_DOCKER_NETWORK=bridge を指定し、その機能に対する network アクションの許可が ALLOW を返した場合に限り、ステップはネットワークに接続できます。AMBIT_DOCKER_WORKDIR でディレクトリを指定しない限り、ホストのものは何もマウントされません。指定したディレクトリは読み取り専用でマウントされ、ホームディレクトリ、その中のドットディレクトリ、Docker ソケットは決してマウントされません。Docker でステップを実行できない場合、コントロールプレーンは何も実行される前に拒否し、シミュレーターにはフォールバックしません。

どちらのアダプターも、どこにもデプロイしません。別のアダプター(Kubernetes、デプロイ API など)も、同じ EnvironmentAdapter の3つのメソッドを実装すればよく、ゲートより上の部分は何も変わりません。INCIDENT_TRACE_001 では、デプロイエージェントが実行途中でブロックされた後、修正されるまでの流れを説明しています。npm run demo:incident を実行すると、それを90秒で再生できます。AMBIT_ADAPTER=docker を指定すると、認可されたデプロイでコンテナー内の echo が実行されます。


セキュリティ不変条件

Ambit は開発者向けツールチェーンを読み取り、エージェントの設定を書き換えるため、以下の特性は固定されています。SECURITY.md では対象範囲と対象外を含めてそれぞれを詳しく説明し、AGENTS.md ではそれぞれがどこで適用されるかを説明しています。

  1. ループバックのみ。 API サーバーは 127.0.0.1 にバインドします。LAN もトンネルも使いません。
  2. オリジンの許可リスト。 Ambit 自身のページ以外を Origin とするリクエストは、別のローカルホストポート上のページも含めて、ルーティング前に 403 で拒否されます。シンプルリクエストはプリフライトを省略するため、レスポンスヘッダーだけでは阻止できないからです。
  3. HTTP 経由でエントリを作成しません。 HTTP 層で編集できるのは既存のエントリのみで、それ以外は一切できません。MCP エントリには、実行時にランタイムが実行するコマンドが含まれます。そのため、HTTP 経由で作成するとリモートコード実行につながります。サーバーを追加すると、貼り付け用のスニペットが返されます。
  4. 入力していない外部通信は行いません。 マップはマシン上の埋め込み SQLite データベースで、テレメトリもありません。コマンドを入力するか、エージェントがツールを呼び出さない限り、ソケットを開いたり、サーバーを起動したり、チェックを実行したりすることはありません。また、サーバーがそれらを実行することもありません。FAQ には、ネットワークに接続する可能性があるコマンド、その送信内容と送信先をすべて記載しています。

ドキュメント


コントリビューション

新しい機能モデル、ランタイムリーダー、可視化に関する作業、エッジケースの報告を歓迎します。good first issue のラベルが付いた Issue は、半日程度で取り組める範囲に絞られており、最初に確認するファイルも示されています。CONTRIBUTING.md では、リポジトリをクローンしてからチェックに合格するプルリクエストを送るまでの手順を案内し、CI が実行するすべてのチェックを一覧にしています。


プロジェクトを支援する

Ambit は個人プロジェクトです。設定ファイルでは答えられなかった疑問の解決に役立ったなら、スターを付けることで、同じ環境を使う次の人が見つけやすくなります。

  • マップのスナップショットを ambit share --redact で共有してください。パスがファイルに含まれることはありません。また、--redact によって、ツリーから提供されていない名前はすべてカテゴリ名に置き換えられるため、実際の設定を名前を明かさずに紹介できます。
  • 未対応のランタイムや不正確な機能モデルは、Issue テンプレートから報告してください。
  • 新しいランタイムリーダーや機能の追加を知らせるには、Watch → Custom → Releases を選択してください。

ライセンス

MIT © Kanav Jain

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。