name: memory
description: Persistent memory: observations, session summaries, search
Memory
Persistent memory system: automatic capture of observations, session summaries, memory search
When to use
- "what did I do yesterday?" / "what happened last week?"
- "remember this" / "save this decision"
- "memory stats" / "show memory"
- "search memory" / "find sessions about X"
Architecture
PostToolUse hook → observations (local JSONL)
SessionEnd hook → session summary (local + git)
SessionStart hook → inject context (auto)
Hybrid storage:
- Observations (raw) →
~/.claude-memory/observations/ (local)
- Session summaries →
$PROJECT_ROOT/memory/sessions/ (git)
Paths
| What | Path |
|---|
| Observations (local) | ~/.claude-memory/observations/ |
| Sessions (local) | ~/.claude-memory/sessions/ |
| Sessions (git) | $PROJECT_ROOT/memory/sessions/ |
| Session index | $PROJECT_ROOT/memory/index.md |
| Search tool | ~/.claude-memory/hooks/memory-search.sh |
| Hook scripts | ~/.claude-memory/hooks/ |
| Config | ~/.claude-memory/config.json |
How to execute
Search observations
~/.claude-memory/hooks/memory-search.sh --type crm_update --days 7
~/.claude-memory/hooks/memory-search.sh --project $PROJECT_ROOT --days 30
~/.claude-memory/hooks/memory-search.sh --tags crm,leads --days 14
~/.claude-memory/hooks/memory-search.sh --query "Acme Corp" --days 30
~/.claude-memory/hooks/memory-search.sh --query "Acme" --full
~/.claude-memory/hooks/memory-search.sh --session abc12345
Statistics
~/.claude-memory/hooks/memory-search.sh --stats
List sessions
~/.claude-memory/hooks/memory-search.sh --sessions
Save a decision manually
echo '{"id":"obs-'$(date +%Y%m%d)'-'$(openssl rand -hex 4)'","timestamp":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","session_id":"CURRENT_SESSION","type":"decision","tool":"manual","summary":"DECISION_DESCRIPTION","context":{},"project":"$PROJECT_ROOT","tags":["TAG1"]}' >> ~/.claude-memory/observations/observations-$(date +%Y-%m-%d).jsonl
Read a specific session
cat $PROJECT_ROOT/memory/sessions/YYYY-MM-DD-SESSION_ID.md
Observation types
| Type | When |
|---|
feature | New functionality |
bugfix | Bug fix |
decision | Architectural/business decision |
discovery | New knowledge about the system |
change | General change (git, PR) |
outreach | Communication through channels |
crm_update | CRM data change |
config | Configuration change |
skill_update | Skill change |
retrospective | Quality assessment: what worked, what didn't, what to change |
Retrospective (convention)
At the end of a session or after a significant task, Claude records a retrospective observation:
echo '{"id":"obs-'$(date +%Y%m%d)'-'$(openssl rand -hex 4)'","timestamp":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","session_id":"SESSION_ID","type":"retrospective","tool":"manual","summary":"RETROSPECTIVE TEXT","context":{},"project":"$PROJECT_ROOT","tags":["retro"]}' >> ~/.claude-memory/observations/observations-$(date +%Y-%m-%d).jsonl
What to record:
- What went wrong and why
- Which skill/tool didn't work or is incomplete
- What should be changed for the next session
- Important insights about the process
Summary format: one sentence, specific. For example:
"telegram-send: need to check bot access before bulk sending"
"change-review was skipped before PR — add a reminder"
"CSV parsing via csv.DictReader breaks on empty rows — use pandas"
When to record:
- Session had errors or rework
- Found a gap in a skill or tool
- Made a decision that affects future sessions
Retrospective automatically:
- Gets included in session summary (section
## Retrospective)
- Gets injected into the next session (section
## Last retro in context)
Privacy
4 layers of protection:
<private>...</private> tags → stripped before saving
- Pattern matching (token, password, api_key, Bearer)
- Sensitive files (.env, credentials.json, token.json) → ignored
- Sensitive commands (export TOKEN/SECRET) → redacted
Maintenance
Rotation (manual, once a month)
mkdir -p ~/.claude-memory/observations/archive
find ~/.claude-memory/observations -name "observations-*.jsonl" -mtime +30 -exec mv {} ~/.claude-memory/observations/archive/ \;
Disk usage
du -sh ~/.claude-memory/
du -sh $PROJECT_ROOT/memory/
Commit session summaries
cd $PROJECT_ROOT
git checkout -b update/memory-sessions-$(date +%Y-%m-%d)
git add memory/
git commit -m "Add session summaries for $(date +%Y-%m-%d)"
git push -u origin update/memory-sessions-$(date +%Y-%m-%d)
gh pr create --title "Memory: session summaries $(date +%Y-%m-%d)" --body "Auto-generated session summaries"
gh pr merge --squash --delete-branch
git checkout main && git pull
Hooks (automatic)
| Hook | Event | What it does |
|---|
session-start.sh | SessionStart | Inject context from past sessions |
post-tool-use.sh | PostToolUse (Edit/Write/Bash) | Records observations |
session-end.sh | SessionEnd + PreCompact | Generates session summary |
Related skills
daily-briefing — morning context (includes memory)
show-today — today's tasks
query-leads — CRM search
log-activity — activity logging (complements observations)