Strata について
Strataは、検索可能な思考やファイルをローカル機器に保存し、MCP対応AIツールに提供するセルフホスト型メモリーサーバーです。このリポジトリはSOLUMに置き換えられており、現在は参照用です。
主な機能
- 01保存した思考のセマンティック検索
- 02ローカルファイル保管庫へのファイル添付
- 03エージェントごとのAPIキーと権限
- 04エージェント操作のCSV監査ログ
- 05SQLiteまたはPostgreSQLとpgvector
活用シーン
- 01セッションをまたいだエージェント記憶の維持
- 02個人メモの意味検索
- 03エージェントのアクセスと活動の確認
- 04過去の記憶のインポート
MCP 対応
Strataは、思考の記録やセマンティック検索などの永続メモリー機能をMCP対応AIクライアントに提供します。エージェントごとのキーでアクセスを制御し、グローバルキルスイッチでMCPアクセスを無効化できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
STRATA v2.2
このリポジトリは SOLUM に置き換えられました。 SOLUM はこのプロジェクトの積極的に開発されているバージョンです。SQLite の代わりに PostgreSQL + pgvector を採用し、ツールセットを拡充したほか、こちらにはない多数の修正が加えられています。初めて利用する方は SOLUM から始めてください。 このリポジトリは引き続き参照用として利用できます。
セルフホスト可能な AI メモリーサーバー。あなたの思考を、あなたのハードウェアに、あなたのデータとして保存します。
Strata を選ぶ理由
AI はセッションが終了した瞬間にすべてを忘れてしまいます。Strata はそれを解決します。MCP 互換のあらゆる AI に、あなたのハードウェア上で動作する永続的なメモリーを提供します。クラウドでも、他人のサーバーでもありません。意味で検索し、実ファイルを添付して、すべてを Raspberry Pi 上で動かせます。



v2.2 の新機能
v2.0 では Strata が誰と話しているのかを認識できるようになりました。v2.2 では、拡張性、監査、過去の記憶について学びます。
- エージェントごとの API キー - 各 AI エージェントに、きめ細かな
read / write / delete / admin / kill権限を備えた専用キーを割り当てます。すべてのツールで 1 つのキーを共有する必要はありません。/admin/agentsから管理できます。 - グローバル MCP キルスイッチ - MCP、REST、
/api/*からすべてのエージェントを締め出す単一のトグルです。書き込み権限または kill 権限を持つエージェントならブレーキをかけられますが、再び有効にできるのは人間の管理者だけです。ツールが暴走したときに備えて設計されています。 - 3D コンステレーションビューアー -
/constellationで、思考の様子をリアルタイムに確認できます。神聖幾何学に基づくレイアウト(フラワー・オブ・ライフの背景、十二面体クラスター、フィボナッチ球面分布)、エージェントごとの色、ライブアクティビティストリームを備え、MCP がオフラインになるとシーン全体の彩度を下げるキルスイッチインジケーターも表示します。 - エージェントごとの識別色 - 各エージェントには厳選されたパレットから色が割り当てられ、管理パネルから編集できます。色はコンステレーションビューアーにも反映されるため、どのエージェントが何をしているのかを一目で確認できます。
- 保存時の暗号化(オプション) - root のみがアクセスできるファイルに鍵を保存する SQLCipher AES-256 暗号化です。デフォルトでは無効です。脅威モデルに応じて、環境変数を 1 つ設定し、セットアップスクリプトを実行すると有効になります。
- ファイルレベルのセキュリティ強化(オプション) - 専用の
strataシステムユーザーがモード 600 でデータベースを所有します。SSH ユーザーが SQLite ファイルを直接編集して API を迂回することはできなくなります。 - デモモード -
STRATA_DEMO_MODE=trueで公開デモを実行すると、ダッシュボードでは空のパスワードを受け付けます(ログイン画面は引き続き表示されるため、訪問者は認証機能があることを確認できます)。
v2.2 の新機能:
- PostgreSQL + pgvector バックエンド — 手軽なデモでは引き続き SQLite がデフォルトですが、本番環境では
STRATA_DB_BACKEND=postgresqlを設定してください。PostgreSQL は複数のエージェントによる同時書き込みをネイティブに処理し(書き込みキューは不要です)、pgvector は HNSW インデックスを使ってデータベース内で類似検索を行います。100 万件を超える思考にも対応します。 - CSV 監査ログ — エージェントのすべてのアクションが、
data/audit/内の日次 CSV ファイルに記録されます。完全な再生記録として、誰が何を検索し、どの思考が返され、どれくらい時間がかかったかを確認できます。これは透明性を確保するための仕組みです。AI がデータへの理解をどのように築いたのか、正確にたどれます。GET /api/auditから確認できます。 - Strata 導入前の履歴(負の ID) —
capture_legacyを使って、Strata をインストールする前の記憶をインポートできます。これらには負の ID(-1、-2、-3...)が割り当てられ、現在の思考と同じ星座に保存されます。AI の記憶はインストールした日から始まるのではなく、望む限り過去までさかのぼります。星座ビューアーの「THOUGHTS」をクリックすると、現在と過去のビューを切り替えられます。 - 10 種類の思考タイプ — 8 種類から拡張し、それぞれをいつ使うべきかエージェントに教える明確な説明を追加しました。
idea(まだ決定していないブレインストーミング)とobservation(結論を出さずに気づいたパターン)を追加しています。エージェントプロトコルでタイプの選択方法を明記したため、すべての新規ユーザーの星座がバランスよく構成されます。 - エージェントプロトコルを更新 —
strata_statusが、10 種類すべてのタイプ、負の ID の履歴、監査ログ、成果の追跡ループについてエージェントに説明するようになりました。CLAUDE.md は不要です。プロトコルそのものがオンボーディングを担います。 - 星座カメラの修正 — 星をクリックすると、カメラがその星を通り過ぎてから振り返るように動き、基準点として元の星が背景に見える状態を保ちます。
- デモモードの改善 — デモモードでは、管理者キーなしでエージェントの作成と MCP のキルスイッチが使えるようになりました。
さらに、おなじみの v1 の機能もあります。セマンティック検索、ファイル保管庫、重複防止、パスワード+シードフレーズによるダッシュボード認証、ダークテーマ、そして Raspberry Pi での動作です。
AI ツールがセッションのたびにすべてを忘れてしまうことにうんざりして、これを作りました。STRATA は、MCP 対応のあらゆる AI(Claude Code、Codex CLI、そしてこれから登場するものも)に、あなたのマシン上で動く永続的な脳を提供します。クラウドではありません。他人のサーバーでもありません。あなた自身のものです。
Raspberry Pi 4B で動きます。本当です。セマンティック検索、ファイルストレージ、埋め込みを含むすべての機能が、RAM 4GB の 55 ドルのコンピューターで動作します。
できること
- 意味で検索 — 「お金関係のこと」と尋ねると、Bitcoin、投資、予算に関するメモを見つけます。キーワードの一致ではなく、実際に意味を理解します。
- ファイル保管庫 — 実際のファイルを思考に添付できます。コード、ドキュメント、プロジェクトアーカイブなど。思考がインデックスになり、保管庫が中身を保持します。
- 自動タグ付け — Docker について書けばタグが付きます。URL に言及すればタグが付きます。手動で整理する必要はありません。
- 重複防止 — すでに保存したものをもう一度保存しようとすると、検出して警告します。
- アクセス追跡 — 実際に使われている記憶と、ただ置かれたままの記憶を確認できます。
- 管理者のみ削除可能 — AI は記憶を読み書きできますが、明示的な管理者キーなしに削除することはできません。あなたのデータは、あなたが管理します。
この仕組みにした理由
一般的なデータベースはキーワードで検索します。「転職」と保存した内容を「新しい仕事」で検索しても、何も見つかりません。
STRATA はあらゆる思考を、その「意味」を捉える 768 次元のベクトルに変換します。似た考えは、そのベクトル空間で互いに近くに配置されます。そのため、「転職」「新しい仕事」「キャリアチェンジ」は互いに見つけ合えます。
モデルは ONNX Runtime を通じてローカルで実行されます(PyTorch ではありません。ARM ではインポートするだけで 1.5GB も消費するためです)。埋め込みモデルが使う RAM は合計で約 100〜150MB で、5 分間アイドル状態が続くとアンロードされます。
ファイル保管庫
STRATA が単なるメモアプリではない理由がここにあります。
プロジェクトについて思いついたことを記録し、実際のソースファイルを添付します。後であなたや AI がそのトピックを検索すると、思いついた内容と、それに添付されたすべてのファイルの一覧が表示されます。AI は必要なファイルを選び、それだけを取得します。ドライブ全体をメモリに読み込むことはありません。
ファイルはディスク上で次のように整理されます。
data/vault/
my-laptop/
2026-03/
42/
server.py
config.py
my-desktop/
2026-03/
55/
training_data.csv
デバイスと月ごとに整理されます。必要であれば手動で参照できます。ファイルサイズは最大 1GB です。AI に返すテキストファイルは 5MB が上限です(コンテキストウィンドウがいっぱいにならないようにするためです)。
Strata 導入前の履歴(負の ID)
AI のメモリはインストールした日から始めなくてもかまいません。過去のデータをインポートしましょう。
# Via MCP tool
capture_legacy(
content="Decided to self-host everything after the cloud bill hit $400/mo",
thought_type="decision",
tags=["infrastructure", "self-hosting"],
original_date="2024-06-15",
source="pre-strata"
)
以前の思考には負の ID(-1、-2、-3...)が割り当てられ、現在の思考には正の ID が使われます。どちらも完全に検索可能で、同じベクトル空間に存在します。星座ビューアーには切り替え機能があり、「THOUGHTS」をクリックすると、現在の星が暗くなり、履歴が強調表示されます。
CSV 監査ログ
すべてのエージェントの操作は、data/audit/ 内の日次 CSV ファイルに記録されます。
data/audit/
audit_2026-04-19.csv
audit_2026-04-20.csv
...
各行には次の情報が記録されます。
- timestamp — 操作が完了した時刻(UTC)
- agent_name — 呼び出しを行ったエージェント
- agent_key_hint — マスクされた API キー(識別には十分ですが、使用はできません)
- action — 実行された操作(capture_thought、semantic_search など)
- detail — 検索クエリまたはコンテンツのプレビュー
- thought_ids — 対象となった思考
- result_count — 返された結果の数
- response_ms — 操作にかかった時間
REST 経由で今日のログを照会します:GET /api/audit?limit=50
ディレクトリを変更するには:STRATA_AUDIT_DIR=/your/path
完全に無効にするには:STRATA_AUDIT_ENABLED=false
PostgreSQL バックエンド(本番環境)
SQLite は使い始めや単一ユーザーでのセットアップに最適です。複数のエージェントが同時に Strata を利用する本番環境では、PostgreSQL に切り替えてください。
# Install PostgreSQL 17 + pgvector
sudo apt install postgresql-17 postgresql-17-pgvector
# Create the database and user
sudo -u postgres createuser strata
sudo -u postgres createdb strata_db -O strata
sudo -u postgres psql -c "ALTER USER strata PASSWORD 'your-password-here';"
# Run the schema (creates tables, indexes, triggers)
sudo -u postgres psql -d strata_db -f strata_pg_schema.sql
# Set the backend
export STRATA_DB_BACKEND=postgresql
export STRATA_PG_PASSWORD=your-password-here
# Start Strata — it auto-detects the backend
python server.py
SQLite から PostgreSQL への移行
すでに SQLite に思考が保存されている場合:
python migrate_to_pg.py
すべての思考、埋め込み、履歴、エージェントキー、プロファイルが移行されます。SQLite データベースはバックアップとして保持されます。
PostgreSQL を選ぶ理由
| 機能 | SQLite | PostgreSQL |
|---|---|---|
| 同時書き込み | 1(書き込みキュー) | 無制限 |
| 類似性検索 | Python の numpy | データベース内の pgvector HNSW |
| 全文検索 | FTS5 | tsvector(重み付け) |
| 拡張性の目安 | 10K 件未満の思考 | 100 万件以上の思考 |
| セットアップの複雑さ | なし | 中程度 |
まずはデモを試す(60 秒、セットアップ不要)
リポジトリには、データがあらかじめ入力されたデモ用データベースが含まれています。Strata 自体についてまとめられた 666 件の思考と、パレットカラーを設定した 3 つのサンプルエージェントが用意されており、すぐに試せます。マイニングも、シードデータ探しも、最初に何を記録するか考える必要もありません。クローンしてデモ DB を所定の場所に配置するだけで、星座が表示されます。
git clone https://github.com/agenerationforwordz-tech/strata.git
cd strata
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# Drop the curated demo dataset into place
mkdir -p data
cp demo/strata.db data/strata.db
# Run with demo mode so blank passwords work for visitors
STRATA_DEMO_MODE=true python server.py
⏱️ 初回インストールには 5~15 分かかります。
pip install -r requirements.txtは、埋め込みモデルのランタイム(fastembed、onnxruntime、numpy、transformersトークナイザーのサポート)用に約 700 MB のバイナリホイールをダウンロードします。止まっているように見えても、インストールを中断しないでください。バックグラウンドでバイナリをダウンロードしています。2 回目以降のインストールでは既存の venv が再利用されるため、数秒で完了します。バイト数の増加を確認したい場合は、pip install -r requirements.txt --progress-bar onを実行してください。
ブラウザーで次の URL を開きます。
| URL | 表示される内容 |
|---|---|
http://localhost:4320/dashboard | Web ダッシュボード — 空のパスワードでログインします(デモモード) |
http://localhost:4320/constellation | 666 件すべての思考が神聖幾何学的なクラスターとして配置された 3D 星座ビューアー |
http://localhost:4320/admin/agents | 3 つのサンプルエージェントを使ったエージェントごとのキー管理(デフォルトではすべて無効です。Strata の利用を始めるには、いずれかを有効にするか、自分で作成してください) |
デモデータセットの詳細と独自のデータセットを再生成する方法については、demo/README.md を参照してください。
Windows のインストールに関する注意事項
Windows 固有の注意点をいくつかご紹介します。
- D: ドライブで Git の「疑わしい所有権」エラーが発生する場合。 Strata を
D:\またはシステムドライブ以外にクローンすると、Git がリポジトリでの操作を拒否し、fatal: detected dubious ownership in repositoryと表示することがあります。修正方法:
(クローン先に合わせてパスを置き換えてください。)git config --global --add safe.directory 'D:/Claude Code Projects/strata' - PowerShell の環境変数には
exportではなく$env:を使います。 デモモードのフラグを設定して実行するには:
セッションをまたいで環境変数を永続化するには:$env:STRATA_DEMO_MODE = "true" python server.py[System.Environment]::SetEnvironmentVariable('STRATA_DEMO_MODE','true','User') - 古い
pipプロセスが、長時間のインストール中に仮想環境内のファイルロックを保持することがあります。 インストールをキャンセルして再実行した際に権限エラーが発生する場合は、タスクマネージャーまたはStop-Process -Name python -Forceで残っている python.exe プロセスをすべて終了してから、もう一度お試しください。
はじめに(実際のインストール、デモデータなし)
git clone https://github.com/agenerationforwordz-tech/strata.git
cd strata
python -m venv venv
source venv/bin/activate # Linux/macOS
# or: venv\Scripts\activate # Windows
pip install -r requirements.txt
# Optional: legacy fallback admin key for delete operations.
# In v2, every agent has its own key issued from /admin/agents,
# but this admin key is required for destructive operations.
export STRATA_ADMIN_KEY="different-key-for-delete-ops"
python server.py
⏱️ 初回インストールに関する注意事項は前述のとおりです。
pip install -r requirements.txtでは、埋め込みモデルのランタイム用に約 700 MB のバイナリホイールをダウンロードします。初回インストールには 5~15 分ほどかかる場合があります。
サーバーの起動後、http://localhost:4320/admin/agents を開いて最初のエージェントを登録してください。AI クライアントの接続にはエージェントごとのキーを使用します。詳しくは、以下の「AI の接続」セクションをご覧ください。
サーバーは http://0.0.0.0:4320 で実行されます。
AI の接続
まず、http://your-server:4320/admin/agents でエージェントを登録し、そのキーをコピーしてください。エージェントごとに専用のキーを用意してください。これにより、エージェントごとの権限、識別色、監査証跡が機能します。
Claude Code — ワンコマンドでインストール(推奨)
Strata は Claude Code プラグインとして提供されています。マーケットプレイスを一度追加してから、インストールします。
claude plugin marketplace add agenerationforwordz-tech/strata-plugins
claude plugin install strata@strata-plugins
インストール中に、次の 2 つの情報を求められます。
strata_url— 例:ローカルインストールの場合はhttp://localhost:4320/mcpstrata_api_key—/admin/agentsからコピーしたエージェントキー
Claude Code を再起動すると、AI はすべてのセッションで永続的なメモリを利用できます。
Claude Code — MCP 設定を手動で行う(旧バージョン)
claude mcp add --transport http strata http://your-server-ip:4320/mcp \
--header "X-API-Key: agent-your-key-here"
または、~/.claude/settings.json に追加します。
{
"mcpServers": {
"strata": {
"url": "http://your-server-ip:4320/mcp",
"headers": {
"X-API-Key": "agent-your-key-here"
}
}
}
}
Codex CLI
Codex CLI の MCP 設定は ~/.codex/config.toml にあります(Windows の場合:C:\Users\<you>\.codex\config.toml)。次のブロックを追加します。
[mcp_servers.strata]
url = "http://your-server-ip:4320/mcp"
env_http_headers = { "X-API-Key" = "STRATA_CODEX_API_KEY" }
startup_timeout_sec = 15.0
tool_timeout_sec = 60
次に、env_http_headers 行で参照される環境変数を設定します。Codex は設定ファイルの読み込み時ではなく、起動時に環境変数を解決します。
Linux/macOS:
export STRATA_CODEX_API_KEY="agent-your-codex-key-here"
Windows(セッションをまたいで永続化):
[System.Environment]::SetEnvironmentVariable('STRATA_CODEX_API_KEY','agent-your-codex-key-here','User')
次のコマンドで確認します。
codex mcp get strata
enabled: true のエントリが表示されるはずです。
⚠️ Codex CLI の既知の問題(Windows 版 v0.120.0 時点): ストリーミング可能な HTTP トランスポートは Strata のツールを正しく検出しますが、
codex execは実際のツール呼び出しをクライアント側でキャンセルし、user cancelled MCP tool callと表示することがあります。これは Strata の問題ではなく、Codex CLI のバグと思われます。Strata のサーバーログでは、MCP リクエストに対して200 OKが記録されます。この問題が発生した場合は、Codex CLI のリポジトリに報告してください。同じ Strata サーバーは Claude Code、ダッシュボード、REST の直接呼び出しでは問題なく動作します。
エージェントが Strata の使い方を学ぶ仕組み
接続されたエージェントはすべて、最初のツール呼び出しとして strata_status を実行してください。このツールは自然言語のプロトコルを返し、エージェントに、いつ記録するか、いつ検索するか、10 種類の思考タイプをどう扱うか、負の ID を持つレガシーインポートをどう解釈するかを教えます。CLAUDE.md の設定は不要です。このツール自体が使い方を教えます。
管理者は、ダッシュボードまたは REST エンドポイントから system_config['agent_protocol'] の行を書き換えることで、インスタンスごとにプロトコルをカスタマイズできます。
curl -X PUT http://your-server:4320/admin/api/protocol \
-H "X-API-Key: $STRATA_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{"protocol": "...your custom instructions..."}'
デフォルトに戻すには、空文字列を送信します。
任意の HTTP クライアント
# Save a thought
curl -X POST http://your-server:4320/api/capture \
-H "Content-Type: application/json" \
-H "X-API-Key: your-key" \
-d '{"content": "STRATA is running on my Pi!", "tags": ["setup"]}'
# Search by meaning
curl -X POST http://your-server:4320/api/search \
-H "Content-Type: application/json" \
-H "X-API-Key: your-key" \
-d '{"query": "server setup", "limit": 5}'
# Health check (no auth needed)
curl http://your-server:4320/health
設定
すべてconfig.pyにあります。環境変数で上書きできます。
| 変数 | デフォルト | 説明 |
|---|---|---|
STRATA_API_KEY | change-me-before-deploy | レガシーなフォールバックRESTキー |
STRATA_ADMIN_KEY | (空 - 削除機能を無効化) | 削除および管理者操作に必要 |
STRATA_HOST | 0.0.0.0 | リッスンアドレス |
STRATA_PORT | 4320 | サーバーポート |
STRATA_DATA_DIR | ./data | データベースの場所 |
STRATA_VAULT_DIR | ./data/vault | ファイル保管庫の場所 |
STRATA_AUTH_ENABLED | true | 認証のキルスイッチ(無効にしないでください) |
STRATA_MAX_TOTAL_AGENTS | 10 | 登録できるエージェント総数のスパム対策上限 |
STRATA_DEMO_MODE | (未設定) | trueの場合、ダッシュボードで空のパスワードを受け付けます(公開デモ用) |
STRATA_DB_ENCRYPT | (未設定) | trueの場合、SQLCipher経由でDBを開きます(先にsetup_encryption.shを実行してください) |
STRATA_DB_KEY_FILE | /etc/strata/db.key | SQLCipherキーファイルのパス(root/strataのみ) |
STRATA_IP_AGENTS | (空) | レガシーなIP→エージェント帰属用の、カンマ区切りのIP=nameペア |
ツール(コア21個+拡張機能)
メモリ
| ツール | 説明 |
|---|---|
capture_thought | 自動タグ付けと重複チェックを行って、新しいメモリを保存します |
semantic_search | 意味に基づいてメモリを検索します |
hybrid_search | キーワードと意味を組み合わせて検索します |
search_by_tag | タグで絞り込みます |
search_by_person | 言及された人物で絞り込みます |
search_advanced | タグ+種類+日付+マシンで複合的に絞り込みます |
get_relevant_context | スマート検索 - 重複を除去し、種類ごとにグループ化します (拡張機能) |
find_related | 特定の思考に似たものを検索します |
list_recent | 最近記録された内容を表示します |
get_thought | 1つの思考を表示します(ファイル添付も含む) |
update_thought | 思考を編集します(自動で再埋め込みします) |
delete_thought | 思考と保管庫内のファイルを削除します(管理者キーが必要) |
get_stats | データベースの統計と保管庫の使用状況を表示します |
generate_report | トレンドレポート - 増加しているもの、減少しているもの (拡張機能) |
ファイル保管庫
| ツール | 説明 |
|---|---|
attach_file | 思考にファイルを添付します |
get_file | 添付ファイルを読み取ります |
list_attachments | 思考に添付されたすべてのファイルを表示します |
detach_file | 添付ファイルを削除します(管理者キーが必要) |
ウェブダッシュボード
STRATAにはhttp://your-server:4320/dashboardにフル機能のウェブダッシュボードが含まれています。追加のセットアップは不要です。初回アクセス時にアカウント作成の手順が案内されます。
アカウントシステム
- パスワード保護 - 初回アクセス時にパスワードを設定してアカウントを作成します(PBKDF2-SHA256、480K回)
- 12単語のリカバリーフレーズ - Bitcoinウォレットのようにセットアップ時に生成されます。書き留めてください。忘れたパスワードをリセットする唯一の方法です。ハッシュとして保存され、平文で保存されることはありません。
- デバイスセッション - 各ブラウザーに名前付きセッション(「my-laptop」、「my-phone」など)が割り当てられます。名前はデバイス間で重複できません。セッションの有効期間は7~365日です(選択できます)。
- 10日間の名前変更クールダウン - 不正利用を防ぐため、デバイス名を変更できるのは10日に1回だけです
- 設定ページ - パスワードの変更(現在のパスワードが必要)、接続中のデバイスの確認、デバイス名の変更ができます
AIクライアント(Claude Code、Codexなど)は引き続きX-API-Keyヘッダーを使ってAPIキーで認証します。ダッシュボードの認証は別のシステムであり、互いに干渉しません。
ダッシュボードの機能
- ブラウザーからタグ、人物、種類を選択して思いついたことを記録
- セマンティック検索 - キーワードではなく、意味で検索します
- タグ検索 - 任意のタグをクリックすると、そのタグが付いた思いつきをすべて絞り込めます。検索バーに
#tagnameと入力しても同じことができます。 - 無限スクロール - 一度に30件の思いつきを読み込み、スクロールに合わせて追加で取得します
- 統計カード - 記憶の合計数、タグ数、言及された人物、データベースのサイズ
- トレンドタグ - 増加中/減少中/新規のタグを、クリック可能なフィルターとともに表示します
- デバイスのアクティビティ - どのマシンが最も多くデータを提供しているかを、アニメーション付きのバーで表示します
- 注目の記憶 - アクセス回数が最も多い思いつきを、ヒット数順に表示します
- ダークテーマ - 落ち着いたダークモードで、モバイルにも対応しています
エージェントごとの API キー
v1 では、すべての AI ツールで 1 つの STRATA_API_KEY を共有していました。「すべての AI ツール」が自分と Claude Code だけだったときは、それで問題ありませんでした。しかし、Surface のノート PC、Helios のデスクトップ、複数の Telegram ボット、毎晩実行される cron ジョブから Strata にアクセスするようになると、どのエージェントが何をしたのかを把握し、ほかのエージェントに影響を与えずに特定のエージェントだけを無効化したくなります。
v2 では、エージェントごとのキーが使えます。/admin/agents を開き、「Register New Agent」をクリックして名前を付けると、agent-G8O1bK2kQiN3F0Haq03e_0kIh5D8YiFo のような固有のキーが発行されます。エージェントはそのキーを X-API-Key ヘッダーに指定して使用します。server.py はリクエストごとにキーを照合し、詳細な権限フラグを確認します。
| 権限 | 制御対象 |
|---|---|
enabled | マスタースイッチ — エージェントを削除せずに無効化します |
can_read | semantic_search、list_recent、get_thought など |
can_write | capture_thought、update_thought、ファイルの添付 |
can_delete | delete_thought、detach_file(デフォルトではオフ) |
can_admin | ほかのエージェントの管理、監査データの表示 |
can_kill | グローバル MCP キルスイッチの操作(以下を参照) |
人間の管理者専用キー(STRATA_ADMIN_KEY)は常に分離され、エージェントの一覧に表示されることはありません。これは、どのエージェントも単独では実行できない操作に対するマスターオーバーライドです。キルスイッチの再有効化、ほかのエージェントへの管理者権限の付与、アクティブエージェント数の上限引き上げなどに使用します。
グローバル MCP キルスイッチ
スイッチを1つ切り替えるだけで、すべてのエージェントを MCP、REST、/api/* から遮断できます。/admin/agents(ページ上部の大きなシールドパネル)から操作するか、REST 経由で操作します。
curl -X PUT http://your-server:4320/admin/api/mcp-toggle \
-H "X-API-Key: your-agent-or-admin-key" \
-H "Content-Type: application/json" \
-d '{"enabled": false}'
権限モデルは、意図的に非対称になっています。
- 無効化 — 人間の管理者、または
can_write=1かcan_kill=1のエージェントであれば実行できます。これは安全弁です。侵害を検知したエージェントは、人間に管理者権限を求めることなく、ただちにブレーキをかけられる必要があります。 - 再有効化 — 人間の管理者キーだけが実行できます。スイッチをオフにしたエージェントが、自分の判断を取り消すことはできません。人間がスイッチを戻しに行きます。
キルスイッチがオフの間、すべての /mcp、/sse、/api/* リクエストは 503 Service Unavailable を返します。監査ログには、誰がスイッチを切り替えたかが記録されます([KILL SWITCH] Global MCP access DISABLED by claude-on-surface)。コンステレーションビューアーにもリアルタイムで状態が反映されます。以下を参照してください。
星座ビューアー
http://your-server:4320/constellation を開いて、思考の動きを眺めましょう。データベース内のすべての思考を、フィボナッチ球面上に配置し、各クラスターが十二面体の頂点にぴったり収まるようにした3Dビジュアライゼーションです。その背後には生命の花のキャンバスがあり、デフォルトではほとんど見えませんが、スライダーで調整できます。どこまでも神聖幾何学です。
エージェントが検索または記録すると、星座はそのエージェントの色で光り、エージェントのバッジから一致する各思考へビームが流れます。エージェントごとの色はデータベースに保存されるため(管理パネルから編集できます)、ビューアーには常に現在の識別情報が反映されます。
MCP のキルスイッチがオフになると、シーン全体が銀灰色に色あせ、自動回転の速度が約15%に落ち、中央にアクター名をその識別色で表示する「MCP DISCONNECTED」のオーバーレイが現れます。部屋の向こうからでも見逃しようがありません。
壁紙として使うには、http://your-server:4320/constellation?mode=wallpaper を開きます。UI が非表示になり、星座が全画面で表示されます。
保存時の暗号化(オプション)
デフォルトでは、Strata は SQLite データベースを平文ファイルとして保存します。自分で管理する NAS への個人用インストールなら問題ありませんが、「誰かがドライブを持ち去る」または「バックアップが漏えいする」ことが脅威モデルに含まれる場合は、保存データを暗号化する必要があります。
sudo ./setup_encryption.sh
スクリプトの処理内容:
sqlcipherとpysqlcipher3Python バインディングをインストールします- 256ビット AES キーを生成し、
/etc/strata/db.keyに保存します(モード 400、root のみアクセス可能) sqlcipher_export()を使って、既存のデータベースをその場で移行します- systemd サービスに
STRATA_DB_ENCRYPT=trueとSTRATA_DB_KEY_FILE=/etc/strata/db.keyを設定します
再起動後、db.py は sqlite3 の代わりに pysqlcipher3 を使ってデータベースを開き、すべてのクエリが AES 暗号化されたページに対して実行されます。キーがコードや環境変数に保存されることはなく、root が所有するファイル内にのみ保存されます。
キーを紛失すると、データベースは復元できません。 安全な場所にバックアップしてください。
暗号化せずに実行する場合(デフォルト)は、何もする必要はありません。STRATA_DB_ENCRYPT=true を設定しない限り、暗号化のコードパスは休止状態です。
ファイルレベルのアクセス強化(オプション)
API キーシステムを使っていても、ホストへの SSH アクセス権がある人なら誰でも sqlite3 で strata.db を直接開き、すべての認証、レート制限、監査ログを回避できます。setup_secure.sh はこの穴を塞ぎます:
sudo ./setup_secure.sh
スクリプトの処理内容:
- 専用の
strataシステムユーザーを作成します(ログイン不可、ホームディレクトリなし) - データディレクトリの所有者を
strata:strataにし、モードを 700 に設定します - すべての DB ファイルのモードを 600 に設定します(所有者のみ読み書き可能)
- systemd サービスを更新し、
strataユーザーとして実行します
再起動後、Strata プロセスはデータベースの読み書きができますが、ほかのユーザー(明示的に権限を昇格しない限り、nacho や root も含む)はファイルに直接アクセスできません。すべてのアクセスは API 経由で行う必要があり、レート制限、認証チェック、監査ログが一律に適用されます。
デモモード
カンファレンスでの公開デモ、ブースに置いたタブレット、一般公開 URL で使う場合、認証画面によって訪問者を締め出したくはないでしょう。サーバー環境に STRATA_DEMO_MODE=true を設定すると、次のようになります:
- ログイン画面は引き続き表示されます(訪問者には認証が存在することがわかります)
/api/auth/setupと/api/auth/loginの両方で、空のパスワードが受け入れられます- サーバーは固定の内部プレースホルダーパスワードを使用するため、ハッシュ化/セッション/デバイス名の処理は引き続き機能します
これはデモ専用です。実際のデプロイでは絶対に設定しないでください。認証の障壁が完全になくなります。
STRATA_DEMO_MODE=true python server.py
サービスとして実行する
/etc/systemd/system/strata.service を作成します:
[Unit]
Description=STRATA Memory Server
After=network.target
[Service]
Type=simple
User=your-user
WorkingDirectory=/path/to/strata
ExecStart=/path/to/strata/venv/bin/python server.py
Environment=STRATA_API_KEY=your-secret-key
Environment=STRATA_ADMIN_KEY=your-admin-key
Environment=STRATA_DATA_DIR=/path/to/your/data
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable strata
sudo systemctl start strata
構築方法
AI Clients (Claude Code, Codex, bots) Humans (browser/tablet)
| | |
MCP (/mcp) REST (/api/*) Dashboard (/dashboard)
| | Constellation (/constellation)
| | Admin (/admin/agents)
| | |
+---- MCPKillSwitchMiddleware (rejects all when off) -----+
| | |
+-------- server.py - rate limiting, sanitization --------+
| | |
Per-agent keys Per-agent keys Password + session auth
(X-API-Key) (X-API-Key) (auth.py - PBKDF2, seeds)
agent_keys.py agent_keys.py users + sessions tables
| | |
embedder.py vault.py activity_stream (SSE)
ONNX model file storage per-agent broadcasts
on-demand by device/month |
| | |
db.py - SQLite (or SQLCipher) + FTS5 + numpy
thoughts + attachments + users + sessions + agent_keys
ハードウェア
Raspberry Pi 4B(4GB)で動作するように構築されています。実際の使用量は次のとおりです:
| 項目 | RAM |
|---|---|
| サーバーのアイドル時 | 約50MB |
| 埋め込みモデルのロード時 | 約100~150MB |
| 1万件の思考 | ベクトル用に約30MB |
モデルは必要なときにロードされ、5分間アイドル状態が続くとアンロードされます。
ストレージ
| 項目 | ディスク |
|---|---|
| Python venv (fastembed, numpy, onnxruntime) | 約700MB |
| ONNX model (初回使用時にダウンロード) | 約170MB |
| コード+ダッシュボード | 約1MB |
| データベース | 思考1件あたり約1KB |
新規インストールには、約1GBのディスク容量が必要です。16GBのSDカードがあれば十分です。データベースとファイル保管庫は使用に伴って大きくなるため、多数のファイルを追加する予定がある場合は、保管庫を外部ストレージに設定してください。
最小要件:RAM 2GB、空きディスク容量2GB、Python 3.10以上を備えたマシン。
セキュリティ
- エージェントごとのキー - 各AI エージェントには、細かな
read / write / delete / admin / killフラグを備えた専用キーが割り当てられます。他のエージェントに影響を与えずに、個別にキーを取り消したり無効にしたりできます。 - MCPのグローバルキルスイッチ - 1つの切り替えで、すべてのエージェントをロックアウトします。非対称の仕組みで、エージェントは無効化できますが、再有効化できるのは人間だけです。
- ダッシュボード認証 - PBKDF2-SHA256、480K回の反復処理、ランダムな32バイトのソルト、定時間比較
- 12語のシードフレーズによる復旧 - ハッシュ化して永続的に保存され、平文では保存されません
- セッショントークン - 256ビットのランダム値で、SQLiteに保存され、自動的に期限切れになり、デバイスごとに管理されます
- 監査ログ - キルスイッチの切り替えをすべて、実行したエージェント名とともに記録します
- 保存データの暗号化(オプション) - SQLCipher AES-256を使用し、キーはrootのみがアクセスできるファイルに保存します(
setup_encryption.sh) - ファイルレベルの強化(オプション) - 専用の
strataシステムユーザーが、モード600のDBを所有します(setup_secure.sh) - 削除や切り離しなどの破壊的な操作には、別個の管理者キーが必要です
- レート制限 - IPごとに毎分30リクエスト
- 入力サイズ制限 - 思考1件あたり50KB、保管庫のファイル1件あたり1GB
- プロンプトインジェクション対策 - AI クライアント向けに、コンテンツをデータマーカーで囲みます
- XSS防止 - すべてのユーザーコンテンツを、表示前にエスケープします
- アトミックなファイル書き込み - 一時ファイルを作成してから名前を変更し、停電時に不完全なファイルが残らないようにします
- すべての保管庫操作でパストラバーサルを防止
- コードベース内で
eval/execを一切使用しません - コアに追加のランタイム依存関係はありません - 認証にはPython標準ライブラリのみを使用します。SQLCipherと
setup_*.shスクリプトは任意で使用できます
拡張機能
STRATAは、追加のMCPツールとRESTエンドポイントを登録する任意のextensions.pyファイルに対応しています。コアサーバーを変更せずに、デプロイ環境へカスタム機能を追加する方法です。
プロジェクトディレクトリにextensions.pyがある場合、サーバーは起動時に自動的に読み込みます。ファイルがない場合も、コアツール16個を備えたサーバーは問題なく動作します。
上記の表で*(拡張機能)*と記されたツールは、拡張機能を通じて利用できます。実現可能な内容が分かるように説明していますが、実装はこのリポジトリに含まれていません。カスタムツールを追加するには、register_extensions()関数を含む独自のextensions.pyを作成してください。
ライセンス
PolyForm Noncommercial License 1.0.0. Copyright (c) 2026 A Generation Forwordz Foundation.
STRATAはソース公開ソフトウェアです。使用、改良、共有、学習にご利用ください。ただし、無料のままにして、クレジットを表示してください。販売は禁止されています。
商用ライセンスに関するお問い合わせは、A Generation Forwordz Foundationまでご連絡ください。
詳細はLICENSEをご覧ください。
Christian Mitchellが作成しました。ご利用の際は、クレジット表記を残してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。