Brainy について
Brainyは、AIエージェントと人が協働するチーム向けのセルフホスト型ナレッジ・タスクサービスです。Git管理のMarkdownに、タスクの取得、領域ごとの権限、承認、監査ログを組み合わせています。
主な機能
- 01Git管理のMarkdownナレッジ
- 02アトミックな取得とリース付きタスク
- 03領域ごとのロールとアクセス制御
- 04変更提案への人による承認
- 05追記専用の監査ログ
- 06ウェブ管理画面
活用シーン
- 01エージェント間でタスクを引き継ぐ
- 02複数エージェントで管理されたナレッジを共有する
- 03採用前にエージェントの変更を確認する
- 04タスクやリソースの重複作業を防ぐ
MCP 対応
BrainyはMCPエンドポイントを通じて、ナレッジ、タスク、リソース取得の操作を提供します。MCPクライアントはHTTPまたはローカルのstdioプロセスで接続でき、リモートコネクターではOAuth 2.1を利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm ghcr.io/memokar/brainy:0.2.0ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/memokar/brainy:0.2.0Streamable HTTPツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Brainy
AI エージェントと、エージェントと働く人間のための共有ブレインです。
Brainy はセルフホスト可能なナレッジおよびタスクの基盤です。Claude、ChatGPT、その他の MCP対応 AI は、1 つの管理されたエンドポイントを通じて接続します。 すべてのエージェントが同じナレッジを読み、同じタスクリストを使い、監査証跡を残します。 そのため、AI は別々のチャットの中に閉じこもるのではなく、互いに作業を引き継げます。
ChatGPT ─┐ ┌─ Git-versioned knowledge (Markdown)
Claude ─┼──► MCP endpoint ──► Brainy ───┼─ Tasks with atomic claim/lease
Your bot ┘ (OAuth / tokens) ACL+Audit └─ Spaces, roles, append-only audit log
▲
Humans: web admin UI (+ optional Telegram approvals)
Brainy を選ぶ理由
- AI 同士が協力できます。 ChatGPT がタスクを作成し、Claude が引き受けて作業し、結果を書き戻し、人間がレビューします。調整はタスクを通じて行われ、エージェント間で隠れた処理が行われることはありません。
- 信頼できる唯一の情報源です。 ナレッジは Git リポジトリ内のプレーンな Markdown として保存されます。書き込みはすべてコミットになるため、履歴、差分、ロールバックをすぐに利用できます。
- デフォルトで安全です。 MCP 経由のシェル、ファイルシステム、eval はありません。パスの許可リスト、スペースごとの ACL、書き込み時のシークレット検出、レート制限、ハッシュ化されたトークン、追記専用の監査ログを備えています。
- 二重作業を防ぎます。 リースとクレームトークンを使ったアトミックなタスクの取得により、2 つのエージェントが同じタスクを同時に処理することはありません。
- 人間がプロセスに参加できます。 エージェントはナレッジの変更を提案できます。人間が(ウェブ UI または Telegram で)承認または却下します。タスクは完了と見なされる前に、レビューまたは承認を必須にすることもできます。
- 依存関係はゼロです。 Python 標準ライブラリと SQLite のみを使用します。pip install は不要で、攻撃対象領域も小さくなっています。
Markdown ファイルだけでは不十分な理由
Git リポジトリ内の共有メモファイルは、ナレッジの保存先として優れています。Brainy は意図的にその部分を維持しています。ナレッジは Git 内のプレーンな Markdown で、履歴、差分、ロールバックを利用できます。問題は、複数のエージェントが触れるようになると、単独のファイルでは対応できないことです。
- 2 つのエージェントが互いの変更を上書きします。 同じファイルへの並行書き込みを直列化する仕組みがありません。Brainy の書き込みでは楽観的同時実行制御(
expected_git_commit)とサーバー側の書き込みロックを使用します。コミットできるのは書き込み元のうち 1 つだけで、それ以外にはConflictが返され、再読み込みが必要になります。編集が失われることはありません。 - タスクを引き継げません。 ファイルに TODO を列挙することはできますが、2 つのエージェントが同じタスクを取得するのを防ぐことはできません。Brainy のタスクではアトミックな取得(
UPDATE ... WHERE status='READY'、1 行)を使います。1 つのエージェントだけが取得に成功し、それ以外には競合が返され、次に進みます。 - 領域ごとの権限がありません。 ファイルへのアクセスは全か無かです。Brainy にはスペースごとの ACL を設定できるスペースがあり、エージェントには許可した領域のみを読み書きさせることができます。
- 承認ステップがありません。 エージェントが信頼できる唯一の情報源に直接書き込む代わりに、人間が承認する変更を提案できます(ウェブ UI または Telegram)。
git blameだけでは「誰が何を変更したか」がわかりません。 タスク状態の読み取り、取得、書き込み、却下など、すべてのアクションが、DB トリガーによって強制される追記専用の監査ログに記録されます。
上記 2 つの保証は、並行処理のテスト(tests/test_concurrency.py)で検証されています。1 つのタスクを 20 個のスレッドが同時に処理しようとすると、成功は 1 件、競合は 19 件となります。同じファイルに 20 個のスレッドが書き込む場合も、コミットは 1 件、競合は 19 件となり、リポジトリはクリーンな状態に保たれます。
Brainy はどのように異なるのですか?
多くの人がよく話題にするツールとの、誠実な比較です。Beads は Brainy の タスク 側に最も近く、Central Brain は ナレッジ 側に最も近いものの、どちらも完全に一致するものではありません。情報は各プロジェクトのドキュメント(下記リンク)に基づいています。記載のない項目は、推測せずにその旨を示しています。
| Brainy | Beads 1 | Central Brain 2 | 共有ノートファイル | |
|---|---|---|---|---|
| 概要 | ナレッジベース + タスクキュー | AI エージェント向けの課題/タスクトラッカー | AI メモリレイヤー | リポジトリ内の Markdown |
| ナレッジの保存先 | Git 内の Markdown | —(課題トラッカー) | プレーンファイル+ローカルのベクトルインデックス | Git 内の Markdown |
| アトミックな取得機能を備えたタスクキュー | ✅ | ✅ | ドキュメントに記載なし | ❌ |
| 領域ごとの権限(ACL) | ✅ スペース/ロール | ❌ | ❌ | ❌ |
| 追記専用の監査ログ | ✅(DB で強制) | 一部対応(Git/DB の履歴) | ❌ | git blame のみ |
| 書き込みに対する人間の承認 | ✅(Web/Telegram) | ❌ | ❌ | ❌ |
| MCP サーバー | ✅ | ✅ | ✅ | ❌ |
| マルチエージェントの同時実行制御 | ✅ 取得+書き込みロック | ✅ 取得+同時書き込み | ドキュメントに記載なし | ❌ |
| 依存関係 | なし(標準ライブラリ+SQLite) | Dolt(Go)を同梱 | 埋め込みモデルを同梱 | 該当なし |
| セルフホスト可能 | ✅ | ✅ | ✅(クラウドは任意) | ✅ |
| ライセンス | AGPL-3.0(+商用) | MIT | プロプライエタリ | 該当なし |
機能
| 領域 | 利用できる機能 |
|---|---|
| ナレッジ | list_documents、get_document、search_knowledge、write_document(Git コミットによる楽観的同時実行制御)、append_document、propose_write |
| タスク | create_task、claim_task、renew_claim、complete_task、fail_task、release_task、依存関係、優先度、レビュー/承認/却下 |
| リソースの取得 | claim_resource、renew_resource、release_resource、list_resource_claims — アトミックなリースを使って任意のリソース(スペースごとの自由形式のキー。例:ファイルパスや領域)を予約します。タスクの取得と同じ方式です |
| アクセス | スペース(テナント/領域)、ロール ADMIN/EDITOR/AGENT/READER、スペースごとの ACL、サービストークン、OAuth 2.1(Claude/ChatGPT のリモートコネクター用) |
| 運用 | Web 管理 UI、監査ログ、エージェントレジストリ+ディスパッチャーフレームワーク、バックアップおよび検証済み復元用スクリプト |
クイックスタート(Docker)
1 つのコマンドで試せます。クローンもセットアップも不要です。MCP stdio サーバーとして、一時的なデータベースとサンプルのナレッジを使う使い捨てデモを実行します(終了時に削除されます)。
docker run --rm -i ghcr.io/memokar/brainy:latest --demo
本番環境にインストールする場合は、サーバーを実行してください(リリースごとに公開されるビルド済みイメージを使用します)。
docker run -d --name brainy -p 127.0.0.1:8765:8765 -v brainy-data:/data ghcr.io/memokar/brainy:latest
docker logs brainy # prints your one-time ADMIN token on first start
または、Compose を使って自分でビルドできます。
git clone https://github.com/memokar/brainy.git
cd brainy
docker compose up -d
docker compose logs brainy # prints your one-time ADMIN token on first start
Brainy は http://127.0.0.1:8765 で待ち受けを開始します(MCP エンドポイント:/mcp、管理 UI:/admin — トークンでログインしてください)。リモート AI コネクターを使う場合は HTTPS の背後に配置し(deploy/nginx-brainy.conf.example を参照)、BRAINY_PUBLIC_BASE_URL を設定してください。
クイックスタート(Linux のベアメタル、Python ≥ 3.10)
export BRAINY_DB_PATH=$PWD/data/brainy.db
export BRAINY_KNOWLEDGE_ROOT=$PWD/data/knowledge
export BRAINY_WEB_SESSION_KEY=$PWD/data/web_session.key
cp -r examples/knowledge "$BRAINY_KNOWLEDGE_ROOT"
git -C "$BRAINY_KNOWLEDGE_ROOT" init -q && git -C "$BRAINY_KNOWLEDGE_ROOT" add -A \
&& git -C "$BRAINY_KNOWLEDGE_ROOT" commit -qm "initial knowledge"
python3 scripts/bootstrap.py "$BRAINY_DB_PATH" --with-token # prints ADMIN token once
python3 scripts/init_prod_db.py "$BRAINY_DB_PATH" # seeds default spaces
python3 scripts/serve.py
AI を接続する
- Claude Code:
claude mcp add --transport http brainy http://127.0.0.1:8765/mcp --header "Authorization: Bearer <token>" - ローカルの stdio クライアント(例:Claude Desktop): Brainy をサブプロセスとして実行します。
セットアップなしで試せます:{"mcpServers": {"brainy": {"command": "python3", "args": ["/opt/brainy/scripts/stdio.py"], "env": {"BRAINY_DB_PATH": "/var/lib/brainy/brainy.db", "BRAINY_KNOWLEDGE_ROOT": "/opt/brainy-knowledge", "BRAINY_TOKEN": "<token>"}}}}python3 scripts/stdio.py --demo(一時データを使用し、終了時に削除されます)。 - カスタムヘッダーを使用するその他の MCP クライアント: エンドポイントは
https://<your-host>/mcp、ヘッダーはAuthorization: Bearer <service token>です。 - Claude.ai/ChatGPT のリモートコネクター: OAuth 2.1 フローを使用します(
/.well-known/oauth-authorization-serverでディスカバリー)。BRAINY_PUBLIC_BASE_URLに HTTPS URL を設定してください。
Brainy は、公式 MCP Registry に io.github.memokar/brainy として登録されています。
各 AI に専用のプリンシパル(例:claude、chatgpt)を割り当て、ロールを AGENT に設定し、必要なスペースだけを許可してください。すべての操作は、その名前で監査ログに記録されます。
例:1つのリポジトリで2つのコーディングエージェントを使う
同じリポジトリで作業する2つのエージェントは、互いのファイルに手を加えてしまうことがあります。リソースの予約を使うと、それぞれがこれから作業する領域を予約できます。領域ごとに自由形式のキーを指定し、予約が解放されるかリースが期限切れになるまで、もう一方は作業を控えます。
// Agent A, before editing the auth code:
claim_resource { "space": "shared", "resource_key": "repo:app/src/auth/**", "lease_seconds": 1800 }
// -> { "claim_token": "…", "lease_until": "…" } A now owns that area
// Agent B, about to touch the same area:
claim_resource { "space": "shared", "resource_key": "repo:app/src/auth/**" }
// -> Conflict: already claimed → B picks a different area (e.g. "repo:app/src/api/**")
renew_resource { "space": "shared", "resource_key": "repo:app/src/auth/**", "claim_token": "…" } // A keeps working
release_resource { "space": "shared", "resource_key": "repo:app/src/auth/**", "claim_token": "…" } // A done → free again
list_resource_claims { "space": "shared" } // who holds what right now
タスクの予約と同じ保証が適用されます。一度に予約できるのは1つのエージェントだけで、期限切れのリースは自動的に解放されます(tests/test_resources.pyを参照)。リソースの予約では、タスクと同じ権限/スコープ(can_claim_tasks / brainy:tasks:write)を使用するため、タスクを予約できるエージェントはリソースも予約できます。
設定
すべての設定は環境変数から取得します。.env.exampleを参照してください。
シークレット(トークン、キー)がリポジトリやナレッジベースに保存されることはありません。
拡張機能
コアには、ワーカープラグインのインターフェースと決定論的なMockWorkerが含まれています。
エージェントがタスクを自律的に実行できるようにする実際のワーカー(Claude Code、Codexなど)は、
BRAINY_WORKER_PLUGINSを通じて読み込む別個の拡張機能です。docs/extensions.mdを参照してください。
テストの実行
for t in tests/test_*.py; do python3 "$t" || exit 1; done
ステータスとロードマップ
Brainyは作者の本番環境で稼働しています。現在の制限事項は次のとおりです。
- コードコメントは一部まだドイツ語です。ユーザー向けのテキストはすべて英語です。
- シングルノード設計(SQLite)です。実際に複数のライターによる負荷が発生した場合にのみ、PostgreSQLを導入します。
ライセンス
Copyright (C) 2026 Mehmet Karakolcu
Brainyはデュアルライセンスです。
- オープンソース: GNU AGPL-3.0。企業を含むすべての人が無料で利用できます。ただし、Brainyを改変して他者に提供する場合(ネットワークサービスとしての提供も含む)、AGPLに基づいて変更内容を公開する必要があります。
- 商用ライセンス: AGPLの義務なしでBrainyを使用または組み込みたい企業向けです。 COMMERCIAL.mdを参照してください。
コントリビューションには、コントリビューターライセンス契約への同意が必要です。
Footnotes
-
Beads — https://github.com/steveyegge/beads(MIT、Go。課題をバージョン管理対応の SQL データベースである Dolt に保存します。以前のバージョンでは SQLite+JSONL を使用していました)。 ↩
-
NeuroAIgent による Central Brain — https://neuroaigent.ai(ローカル優先の AI メモリ、Windows+Apple シリコン搭載 Mac、MCP 連携。執筆時点のサイト掲載価格:個人向けは月額 $12、4 ライセンスは月額 $35)。 ↩
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。