MnemoCore / integrations /claude_code /hooks /pre_session_inject.py
Granis87's picture
Upload folder using huggingface_hub
c3a3710 verified
#!/usr/bin/env python3
"""
Claude Code PreToolUse hook — MnemoCore context injection
==========================================================
On the FIRST tool call of a session, queries MnemoCore for recent context
and writes it to a temporary file that is referenced from CLAUDE.md.
This gives Claude Code automatic memory of previous sessions WITHOUT
requiring any explicit user commands.
Configure in ~/.claude/settings.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": ".*",
"hooks": [
{
"type": "command",
"command": "python /path/to/pre_session_inject.py"
}
]
}
]
}
}
The hook must exit 0 (allow) or 2 (block with message).
It never blocks — silently degrades if MnemoCore is offline.
"""
import json
import os
import subprocess
import sys
import tempfile
from pathlib import Path
BRIDGE = Path(__file__).resolve().parents[2] / "mnemo_bridge.py"
CONTEXT_DIR = Path(os.getenv("MNEMOCORE_CONTEXT_DIR", Path.home() / ".claude" / "mnemo_context"))
DONE_FILE = CONTEXT_DIR / ".session_injected"
def main() -> int:
try:
raw = sys.stdin.read()
data = json.loads(raw) if raw.strip() else {}
except json.JSONDecodeError:
return 0
session_id = data.get("session_id", "")
# Only inject once per session
done_marker = CONTEXT_DIR / f".injected_{session_id[:16]}"
if done_marker.exists():
return 0
CONTEXT_DIR.mkdir(parents=True, exist_ok=True)
# Query MnemoCore for context
try:
result = subprocess.run(
[sys.executable, str(BRIDGE), "context", "--top-k", "8"],
capture_output=True,
text=True,
timeout=5,
env={**os.environ},
)
context_md = result.stdout.strip()
except (subprocess.TimeoutExpired, FileNotFoundError):
context_md = ""
if context_md:
context_file = CONTEXT_DIR / "latest_context.md"
context_file.write_text(context_md, encoding="utf-8")
# Mark session as injected
done_marker.touch()
# Output context as additional system information if available
if context_md:
# Claude Code hooks can output JSON to inject content
output = {
"type": "system_reminder",
"content": context_md,
}
print(json.dumps(output))
return 0
if __name__ == "__main__":
sys.exit(main())