mcpField
T
Titen Memory

Titen Memory

ローカル
titen.devメモリ・ナレッジ161 週間前に更新

Titen Memory について

Titen Memoryは、追跡可能で範囲を限定した記録を必要とする開発者向けの、証拠に基づくエージェントメモリです。APIキー、LLM、埋め込みプロバイダーなしでSQLite上で動作し、Cloudflare D1にも対応します。

主な機能

  1. 01出典に結び付いた主張とバージョン履歴
  2. 02取得前の権限・スコープ確認
  3. 03FTS5によるランキング検索
  4. 04矛盾と証拠の追跡
  5. 05項目別の証拠を示すメモリ監査

活用シーン

  1. 01エージェントの記憶を元の観察記録に結び付ける
  2. 02組織、プロジェクト、ワークスペース単位で取得を制限
  3. 03メモリエクスポートの重複や古い項目を調べる

MCP 対応

stdioとStreamable HTTPでMCPツールを提供し、ナレッジグラフのMCPリソースも公開します。`@modelcontextprotocol/server-memory`と同じ9つのツール名とスキーマを利用できます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"ramaaditya49-titen-memory": {
"command": "npx",
"args": [
"-y",
"titen-memory"
],
"env": {
"TITEN_MCP_URL": "<TITEN_MCP_URL>",
"TITEN_API_KEY": "<TITEN_API_KEY>"
}
}
}
}
起動コマンドnpx -y titen-memory
設定が必要な環境変数
TITEN_MCP_URLOptional. Streamable HTTP /mcp endpoint of a running Titen service. Set together with TITEN_API_KEY to use a shared store instead of the local one.
TITEN_API_KEYシークレットOptional. API key for the Titen service named by TITEN_MCP_URL. Required only when TITEN_MCP_URL is set.

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

パッケージ
npmtiten-memory0.7.2

ツール

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

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

詳細

Titen

API キーも LLM も埋め込みプロバイダーも不要で動作する、エージェントの記憶です。
すべての記憶に、その情報源、読み取り可能なユーザー、そして矛盾する証拠が記録されます。

Titen — API キーも LLM も不要なセルフホスト型エージェントメモリ。LLM 呼び出しゼロ、埋め込み呼び出しゼロ、依存関係ゼロ。インスタンスごとにスコープを設定した条件で、LongMemEval-S の recall@1 は 0.880。ストアを 1k、5k、10k、19,829 セッションにプールすると、それぞれ 0.524、0.364、0.308、0.246 に低下します

ウェブサイト · ドキュメント · npm · 変更履歴

npm のバージョン npm のダウンロード数 Apache-2.0 ライセンス GitHub スター数 Glama 上の Titen MCP サーバー

Titen - 記録付きのオープンソースのエージェントメモリ。API キーも LLM も不要。| Product Hunt

C.A.D.I.S Agent で構築されています。

Titen が役に立ったら、GitHub で ⭐ を付けていただくと、ほかの人にも見つけてもらいやすくなります。

## 30秒で試す

アカウントもキーも設定も不要です。ただし、CLI の実行には Bun 1.2 以降が必要で、ない場合は起動しません。

curl -fsSL https://bun.sh/install | bash   # skip if you already have Bun
npx titen-memory mcp

環境変数を設定せずに実行すると、~/.titen/memory.db を開くか作成し、実際の組織、ワークスペース、プロジェクト、所有者をその中に書き込み、プロセス内で標準入出力を介して MCP を提供します。HTTP を経由する必要も、キーを貼り付ける必要もなく、外部へのネットワーク呼び出しもありません。検索には FTS5 を使うため、埋め込みプロバイダーもモデルも必要ありません。

curl -fsSL https://titen.dev/install.sh | bash を実行すれば、同じことを一度に行えます。Bun がない場合は追加してから、titen コマンドをインストールします。

エージェントから接続します。

claude mcp add --transport stdio --scope user titen -- npx -y titen-memory mcp

すでに @modelcontextprotocol/server-memory を使用していますか?Titen は同じスキーマで同じ9つのツール名を提供し、memory://knowledge-graph にも応答するため、クライアントは切り替えに気づきません。ローカルモードで初めて起動すると、既存のグラフをインポートします。古いストアのパスを指定してください。このサーバーは起動元のディレクトリではなく、インストール先の隣にデータを書き込むためです。

claude mcp add --transport stdio --scope user titen \
  --env MEMORY_FILE_PATH=/path/to/memory.jsonl -- npx -y titen-memory mcp

パスを指定しなくても、Titen は作業ディレクトリ、node_modules、npm の npx キャッシュを確認します。見つからなければ、何も通知せず空の状態で起動するのではなく、stderr にその旨を表示します。後から TITEN_MCP_URL と TITEN_API_KEY を設定すれば、titen を提供中のインスタンスに接続できます。設定手順の全文はこちら。

Titen が管理していないものも含め、エージェントのメモリストアに蓄積された内容を監査できます。

npx titen-memory audit ./memory.json

特徴

  • プロバイダーもキーもアカウントも不要です。 FTS5 による字句検索が既定の動作であり、フォールバックではありません。埋め込みとモデルによる拡張はオプトインの投影機能で、利用できない場合も適切に動作します。
  • 実行時依存関係はありません。 package.json には何も宣言されていません。必要なのは Bun と SQLite ファイル1つだけで、それ以外はすべて標準ライブラリと Web API です。
  • @modelcontextprotocol/server-memory のドロップイン代替です。 titen_* の10個とリファレンスサーバーと同じ名前の9個を合わせた19個のツールを提供します。search_nodes は部分文字列の走査ではなく、実際の検索処理を使います。また、初回実行時に既存の memory.json をインポートします。
  • 管理対象外のストアも監査します。 titen audit は、リファレンスサーバーの memory.json、Mem0 のエクスポート、または Titen のストアを読み込みます。重複、想起ループ、シークレットのパターン、情報の古さを、手作業で確認できる項目ごとの証拠とともに報告します。
  • ベンチマークでは損失も公開しています。 事前登録された5つの反証条件のうち2つが Titen に対して発動しました。それらを省略せず、下のグラフに表示しています。

すでに @modelcontextprotocol/server-memory を実行していますか?

このサーバーは2026年7月31日の週に106,662回ダウンロードされており、MCP エコシステムの多くでデフォルトのメモリとして使われています。また、意図的に最小限の設計になっています。公開されている 2026.7.4 の tarball を読むと、ストアは改行区切り JSON ファイル1つで、変更のたびに全体を書き換えます。また、検索は

graph.entities.filter(e => e.name.toLowerCase().includes(query.toLowerCase()) || ...)

小文字に変換した検索語に対する String.includes です。トークナイザーも、ステミングも、ランキングもなく、結果は挿入順に返されます。スコープ設定や認可もなく、削除もされないため、ファイルは際限なく大きくなり、呼び出しのたびにグラフ全体に対して O(n) の処理が発生します。「返金を担当するサービスはどれですか」と尋ねても、その文と完全に一致する内容が保存されていなければ何も見つかりません。

Titen は、同じ9つのツール名、同じ引数スキーマ、同じ memory://knowledge-graph リソースを提供するため、クライアントは切り替えに気づきません。変わるのは内部の仕組みです。search_nodes は本格的な検索処理を実行します。ステミング対応の FTS5 で最適な結果から順にランキングし、設定されていればベクトルインデックスも使用します。また、読み取りはすべてサブジェクトのスコープに限定され、取得後ではなく取得前に認可によるフィルタリングが行われます。

@modelcontextprotocol/server-memoryTiten
検索String.includes、挿入順FTS5+ステミング、ランキング、任意のベクトル検索
スコープ常にグラフ全体組織/サブジェクト/プロジェクト/ワークスペース、取得前に適用
矛盾上書き保持され、証拠と関連付けられ、フラグが付けられる
増加への対応ファイル全体を書き換え、無制限SQLite、保持および削除ポリシー
プロバイダーなしなし — キー、LLM、埋め込みプロバイダーは不要

インポートは初回起動時に行われます。切り替え方法はこちら。

あらゆるエージェントのメモリストアを監査する

公開されているメモリベンチマークはすべて、誰かが用意したコーパスに対する検索を測定しています。実際に報告されている問題は書き込み側にあります。ストアが自分の出力のコピーで埋め尽くされるのです。本番ストアを対象にした唯一の公開監査では、32日後に10,134件のエントリーの97.8%が不要なデータだと判明しました。それを測定するものはありません。

npx titen-memory audit ~/.titen/memory.db        # a Titen store
npx titen-memory audit ./memory.jsonl            # @modelcontextprotocol/server-memory
npx titen-memory audit ./mem0-export.json --json # a Mem0 export

5つの件数 — 完全な重複、類似した重複、想起ループ、シークレットのパターン、古いデータ — を、手作業で確認できる項目ごとの証拠とともに示します。**ネットワーク接続、モデル、アップロードは不要です。**パスを読み取り専用で開いてレポートを出力するだけです。共有するかどうかはご自身で判断できます。指標の算出に必要な情報がストアにない場合は、失敗とはせず、このエクスポートからは測定できませんと報告します。総合スコアもランキングもありません。

検出ルールは監査ルールで公開されています。Titen 自身の数値 — 自身のストアにおける重複率17.9%、古いデータの割合96.7%、さらにツールが Titen 自身の互換性サーフェスの欠陥を発見した事例 — は自己監査レポートに記載されています。

主張の作成者はあなたです

Titen のデフォルトのメモリモデルは、呼び出し元が作成する主張です。 consolidate() は、あなたが記録済みのソース観測に明示的に紐付けて作成した文を受け取ります。Titen はトランスクリプトを読んで、何を記憶する価値があるかを独自に判断することはありません。

これは意図的な設計です。すべての主張には作成者、ソース、スコープがあり、それによって初めて、来歴、権限、矛盾、監査について回答できるようになります。これは実際のコストでもあり、率直に比較するための基準点でもあります。生の対話からメモリを導き出すシステムが担う作業を、Titen ではあなたに委ねています。

モデルを使った導出と内省は実装され、パッケージに含まれていますが、有効化にはゲートがあり、ゲートを通過したモデル候補はまだありません。記録上の最高結果は 65.56% で、契約上のしきい値である 90% に達していません。これらは、簡単に有効化できる機能ではなく、公開ゲートのある未完了の作業として扱ってください。ロードマップで現在のエビデンスを確認できます。

1つの認可とエビデンスの境界内で行われる、カーネルループの4つのステップ:observe は必須のソース参照付きで観測を登録し、consolidate は呼び出し元が作成した主張をそれらの観測に紐付けて登録し、compile は検索前にスコープを適用したうえで、すべての項目を信頼できないものとしてマークした、範囲の限定されたコンテキストパックを返し、evidence は主張を、それを裏付ける観測、矛盾する観測、条件を付ける観測へとたどります

Titen が答える質問

質問Titen の回答
このメモリはどこから来たのですか?すべての主張はソース観測にさかのぼることができ、バージョン履歴も保持されます。
このエージェントは閲覧できますか?取得前に、組織、対象、プロジェクト、ワークスペース、可視性のチェックが実行されます。
2つのソースが食い違った場合はどうなりますか?明示的なライフサイクル操作で解決されるまで、矛盾は確認できる状態に保たれます。
誰が作業していますか?リースによって暗黙の二重所有を防ぎ、チェックポイントと引き継ぎによって作業を再開可能にします。
監査や移行はできますか?正規レコードは SQL に保存され、認証済みの監査証跡と、バージョン管理された JSONL のエクスポート/インポートを利用できます。
LLM やベクトルデータベースは必要ですか?いいえ。デフォルトのインストールは FTS のみで、プロバイダーは一切必要ありません。埋め込みとモデルによる拡張は、オプトイン方式のプロジェクションです。ベクトル機能が有効かどうかはストアの形状によります。— 以下を参照。

エージェントは、認証済み REST、Streamable HTTP MCP、titen mcp stdio ブリッジ、または TypeScript SDK を通じて接続します。Titen は取得したメモリを指示として扱うことはなく、エージェントのループも実行しません。

フィールド内での評価

LongMemEval-S(MIT、外部で作成、500件、246,930ターン)で評価しました。スコアリングは独自に行い、失敗も分母に含め、各実行の前にプロトコルを事前登録しています。全表と手法は titen.dev/benchmarkをご覧ください。

以下の数値はすべて条件を明記しています。同じコーパスでも、条件によってrecall@1が63ポイント変わるためです。 *インスタンス単位(スコープあり)*では、各質問に約50セッションの検索対象を割り当てます。これは、実際の製品で扱われる単一ユーザーの形態です。プール済みでは、19,829セッションすべてをスコープなしの1つのストアに入れ、同じ500件の質問を行います。これは1つのコーパスに対する2つの条件であり、同じものを測る2つの測定ではありません。条件を示さずに引用された数値には意味がありません。

LongMemEval-Sのrecall@1、n=500、別々の軸で示した2つのストア条件。インスタンス単位(スコープあり):Titen FTS+vector 0.900、Titen FTS-only 0.880、逐語的RAGルーター対照 0.854、MemPalace 0.804。19,829セッションすべてをプール:Titen FTS-only 0.246、Titen FTS+vector 0.212、Mem0 infer=False 0.182、ルーター対照 0.174、MemPalace 0.164、fastembed対照 0.124。グラフ上の注記には、符号検定、条件間で符号が逆転するベクトル群、棄却条件が2つ発動したこと、および回答精度が変化しないという帰無結果について記載されています

条件A — インスタンス単位(スコープあり)
レーン、n=500、titen-memory 0.6.0recall@1MRR@10LLM呼び出し埋め込み呼び出し
Titen 0.6.0、FTS + vector0.9000.938404,989
Titen 0.6.0、FTSのみ0.8800.914700
逐語的RAG対照(コサイン類似度計算約100行)0.8540.90670877
MemPalace 3.6.00.8040.87170—

この条件では、ほとんど差がつきません。 recall@10は0.982で飽和しており、主要なレーン間の差は2.2ポイントです。対応のある符号検定3つのうち、有意に達したのは1つだけですが、見た目どおりの結果を示すものではありません。

  • FTS+vectorと密ベクトル対照:35/12/453、p = 0.0011 — 有意です。
  • FTS+vectorとFTSのみ:27/17/456、p = 0.174 — この勝因がベクトル群にあるとは証明されていません。
  • FTSのみと同対照:44/31/425、p = 0.165 — 有意ではありません。

この条件では、Mem0のLLMを使わないモードを上回っていません。 Mem0 infer=Falseは共通のn=60サブサンプルで0.8667を記録し、それに対するTiten FTS+vectorの結果は3/4/53、p = 1.0 — 区別できません。デフォルトのinfer=TrueモードはLLMを2,981回呼び出して、さらに低いスコア(0.8333)となるため、Mem0独自の抽出によって測定可能な改善は得られませんでした。コストに関する主張では、測定した構成を明記する必要があります。

回答精度は変化のない帰無結果です。 すべてのレーンで同じリーダーを固定したところ、事前登録した8つの比較はいずれも有意ではありませんでした(最良のp = 0.41)。検索の有意差は回答には引き継がれません。

条件 B — プール済み、19,829 件すべてのセッションを 1 つのストアに格納
レーン、19,829 件をプール、titen-memory 0.7.0recall@1MRR@10各インスタンス単位のセルとの比較
Titen 0.7.0、FTS のみ0.2460.3259−63.4
Titen 0.7.0、FTS + ベクトル0.2120.3153−68.8
Mem0 OSS 2.0.15 infer=False0.1820.2716−68.5 ¹
verbatim-RAG コントロール、ルーター埋め込み0.1740.2459−68.0
MemPalace 3.6.0、公開済みの形式0.1640.2152−64.0
verbatim-RAG コントロール、fastembed0.1240.1868−64.8
MCP リファレンスサーバー0.0000.0000このサイズのストアにはまったく対応できず

¹ Mem0 の n=500 ではなく、n=60 のインスタンス単位のセルとの比較です。

この条件では、Titen のゼロプロバイダーレーンは測定したすべての競合より有意に優れています — 以下はすべて Titen を先に記し、勝ち/負け/引き分けの順です。 fastembed コントロールに対して 86/25/389(p < 0.0001)、MemPalace に対して 76/35/389(p = 0.0001)、Mem0 infer=False に対して 59/27(p = 0.0007)、ルーターコントロールに対して 65/29(p = 0.0003)です。このコーパスでこのプログラムが初めて確認した、有意なレーン間検索性能差です。取り込みは 363.8 秒、プロバイダー呼び出しはゼロで、Mem0 は 3,953 秒と埋め込み呼び出し 205,641 回を要しました。

事前登録した 5 つの反証条件のうち 2 つが Titen に対して成立しました。この結果にも勝利と同等の重みを置いています。

  • 予測は 45 ポイント以上外れました。 プール全体の recall@1 を 0.70~0.85 と事前登録しましたが、測定値は 0.246 でした。LongMemEval-S のペルソナは構造上トピックを共有しているため、プールするとストアは疎になるのではなく、ペルソナ間の近似重複で密になります。順位 1 の取りこぼし 377 件はすべて別インスタンスのセッションを取得しており、質問と同じヘイスタックから誤ったセッションを取得したケースはゼロでした。
  • コンパイル時の p95 は 864.9 ms で、事前登録した 250 ms の中止ラインを超えています。このラインは 10,000 セッションのセルですでに超えていました(430.8 ms)。約束どおり、結果は公開しました。

どのアーキテクチャもプール時の低下を免れません。MemPalace は 64.0 ポイント、最強の密ベクトルコントロールは 68.0 ポイント低下し、Titen の低下幅は 63.4 でした。そしてベクトル方式の効果は条件間で逆転します。インスタンス単位では +2.0 ポイント(未立証、p = 0.174)ですが、プール時には −3.4 ポイント(0.246 に対して 0.212、p = 0.082)となり、インデックスの処理に 9,054 秒を要したうえ、コンパイルレイテンシーは 2.8 倍です。埋め込み方式 3 種は、プール時の密度で FTS のみを 7.2~16.8 ポイント下回りました。そのため、ベクトル方式はスコープを限定したストア専用として記録しています。完全なレポート: プール済みストアの条件。

スコープ設定は、測定した中で最大の効果をもたらす要素です

同じコーパス、同じ tarball、同じ 500 件の質問で、一方は対象にスコープを限定し、もう一方は限定しません。

ストアの形式、titen-memory 0.7.0recall@1コンパイル時の p95
対象を限定したアンカー、424,168 件の主張0.880138.1 ms
スコープなしでプール、342,129 件の主張0.246864.9 ms

recall@1 は 63.4 ポイント向上し、レイテンシーは 6.3 倍低下します。 これが認可を検索より先に行うことの測定値であり、「user_id でスコープを限定すればよいのでは」という問いに対する測定結果です。スコープ設定そのものが認可レイヤーであり、Titen は構造上、検索前にこれを実行します。

ストアの形式ごとの FTS のみの推移は、スコープを限定した場合が 0.880、プールしたセッション数 1k / 5k / 10k / 19,829 件の場合が順に 0.524 / 0.364 / 0.308 / 0.246 です。0.880 は、この比較と併せて読んでください。

改善サイクルはすべてのゲートで失敗しました

2026-08-08、これらの数値を改善するためのサイクルを事前登録しました。レイテンシの候補上限、6つのランキングバリエーション、3つ目の埋め込みファミリーを対象としましたが、すべてのゲートで失敗しました。何もリリースされませんでした。 6つのランキングバリエーションはすべてゲートに失敗しました。用語カバレッジは −2.4、近接度は −14.4、チャンク合計は −11.8、組み合わせは −3.6、ローカルのクロスエンコーダーはコンパイルあたり +642 ms で −1.2、RRF 融合は p = 1.0 で +0.2 でした。対象を絞ったアンカーに対して実行した5つも、同様に後退しました。候補上限による p95 の改善は 4.5% にとどまり、予測していた30~60%には届かなかったため、レイテンシに関する反証基準は維持されます。3つ目の埋め込みファミリーのスコアは0.078でした。完全なレポートはこちらです: プール改善サイクル。

この失敗から得られたものは2つあり、どちらも機能ではなく証拠です。

  • リリース済みのランキングは、偶然ではなくアブレーションによって裏付けられています。 最良チャンクの集約はチャンク合計を11.8ポイント上回り、リリース済みのBM25の順序は、両方の条件でカバレッジ、近接度、それらの組み合わせ、RRF 融合、ローカルのクロスエンコーダーを上回ります。
  • +26.2ポイントの top-10 上限は実在し、未解決で、まだ達成されていません。 k=1で0.246なのに対し、Goldはプール済み top-10 に0.508で含まれています。低コストな字句クラスの改善策は使い尽くされており、そこに到達するには、質問語の重複とは異なるシグナルが必要です。

どのような構成を議論しても変わらない依存関係の下限は、TitenのFTSのみのレーンは、両方の条件でLLM呼び出しも埋め込み呼び出しもゼロだったということです。Mem0はLLMなしでも埋め込みプロバイダーを必要とします。dependencies: {}、src/core/に外部インポートがなく、コードベース全体の外部呼び出しは、どちらもオプトインの2つだけです。

ほかに公表済みの損失として、合成コーパスではクレーム数が10³から10⁵に増えるとFTSのみの recall@1 が1.00から0.49に低下しますが、これは上記の実データでの劣化を過小評価しています。1つのプロセスはクレーム数10kで1つのコアを使い切り、再ランキング段階はなく、ガバナンスとコラボレーションのプリミティブを評価する外部スイートもありません。

チャットボットではなくチームのためのメモリ

ストレージ専用のメモリはテキストを保存します。検索専用のメモリはテキストを埋め込み、近くにある文章を返します。どちらの場合も、何が最新で、許可されていて、真実なのかを判断するのは呼び出し側です。また、どちらも2つのエージェントが同じ作業をひそかに引き受けるのを防げません。

Titenのレベル5カーネルは、ソースの観察結果を証拠に紐づいた時間的なクレームに変換し、呼び出し側に表示が許可されたコンテキストだけをコンパイルします。レベル6では、このカーネルにチェックポイント、リース、引き継ぎ、ガバナンス、監査、署名付きフェデレーションを組み合わせます。

レベル6 = 証拠に基づくコンテキスト + 調整された作業 + ガバナンス

段階的に上がる4つのメモリモデル。ログとファイル、ベクトル検索、Titenのレベル5カーネル、Titenのレベル6ファブリック。それぞれに、可能なことと限界が示されています。レベル6はTitenの製品モデルであり、外部認証ではありません

メモリモデル可能なこと限界
ログとファイル過去のテキストを保持する何が最新で、信頼でき、関連性があるのかは、呼び出し側が判断する必要があります
ベクトル検索意味的に類似した文章を見つける類似性だけでは、出所、権限、真実性を証明できません
Titenレベル5カーネル範囲を限定した証拠、クレーム、時間、信頼、競合から、境界のあるコンテキストをコンパイルする優れた記憶機能を備えていますが、それ自体では並列作業を調整しません
Titenレベル6ファブリックタスクの所有権、再開可能な状態、引き継ぎ、ポリシー、監査、フェデレーションを追加するTitenは調整の記録を担います。次に何を実行するかは、引き続きエージェントまたはオーケストレーターが選択します

レベル6はTitenの製品モデルであり、外部認証ではありません。この違いはAPI上で確認できます。メモリとコラボレーションは、1つの認可、証拠、監査の境界を共有しています。

プロジェクトの状況

Titen は 1.0 より前の段階です。 SemVer の第 4 条に従い、 公開 API はまだ安定していません。1.0.0 より前では、利用者が破壊的変更を判断できるのは マイナー バージョンだけです。0.5.7 から 0.6.0 への更新では互換性が失われる可能性があり、 ^0.5.0 は 0.6.0 に一致しません。バージョンを正確に固定し、更新前に 変更履歴を確認してください。

Titen に関して「安定」という言葉が使われている場合――npm の latest ディストタグ、 titen.dev/version.json の "channel": "stable"、 そして titen version --check――それは リリースチャネル を指します。つまり、next のプレリリースではなく、意図的にリリースされたものです。API の安定性を表すものではなく、成熟度を示すバッジでもありません。 バージョン管理とチャネルをご覧ください。

現在のリリースには、メモリーカーネル、REST API、MCP サーバー、 TypeScript SDK、コラボレーションツール、エンタープライズガバナンス、署名付きフェデレーション、 オペレーターダッシュボードが含まれています。

Titen は SQLite を使って Bun 上で実行することも、D1 を使って Cloudflare Workers 上で実行することもできます。セマンティック検索は任意です。Bun では sqlite-vec を、Cloudflare では Vectorize と Workers AI を使用できます。ライブ環境での検証は、メンテナーの隔離されたメンテナー向けリリーススタック上でのみ行われています 。このスタックはテスト用であり、本番環境でも一般提供でもありません (適用範囲に関する注記)。Titen は独自のインフラストラクチャで実行できます。

クライアント。 Titen には TypeScript/JavaScript SDK、titen CLI、そして clients/python/にある 最小限の Python クライアントが含まれています。Python クライアントは標準ライブラリのみを使う単一ファイルで、observe → consolidate → compile → evidence をカバーし、それ以外のすべてのルートには汎用の request を提供します。PyPI では公開されていません。チェックアウトから pip install ./clients/python でインストールするか、titen.py をベンダーとして取り込んでください。他の言語向けのクライアントはありません。その言語を使う場合は、認証済み REST API を直接利用してください。すべてのルート、スコープ、エラー形式は API リファレンスに記載されています。

実行環境の詳細なエビデンスと残るゲートについては成熟度マトリクスを、リリース履歴については 変更履歴をご覧ください。

エージェントのインストールと接続

このセクションでは、独自の API キーを持ち、複数のエージェントが HTTP 経由でアクセスできる、長時間稼働するインスタンスを使った サーブ済み のデプロイ方法を説明します。このマシン上のエージェントだけにメモリーを使いたい場合は、上記の30 秒で試す方法だけでセットアップは完了です。次のセマンティック検索(任意)に進んでください。

ローカルサーバーにはBun 1.2 以降が必要です。ウェブサイトのインストーラーは必要に応じて Bun を追加し、その後、現在のユーザー向けに titen コマンドをインストールします。

curl -fsSL https://titen.dev/install.sh | bash
titen --version

Windows PowerShell の場合:

irm https://titen.dev/install.ps1 | iex
titen --version

bun add --global titen-memory@latest を実行する方法もあります。Bun がすでに PATH にある場合は、npm と pnpm によるグローバルインストールも利用できます。

公開パッケージには、現在のオペレーターダッシュボードが含まれています。CLI のインストール後に titen dashboard を実行すると、そのリリースに含まれる /dashboard/ アセットが配信されます。ライブデータは有効にならず、ループバック以外にリスナーが公開されることもありません。

1. ストアを作成する

これは一度だけ実行します。--db を指定しない場合、Bun のサービスコマンドは、現在のディレクトリにかかわらず、ユーザーごとの安定したストア ~/.titen/service.db を使用します。

titen bootstrap --org "My Org"

出力された組織 ID、API キー、一時的なダッシュボードパスワードを保存してください。Titen が保存するのはそれらのハッシュのみです。ダッシュボードユーザーは owner で、初回ログイン時にパスワードを変更する必要があります。

./titen.db を使用していた既存のリリースが自動的に移動されることはありません。引き続き --db /absolute/path/to/titen.db を明示して使用し、serve、キー管理、移行、バックアップでも同じフラグを使用してください。

エージェントホストごとに、個別に失効できるキーを作成してください。組織 ID を置き換え、安定したプリンシパル名を指定します。

titen key create \
  --org-id org_replace_me \
  --principal agent-codex \
  --kind agent \
  --scopes "mcp:call,projects:create" \
  --trust asserted \
  --label codex

mcp:call には、書き込み可能なメモリツールと連携ツールが含まれます。すべてのエージェントで同じキーを共有しないでください。任意の --subjects と --projects を指定すると、そのキーによる書き込みを指定したサブジェクトパターンとプロジェクト ID に制限できます。--subjects castle:profile:alice,castle:shared は書き込みフェンスです。末尾の * はプレフィックスを表します。フラグを省略すると、キーに制限はかかりません。フェンスを追加するには、既存のキーを失効させて新しいキーを作成します。生のキーが表示されるのは一度だけです。

titen project create と titen project update は --default-visibility を受け付けます。visibility を省略した remember では、そのプロジェクトのデフォルトが使われます。エンリッチメントモデルを設定していない場合は、titen_remember に consolidate: true を渡すと、titen_compile がその書き込みを返せるようになります。

2. サービスを起動する
titen serve

別のシェルを開き、準備状況を確認します。

curl --fail http://127.0.0.1:8787/readyz
export TITEN_MCP_URL="http://127.0.0.1:8787/mcp"
export TITEN_API_KEY="paste-the-agent-key-here"

キーはシェル、サービス環境、またはシークレットマネージャーに保管してください。リポジトリには絶対に入れないでください。エージェントがコンテナ内または別のマシンで実行されている場合、127.0.0.1 は Titen サーバーではなく、そのエージェントを指します。代わりに、プライベート HTTPS、Tailscale、または信頼できるトンネルの URL を使用してください。

3. エージェントホストを接続する

Codex は Titen の HTTP エンドポイントに直接接続できます。保存されるのは環境変数名であり、キーではありません。

codex mcp add titen --url "$TITEN_MCP_URL" \
  --bearer-token-env-var TITEN_API_KEY
codex mcp get titen --json

Claude Code は同梱の stdio ブリッジを起動できます。Claude プロセスから 2 つの変数を継承します。

claude mcp add --transport stdio --scope user titen -- titen mcp
claude mcp get titen

OpenClaw サービスは、~/.openclaw/.env から永続的な環境変数を読み込みます。そこに TITEN_MCP_URL と TITEN_API_KEY を記述し、ファイルのモードを 600 に設定してから、リモートサーバーを登録して接続を確認します。

openclaw mcp set titen \
  '{"url":"${TITEN_MCP_URL}","transport":"streamable-http","headers":{"Authorization":"Bearer ${TITEN_API_KEY}"}}'
openclaw gateway restart
openclaw mcp doctor titen --probe

Hermes は Titen の同梱 stdio ブリッジを起動できます。同じ 2 つの変数を ~/.hermes/.env に記述してから、次を実行します。

hermes mcp add titen \
  --command titen \
  --args mcp \
  --env 'TITEN_MCP_URL=${TITEN_MCP_URL}' 'TITEN_API_KEY=${TITEN_API_KEY}'
hermes mcp test titen

Claude Desktop および stdio MCP に対応するその他のクライアントでは、この簡単な設定を使用できます。上記の 2 つの変数が設定された環境からクライアントを起動してください。

{
  "mcpServers": {
    "titen": {
      "command": "titen",
      "args": ["mcp"]
    }
  }
}

PATH 上のコマンドを優先してください。titen mcp、npx -y titen-memory mcp、または bunx titen-memory mcp を使用できます。bun または node の絶対パスは、移動後の代替手段としてのみ使用してください。インストール先が変わると動作しなくなります。

ブリッジは状態を保持しません。認証済みの HTTP エンドポイントへ、改行区切りの MCP メッセージを転送するだけです。

titen mcp は環境変数からモードを選択します。TITEN_MCP_URL と TITEN_API_KEY の両方が設定されている場合は、そのインスタンスへのブリッジとして動作します。どちらも設定されていない場合は、上記のローカルストアを提供します。片方だけが設定されている場合は、推測で動作せずエラーになります。ローカルモードでも、提供されるパスとその認可の仕組みは変わりません。これは追加の入り口であり、制限を緩めるものではありません。

Titen は公式 MCP レジストリに io.github.RamaAditya49/titen-memory として登録されているため、そのディレクトリを参照するクライアントでは候補として表示できます。それ以外の環境でも、上記の手動設定を使用できます。マニフェストと手動での公開手順は、MCP レジストリへの登録に記載されています。

4. 接続を確認する

ホストの MCP ステータスビューを開くか、エージェントに次のように依頼します。

このリポジトリの Git origin を特定し、現在のタスクに関連する Titen のコンテキストをコンパイルして、アクセス可能な Titen ツールを一覧表示してください。

正常に接続されると、10 個の titen_* ツールが利用可能になります。Titen のハンドシェイクは、タスクまたはリポジトリのスコープが変わったときに一度だけコンパイルすること、メモリを信頼できない参照データとして扱うこと、トランスクリプトやシークレットを決して取り込まないことをホストに指示します。

ツールのエラーには、範囲を限定したサポート情報が含まれます。エージェントは、想定されるセットアップ結果と、調査が必要な状態や不具合の可能性を区別できます。プロジェクト参照が見つからない場合は引き続き 404 NOT_FOUND となります。権限を持つオペレーターは、セットアップをバグと見なすことなく作成を承認できます。

分散型の Titen スキルでは、公開 Issue を作成する前に、再現、サニタイズ、重複検索を行う必要があります。GitHub 認証はホストが管理します。Titen が GitHub トークンを受け取ったり、セキュリティ上の所見を公開 Issue として投稿したりすることはありません。

エージェント統合ガイドでは、Cursor、OpenCode、Windsurf、TRAE、Pi、およびプラグインのインストールについて説明しています。セキュアなイングレスのガイドでは、Tailscale Serve と Cloudflare Tunnel を扱っています。

ネットワークに接続してバージョンを確認するのは titen version --check のみです。実行したときに限り、titen.dev/version.json を読み取ります。Titen はサーバーや MCP の起動中にポーリングしません。

セマンティック検索(任意)

デフォルトのインストールは FTS のみで、埋め込み設定がなくても準備完了の状態を保ちます。セマンティック検索は全項目必須です。TITEN_EMBED_* 変数を 1 つでも設定すると有効になるため、以下の変数はすべて有効でなければなりません。そうでない場合、サービスはフェイルクローズし、/readyz は checks.semantic_index: "embedding_configuration_invalid" を伴って 503 を返し、ベクトルクエリは実行されません。Bun のベクトルデプロイでは、[email protected] も追加する必要があります。

セマンティック検索が有効な場合、通常の保留中のプロジェクション処理は checks.semantic_index: "index_projection_pending" と報告しますが、/readyz は HTTP 200 のままです。正規の SQL/FTS リクエストは利用可能で、セマンティックインデックスは同期中です。埋め込みモデル/ベクトルの障害が検出された場合、またはフィンガープリントに互換性がない場合は、引き続き 503 を返します。

変数必須同梱時のデフォルト未設定または無効な場合
TITEN_EMBED_BASE_URLはいなしconfigured_error。認証情報、クエリ、フラグメントを含まない http:/https: である必要があります
TITEN_EMBED_MODELはいBun ではなし、Workers では @cf/baai/bge-base-en-v1.5configured_error
TITEN_EMBED_DIMSはいBun ではなし、Workers では 768configured_error。1~65,536 の整数で、インデックスの次元数と一致する必要があります
TITEN_EMBED_REVISIONはいなしconfigured_error
TITEN_EMBED_PROFILEはいなしconfigured_error。モデルファミリーごとに 1 つの値のみ受け付けます
TITEN_EMBED_MIN_COSINEはいなしconfigured_error。この値は各オペレーターが単独で調整します
TITEN_EMBED_API_KEYプロバイダーがベアラートークンを必要とする場合のみなしこれだけを設定した場合でもオプトインとなり、その場合はフェイルクローズします

このうち 3 つにはどこにもデフォルトがなく、安全に推測できる値もありません。

  • TITEN_EMBED_REVISION は、エンドポイントの基盤となる重みを正確に特定する不透明で不変の識別子で、長さは200文字以下です。形式の検証は行われません。この値は保存されたインデックスのフィンガープリントに記録されるため、変更するとインデックスが無効になり、再構築が必要になります。それがこの値の役割です。ストア内のベクトルが、次のクエリで使用するものと同じ重みから生成されたことを Titen に保証するために使います。不変のリビジョンを特定できないプロバイダーでは、FTS のみを使用してください。
  • TITEN_EMBED_PROFILE はクエリ/ドキュメントの入力変換を選択する設定で、受け入れられる値は モデル ID によって強制されます。embeddinggemma を含むモデル ID(大文字と小文字、句読点を区別しません)が受け入れるのは embeddinggemma-retrieval-v1 のみです。それ以外のモデルが受け入れるのは raw-unit-v1 のみです。EmbeddingGemma モデルを未変換の入力で実行する方法も、EmbeddingGemma のプロンプトを別のモデルに適用する方法もありません。不一致の場合は警告ではなく configured_error になります。
  • TITEN_EMBED_MIN_COSINE に 同梱時の既定値はありません。変数が未設定の場合は空文字列として読み込まれ、拒否されるため、意味検索は弱い一致を黙って受け入れず、フェイルクローズします。Titen には、汎用のしきい値も、事前に検証されたしきい値も同梱されていません。該当するプロバイダー、モデル、リビジョン、プロファイルを固定した評価から導き出してください。0 は有効な意図的設定で、「インデックスが返すすべての候補を受け入れ、順位付けに判断を委ねる」ことを意味します。

EmbeddingGemma の使用例 — 768 次元の embeddinggemma を提供する OpenAI 互換エンドポイント:

bun add titen-memory [email protected]

TITEN_EMBED_BASE_URL=http://127.0.0.1:11434/v1 \
TITEN_EMBED_MODEL=embeddinggemma \
TITEN_EMBED_DIMS=768 \
TITEN_EMBED_REVISION=embeddinggemma-q4-2026-07-31 \
TITEN_EMBED_PROFILE=embeddinggemma-retrieval-v1 \
TITEN_EMBED_MIN_COSINE=0.32 \
bunx titen-memory serve

このモデル ID が受け入れるプロファイルは embeddinggemma-retrieval-v1 のみです。 embeddinggemma-q4-2026-07-31 はプレースホルダーです。プロバイダーが報告する不変のリビジョンに置き換え、値を変更する際はインデックスを再構築してください。 0.32 もプレースホルダーです。独自に調整したしきい値に置き換え、測定方法を記録してください。curl --fail http://127.0.0.1:8787/readyz で確認してください。正常なベクトルデプロイでは capabilities.vector: "enabled" と報告されます。

同梱のベクトルパスは、glibc を使用する Linux x64 と Bun 1.3.13 で検証済みです。その他のプラットフォームでは、ready、drain、query のスモークテストをそれぞれ実施する必要があります。

バックアップ、キーのローテーション、コンテナー、永続的なサービスのセットアップについては、Bun/VPS デプロイガイドを参照してください。

SDK の使用

SDK は fetch を使用し、Node 22 以降、Bun、Deno、エッジランタイムで動作します。

titen-memory は ESM 専用で、CommonJS のエントリーポイントはありません。そのため、使用するプロジェクトも ESM である必要があります。npm init -y は "type": "commonjs" を書き込むため、以下の 2 行目は省略できません。これがないと、Node は Titen のコードに到達する前に SyntaxError: Cannot use import statement outside a module で失敗します。

npm install titen-memory
npm pkg set type=module

これを titen-example.js として保存し、node titen-example.js を実行します。

import { TitenClient } from "titen-memory";

const titen = new TitenClient({
  url: process.env.TITEN_URL ?? "http://127.0.0.1:8787",
  key: process.env.TITEN_API_KEY,
});

const subject = "release-runbook";
const observation = await titen.observe({
  subject_id: subject,
  kind: "imported_source",
  content: "The release runbook requires a rollback smoke test after deployment.",
  source: { type: "runbook", ref: "ops/release.md" },
  trust: "verified",
});

await titen.consolidate(subject, [
  {
    kind: "procedural",
    statement: "Run a rollback smoke test after deployment.",
    sources: [
      { observation_id: observation.observation_id, relation: "supports" },
    ],
  },
]);

const context = await titen.compile({
  subject_id: subject,
  task: "rollback smoke after deployment",
  max_tokens: 900,
});

console.log(context.items);

このスクリプトを実行するには、サービスが稼働していて、キーが必要です。titen bootstrap --org "My Org" と titen serve を実行してサービスを起動し、TITEN_API_KEY をエクスポートしてください。TypeScript では、同じファイルを Node 22.18 以降または Bun で titen-example.ts としてそのまま使用できます。厳密な null チェックを満たすには、process.env.TITEN_API_KEY! と記述します。npm pkg set type=module を省略してファイル名を .mjs/.mts にする方法も使えます。これらの拡張子は package.json に関係なく ESM として扱われます。

max_tokens に指定できる値は 128~32,000 です。返されるすべてのメモリー項目には untrusted: true が含まれます。プロンプトの境界とアクションのポリシーは、引き続きクライアント側で管理します。

Python から使用する場合は clients/python/ を利用してください。これは PyPI にはなく、チェックアウトからインストールします。その他の言語では、 API リファレンス に記載されている REST API を直接呼び出します。

型付きメソッドは一般的なエージェント操作をカバーします。残りの認証済み JSON ルートとストリーミングルートには、request() と requestRaw() を使用します。変更操作では、安全な再試行のために idempotencyKey を指定できます。

リクエストの仕様とスコープのルールについては、エージェントガイド および API リファレンス を参照してください。

アーキテクチャ

Web 標準に準拠した単一の TypeScript コアが、両方のランタイムで動作します。

機能Bun/VPSCloudflare
HTTPBun.serveWorker fetch
正規 SQLbun:sqliteD1
語彙検索SQLite FTS5D1 FTS5
オプションのベクトル検索sqlite-vecVectorize(下記のスコープに関する注記を参照)
自動モデル強化実装済み、オプトイン対応の HTTP実装済み、オプトイン対応の HTTP
バックグラウンド処理起動時および上限付きタイマースケジュール済みハンドラー。トリガーのプロビジョニング方法は異なります

Vectorize のスコープ。 Vectorize と Workers AI は、メンテナーのリリーススタック、つまりメンテナー自身の Cloudflare アカウント上の分離されたスタックで実装され、実環境で検証済みです。このスタックでは、スコープを限定した BGE-M3 検索、上限付き修復、Cron、永続化、ロールバックが検証されています。これはテスト用の本番環境であり、一般提供を示すものではありません。これを実行する顧客のデプロイはなく、利用するには、ご自身のアカウントで準備完了、ドレイン、クエリのスモークテストを済ませる必要があります。AI/Vectorize バインディングがない場合でも Worker は準備完了状態を維持し、検索には語彙ベースの D1 FTS5 を使用します。正確な検証内容は 成熟度マトリックス に記載されています。

モデルを用いた自動クレーム導出と振り返りは、永続化ジョブ、上限付き検証、個別の準備状態を備えたオプトイン機能として実装されています。ただし、本番環境では有効化されていません。候補モデルはまだ凍結された有効化ゲートを通過しておらず、ロックされた評価と実ランタイムのスモークテストも記録されていません。クレームはユーザーが作成しますで説明しているとおり、呼び出し元が証拠にリンクされたクレームを明示的に作成します。

基本サービスに Docker、Redis、Postgres、グラフデータベース、ベクトルデータベースは必要ありません。認可は検索より先に実行され、Titen が返す前にすべての候補が正規 SQL から読み込まれます。

コンポーネントと障害の境界については、アーキテクチャ概要 を参照してください。Cloudflare の運用者は、まず Cloudflare デプロイガイド を確認してください。

ダッシュボード

チェックイン済みの Astro クライアント /dashboard/ は、メモリ、コラボレーション、運用、管理、ガバナンス、プロフィールを網羅する、15 の遷移先を備えたライブのオペレーター向け画面です。各ユーザーはユーザー名とパスワードでサインインします。ループバックアダプターは、発行された短期キーを不透明な HttpOnly セッションの背後に保持し、どちらの認証情報もブラウザーのストレージには書き込みません。初期化時にはランダムな一時パスワードで owner を作成し、ユーザーの追加にも同じ初回変更必須のフローを適用します。永続 SQL スロットリングにより、再起動後もパスワードの推測を制限します。オプションの WebAuthn パスキーでは、段階的なセッションと一度限りのリカバリーコードを使用し、公開 API クライアントを妨げません。API キーはエージェント、サービス、SDK、リカバリー用に引き続き利用できます。サービスへの接続が切れている場合やリクエストが拒否された場合に、フィクスチャへフォールバックすることはありません。

各データ領域には、タスクに特化したテーブル、リスト、または事実ビューを使用します。レコードを選択すると、インスペクターが開きます。行の操作は、選択したそのレコードを対象に実行されます。認可された応答全体は、診断用の閉じた 技術ペイロード の開示領域から引き続き確認できます。

タスクに特化した列を備えたプロジェクトディレクトリ

ダッシュボードガイドでは、設定と検証について説明しています。プライベートな Tailscale Serve アクセス、または Access で保護された Cloudflare Tunnel については、セキュアなイングレスガイドを参照してください。

パッケージ版をインストールした場合は、同じリリースのアダプターを起動します。

TITEN_DASHBOARD_LIVE=true \
TITEN_DASHBOARD_AUTH=session \
TITEN_API_URL=http://127.0.0.1:8787 \
titen dashboard

ドキュメント

こちらを参照内容
基本手順小規模チーム向けの完全な使用例
API リファレンスREST、MCP、エラー、互換性
ソースメモリのインポート明示的に指定された 16 個のソースプロファイルから、選定済みのメモリをプレビューしてインポート
アーキテクチャコア、ランタイム、ストレージ、ポリシーの境界
エージェント連携ホスト固有の MCP とスキルのセットアップ
VPS へのデプロイBun、コンテナー、永続化、強化
Cloudflare へのデプロイWorker と D1 のセットアップ
ダッシュボードのセキュアなイングレスTailscale Serve、または Access を使用した Cloudflare Tunnel
MCP レジストリへの登録server.json を公式 MCP レジストリに公開
監査ルールtiten audit における重複、想起ループ、シークレット、古さの判定方法
ロードマップエビデンスに基づく成熟度と今後の作業
ドキュメント一覧製品、エンジニアリング、セキュリティ、研究に関するドキュメント

開発

このリポジトリでは Node 22+、Bun 1.2+、pnpm が必要です。

git clone https://github.com/RamaAditya49/titen.git
cd titen
pnpm install
pnpm test
pnpm check:workflow

変更は spec -> plan -> implement -> done の手順で進めます。公開動作、ストレージ、認可、ランタイムの契約を変更する前に、 CONTRIBUTING.md をお読みください。

セキュリティ

Titen は 127.0.0.1 にバインドした状態を保ってください。リモートエージェントは、プライベートネットワークまたは信頼できる TLS リバースプロキシを使用してください。そのプロキシで /mcp を公開する場合は、TITEN_MCP_ORIGIN に正確な公開オリジンを設定してください。永続化された webhook およびフェデレーションの署名シークレット用の外部暗号化キーリングとして TITEN_SECRET_KEYS を使用し、アウトバウンド webhook を有効にする前に TITEN_WEBHOOK_ALLOWED_HOSTNAMES を設定してください。VPS セキュリティガイドで、形式とローテーション手順を説明しています。

脆弱性を公開 issue で報告しないでください。GitHub の非公開脆弱性報告を利用し、SECURITY.mdに従ってください。報告には、実際の認証情報や非公開のメモリー内容を絶対に含めないでください。

ライセンス

Titen は Apache License 2.0 のライセンスに基づいています。

コメント

MCP は初めてですか?

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

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