Dragon Brain — persistent long-term memory for AI agents via MCP (Model Context Protocol). Knowledge graph (FalkorDB) + vector search (Qdrant) + CUDA GPU embeddings. Works with Claude, Gemini CLI, Cursor, Windsurf, VS Code Copilot. 30 tools, 1121 tests.
Drift inferred · capture-to-capture
- HIGH code analysis flagged dynamic code execution in iikarus/Dragon-Brain
- HIGH code analysis flagged dynamic code execution in iikarus/Dragon-Brain
- HIGH code analysis flagged dynamic code execution in iikarus/Dragon-Brain
- HIGH code analysis flagged dynamic code execution in iikarus/Dragon-Brain
- HIGH code analysis flagged dynamic code execution ×2 in iikarus/Dragon-Brain
- HIGH code analysis flagged dynamic code execution in iikarus/Dragon-Brain
transport stdio · http counts 20 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
add_observation
-
analyze_graph
-
archive_entity
-
create_entity
-
create_relationship
-
delete_entity
-
delete_relationship
-
end_session
-
find_cross_domain_patterns
-
get_evolution
-
get_hologram
-
get_neighbors
-
point_in_time_query
-
prune_stale
-
record_breakthrough
-
search_memory
-
search_stats
-
start_session
-
traverse_path
-
update_entity
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 3901cee · analyzer v33 · 3w ago
skills & prompt files 1
- agent-rules iikarus-Dragon-Brain-3901cee/CLAUDE.md
danger signals3
- dynamic code execution __import__ sink iikarus-Dragon-Brain-3901cee/scripts/scheduled_backup.py :80
env = {**__import__("os").environ, "PYTHONUTF8": "1"} - dynamic code execution eval()/exec() iikarus-Dragon-Brain-3901cee/tests/gauntlet/test_golden_queries.py :229
if not eval(assertion): # noqa: S307 — trusted test strings, see DRIFT-001 §5 - dynamic code execution eval()/exec() iikarus-Dragon-Brain-3901cee/tests/unit/test_embedding_server.py :158
exec( # noqa: S102
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 246
filesystem 35
- fs (weak) iikarus-Dragon-Brain-3901cee/benchmarks/longmemeval/ablation.py :21
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/benchmarks/longmemeval/metric_verification.py :14
data = json.load(open("benchmarks/longmemeval/data/longmemeval_oracle.json")) - fs (weak) iikarus-Dragon-Brain-3901cee/benchmarks/longmemeval/runner.py :18
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/benchmarks/longmemeval/structural_analysis.py :20
content = open(path, encoding="utf-8").read() - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/backup_restore.py :4
import shutil - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/clean_tox.py :14
import shutil - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/e2e_test.py :21
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/embedding_eval.py :27
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/hooks/branch_write_guard.py :51
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/hooks/inject_handoff_hash.py :22
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/hooks/verify_handoff_completeness.py :22
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/internal/clean_tox.py :14
import shutil
show 23 more
- fs (weak) iikarus-Dragon-Brain-3901cee/scripts/internal/embedding_eval.py :27
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/internal/rename_tests.py :15
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/mcp_smoke_test.py :5
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/operations.py :6
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/patch_docs.py :3
with open(file_path, encoding="utf-8") as f: - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/scheduled_backup.py :15
import shutil - fs (weak) iikarus-Dragon-Brain-3901cee/scripts/trace_contracts_dragon.py :29
from pathlib import Path - fs iikarus-Dragon-Brain-3901cee/src/claude_memory/fts_store.py :24
from pathlib import Path - fs iikarus-Dragon-Brain-3901cee/src/claude_memory/lock_manager.py :134
with open(lock_path, "x") as f: - fs iikarus-Dragon-Brain-3901cee/src/claude_memory/ontology.py :6
from pathlib import Path - fs iikarus-Dragon-Brain-3901cee/src/claude_memory/update_check.py :11
from pathlib import Path - fs iikarus-Dragon-Brain-3901cee/src/dashboard/app.py :100
with open("graph.html", encoding="utf-8") as f: - fs (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_backup_load.py :12
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_backup_save.py :13
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_batch4_contracts.py :8
import pathlib - fs (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_contract_scanner.py :11
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_dynamic_validation.py :63
os.remove("test_dynamic_ontology.json") - fs (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_edge_cases.py :211
with open(lock_path, "w") as f: - fs (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_inject_handoff_hash.py :13
from pathlib import Path - fs (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_lock_fallback.py :2
import shutil - fs (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_ontology.py :14
os.remove(filename) - fs (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_remaining_coverage.py :211
with open(lock_path, "w") as f: - fs (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_verify_handoff_completeness.py :10
from pathlib import Path
shell / exec 11
- shell (weak) iikarus-Dragon-Brain-3901cee/scripts/backup_restore.py :5
import subprocess - shell (weak) iikarus-Dragon-Brain-3901cee/scripts/hooks/architect_branch_guard.py :27
import subprocess - shell (weak) iikarus-Dragon-Brain-3901cee/scripts/hooks/branch_write_guard.py :48
import subprocess - shell (weak) iikarus-Dragon-Brain-3901cee/scripts/hooks/inject_handoff_hash.py :20
import subprocess - shell (weak) iikarus-Dragon-Brain-3901cee/scripts/internal/verify_mcp_server.py :5
import subprocess - shell (weak) iikarus-Dragon-Brain-3901cee/scripts/operations.py :2
import subprocess - shell (weak) iikarus-Dragon-Brain-3901cee/scripts/scheduled_backup.py :16
import subprocess - shell (weak) iikarus-Dragon-Brain-3901cee/scripts/verify_mcp_server.py :5
import subprocess - shell iikarus-Dragon-Brain-3901cee/src/dashboard/app.py :5
import subprocess - shell (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_inject_handoff_hash.py :11
import subprocess - shell (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_verify_handoff_completeness.py :8
import subprocess
network 14
- net (weak) iikarus-Dragon-Brain-3901cee/benchmarks/longmemeval/runner.py :47
import urllib.request - net (weak) iikarus-Dragon-Brain-3901cee/scripts/backup_restore.py :10
import httpx - net (weak) iikarus-Dragon-Brain-3901cee/scripts/internal/simulate_lazy_import.py :87
import httpx - net (weak) iikarus-Dragon-Brain-3901cee/scripts/simulate_lazy_import.py :87
import httpx - net iikarus-Dragon-Brain-3901cee/src/claude_memory/embedding.py :7
import httpx - net iikarus-Dragon-Brain-3901cee/src/claude_memory/reranker.py :14
import httpx - net iikarus-Dragon-Brain-3901cee/src/claude_memory/update_check.py :13
import httpx - net (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_backup_load.py :87
import httpx - net (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_backup_save.py :37
"""Helper to mock httpx.Client context manager and streaming response.""" - net (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_embedding_client.py :22
@patch("claude_memory.embedding.httpx.Client") - net (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_embedding_coverage.py :169
with patch("claude_memory.embedding.httpx.Client") as mock_client_cls: - net (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_embedding_server.py :4
Uses httpx.AsyncClient against the FastAPI test client.
show 2 more
- net (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_reranker.py :10
import httpx - net (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_update_check.py :8
import httpx
secrets 6
- secrets (weak) iikarus-Dragon-Brain-3901cee/scripts/backfill_temporal.py :29
password = os.getenv("FALKORDB_PASSWORD") - secrets (weak) iikarus-Dragon-Brain-3901cee/scripts/embedding_eval.py :138
password = os.getenv("FALKORDB_PASSWORD") - secrets (weak) iikarus-Dragon-Brain-3901cee/scripts/internal/backfill_temporal.py :29
password = os.getenv("FALKORDB_PASSWORD") - secrets (weak) iikarus-Dragon-Brain-3901cee/scripts/internal/embedding_eval.py :138
password = os.getenv("FALKORDB_PASSWORD") - secrets iikarus-Dragon-Brain-3901cee/src/claude_memory/lock_manager.py :74
self.password: str | None = os.getenv("REDIS_PASSWORD") or os.getenv("FALKORDB_PASSWORD") - secrets iikarus-Dragon-Brain-3901cee/src/claude_memory/repository.py :52
self.password = password or os.getenv("FALKORDB_PASSWORD")
database 11
- db (weak) iikarus-Dragon-Brain-3901cee/scripts/backup_restore.py :11
import redis - db (weak) iikarus-Dragon-Brain-3901cee/scripts/internal/nuke_data.py :4
import redis - db (weak) iikarus-Dragon-Brain-3901cee/scripts/internal/validate_brain.py :27
from redis import Redis - db (weak) iikarus-Dragon-Brain-3901cee/scripts/nuke_data.py :4
import redis - db (weak) iikarus-Dragon-Brain-3901cee/scripts/validate_brain.py :27
from redis import Redis - db iikarus-Dragon-Brain-3901cee/src/claude_memory/fts_store.py :22
import sqlite3 - db iikarus-Dragon-Brain-3901cee/src/claude_memory/lock_manager.py :9
import redis - db iikarus-Dragon-Brain-3901cee/src/claude_memory/repository_async.py :25
from redis.exceptions import ( - db iikarus-Dragon-Brain-3901cee/src/claude_memory/retry.py :24
from redis.exceptions import ConnectionError as RedisConnectionError - db (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_batch2_contracts.py :7
import sqlite3 - db (weak) iikarus-Dragon-Brain-3901cee/tests/unit/test_repository_async.py :16
from redis.exceptions import ConnectionError as RedisConnectionError
tool registrations 20
- create_entity iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :65
- update_entity iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :90
- delete_entity iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :105
- create_relationship iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :120
- delete_relationship iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :143
- add_observation iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :156
- start_session iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :175
- end_session iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :182
- record_breakthrough iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :193
- get_neighbors iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :214
- traverse_path iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :223
- find_cross_domain_patterns iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :230
show 8 more
- get_evolution iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :237
- point_in_time_query iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :244
- archive_entity iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :251
- prune_stale iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :260
- search_memory iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :269
- analyze_graph iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :325
- get_hologram iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :334
- search_stats iikarus-Dragon-Brain-3901cee/src/claude_memory/server.py :345
declared dependencies 34
- mcp@>=0.1.0
- graphiti-core@>=0.5.0,<1.0.0
- falkordb@>=1.4.0,<2.0.0
- pydantic@>=2.0.0
- sentence-transformers@>=2.2.0
- scikit-learn@>=1.3.0
- numpy@>=1.24.0
- streamlit@>=1.30.0
- qdrant-client@>=1.7.0,<2.0.0
- pyvis@>=0.3.2
- redis@>=7.1.0,<8.0.0
- fastapi@>=0.100.0,<1.0.0
show 22 more
- uvicorn@>=0.20.0,<1.0.0
- httpx@>=0.26.0,<1.0.0
- nest-asyncio@>=1.6.0
- pre-commit@>=3.6.0
- ruff@==0.15.0
- pytest@>=8.0.0
- pytest-asyncio@>=0.23.0
- pytest-cov@>=4.1.0
- coverage@>=7.4.0
- hypothesis@>=6.90.0
- pytest-randomly@>=3.15.0
- diff-cover@>=9.0.0
- crosshair-tool@>=0.0.74
- semgrep@>=1.50.0
- bandit@>=1.7.0
- pip-audit@>=2.7.0
- detect-secrets@>=1.4.0
- codespell@>=2.2.0
- docstr-coverage@>=2.3.0
- tox@>=4.12.0
- testcontainers@>=4.0.0,<5.0.0
- mutatest@>=3.0.0
transport_posture 2
- network-listening, binds all interfaces, no auth detected iikarus-Dragon-Brain-3901cee/src/claude_memory/embedding_server.py :148
uvicorn.run(app, host="0.0.0.0", port=port) # noqa: S104 - network-listening, binds all interfaces, no auth detected iikarus-Dragon-Brain-3901cee/tests/unit/test_embedding_server.py :161
"uvicorn.run(app, host='0.0.0.0', port=port)",