Structural Memory Protocol (SMP) — live structural code graph for scalable, safe AI agents.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 50 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
smp_annotate
-
smp_annotate_bulk
-
smp_audit_get
-
smp_batch_update
-
smp_checkpoint
-
smp_community_boundaries
-
smp_community_detect
-
smp_community_get
-
smp_community_list
-
smp_conflict
-
smp_context
-
smp_diff
-
smp_dryrun
-
smp_enrich
-
smp_enrich_batch
-
smp_enrich_stale
-
smp_enrich_status
-
smp_flow
-
smp_impact
-
smp_index_import
-
smp_integrity_baseline
-
smp_integrity_check
-
smp_locate
-
smp_lock
-
smp_navigate
-
smp_plan
-
smp_pr_create
-
smp_reindex
-
smp_review_approve
-
smp_review_create
-
smp_review_reject
-
smp_rollback
-
smp_sandbox_execute
-
smp_sandbox_kill
-
smp_sandbox_spawn
-
smp_search
-
smp_session_close
-
smp_session_open
-
smp_session_recover
-
smp_sync
-
smp_tag
-
smp_telemetry
-
smp_trace
-
smp_unlock
-
smp_update
-
smp_vector_delete
-
smp_vector_search
-
smp_vector_upsert
-
smp_why
-
tool_fn
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 9e688fa · analyzer v33 · 9h ago
skills & prompt files 1
- agent-rules offx-zinth-SMP-9e688fa/AGENTS.md
danger signals1
- dynamic code execution eval()/exec() offx-zinth-SMP-9e688fa/tests/component/test_handler_dispatch.py :65
exec('raise TypeError("Invalid parameter type")') if p.get("fail") else {"status": "ok"}
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 175
filesystem 58
- fs (weak) offx-zinth-SMP-9e688fa/benchmarks/benchmark_scale.py :28
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/benchmarks/benchmark_vector.py :20
from pathlib import Path - fs offx-zinth-SMP-9e688fa/smp/cli.py :9
from pathlib import Path - fs offx-zinth-SMP-9e688fa/smp/observability/backup.py :40
import shutil - fs offx-zinth-SMP-9e688fa/smp/protocol/auth.py :36
from pathlib import Path - fs offx-zinth-SMP-9e688fa/smp/protocol/handlers/memory.py :12
from pathlib import Path - fs offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :29
from pathlib import Path - fs offx-zinth-SMP-9e688fa/smp/protocol/server.py :19
from pathlib import Path - fs offx-zinth-SMP-9e688fa/smp/runtime/git_provider.py :38
from pathlib import Path - fs offx-zinth-SMP-9e688fa/smp/runtime/sandbox.py :33
import shutil - fs offx-zinth-SMP-9e688fa/smp/store/graph/mmap_file.py :29
from pathlib import Path - fs offx-zinth-SMP-9e688fa/smp/store/graph/mmap_store.py :34
from pathlib import Path
show 28 more
- fs offx-zinth-SMP-9e688fa/smp/store/graph/parser.py :6
from pathlib import Path - fs offx-zinth-SMP-9e688fa/smp/store/graph/watcher.py :22
from pathlib import Path - fs offx-zinth-SMP-9e688fa/smp/vector/mmap_vector.py :53
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/cli/test_commands.py :7
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/compliance/test_audit_trail.py :5
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/component/test_audit_logger.py :5
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/component/test_edge_store.py :4
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/component/test_journal.py :3
import shutil - fs (weak) offx-zinth-SMP-9e688fa/tests/component/test_lock_manager.py :6
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/component/test_node_store.py :3
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/component/test_vector_store.py :3
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/conftest.py :6
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/dr/test_cli_backup_restore.py :17
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/dr/test_health_checks.py :161
with open(graph_path, "ab") as f: - fs (weak) offx-zinth-SMP-9e688fa/tests/dr/test_high_availability.py :10
import shutil - fs (weak) offx-zinth-SMP-9e688fa/tests/dr/test_journal_corruption.py :44
with open(graph_path, "ab") as f: - fs (weak) offx-zinth-SMP-9e688fa/tests/dr/test_shutdown_recovery.py :14
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/dr/test_vector_recovery.py :348
with open(vector_path, "ab") as f: - fs (weak) offx-zinth-SMP-9e688fa/tests/e2e/test_all_52_handlers.py :3
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/e2e/test_backup_restore_cycle.py :3
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/e2e/test_full_ingestion_flow.py :3
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/e2e/test_impact_analysis_flow.py :3
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/e2e/test_mcp_server.py :8
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/e2e/test_session_full_lifecycle.py :3
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/integration/test_backup_restore.py :3
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/integration/test_multilang_ingestion.py :5
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/integration/test_session_transactions.py :16
from pathlib import Path - fs (weak) offx-zinth-SMP-9e688fa/tests/observability/test_logging.py :6
from pathlib import Path
18 more not shown — this panel samples each group; the count above is the real total.
shell / exec 6
- shell offx-zinth-SMP-9e688fa/smp/runtime/git_provider.py :32
import subprocess - shell (weak) offx-zinth-SMP-9e688fa/tests/cli/test_commands.py :5
import subprocess - shell (weak) offx-zinth-SMP-9e688fa/tests/dr/test_cli_backup_restore.py :14
import subprocess - shell (weak) offx-zinth-SMP-9e688fa/tests/dr/test_shutdown_recovery.py :12
import subprocess - shell (weak) offx-zinth-SMP-9e688fa/tests/security/test_vulnerability_scan.py :3
import subprocess - shell (weak) offx-zinth-SMP-9e688fa/tests/test_git_provider.py :6
import subprocess
network 8
- net offx-zinth-SMP-9e688fa/smp/runtime/git_provider.py :33
import urllib.error - net (weak) offx-zinth-SMP-9e688fa/tests/component/test_handler_dispatch.py :9
from httpx import ASGITransport, AsyncClient - net (weak) offx-zinth-SMP-9e688fa/tests/e2e/test_all_52_handlers.py :6
from httpx import ASGITransport, AsyncClient - net (weak) offx-zinth-SMP-9e688fa/tests/e2e/test_backup_restore_cycle.py :6
from httpx import ASGITransport, AsyncClient - net (weak) offx-zinth-SMP-9e688fa/tests/e2e/test_full_ingestion_flow.py :6
from httpx import ASGITransport, AsyncClient - net (weak) offx-zinth-SMP-9e688fa/tests/e2e/test_impact_analysis_flow.py :6
from httpx import ASGITransport, AsyncClient - net (weak) offx-zinth-SMP-9e688fa/tests/e2e/test_session_full_lifecycle.py :6
from httpx import ASGITransport, AsyncClient - net (weak) offx-zinth-SMP-9e688fa/tests/smoke/test_health.py :4
from httpx import AsyncClient
secrets 1
- secrets offx-zinth-SMP-9e688fa/smp/runtime/git_provider.py :343
token = os.environ.get("SMP_GITHUB_TOKEN") or os.environ.get("GITHUB_TOKEN", "")
database 1
- db offx-zinth-SMP-9e688fa/smp/protocol/auth.py :43
import redis
tool registrations 50
- tool_fn offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :144
- smp_navigate offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :228
- smp_trace offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :234
- smp_context offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :244
- smp_impact offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :250
- smp_locate offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :256
- smp_search offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :277
- smp_flow offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :284
- smp_update offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :295
- smp_batch_update offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :303
- smp_reindex offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :311
- smp_enrich offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :317
show 28 more
- smp_enrich_batch offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :323
- smp_enrich_stale offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :329
- smp_enrich_status offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :335
- smp_annotate offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :341
- smp_annotate_bulk offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :353
- smp_tag offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :361
- smp_session_open offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :374
- smp_session_close offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :386
- smp_session_recover offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :392
- smp_dryrun offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :398
- smp_checkpoint offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :415
- smp_rollback offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :423
- smp_lock offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :429
- smp_unlock offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :441
- smp_audit_get offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :449
- smp_diff offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :460
- smp_plan offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :468
- smp_conflict offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :489
- smp_why offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :499
- smp_telemetry offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :505
- smp_review_create offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :518
- smp_review_approve offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :536
- smp_review_reject offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :542
- smp_pr_create offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :548
- smp_sandbox_spawn offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :570
- smp_sandbox_execute offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :580
- smp_sandbox_kill offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :592
- smp_community_detect offx-zinth-SMP-9e688fa/smp/protocol/mcp.py :603
10 more not shown — this panel samples each group; the count above is the real total.
declared dependencies 34
- mcp@>=1.0
- msgspec@>=0.19
- fastapi@>=0.115
- uvicorn@>=0.34
- httpx@>=0.27
- tree-sitter@>=0.24
- tree-sitter-python@>=0.23
- tree-sitter-javascript@>=0.21
- tree-sitter-typescript@>=0.23
- tree-sitter-java@>=0.23
- tree-sitter-c@>=0.23
- tree-sitter-cpp@>=0.23
show 22 more
- tree-sitter-c-sharp@>=0.23
- tree-sitter-go@>=0.23
- tree-sitter-rust@>=0.23
- tree-sitter-php@>=0.23
- tree-sitter-swift@>=0.0.1
- tree-sitter-kotlin@>=1.0
- tree-sitter-ruby@>=0.23
- tree-sitter-matlab@>=1.0
- python-dotenv@>=1.0
- structlog@>=24.0
- redis@>=5.0
- watchdog@>=4.0
- faiss-cpu@>=1.7
- numpy@>=1.26
- pytest@>=8.0
- pytest-asyncio@>=0.24
- ruff@>=0.8
- mypy@>=1.13
- pytest-benchmark@>=4.0
- locust@>=2.20
- pytest-cov@>=4.1
- pytest-mock@>=3.12