Aegis について
Aegis は、AI コーディングエージェントにアーキテクチャガイドラインを提供する MCP サーバーです。RAG による検索ではなく、依存エッジの DAG から決定的にコンテキストを編成します。エージェントに設計ルールを守らせつつ、トークン消費を抑えたいチーム向けです。ルールの変更には、別の admin サーフェスでの人による承認が必要です。
主な機能
- 01DAG に基づく決定的なコンテキスト編成
- 02対象ファイルに応じたドキュメント選択
- 03agent と admin の MCP サーフェスを分離
- 04ルール変更には人による承認が必要
- 05Git で管理する bundle による知識の共有
活用シーン
- 01コーディングエージェントにモジュール別の設計制約を渡す
- 02不足しているガイドラインを observe で記録し提案を作成する
- 03承認済みのアーキテクチャ知識をチーム間で同期する
MCP 対応
Aegis は MCP サーバーとして動作し、agent サーフェスで aegis_compile_context や aegis_observe などのツールを公開します。admin サーフェスは初期化、ドキュメント取り込み、承認を担当します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
6掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| target_files | array | はい | 編集中のファイルパス(必須) |
| target_layers | array | いいえ | 明示的なレイヤー名(省略可。省略した場合はパスから推定) |
| agent_id | string | いいえ | ワークスペースの可視性に使用する任意のクライアント自己 ID(compile_log にのみ保存され、コンパイル出力には影響しません)。 |
| command | string | いいえ | コマンド名:scaffold、refactor、review など。 |
| plan | string | いいえ | コンテキスト拡張用の自然言語による計画テキスト(IntentTagger が必要) |
| intent_tags | array | いいえ | コンテキスト拡張用の明示的な意図タグ。設定すると([] を含む)、SLM タガーは使用されません。省略すると、plan に基づいて SLM にフォールバックします。 |
| max_inline_bytes | number | いいえ | インラインコンテンツの上限(UTF-8 バイト単位、デフォルト:131072 = 128KB) |
| content_mode | enum | いいえ | コンテンツ配信モード(デフォルト:auto)auto | always | metadata |
| include_debug | boolean | いいえ | debug_info(near_miss_edges、layer_classification、budget_dropped)をレスポンスに含めます。デフォルト:false — 同じ診断情報は常に記録され、aegis_get_compile_audit から取得できます。 |
| min_relevance | number | いいえ | 関連性スコアがこのしきい値(0-1)を下回るドキュメント/テンプレートを省略します。関連性スコアのないドキュメント(plan が指定されていない場合)は常に保持されます。デフォルト:0(フィルタリングなし)。 |
詳細
Aegis
AI コーディングエージェント向け DAG ベースの決定論的コンテキストコンパイラー
Aegis は、AI コーディングエージェントにアーキテクチャガイドラインを適用する MCP サーバーです。RAG の代わりに、依存関係のエッジで構成される DAG を使用して、指定されたターゲットファイルに必要なドキュメントだけを決定論的にコンパイルします。検索も順位付けもありません。決定論的です。
クイックスタート
- IDE の MCP 設定に Aegis を追加します(インストールを参照)
- AI エージェントに次のように依頼します。「このプロジェクト用に Aegis を初期化して、アダプタールールをデプロイしてください。」
- エージェントが
aegis_init_detect→aegis_init_confirm→npx @fuwasegu/aegis deploy-adaptersを自動的に実行します
データベースは、プロジェクトのルートにある .aegis/aegis.db に保存されます。.aegis/ ディレクトリには専用の .gitignore が含まれているため、手動設定は不要です。
インストール
Aegis は 2 つの MCP サーフェスを使用します。両方が必要です。
| サーフェス | 役割 | ツール |
|---|---|---|
| agent | コンテキストのコンパイル、観測の記録、および関連する読み取り — Canonical の変更は不可 | 6 個のツール(compile、observe、audit、known_tags、workspace_status、detect) |
| admin | 初期化、承認、トリアージ | 24 個のツール(共通 6 個 + admin 専用 18 個) |
agent サーフェスだけでは、プロジェクトの初期化や提案の承認はできません。この分離により、人間の承認なしに AI エージェントがアーキテクチャルールを変更できないようにしています。(INV-6)
Cursor
.cursor/mcp.json に追加します。
{
"mcpServers": {
"aegis": {
"command": "npx",
"args": ["-y", "@fuwasegu/aegis", "--surface", "agent"]
},
"aegis-admin": {
"command": "npx",
"args": ["-y", "@fuwasegu/aegis", "--surface", "admin"]
}
}
}
初期化後、deploy-adapters は .cursor/rules/aegis-process.mdc を生成します。これは、コードを書く前に Aegis を参照し、その後に違反を報告するようエージェントに指示する Cursor ルールです。
Claude Code
claude mcp add aegis -- npx -y @fuwasegu/aegis --surface agent
claude mcp add aegis-admin -- npx -y @fuwasegu/aegis --surface admin
または、.mcp.json に手動で追加します
{
"mcpServers": {
"aegis": {
"command": "npx",
"args": ["-y", "@fuwasegu/aegis", "--surface", "agent"]
},
"aegis-admin": {
"command": "npx",
"args": ["-y", "@fuwasegu/aegis", "--surface", "admin"]
}
}
}
初期化後、deploy-adapters は CLAUDE.md に `` セクションを追記します(存在しない場合は作成します)。
Codex
codex mcp add aegis -- npx -y @fuwasegu/aegis --surface agent
codex mcp add aegis-admin -- npx -y @fuwasegu/aegis --surface admin
または、.mcp.json に手動で追加します
{
"mcpServers": {
"aegis": {
"command": "npx",
"args": ["-y", "@fuwasegu/aegis", "--surface", "agent"]
},
"aegis-admin": {
"command": "npx",
"args": ["-y", "@fuwasegu/aegis", "--surface", "admin"]
}
}
}
初期化後、deploy-adapters は AGENTS.md に `` セクションを追記します(存在しない場合は作成します)。
注: Codex の MCP サポートは CLI のバージョンによって異なります。MCP を利用できない場合でも、エージェントは生成された
AGENTS.mdの指示に従って Aegis のガイドラインを利用できます。
使い方
1. プロジェクトを初期化する
admin サーフェスを使用して、空のナレッジベースで Aegis を初期化します。
aegis_init_detect({ project_root: "/path/to/your/project", skip_template: true })
aegis_init_confirm({ preview_hash: "<hash from detect>" })
空のナレッジベースが作成されます。次の手順でアーキテクチャドキュメントを追加します。
次に、CLI を使って AI コーディングツール用のアダプタールールと Agent Skills をデプロイします。
npx @fuwasegu/aegis deploy-adapters
npx @fuwasegu/aegis deploy-adapters --targets cursor,codex # specific adapters only
2. 開発中に使用する
agent サーフェスは、AI コーディングエージェント向けのツールを提供します。拡張コンテキスト(タグ駆動のドキュメント)を使う場合の推奨フローは、セッションごとに aegis_get_known_tags を 1 回呼び出し(tag_catalog_hash をキャッシュ)、その後 intent_tags を compile に渡すことです。
aegis_get_known_tags({})
aegis_compile_context({
target_files: ["src/core/store/repository.ts"],
plan: "Add a new query method for archived observations",
intent_tags: ["<tags from known_tags>"]
})
代わりに、オプションのサーバー側 SLM タガー(--slm が有効な場合)に plan からタグを推定させる場合に限り、intent_tags を省略してください(ADR-004)。SLM を使わずに拡張コンテキストをスキップするには、intent_tags: [] を渡します。
ベース DAG のみ(拡張コンテキストをスキップします。intent_tags: [] によって拡張コンテキストが無効になり、SLM によるタグ付けもスキップされるため、--slm の有無にかかわらず同じように動作します)。
aegis_compile_context({
target_files: ["src/core/store/repository.ts"],
plan: "Add a new query method for archived observations",
intent_tags: []
})
編集対象のファイルに関連するアーキテクチャガイドライン、パターン、制約が返されます。
3. アーキテクチャドキュメントを追加する
初期化後、コードベースを分析してナレッジベースに内容を追加します。aegis_import_doc を admin サーフェスで使用し、ファイルパスに接続する edge_hints を指定してアーキテクチャドキュメントを追加します。
aegis_import_doc({
file_path: "/absolute/path/to/docs/architecture-guide.md",
doc_id: "architecture-guide",
title: "Architecture Guide",
kind: "guideline",
tags: ["architecture"],
edge_hints: [
{ source_type: "path", source_value: "src/domain/**", edge_type: "path_requires" }
]
})
file_path を使用すると、ディスクから直接内容を読み込めるため、LLM のコンテキストウィンドウによる切り詰めを回避できます。インポートごとに proposal_ids が返されます。ドキュメントを有効にするには、これらを承認してください。
インポートしたドキュメントをソースファイルと同期した状態に保つには、次のようにします。
aegis_sync_docs() # detects changes via content hash, creates update_doc proposals
aegis_import_doc と aegis_sync_docs は、どちらも admin サーフェスを必要とします。詳細な手順を含む一括インポートのワークフローについては、deploy-adapters を介してデプロイする aegis-bulk-import スキルを参照してください。
4. 気づいた点を報告する
エージェントがガイドラインの欠落や修正点に気づいた場合は、次のようにします。
aegis_observe({
event_type: "compile_miss",
related_compile_id: "<from compile_context>",
related_snapshot_id: "<from compile_context>",
payload: { target_files: ["..."], review_comment: "Missing error handling guideline" }
})
5. 提案を確認する
気づいた点は分析され、提案にまとめられます。admin サーフェスから確認して承認してください。
aegis_list_proposals({ status: "pending" })
aegis_approve_proposal({ proposal_id: "<id>" })
プロジェクトの共有(チームのワークフロー)
Aegis では、Git にコミットするバンドル成果物を使って、承認済みの Canonical Knowledge をチームメンバー間で共有できます。これにより、開発者がそれぞれ一からナレッジベースを構築する必要がなくなります。
仕組み
| ディレクトリ | 用途 | Git で追跡するか |
|---|---|---|
.aegis/ | ローカルのランタイムデータベース(気づいた点、提案、コンパイルログ) | いいえ |
aegis-share/ | 承認済み Canonical Knowledge の共有スナップショット | はい |
作成ワークスペース(ナレッジメンテナー)
提案を承認した後、現在の Canonical の状態をエクスポートします。
npx @fuwasegu/aegis share-export # writes aegis-share/manifest.json + canonical.json
npx @fuwasegu/aegis share-export --out /path # custom output directory
その後、aegis-share/ をコミットしてプッシュします。
レプリカワークスペース(チームメンバー)
更新された aegis-share/ を含む変更をプルした後、次のようにします。
npx @fuwasegu/aegis share-hydrate # rebuild .aegis/aegis.db from aegis-share/
npx @fuwasegu/aegis share-hydrate --replace # overwrite existing initialized DB
npx @fuwasegu/aegis share-hydrate --bundle-dir /path # custom bundle directory
警告:
share-hydrateは DB 全体を置き換えます。ローカルの運用状態(気づいた点、提案、コンパイルログ)は保持されません。これは設計どおりです。レプリカワークスペースは共有ナレッジの利用者であり、作成者ではありません。
共有状態の監視
Aegis は、ローカル DB と共有バンドルの間にある差異を自動的に検出します。
npx @fuwasegu/aegis doctor— 共有状態(in_sync、bundle_newer、local_ahead、diverged、unreadable_bundle)を表示します。対応が必要な状態の場合は終了コード 1 を返します。npx @fuwasegu/aegis stats— JSON 出力にproject_shareを含め、詳細な状態を表示します。aegis_compile_contextの通知 — バンドルが同期されていない場合、エージェントに対応方法のヒント(例:「share-hydrateを実行して更新してください」)を提供します。
not_configured 状態(aegis-share/ ディレクトリがない場合)は通知されません。共有を設定するまでは余計な通知はありません。
一般的なチームのワークフロー
Authoring Workspace Replica Workspace
─────────────────── ─────────────────
approve proposals ──► share-export ──► git push ──► git pull ──► share-hydrate
aegis-share/ committed
- 作成者がナレッジベースを操作します(ドキュメントのインポート、提案の承認、同期)
- 作成者が
share-exportを実行して、aegis-share/をコミットします - チームが
git pullを実行し、その後share-hydrate --replaceを実行します - レプリカで
compile_contextを実行すると、作成者と同じガイドラインが返されます
共同編集(ソースネイティブ)
上記の DB ネイティブのワークフロー(観察 → 提案 → 承認)に加えて、Aegis はソースネイティブの共同編集モードにも対応しています。チームメンバーは aegis-share/source/ の人が読めるソースファイルを編集し、プルリクエストで変更を確認してから、データベースに反映します。
重要なルール:
compile_contextは常にデータベースから読み込み、ソースファイルを直接参照することはありません。ソースファイルは編集用の形式であり、DB はランタイム用の形式です。
2 つの承認経路
| 経路 | 起点 | 承認方法 | 適した用途 |
|---|---|---|---|
| DB ネイティブ | エージェントが不足に気づく → aegis_observe → aegis_approve_proposal | 人が admin サーフェスで提案を承認 | エージェントの気づきを起点とした、状況に応じたナレッジの改善 |
| ソースネイティブ | 人が aegis-share/source/ を編集 → PR → マージ → share-materialize | PR のマージを承認とする | Git ベースのコードレビューを通じた、先回りした共同編集 |
どちらの経路も併用できます。状況に合った方法を使うか、両方を使ってください。
ディレクトリ構成
aegis-share/
├── manifest.json # Distribution bundle manifest (ADR-017)
├── canonical.json # Distribution bundle data (ADR-017)
└── source/ # Collaborative authoring source (ADR-018)
├── documents/
│ └── <doc_id>.md # Frontmatter + Markdown body
├── edges/
│ ├── path-requires.json
│ ├── layer-requires.json
│ ├── command-requires.json
│ └── doc-depends-on.json
├── layer-rules.json
└── tag-mappings.json
ソースネイティブのワークフロー
# 1. Bootstrap: export current DB to source format (one-time setup)
npx @fuwasegu/aegis share-source-export
# 2. Edit source files (documents, edges, rules, mappings)
# Create a branch, make changes, open a PR
# 3. Validate before committing
npx @fuwasegu/aegis share-format # Normalize formatting (deterministic, in-place)
npx @fuwasegu/aegis share-lint # Check for errors (after formatting)
# 4. After PR merge: apply source to DB
npx @fuwasegu/aegis share-materialize # Applies changes + auto-approves
npx @fuwasegu/aegis share-materialize --dry-run # Preview changes without applying
# 5. Export updated bundle for replicas
npx @fuwasegu/aegis share-export
CI 連携
マージ前にエラーを検出するため、CI パイプラインに share-lint を追加します。
npx @fuwasegu/aegis share-lint # exits 1 on errors — suitable for CI checks
フェーズ 1 の制限事項
- ローカルオーバーレイはサポートされていません。すべての変更は共有ソースを通じて行います
share-materializeは全体を適用します(増分パッチではありません)
拡張コンテキスト向け SLM — オプトイン
Aegis には、任意で SLM ベースの意図タグ付けを行うための llama.cpp エンジンが組み込まれています。SLM はデフォルトで無効です。決定論的な DAG ベースのコンテキストは、SLM なしでも問題なく機能します。
有効にするには、エージェントのサーフェスに --slm を追加します。
{
"mcpServers": {
"aegis": {
"command": "npx",
"args": ["-y", "@fuwasegu/aegis", "--surface", "agent", "--slm", "--model", "qwen3.5-4b"]
},
"aegis-admin": {
"command": "npx",
"args": ["-y", "@fuwasegu/aegis", "--surface", "admin"]
}
}
}
SLM を有効にして初めて起動すると、選択したモデルが ~/.aegis/models/ にダウンロードされます(すべてのプロジェクトで共有されます)。
| モデル | サイズ | 説明 |
|---|---|---|
qwen3.5-4b | ~2.5 GB | 推奨デフォルト — 高速で軽量 |
qwen3.5-9b | ~5.5 GB | より高品質 — ベンチマークで最高の成績 |
HuggingFace URI を直接渡すこともできます:--model hf:user/repo:file.gguf
レガシー: Ollama ベースの推論を使用する場合は、
--ollamaフラグを利用できます。--ollamaを使用すると、SLM が暗黙的に有効になります。
リファレンス
MCP ツール — エージェントサーフェス(6 ツール)
| ツール | 説明 |
|---|---|
aegis_compile_context | 対象ファイルの決定論的なコンテキストをコンパイルします。出力サイズを制御するため、content_mode(auto/always/metadata)、max_inline_bytes、min_relevance(関連性の低いドキュメントを省略)、include_debug(オプトインの debug_info。デフォルトはオフ)をサポートします |
aegis_observe | 観察結果を記録します(compile_miss、review_correction、pr_merged、manual_note、document_import、doc_gap_detected) |
aegis_get_compile_audit | 過去のコンパイルの監査ログを取得します |
aegis_get_known_tags | tag_mappings(承認済みリンク)から、knowledge_version とキャッシュ用の SHA-256 tag_catalog_hash を伴う個別の意図タグを取得します |
aegis_workspace_status | 読み取り専用のワークスペーススナップショット:最近のコンパイル領域、未解決の compile_miss のバックログ、保留中の提案数、調整のバックログ(hash-sync/anchor-sync/semantic-review) |
aegis_init_detect | プロジェクトを分析し、初期化プレビューを生成します |
MCP ツール — 管理サーフェス(追加の 18 ツール、合計 24 ツール)
| ツール | 説明 |
|---|---|
aegis_init_confirm | プレビューハッシュを使用して初期化を確定します |
aegis_list_proposals | オプションのステータスフィルターを指定して提案を一覧表示します |
aegis_get_proposal | 証拠を含む提案の詳細をすべて取得します |
aegis_approve_proposal | 保留中の提案を承認します |
aegis_preflight_proposal_bundle | bundle_id を共有する保留中の提案をドライランします |
aegis_approve_proposal_bundle | バンドル内の保留中の提案をすべて承認します(アトミック) |
aegis_reject_proposal | 理由を指定して保留中の提案を却下します |
aegis_check_upgrade | テンプレートのバージョンアップグレードを確認します |
aegis_apply_upgrade | テンプレートのアップグレード用の提案を生成します |
aegis_archive_observations | 古い観察結果をアーカイブします |
aegis_get_stats | ナレッジ数と健全性シグナルを集計します |
aegis_list_observations | 結果に基づくフィルタリング(proposed / skipped / pending)を行い、観察結果を一覧表示します |
aegis_import_doc | ドキュメントを Canonical Knowledge にインポートします(content または file_path から)。大きなコンテンツ、複数のセクション、または semantic-review の調整モードに対する注意喚起を返します |
aegis_analyze_doc | ADR-015:コンテンツまたは file_path を ImportPlan に分析します(読み取り専用) |
aegis_analyze_import_batch | ADR-015:ドキュメント間の重複を考慮した一括インポート分析 |
aegis_execute_import_plan | bundle_id を共有する document_import 提案を作成します |
aegis_process_observations | 保留中の観察結果に対する観察分析パイプラインを開始します |
aegis_sync_docs | ファイルにアンカーされたドキュメントをソースファイルと同期します(調整モード対応:hash-sync、anchor-sync、semantic-review) |
CLI サブコマンド
| サブコマンド | 説明 |
|---|---|
deploy-adapters | IDE アダプター設定(Cursor ルール、CLAUDE.md、AGENTS.md)と Agent Skills をデプロイします |
maintenance | 観測処理、ドキュメント同期、アーカイブ、アップグレード確認を実行します |
stats | ナレッジの件数、使用状況、健全性、プロジェクトの共有状況を JSON 形式で出力します |
doctor | 人が読みやすい形式で健全性を確認します(問題が見つかった場合は 1 で終了します) |
share-export | 承認済みの Canonical Knowledge を aegis-share/ にエクスポートします |
share-hydrate | 共有バンドルからローカル DB を再構築します(DB 全体を置き換えます) |
share-source-export | 初期設定:DB を人が編集可能な aegis-share/source/ にエクスポートします |
share-lint | aegis-share/source/ を検証します(解析エラー、参照先のない項目) |
share-format | aegis-share/source/ を決定的に正規化します(インプレース) |
share-materialize | aegis-share/source/ を DB に適用します(ソース側で承認) |
npx @fuwasegu/aegis deploy-adapters # Deploy all adapters
npx @fuwasegu/aegis deploy-adapters --targets cursor,codex # Deploy specific adapters
npx @fuwasegu/aegis deploy-adapters --project-root /path # Specify project root
npx @fuwasegu/aegis deploy-adapters --db /path/to/aegis.db # Use custom DB path
npx @fuwasegu/aegis maintenance # Process observations, sync, archive
npx @fuwasegu/aegis maintenance --dry-run # Report only (no writes)
npx @fuwasegu/aegis stats # JSON health and usage data
npx @fuwasegu/aegis doctor # Health check summary
npx @fuwasegu/aegis share-export # Export to aegis-share/
npx @fuwasegu/aegis share-hydrate --replace # Rebuild DB from bundle
npx @fuwasegu/aegis share-source-export # Export DB to aegis-share/source/
npx @fuwasegu/aegis share-lint # Validate shared source
npx @fuwasegu/aegis share-format # Normalize shared source
npx @fuwasegu/aegis share-materialize # Apply source to DB
npx @fuwasegu/aegis share-materialize --dry-run # Preview changes
npx @fuwasegu/aegis --list-models # List available SLM models
注記:バージョン追跡が更新されるのは、
--targetsを指定しない完全デプロイの場合のみです。部分デプロイではバージョン記録が更新されないため、完全デプロイを実行するまで「アダプターテンプレートが古い可能性があります」という通知が表示され続けます。
CLI フラグ(MCP サーバーモード)
| フラグ | デフォルト | 説明 |
|---|---|---|
--surface | agent | agent または admin |
--db | .aegis/aegis.db | SQLite データベースのパス |
--templates | ./templates | 同梱テンプレートのディレクトリ |
--template-dir | 追加のテンプレート検索パス(ローカルの設定が同梱テンプレートより優先されます) | |
--slm | false | コンテキスト拡張のために SLM を有効にします(インテントタグ付け) |
--model | qwen3.5-4b | SLM のモデル名または HuggingFace URI(--slm が必要です) |
--list-models | 利用可能なモデルを表示して終了します | |
--ollama | false | 組み込みの llama.cpp の代わりに Ollama を使用します(--slm を暗黙的に指定します) |
--project-root | cwd() | リポジトリ相対の source_path 解決とデフォルト DB パスに使用するプロジェクトルート |
--ollama-url | http://localhost:11434 | Ollama API の URL(--ollama 使用時) |
開発
ビルド
npm run build # Compile TypeScript
npm test # Run all tests (406+)
npm run test:watch
ソースからビルド
git clone https://github.com/fuwasegu/aegis.git
cd aegis
npm install && npm run build
アーキテクチャ
┌─ MCP Layer (src/mcp/) ──────────────────┐
│ Tool registration, surface separation │
└──────────────┬──────────────────────────┘
│
┌─ Core Layer (src/core/) ────────────────┐
│ ContextCompiler, Repository, Init, │
│ Automation (Analyzers), Tagging │
└──────────────┬──────────────────────────┘
│
┌─ Adapters (src/adapters/) ──────────────┐
│ Cursor, Claude rule generation │
└──────────────┬──────────────────────────┘
│
┌─ Expansion (src/expansion/) ────────────┐
│ llama.cpp engine, IntentTagger │
└─────────────────────────────────────────┘
依存関係は下位方向に流れます。Core が MCP、Adapters、Expansion からインポートすることはありません。
主な概念
- Canonical Knowledge:承認済みのアーキテクチャ文書と DAG エッジ
- Observation Layer:エージェントが報告するイベント(コンパイルの見落とし、修正、PR のマージ)
- Proposed Layer:人による承認が必要な自動提案
- Snapshots:Canonical Knowledge の不変でコンテンツアドレス可能なバージョン
ライセンス
ISC
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。