Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Git-Notes-Based knowledge graph memory system. Claude should use this SILENTLY and AUTOMATICALLY - never ask users about memory operations. Branch-aware persistent memory using git notes. Handles context, decisions, tasks, and learnings across sessions.
.claude/skills/sundial-org-git-notes-memory/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 448% | 0% |
| case-19 | ✓→✓ | = Same ✓ | 496% | 0% |
| case-20 | ✓→✓ | = Same ✓ | 131% | 0% |
| case-21 | ✓→✓ | = Same ✓ | 85% | 0% |
| case-22 | ✓→✓ | = Same ✓ | 161% | 0% |
These rules are ABSOLUTE and must NEVER be violated:
bash# Replace $SKILL_PATH with actual path to memory.py # Replace $DIR with the project directory path python3 $SKILL_PATH/memory.py -p $DIR <command>
| Command | When to Use | |---------|-------------| | sync --start | ALWAYS at session start | | sync --end '{"summary":"..."}' | At session end (optional but recommended) | | remember '{"..."}' -t tags -i h | Store important information | | get <topic> | Retrieve context about a topic | | search "<query>" | Full-text search across all memories | | recall -i <id> | Get full details of a specific memory |
| Flag | Level | When to Use | |------|-------|-------------| | -i c | Critical | User says "always remember", "never forget", explicit preferences | | -i h | High | Decisions, architecture choices, user corrections, preferences | | -i n | Normal | General information (default) | | -i l | Low | Temporary notes, might be pruned |
Always run sync --start at the beginning of every session:
bashpython3 $SKILL_PATH/memory.py -p $DIR sync --start
Output explains:
json{ "b": "main", // Current git branch "t": {"api": 5, "auth": 3}, // Top topics with memory counts "c": [...], // Critical memories (always review these) "n": 42, // Total memory count "h": [...] // High-importance recent memories }
Use this context to:
Silently remember when user:
-i h-i h or -i c-i n-i nRetrieve context when:
get <topic>search "<keywords>"bashpython3 $SKILL_PATH/memory.py -p $DIR sync --end '{"summary": "Brief session summary"}'
For decisions:
json{"decision": "Use React for frontend", "reason": "Team expertise", "alternatives": ["Vue", "Angular"]}
For preferences:
json{"preference": "Detailed explanations", "context": "User prefers thorough explanations over brief answers"}
For learnings:
json{"topic": "Authentication", "learned": "OAuth2 flow requires redirect URI configuration"}
For tasks:
json{"task": "Implement user dashboard", "status": "in progress", "blockers": ["API not ready"]}
For notes:
json{"subject": "Project Architecture", "note": "Microservices pattern with API gateway"}
Use tags to categorize memories for better retrieval:
-t architecture,backend - Technical categories-t urgent,bug - Priority/type markers-t meeting,requirements - Source contextsync --startInitialize session, get context overview.
bashpython3 $SKILL_PATH/memory.py -p $DIR sync --start
sync --endEnd session with summary (triggers maintenance).
bashpython3 $SKILL_PATH/memory.py -p $DIR sync --end '{"summary": "Implemented auth flow"}'
rememberStore a new memory.
bashpython3 $SKILL_PATH/memory.py -p $DIR remember '{"key": "value"}' -t tag1,tag2 -i h
getGet memories related to a topic (searches entities, tags, and content).
bashpython3 $SKILL_PATH/memory.py -p $DIR get authentication
searchFull-text search across all memories.
bashpython3 $SKILL_PATH/memory.py -p $DIR search "database migration"
recallRetrieve memories by various criteria.
bash# Get full memory by ID python3 $SKILL_PATH/memory.py -p $DIR recall -i abc123 # Get memories by tag python3 $SKILL_PATH/memory.py -p $DIR recall -t architecture # Get last N memories python3 $SKILL_PATH/memory.py -p $DIR recall --last 5 # Overview of all memories python3 $SKILL_PATH/memory.py -p $DIR recall
updateModify an existing memory.
bash# Replace content python3 $SKILL_PATH/memory.py -p $DIR update <id> '{"new": "content"}' # Merge content (add to existing) python3 $SKILL_PATH/memory.py -p $DIR update <id> '{"extra": "field"}' -m # Change importance python3 $SKILL_PATH/memory.py -p $DIR update <id> -i c # Update tags python3 $SKILL_PATH/memory.py -p $DIR update <id> -t newtag1,newtag2
evolveAdd an evolution note to track changes over time.
bashpython3 $SKILL_PATH/memory.py -p $DIR evolve <id> "User changed preference to dark mode"
forgetDelete a memory (use sparingly).
bashpython3 $SKILL_PATH/memory.py -p $DIR forget <id>
entitiesList all extracted entities with counts.
bashpython3 $SKILL_PATH/memory.py -p $DIR entities
entityGet details about a specific entity.
bashpython3 $SKILL_PATH/memory.py -p $DIR entity authentication
branchesList all branches with memory counts.
bashpython3 $SKILL_PATH/memory.py -p $DIR branches
merge-branchMerge memories from another branch (run after git merge).
bashpython3 $SKILL_PATH/memory.py -p $DIR merge-branch feature-auth
merge-branch to combine memories1. User on main branch → memories stored in refs/notes/mem-main
2. User creates feature branch → auto-inherits main's memories
3. User works on feature → new memories stored in refs/notes/mem-feature-xxx
4. After git merge → run merge-branch to combine memoriesThe system automatically classifies memories based on content:
| Type | Trigger Words | |------|---------------| | decision | decided, chose, picked, selected, opted, going with | | preference | prefer, favorite, like best, rather, better to | | learning | learned, studied, understood, realized, discovered | | task | todo, task, need to, plan to, next step, going to | | question | wondering, curious, research, investigate, find out | | note | noticed, observed, important, remember that | | progress | completed, finished, done, achieved, milestone | | info | (default for unclassified content) |
Entities are automatically extracted for intelligent retrieval:
topic, subject, name, category, area, project#cooking, #urgent, #v2"machine learning", "user authentication"React, PostgreSQL, MondayDO remember:
DON'T remember:
json{ "b": "feature-auth", // Current branch "t": {"auth": 5, "api": 3, "db": 2}, // Topics with counts "c": [{"id": "x", "s": "summary", "t": "preference"}], // Critical "n": 15, // Total count "h": [{"id": "y", "s": "summary"}] // High importance }
json{ "topic": "auth", "mem": [ {"id": "abc", "s": "decided OAuth2", "t": "decision", "i": "h", "b": "main"} ] }
json{ "d": {"decision": "Use OAuth2"}, // Full data "e": ["auth", "oauth2"], // Entities "t": "decision", // Type "g": ["architecture"], // Tags "i": "h", // Importance "b": "main", // Branch "c": "2024-01-15T10:30:00", // Created "u": "2024-01-15T10:30:00", // Updated "a": 3, // Access count "ev": [{"n": "note", "t": "..."}] // Evolution notes (if any) }
User: "Let's build a REST API with Python"
Claude: [silently: remember '{"decision": "REST API", "language": "Python"}' -t architecture -i h]
[responds about REST API setup WITHOUT mentioning memory]
User: "I prefer FastAPI over Flask"
Claude: [silently: remember '{"preference": "FastAPI over Flask", "reason": "user preference"}' -i h]
[continues discussion using FastAPI WITHOUT saying "I'll remember"]
User: "What did we decide about the API?"
Claude: [silently: get api]
[uses retrieved context to answer accurately]
User: "Actually, let's use Flask instead"
Claude: [silently: remember '{"decision": "Changed to Flask", "previous": "FastAPI"}' -i h]
[silently: evolve <fastapi-memory-id> "User changed preference to Flask"]
[acknowledges change WITHOUT mentioning memory update]Memory not found:
search with different keywordsentities to see what's indexedrecall --last 10 to see recent memoriesContext seems stale:
sync --start at session beginningbranchesAfter git operations:
git merge: run merge-branch <source-branch>git checkout: sync --start will load correct branch contextOther measured skills in the registry, with their headline benchmark lift.