mcpField
V
Vlk MemAct

Vlk MemAct

ローカル
github.com/aranajhonnyメモリ・ナレッジ317 週間前に更新

Vlk MemAct について

Vlk MemActは、SQLiteを基盤にPRESENT、PAST、FUTUREの状態で記憶を管理する、エージェント向けの時系列メモリMCPサーバーです。繰り返されるエラーを検出して失敗した方法の再試行を防ぎ、バックグラウンドでの統合とトークン予算管理も行います。

主な機能

  1. 01時間状態に基づく記憶管理
  2. 02言語をまたいだエラー指紋の照合
  3. 03反復エラーの自動アーカイブと制約追加
  4. 04検索時の矛盾記憶の再調整
  5. 05古い記憶の統合と整理
  6. 06トークン予算に応じた低重要度記憶のアーカイブ

活用シーン

  1. 01繰り返し失敗した修正方法の再試行を防止
  2. 02後続セッションに文脈と予防制約を提供
  3. 03アクティブな記憶のトークン量を抑制

MCP 対応

単一バイナリとして、記憶の記録・取得、履歴の確認、検索、統合状態の確認などのツールをMCP経由で公開します。クライアントは標準入出力で接続します。

設定

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

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

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

リポジトリ
パッケージ
mcpbvlk-core-x86_64-unknown-linux-gnu.mcpb

ツール

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

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

詳細

Vlk² — AI エージェント向け時間的状態機械

Vlk² は AI エージェントに時間の感覚を与えます。現在何が起きているか(PRESENT)、すでに何を試したか(PAST)、そして将来の意思決定の指針となるべきものは何か(FUTURE)を把握できます。SQLite をバックエンドに、MCP 上で単一のバイナリとして動作し、こうした時間的な状態遷移を自律的に管理します。

注目のデモ:エージェントが同じ Rust/TS/Python/Go のエラーを3回繰り返すと、Vlk² はそのループを自動的にアーカイブし、予防的な制約を注入することで、エージェントが同じ失敗するアプローチを再試行しないようにします。ただし、このアーキテクチャは汎用的です。時間的状態機械は、あらゆるエージェントフレームワークで、あらゆる種類の過去→現在→未来の遷移を追跡できます。

機能

  • 時間的状態機械 — 各メモリは状態を持ちます。PRESENT(有効なコンテキスト)、PAST(アーカイブ済みで、コンテキストには表示されない)、FUTURE(予防的な制約)、PURGED(忘却済み)。バックグラウンドエージェントが、エージェントの介入なしにエントリーを状態間で遷移させます。
  • 言語横断のループ検出 — 文字列一致ではなく、言語ごとにエラーのフィンガープリントを作成します。Rust(error[E0277])、TypeScript/JS(TS2345、TypeError)、Python(ValueError、KeyError)、Go(panic: nil pointer)、HTTP(503 Service Unavailable)、テストフレームワーク(expected: X, got: Y)を認識し、タイムスタンプを除去するフォールバックも備えています。同じフィンガープリントが3回以上現れると、Vlk² はループを自動的に PAST にアーカイブし、FUTURE 制約を注入します。
  • 取得時の再固定化 — 呼び出しのたびに現在の信念を確認し、矛盾がある場合はメモリを書き換えます。
  • トークン予算の適用 — 30秒ごとに、PRESENT と FUTURE の合計トークン数を推定します。予算(デフォルトは8K)を超えた場合、予算内に収まるまで重要度の低いエントリーからアーカイブします。
  • 自律的な統合 — バックグラウンドタスク(30秒周期)が重要度を評価し、古くなったエントリーをアーカイブして、つながりのないエントリーを忘却します。

単なるメモリシステムではない理由

一般的なメモリシステム(agentmemory、Hindsight、Mem0、Supermemory)は、事実、好み、コンテキストを保存します。Vlk² は、それらにはない1つの機能を担います。異なるファイルで同じ Rust のコンパイルエラーが3回繰り返されたことを検出し、エージェントが同じ失敗するアプローチを再試行しないよう制約を注入します。 これは置き換えを目的としたものではなく、それらと並行して動作する、特化型の障害検出レイヤーです。

機能Vlk²agentmemoryHindsightSupermemory
事実/ペルソナのメモリ—✅ 53 個のツール✅ フック✅ キーワード
言語横断のエラーフィンガープリント✅ 7 つの手法———
自律的なループの解消✅ 3 回以上の繰り返しで自動アーカイブ———
取得時の再固定化✅———
トークン数に上限を設けたコンテキスト✅ デフォルトは8K———

クイックスタート

cd vlk-core
cargo build --release
DATABASE_URL="sqlite:vlk.db?mode=rwc" ./target/release/vlk-core

すべての MCP クライアントは stdin/stdout 経由で接続します。JSON-RPC 2.0 に対応し、メッセージは1行ずつ送信します。

MCP ツール

ツール目的
vlk_record_stateログ/エラーをループ検出用の PRESENT スロットとして追加します
vlk_fetch_context再固定化とループの遮断を行い、コンテキストを整理します
vlk_time_travelPRESENT を PAST にアーカイブし、FUTURE 制約を注入します
vlk_get_historyタイムライン全体を監査します
vlk_search_memoryログと制約をキーワード検索します
vlk_summarize_session状態の件数とトークン数の推定値を表示します
vlk_revoke_future誤って学習された制約を削除します
vlk_get_facts抽出されたパターンを取得します
vlk_consolidation_statusトークンバー付きで統合エージェントの状態を表示します
vlk_pin_memoryパターンが忘却されないよう保護します
vlk_unpin_memory通常の忘却対象に戻します

ループ検出の仕組み

  1. 各エラーは種類ごとにフィンガープリント化されます。Rust の error[E...]、TS の TS...、Python の TypeError:、Go の panic:、HTTP の 503、テストのアサーション、または先頭 80 文字をフォールバックとして使用します
  2. フィンガープリントによって類似したエラーがグループ化されます。エラーコードが同じでタイムスタンプや行番号が異なる場合も、1 つのパターンとして扱われます
  3. 3 回以上繰り返されると、ループが自動でアーカイブされ、予防的な制約 [SYSTEM ANCHOR] が注入されます
  4. 今後のコンテキスト取得にこの制約が含まれるため、エージェントは同じことを繰り返さなくなります

アーキテクチャ

memory_contents (immutable, team-agnostic)
  └── FK ──► agent_timeline (PRESENT / PAST / FUTURE / PURGED)
               ├── memory_metadata (temporal vectors, importance, connectivity)
               └── semantic_facts (distilled patterns from errors)
                    └── fact_contradictions (resolution tracking)

Consolidation Agent (background tokio, 30s cycle)
  SCAN → EVALUATE importance → BUDGET_CHECK → ARCHIVE low-value → FORGET stale

検証

テスト済み: 中核となるループ検出フローを検証済みです。同一の Rust エラーが 3 回発生すると、PAST への自動アーカイブと FUTURE 制約の注入が行われます。13 個すべての MCP ツールが正しく応答します。

未テスト: 存在しない timeline_ids を指定した場合のピン留め/ピン留め解除、負荷時のトークン予算の適用、競合の解決。

ループ検出のスモークテスト — 同一の Rust error[E0277] を 3 回送信し、自動アーカイブと制約の注入を検証します。

import subprocess, json, tempfile, os, sys

db = tempfile.mktemp(suffix='.db')
proc = subprocess.Popen(['./target/release/vlk-core'],
    stdin=subprocess.PIPE, stdout=subprocess.PIPE,
    stderr=subprocess.DEVNULL,
    env={'DATABASE_URL': f'sqlite:{db}?mode=rwc'})

def rpc(msg):
    proc.stdin.write((json.dumps(msg) + '\n').encode())
    proc.stdin.flush()
    return json.loads(proc.stdout.readline())

# Init
rpc({'jsonrpc':'2.0','id':1,'method':'initialize','params':{
    'protocolVersion':'2024-11-05','capabilities':{},
    'clientInfo':{'name':'test','version':'1.0'}}})

# Send the same Rust error 3 times to trigger loop detection
error = 'error[E0277]: cannot add `str` to `str`'
for i in range(3):
    r = rpc({'jsonrpc':'2.0','id':i+2,'method':'tools/call','params':{
        'name':'vlk_record_state',
        'arguments':{'raw_log': error, 'file_context': f'lib.rs:{i*10}'}}})
    assert 'PRESENT state recorded' in r['result']['content'][0]['text']
    print(f'  Record {i+1}: OK')

# fetch_context triggers loop detection → auto-archive → constraint injection
r = rpc({'jsonrpc':'2.0','id':5,'method':'tools/call','params':{
    'name':'vlk_fetch_context','arguments':{}}})
txt = r['result']['content'][0]['text']
assert 'E0277' in txt, 'error missing after fetch'
assert any(kw in txt for kw in ['SYSTEM ANCHOR', 'PREVENTIVE', 'CONSTRAINT']), \
    'no constraint injected'
print(f'  Fetch: loop archived + constraint injected')

proc.terminate(); proc.wait()
for f in (db, db + '-wal', db + '-shm'):
    try:
        os.remove(f)
    except FileNotFoundError:
        pass
print('PASS: loop detection works')

統合

Hermes、OpenCode、Claude Code、Codex、または任意の MCP ホストに追加します。

# ~/.hermes/config.yaml or equivalent
mcp_servers:
  vlk2:
    command: "vlk2"
    env:
      DATABASE_URL: "sqlite:~/.hermes/vlk/vlk.db?mode=rwc"
    timeout: 30

あらゆる MCP クライアントと互換性があります。agentmemory、Hindsight、Supermemory、または Hermes 組み込みのメモリと併用できます。

要件

  • Rust 2021 エディション
  • SQLite(sqlx 経由でバンドル)
  • 6.4MB のバイナリ

現在の状況

現在も積極的に開発されています。中核となるループ検出と修正メモリのサイクルが実装され、E2E テスト済みです。Vlk² は汎用メモリシステムを補完する特化型のシステムであり、置き換えるものではありません。

コメント

MCP は初めてですか?

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

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