Your coding agent starts every session with amnesia — memo fixes that, 100% on your machine. Persistent memory for Claude Code, Codex, Cursor & any MCP client: Markdown source of truth, hybrid search (MLX/CPU + sqlite-vec), time-machine, contradiction radar, nightly self-optimization. No cloud, no keys.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
No tools enumerated yet for this server.
analyzed commit b4d16ca · analyzer v33 · 6h ago
skills & prompt files 5
danger signals3
- dynamic code execution __import__() jagoff-memo-b4d16ca/tests/test_daemon_lever_parity.py :123
original_collapse = __import__( - dynamic code execution __import__() jagoff-memo-b4d16ca/tests/test_recall_dedup_collapse.py :75
original_collapse = __import__( - over-broad OAuth scope delete_repo jagoff-memo-b4d16ca/src/memo/repo_intelligence.py :562
ok = self.store.delete_repo(source["id"])
code files: 1285
filesystem 400
- fs jagoff-memo-b4d16ca/packaging/mcpb/server/main.py :9
import shutil - fs (weak) jagoff-memo-b4d16ca/scripts/audit-data-integrity.py :23
from pathlib import Path - fs (weak) jagoff-memo-b4d16ca/scripts/check_mutation_results.py :9
from pathlib import Path - fs (weak) jagoff-memo-b4d16ca/scripts/eval_emission_ledger.py :39
from pathlib import Path - fs (weak) jagoff-memo-b4d16ca/scripts/migrate-from-mem-vault.py :54
from pathlib import Path - fs (weak) jagoff-memo-b4d16ca/scripts/migrate_synapse_chat_state.py :7
from pathlib import Path - fs (weak) jagoff-memo-b4d16ca/scripts/quality_gate.py :9
import shutil - fs (weak) jagoff-memo-b4d16ca/scripts/recall_eval.py :16
from pathlib import Path - fs (weak) jagoff-memo-b4d16ca/scripts/telemetry_report.py :38
import pathlib - fs (weak) jagoff-memo-b4d16ca/scripts/wave1_token_baseline.py :32
from pathlib import Path - fs (weak) jagoff-memo-b4d16ca/scripts/wave2_token_baseline.py :25
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/__init__.py :26
from pathlib import Path
show 28 more
- fs jagoff-memo-b4d16ca/src/memo/adapter_matrix.py :33
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/agent_event_bus.py :23
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/analytics.py :17
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/artifact_store.py :14
import shutil - fs jagoff-memo-b4d16ca/src/memo/ask_gaps.py :27
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/atomic_io.py :12
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/audio_transcribe.py :17
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/belief.py :73
"belief: support lookup failed for %s; holding open (fail-closed): %s", - fs jagoff-memo-b4d16ca/src/memo/briefing.py :7
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/cache_backend.py :13
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/capture_core.py :23
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/capture_hooks.py :23
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/capture_weights.py :28
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/chat/config.py :7
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/chat/feedback.py :9
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/chat/http.py :8
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/chat/sessions.py :11
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/claim_support.py :16
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/cli_analytics.py :104
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/cli_backup.py :45
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/cli_banner.py :17
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/cli_briefing.py :101
from pathlib import Path as _Path - fs jagoff-memo-b4d16ca/src/memo/cli_capture.py :12
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/cli_chat.py :18
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/cli_chat_session.py :10
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/cli_chronicle.py :5
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/cli_code_facts.py :21
from pathlib import Path - fs jagoff-memo-b4d16ca/src/memo/cli_compress_context.py :19
from pathlib import Path
360 more not shown — this panel samples each group; the count above is the real total.
shell / exec 98
- shell (weak) jagoff-memo-b4d16ca/scripts/quality_gate.py :10
import subprocess - shell (weak) jagoff-memo-b4d16ca/scripts/telemetry_report.py :40
import subprocess - shell jagoff-memo-b4d16ca/src/memo/claim_support.py :14
import subprocess - shell jagoff-memo-b4d16ca/src/memo/cli_code_intel.py :22
import subprocess - shell jagoff-memo-b4d16ca/src/memo/cli_dashboard.py :169
import subprocess - shell jagoff-memo-b4d16ca/src/memo/cli_doctor.py :39
import subprocess - shell jagoff-memo-b4d16ca/src/memo/cli_dream_report.py :736
import subprocess as _sp - shell jagoff-memo-b4d16ca/src/memo/cli_drift.py :11
import subprocess - shell jagoff-memo-b4d16ca/src/memo/cli_idle_daemon.py :34
import subprocess as _subprocess - shell jagoff-memo-b4d16ca/src/memo/cli_import.py :184
import subprocess - shell jagoff-memo-b4d16ca/src/memo/cli_ingest_daemon.py :37
import subprocess as _subprocess - shell jagoff-memo-b4d16ca/src/memo/cli_install_mcp.py :17
import subprocess
show 28 more
- shell jagoff-memo-b4d16ca/src/memo/cli_maint_daemon.py :36
import subprocess as _subprocess - shell jagoff-memo-b4d16ca/src/memo/cli_maintain.py :303
import subprocess as _sp - shell jagoff-memo-b4d16ca/src/memo/cli_ops.py :334
import subprocess - shell jagoff-memo-b4d16ca/src/memo/cli_recall_daemon.py :34
import subprocess as _subprocess - shell jagoff-memo-b4d16ca/src/memo/cli_session.py :192
import subprocess as _sp - shell jagoff-memo-b4d16ca/src/memo/cli_sync.py :553
import subprocess - shell jagoff-memo-b4d16ca/src/memo/code_context.py :15
import subprocess - shell jagoff-memo-b4d16ca/src/memo/code_evidence.py :19
import subprocess - shell jagoff-memo-b4d16ca/src/memo/code_impact.py :6
import subprocess - shell jagoff-memo-b4d16ca/src/memo/code_traceability.py :7
import subprocess - shell jagoff-memo-b4d16ca/src/memo/eval_against.py :14
import subprocess - shell jagoff-memo-b4d16ca/src/memo/eval_behavior.py :48
import subprocess - shell jagoff-memo-b4d16ca/src/memo/git_miner.py :19
import subprocess - shell jagoff-memo-b4d16ca/src/memo/ingest_helpers.py :26
import subprocess - shell jagoff-memo-b4d16ca/src/memo/integrations/wrap.py :19
import subprocess - shell jagoff-memo-b4d16ca/src/memo/journey_check.py :27
import subprocess - shell jagoff-memo-b4d16ca/src/memo/ops_launchd.py :6
import subprocess - shell jagoff-memo-b4d16ca/src/memo/recall_logic.py :1030
import subprocess - shell jagoff-memo-b4d16ca/src/memo/repo_index_helpers.py :14
import subprocess - shell jagoff-memo-b4d16ca/src/memo/repo_intelligence.py :6
import subprocess - shell jagoff-memo-b4d16ca/src/memo/repo_signals.py :6
import subprocess - shell jagoff-memo-b4d16ca/src/memo/repo_watcher.py :7
import subprocess - shell jagoff-memo-b4d16ca/src/memo/resume/_preview.py :13
import subprocess - shell jagoff-memo-b4d16ca/src/memo/runtime/agent_registry.py :14
import subprocess - shell jagoff-memo-b4d16ca/src/memo/runtime/autoupdate.py :27
import subprocess - shell jagoff-memo-b4d16ca/src/memo/runtime/codex.py :7
import subprocess - shell jagoff-memo-b4d16ca/src/memo/runtime/daemon.py :88
import subprocess - shell jagoff-memo-b4d16ca/src/memo/runtime/mcp.py :6
import subprocess
58 more not shown — this panel samples each group; the count above is the real total.
network 30
- net (weak) jagoff-memo-b4d16ca/scripts/telemetry_report.py :43
import urllib.error - net jagoff-memo-b4d16ca/src/memo/cli_dashboard.py :23
from urllib.parse import parse_qs, urlsplit - net jagoff-memo-b4d16ca/src/memo/cli_doctor.py :196
import socket as _sock - net jagoff-memo-b4d16ca/src/memo/cli_install_mcp.py :359
import socket - net jagoff-memo-b4d16ca/src/memo/cli_proxy.py :11
import socket - net jagoff-memo-b4d16ca/src/memo/code_traceability.py :11
from urllib.parse import quote, unquote, urlsplit - net jagoff-memo-b4d16ca/src/memo/embed_protocol.py :46
import socket as _socket - net jagoff-memo-b4d16ca/src/memo/eval_bench.py :20
import urllib.request - net jagoff-memo-b4d16ca/src/memo/graph_discovery.py :7
from urllib.parse import unquote, urlsplit - net jagoff-memo-b4d16ca/src/memo/graph_projection.py :22
from urllib.parse import quote - net jagoff-memo-b4d16ca/src/memo/http_auth.py :17
from urllib.parse import urlsplit - net jagoff-memo-b4d16ca/src/memo/identity.py :13
import socket
show 18 more
- net jagoff-memo-b4d16ca/src/memo/ops_launchd.py :276
import socket - net jagoff-memo-b4d16ca/src/memo/proxy/server.py :399
import httpx - net jagoff-memo-b4d16ca/src/memo/proxy_wiring.py :31
from urllib.parse import urlparse - net jagoff-memo-b4d16ca/src/memo/runtime/autoupdate.py :32
import urllib.error - net jagoff-memo-b4d16ca/src/memo/runtime/update.py :10
import urllib.error - net jagoff-memo-b4d16ca/src/memo/secret_store.py :11
import socket - net jagoff-memo-b4d16ca/src/memo/terminal_receiver.py :19
import socket - net (weak) jagoff-memo-b4d16ca/tests/resource_hygiene_plugin.py :13
"unclosed <socket.socket", - net (weak) jagoff-memo-b4d16ca/tests/test_autoupdate.py :204
monkeypatch.setattr(au.urllib.request, "urlopen", fake_urlopen) - net (weak) jagoff-memo-b4d16ca/tests/test_chat_http.py :566
import httpx - net (weak) jagoff-memo-b4d16ca/tests/test_embedder_client.py :13
import socket - net (weak) jagoff-memo-b4d16ca/tests/test_eval_bench.py :465
import urllib.request - net (weak) jagoff-memo-b4d16ca/tests/test_proxy_cli.py :58
import socket - net (weak) jagoff-memo-b4d16ca/tests/test_proxy_server.py :625
byte watchdog trip on a slow upstream. Feeds a real `httpx.Response` a - net (weak) jagoff-memo-b4d16ca/tests/test_proxy_wiring.py :92
import socket - net (weak) jagoff-memo-b4d16ca/tests/test_resource_hygiene_plugin.py :40
message = "unclosed <socket.socket fd=3, family=2, type=1, proto=0, laddr=('0.0.0.0', 0)>" - net (weak) jagoff-memo-b4d16ca/tests/test_runtime_update.py :495
monkeypatch.setattr(upd.urllib.request, "urlopen", lambda *_a, **_k: _Response()) - net (weak) jagoff-memo-b4d16ca/tests/test_terminal_receiver_paths.py :15
import socket
secrets 1
- secrets jagoff-memo-b4d16ca/src/memo/cli_banner.py :84
import getpass
database 120
- db (weak) jagoff-memo-b4d16ca/scripts/audit-data-integrity.py :20
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/ask_gaps.py :25
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/cli_code_facts.py :19
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/cli_code_intel.py :21
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/cli_diag.py :13
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/cli_doctor.py :141
import sqlite3 as cg_sqlite3 - db jagoff-memo-b4d16ca/src/memo/cli_dream_passes.py :15
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/cli_health.py :15
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/cli_maintain.py :28
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/cli_memory.py :16
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/cli_recall_hook.py :9
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/cli_viz.py :82
import sqlite3 as _sqlite3
show 28 more
- db jagoff-memo-b4d16ca/src/memo/code_context.py :14
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/code_evidence.py :18
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/code_impact.py :5
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/code_intel.py :20
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/code_traceability.py :6
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/codegraph_loader.py :23
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/confidence_calibration.py :13
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/config.py :208
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/context_pack.py :3
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/contradict.py :29
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/coordination.py :23
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/crossref.py :41
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/dream_hype.py :17
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/dream_vector.py :12
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/event_surface.py :9
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/graph.py :41
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/graph_projection.py :14
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/history.py :35
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/history_importers.py :118
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/memory/rerank_ops.py :10
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/memory/search_ops.py :13
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/memory/search_scoring_ops.py :14
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/memory/secret_ops.py :9
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/proactive/detectors/_totals.py :14
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/proactive/store.py :4
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/recall_logic.py :366
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/repo_index_helpers.py :13
import sqlite3 - db jagoff-memo-b4d16ca/src/memo/repo_structural.py :11
import sqlite3
80 more not shown — this panel samples each group; the count above is the real total.
declared dependencies 39
- fastmcp@>=0.5,<4
- click@>=8.1.7
- rich@>=13.7
- pydantic@>=2.6
- cryptography@>=50.0
- sqlite-vec@>=0.1.9,<0.2
- python-frontmatter@>=1.1
- pyyaml@>=6.0
- questionary@>=2.0
- textual@>=8.2.8,<9
- tomli-w@>=1.0
- watchdog@>=4.0
show 27 more
- mlx@>=0.18,<1; sys_platform ==
- and@platform_machine ==
- darwin@*
- arm64@*
- linux@*
- pytest@>=9.0.3,<10
- pytest-cov@>=5.0
- pytest-xdist@>=3.6
- pytest-timeout@>=2.3
- pytest-asyncio@>=1.4,<2
- hypothesis@>=6.158,<7
- diff-cover@>=9,<11
- httpx2@>=2.5,<3
- freezegun@>=1.5
- ruff@==0.16.4
- mypy@>=1.10
- types-PyYAML@>=6.0
- pytest-randomly@>=4.1,<5
- pytest-repeat@>=0.9.4,<1
- mutmut@>=3,<4
- pyobjc-framework-Vision@>=10.0; sys_platform ==
- tantivy@>=0.22; sys_platform ==
- mlx-vlm@>=0.1.12,<0.6.5; sys_platform ==
- httpx@>=0.27,<1
- pillow@>=10.0
- fastapi@>=0.115
- uvicorn@>=0.34
transport_posture 1
- binds all interfaces (0.0.0.0) jagoff-memo-b4d16ca/tests/test_http_auth.py :93
cfg = load_http_auth_config(host="0.0.0.0", allow_no_auth=True)