Persistent memory for Claude Code — the full plugin: hooks, skill, MCP server, workflows. A Markdown vault you own, no server and no account. Hooks-only version: continuum.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport streamable-http counts 6 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
export
-
graph
-
health
-
pull
-
recall
-
stale
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 626d50f · analyzer v28 · 1d ago
skills & prompt files 3
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 70
filesystem 17
- fs SirCharan-second-brain-626d50f/hooks/_hooklib.py :43
with open(os.path.join(MEM, "config.json"), errors="ignore") as f: - fs SirCharan-second-brain-626d50f/hooks/capture-exchange.py :73
txt = open(path, errors="ignore").read() - fs SirCharan-second-brain-626d50f/hooks/context-monitor.py :87
prev = int(open(flag).read().strip() or 0) - fs SirCharan-second-brain-626d50f/hooks/memory-embed.py :44
raw = open(path, errors="ignore").read() - fs SirCharan-second-brain-626d50f/hooks/memory-lint.py :42
txt = open(rp, errors="ignore").read() - fs SirCharan-second-brain-626d50f/hooks/memory-recall.py :36
lines = [l.rstrip() for l in open(df, errors="ignore") if l.startswith("- ")] - fs SirCharan-second-brain-626d50f/hooks/sb_rank.py :122
head = open(path, errors="ignore").read(HEAD_BYTES) - fs SirCharan-second-brain-626d50f/hooks/session-resume.py :69
t = open(path, errors="ignore").read()[:600] - fs SirCharan-second-brain-626d50f/hooks/stuck-detector.py :45
st = json.load(open(sf)) - fs SirCharan-second-brain-626d50f/hooks/test_capture_exchange.py :48
txt = open(path).read() - fs SirCharan-second-brain-626d50f/hooks/test_enforcement.py :18
with open(os.path.join(_VAULT, "config.json"), "w") as _f: - fs SirCharan-second-brain-626d50f/hooks/test_memory_embed.py :46
open(p, "w").write( - fs SirCharan-second-brain-626d50f/hooks/test_memory_hooks.py :13
with open(os.path.join(_VAULT, "config.json"), "w") as _f: - fs SirCharan-second-brain-626d50f/hooks/test_sb_rank.py :38
with open(p, "w") as f: - fs SirCharan-second-brain-626d50f/mcp/mcp-setup.py :10
import shutil - fs SirCharan-second-brain-626d50f/mcp/sb_core.py :23
with open(p) as f: - fs SirCharan-second-brain-626d50f/mcp/test_mcp.py :16
open(os.path.join(d, "widgets", "widgets-cadence.md"), "w").write(
shell / exec 9
- shell SirCharan-second-brain-626d50f/hooks/_hooklib.py :140
import subprocess - shell SirCharan-second-brain-626d50f/hooks/capture-exchange.py :193
import subprocess - shell SirCharan-second-brain-626d50f/hooks/context-monitor.py :99
import subprocess - shell SirCharan-second-brain-626d50f/hooks/memory-recall.py :119
import subprocess - shell SirCharan-second-brain-626d50f/hooks/session-resume.py :343
import subprocess - shell SirCharan-second-brain-626d50f/hooks/test_enforcement.py :8
import subprocess - shell SirCharan-second-brain-626d50f/hooks/test_memory_hooks.py :82
subprocess.run(["git", "-C", repo, "init", "-q"], check=True) - shell SirCharan-second-brain-626d50f/mcp/sb_core.py :166
subprocess.run( - shell SirCharan-second-brain-626d50f/mcp/test_mcp.py :105
r = subprocess.run(
secrets 1
- secrets SirCharan-second-brain-626d50f/mcp/server_http.py :23
TOKEN = os.environ.get("SECOND_BRAIN_MCP_TOKEN") or secrets.token_urlsafe(24)
tool registrations 6
- recall SirCharan-second-brain-626d50f/mcp/server_http_sdk.py :43
- pull SirCharan-second-brain-626d50f/mcp/server_http_sdk.py :49
- export SirCharan-second-brain-626d50f/mcp/server_http_sdk.py :55
- health SirCharan-second-brain-626d50f/mcp/server_http_sdk.py :61
- stale SirCharan-second-brain-626d50f/mcp/server_http_sdk.py :67
- graph SirCharan-second-brain-626d50f/mcp/server_http_sdk.py :73