mcpField
V
Vigil — Cognitive Infrastructure for AI Agents

Vigil — Cognitive Infrastructure for AI Agents

ローカル
github.com/AlexlaGuardiaクラウド・インフラ114 週間前に更新

Vigil — Cognitive Infrastructure for AI Agents について

Vigilは、MCPサーバーの監視とAIエージェントの永続的なコンテキスト管理・連携を組み合わせます。サイレント障害を検出するMCPWatchに加え、デーモンによるコンテキスト生成、シグナル、引き継ぎ、フレーム別のツール絞り込みを備えています。

主な機能

  1. 01MCPツールのサイレント障害検出
  2. 02レイテンシ、エラー、呼び出し量の追跡
  3. 03デーモンによるエージェントコンテキスト生成
  4. 04シグナルと引き継ぎによるエージェント連携
  5. 05コンテキストフレームによるツール絞り込み
  6. 06シグナルの階層的な要約

活用シーン

  1. 01空またはnullのMCPツール結果の検出
  2. 02ツールごとの状態とレイテンシの監視
  3. 03エージェントのセッション再開時のコンテキスト復元
  4. 04現在の作業に応じたツールの絞り込み

MCP 対応

VigilはstdioまたはSSEのMCPサーバーとして、認識状態、シグナル、引き継ぎ、フレーム、エージェント状態を提供します。MCPWatchはPython製MCPサーバーを計測し、サイレント障害、レイテンシ、エラーを追跡します。

設定

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

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Vigil

AI エージェントのためのオブザーバビリティと認識基盤。

Vigil は、1 つのパッケージに 2 つのレイヤーを備えています。

  • MCPWatch — MCP サーバーのサイレント障害を監視するウォッチドッグです。あらゆる Python MCP サーバー(FastMCP と低レベルの mcp.server.lowlevel.Server)に 1 行で計測を追加できます。ゲートウェイやダッシュボードでは、すでにレイテンシーやエラーのチャートを確認できます。誰も検出できていないのは、成功したように見えるのに何も返さない呼び出しです。エラーが発生していないにもかかわらず、コンテンツが空、null、または空白になります。MCPWatch は、ツールごとのレイテンシー(p50/p95/p99)、エラー率、isError 応答に加えて、これらを固有の silent ステータスとして検出します。本番環境で 95 以上の MCP ツールに利用されています。
  • 認識プラットフォーム — デーモンによるコンテキストのコンパイル、シグナルプロトコル、セッションの引き継ぎ、フレームベースのツールフィルタリング、MCP サーバーを備えています。ほとんどのエージェントフレームワークが省略している神経系レイヤーです。

ほとんどのエージェントメモリツールは書類棚です。Vigil は聴診器であり、神経系です。

課題

MCP サーバーは気づかれないまま失敗します。 ツールが空のコンテンツを返し、SDK が例外を握りつぶし、エージェントは「結果が見つかりませんでした」と扱います。そして 3 日後に、顧客からの問い合わせで初めてそのことがわかります。レイテンシーとエラーの監視は、今や必須です(ゲートウェイ、OpenTelemetry、FastMCP 自体が出力します)。しかし、エラーはないものの応答が空という、エージェントがひそかに幻覚で補ってしまう障害モードを検出できるものはありません。MCPWatch は、このギャップを埋めるために存在します。

エージェントはセッション間の記憶をすべて失います。 コンテキストに関係なくすべてのツールを読み込み(50K 以上のトークンを浪費します)、セッションをまたいで連携したり、互いに作業を引き継いだりできません。会話を始めるたびに、何もない状態からのスタートになります。

Vigil の機能

MCPWatch — MCP のサイレント障害を監視するウォッチドッグ — あらゆる Python MCP サーバー(FastMCP または低レベルの mcp.server.lowlevel.Server)を 1 行でラップします。主な機能は、エラーが発生していないにもかかわらず空、null、または空白のコンテンツを返す呼び出しをサイレント障害として検出し、ヘルス情報、ツールごとの統計、アラートに表示される固有の silent ステータスとして記録することです。また、ツール呼び出しのレイテンシー(p50/p95/p99)、ツールごとのエラー率、isError 応答、時間経過に伴う呼び出し量も追跡します。REST API、CLI、アラートフックを備えています。MIT ライセンスで、設定は不要です。

Awareness Daemon — バックグラウンドプロセスが 90 秒ごとにシステムの状態をコンパイルします。エージェントは 1 秒未満でコンパイル済みのコンテキストを使って起動します。起動時のレイテンシーも、「何をしていたか思い出させて」というやり取りもありません。

フレームベースのツールフィルタリング — ツールにコンテキストフレームを付けます。「バックエンド」モードのエージェントには、95 個ではなく 14 個のツールが表示されます。セッションごとのツール定義トークンを 50~90%削減できます。

シグナルプロトコル — コンテンツ量の上限を設けた軽量イベントバスです。エージェントがシグナル(タイプごとに最大 300~800 文字)を出力し、デーモンがそれらを認識情報に統合します。エージェントは直接通信せずに連携できます。

セッションの引き継ぎ — エージェントはセッションの終了時に、構造化された要約(変更したファイル、決定事項、次の手順)を残します。次のエージェントは、これまでの経緯と次に行うことをすべて把握して起動します。

シグナルの圧縮 — 古いシグナルは削除せず、要約します。階層化された保持方式(raw → daily → weekly → monthly)により、履歴を失わずにコンテキストを最新の状態に保ちます。

MCP サーバー — Vigil を MCP ツールサーバーとして公開します。Claude Code、Claude Desktop、Cursor、Windsurf のいずれのエージェントも接続でき、すぐに永続的な認識情報を利用できます。

記事

インストール

# Core library (daemon, signals, handoff, compaction)
pip install vigil-agent

# With MCP server support
pip install vigil-agent[mcp]

30 秒デモ

4 つのコマンドで Vigil の動作を確認できます。

pip install vigil-agent
vigil init
vigil signal my-agent "Hello from Vigil!"
vigil status

出力例:

Current Awareness
─────────────────
  Agents:  my-agent (1 signal)
  Latest:  "Hello from Vigil!" (just now)
  Frame:   default
  Status:  active — 1 unacknowledged signal

これで完了です。エージェントが認識情報を利用できるようになりました。デーモン、引き継ぎ、MCP サーバーを含むクイックスタート全編は、続きをご覧ください。

クイックスタート

# Initialize
vigil init

# Emit a signal
vigil signal my-agent "Deployed new API endpoint"

# Start the daemon (compiles awareness every 90s)
vigil daemon start

# Check awareness
vigil status

# See what agents boot with
vigil boot --json

# End a session with a structured handoff
vigil handoff my-agent "Shipped auth module" --files "auth.py, tests.py" --next-steps "Write docs"

# Resume from where the last agent left off
vigil resume next-agent

# Start as an MCP server (Claude Code / Claude Desktop)
vigil serve

# Run signal compaction manually
vigil compact --dry-run

MCP Server

Vigil は MCP サーバーとして動作するため、あらゆる AI エージェントが接続して、永続的な状況認識を得られます。

# stdio (Claude Code, Claude Desktop)
vigil serve

# SSE (remote clients)
vigil serve --transport sse --port 8300

Claude Desktop の設定(claude_desktop_config.json):

{
  "mcpServers": {
    "vigil": {
      "command": "vigil",
      "args": ["serve"]
    }
  }
}

利用可能な 12 個の MCP ツール:

ツール説明
vigil_bootコンパイル済みのホットコンテキストを使って起動します
vigil_compile状況認識を新たにコンパイルします
vigil_signalエージェントからシグナルを送信します
vigil_status現在の状況認識状態を取得します
vigil_signals最近のシグナルを読み取ります
vigil_handoff構造化された引き継ぎを行ってセッションを終了します
vigil_resume前回の引き継ぎから再開します
vigil_chain直近 N 件の引き継ぎの概要を取得します
vigil_stale応答が途絶えたエージェントを見つけます
vigil_focus優先作業キューを管理します
vigil_framesコンテキストフレームを管理します
vigil_agents既知のエージェントとそのアクティビティを一覧表示します

Python API

from vigil import VigilDB, SignalBus, AwarenessCompiler, HandoffProtocol

# Initialize
db = VigilDB("vigil.db")
bus = SignalBus(db)
compiler = AwarenessCompiler(db)
proto = HandoffProtocol(db)

# Emit signals from agents
bus.emit("backend-agent", "Deployed auth service v2")
bus.emit("frontend-agent", "Updated dashboard layout")

# Compile awareness
compiler.synthesize()
context = compiler.compile()
# {'frame': 'backend', 'awareness': '...', 'focus': [...], 'compiled_at': '...'}

# Boot an agent with pre-compiled context (<1 second)
hot_context = compiler.boot()

# Structured session handoff
proto.end_session(
    agent_id="backend-agent",
    summary="Shipped auth v2 with JWT tokens",
    files_touched=["auth.py", "middleware.py"],
    decisions=["Switched from session cookies to JWT"],
    next_steps=["Add rate limiting", "Write integration tests"],
)

# Next agent resumes with full context
context = proto.resume("next-agent")
# {'awareness': ..., 'last_handoff': {...}, 'signals_since_handoff': [...], 'pending_next_steps': [...]}
フレームベースのツールフィルタリング
from vigil.registry import tool, get_tools, tool_count

# Tag tools with frames
@tool(name="deploy", description="Deploy to production", frames=["backend", "devops"])
async def deploy(args):
    return {"content": [{"type": "text", "text": f"Deployed {args['service']}"}]}

@tool(name="render", description="Render component", frames=["frontend"])
async def render(args):
    ...

@tool(name="health", description="Health check", frames=["core"])  # Always visible
async def health(args):
    ...

# Filter by context
tool_count()              # 3 (all tools)
tool_count("backend")     # 2 (deploy + health)
tool_count("frontend")    # 2 (render + health)
シグナルの圧縮
from vigil import SignalCompactor

compactor = SignalCompactor(db)

# Run compaction (tiered: raw → daily → weekly → monthly)
stats = compactor.compact()
# {'daily_summaries': 5, 'weekly_digests': 2, 'monthly_snapshots': 1, 'signals_compacted': 47}

# Browse compacted history
history = compactor.get_history(days=30, agent="backend-agent")
シグナルの種類と上限
種類上限用途
observation400 chars通常のアクティビティ更新
handoff600 charsセッションの結論
summary800 chars包括的な概要
alert300 chars緊急通知

アーキテクチャ

Agents emit signals → SQLite → Daemon compiles → Hot context → Agents boot instantly
                                    ↓
                            Frame detection
                            Awareness synthesis
                            Signal compaction
                            Focus queue
  • インフラストラクチャ不要 — SQLite ストレージを使用し、Redis/Postgres/Docker は不要です
  • フレームワークに依存しません — MCP 対応のクライアントや単体で動作します
  • 軽量 — 純粋な Python で実装されており、重い依存関係はありません(mcp は任意です)

インテグレーション

一般的な AI ツール向けのすぐに使える設定を用意しています。セットアップガイドの全容については、examples/ ディレクトリをご覧ください。

ツールセットアップ
Claude Codeclaude mcp add vigil -- vigil serve を実行します(ガイド)
Claude Desktopclaude_desktop_config.json に追加します(ガイド)
Cursor.cursor/mcp.json に追加します(ガイド)
GitHub ActionsCI/CD からシグナルを送信します(ワークフロー)
Slackトリガーを使ってアラートを Slack に転送します(ガイド)
Discordトリガーを使ってアラートを Discord に転送します(ガイド)
シェル補完
# Bash
source completions/vigil.bash

# Zsh
cp completions/vigil.zsh ~/.zsh/completions/_vigil

CLI リファレンス

コマンド説明
vigil init新しいプロジェクトを初期化します
vigil quickstart対話型セットアップウィザード
vigil daemon start状況認識デーモンを起動します
vigil daemon statusデーモンのコンパイル状態を確認します
vigil serveMCP サーバーとして起動します(stdio または SSE)
vigil signal <agent> <msg>シグナルを送信します
vigil status現在の状況認識を表示します
vigil bootコンパイル済みのホットコンテキストを表示します
vigil frames登録済みフレームを一覧表示します
vigil tools [--frame X]ツールを一覧表示します(必要に応じてフィルタリング)
vigil handoff <agent> <summary>構造化されたセッションの引き継ぎを記録します
vigil resume <agent>前回の引き継ぎから再開します
vigil history圧縮済みのシグナル履歴を参照します
vigil agents既知のエージェントを一覧表示します
vigil compactシグナルの圧縮を手動で実行します
vigil know <key> <value>ナレッジ項目を保存します
vigil recall <query>ナレッジをあいまい検索します
vigil knowledgeすべてのナレッジ項目を一覧表示します
vigil forget <key>ナレッジ項目を削除します
vigil extractシグナルパターンからナレッジを自動抽出します
vigil export状態を Markdown にエクスポートします
vigil mcp-healthMCP サーバーの健全性(呼び出し、エラー、レイテンシ)
vigil mcp-health-check <cmd>CI で MCP サーバーを検査します(終了コード 0/1)
vigil doctorよくある問題を診断します
vigil versionバージョンを表示します

MCP の本番環境オブザーバビリティ

1 行のコードで任意の MCP サーバーを監視できます。ツール呼び出し、レイテンシ、エラーを追跡し、アラートを自動的に発行します。

from mcp.server.fastmcp import FastMCP
from vigil.mcpwatch import instrument

mcp = FastMCP("my-server")

@mcp.tool()
async def search(query: str) -> str:
    return "results"

# One line — all tools are now monitored
watch = instrument(mcp)

監視対象:

  • サイレント障害 — エラーが発生せず、空、null、または空白のコンテンツを返す呼び出しです。独立した silent ステータスとして記録され、ヘルスと統計に表示され、アラートの対象になります。これが主な機能です。
  • すべてのツール呼び出し:名前、所要時間、成功/エラー/サイレント
  • レイテンシの急増(しきい値を設定可能。デフォルトは 5s)
  • 詳細なトレースバックを含むエラーパターン(低レベルの isError 応答を含む)
  • サーバーの無応答(N 分間、呼び出しがまったくない状態)

3 つの使用方法:

# 1. Local Vigil — store in same DB as your signals
watch = instrument(mcp, db_path="vigil.db")

# 2. Vigil Cloud — send to your hosted instance
watch = instrument(mcp, api_key="vgl_...")

# 3. Memory-only — just in-process stats
watch = instrument(mcp)

いつでもヘルスを確認できます:

health = watch.health()
# {'server': 'my-server', 'status': 'degraded', 'total_calls': 1247,
#  'total_errors': 25, 'error_rate': 0.02,
#  'total_silent': 140, 'silent_rate': 0.112,   # <- the failures nobody else flags
#  'tools': {'search': {'avg_ms': 42, 'p95_ms': 180, 'silent_count': 140}}}

watch.recent_silent()   # the actual empty/null calls, per tool

例外が発生せずに ""、None、または [] を返すツールは、MCP における典型的な盲点です。SDK は成功を報告し、エージェントは何もない状況をなんとか埋め合わせます。 MCPWatch はこれを、一級のシグナルとして扱います。

CLI:

vigil mcp-health              # All monitored servers
vigil mcp-health -s my-server # Specific server

REST API(6 つのエンドポイント):

エンドポイント説明
GET /mcp/healthサーバーのヘルス概要(サイレント率を含む)
GET /mcp/toolsツールごとの分析
GET /mcp/silent最近のサイレント障害(空/null の戻り値)
GET /mcp/errors最近のエラー
GET /mcp/latencyp50/p95/p99 パーセンタイル
GET /mcp/volume時間経過に伴う呼び出し量

Mem0/Letta/LangGraph だけではだめなのですか?

VigilMem0LettaLangGraph
アプローチアウェアネスデーモンメモリ検索ステートフルランタイムステートマシン
コンテキスト事前コンパイル済み、即時起動必要に応じてクエリLLM による管理チェックポイントベース
ツールのフィルタリングフレームベース(50〜90%の節約)なしなしなし
マルチエージェントシグナルプロトコル+引き継ぎ共有メモリ単一エージェントグラフのエッジ
コンパクション階層型(日次/週次/月次)なしLLM による管理なし
MCP ネイティブサーバーを内蔵いいえいいえいいえ
インフラストラクチャSQLite(セットアップ不要)API+LLM のコストフルランタイムLangChain エコシステム
ロックインなし(フレームワークに依存しない)Mem0 APILetta プラットフォームLangChain

Vigil は神経系であり、その他はファイリングキャビネットです。併用してください。Vigil がアウェアネスと連携を担い、Mem0/Letta が深いメモリを担います。

ライセンス

MIT

コメント

MCP は初めてですか?

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

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