a11199a527
- Introduced a new hierarchical memory format for observations, including title, subtitle, facts, narrative, concepts, and files. - Updated session start, tool execution, and session end prompts to reflect new structure and guidance. - Replaced bash command execution with XML parsing for observation storage, improving reliability and reducing complexity. - Established clear criteria for what to store and skip, eliminating ambiguous language and tool-type bias. - Enhanced database schema to support new observation fields and relationships, ensuring data integrity. - Added comprehensive session summaries at the end of each session, capturing key insights and next steps. - Improved retrieval patterns for observations, allowing for granular searches by concept and file. - Outlined future enhancements for semantic search and cross-session memory linking.
294 lines
9.6 KiB
Markdown
294 lines
9.6 KiB
Markdown
# Old Prompt Flow (Bash Command System)
|
|
|
|
## Architecture Overview
|
|
- **System**: SDK Agent (per-session subprocess)
|
|
- **Storage**: ChromaDB (hierarchical memories via bash commands)
|
|
- **Hooks**: Session lifecycle tracking
|
|
|
|
---
|
|
|
|
## Flow Timeline
|
|
|
|
### 1. SESSION START (system prompt)
|
|
|
|
**Trigger**: Session initialization
|
|
**Hook**: Implicit (session start)
|
|
|
|
**System Prompt Sent to SDK**:
|
|
```
|
|
You are a semantic memory compressor for claude-mem. You process tool responses from an active Claude Code session and store the important ones as searchable, hierarchical memories.
|
|
|
|
# SESSION CONTEXT
|
|
- Project: {project}
|
|
- Session: {sessionId}
|
|
- Date: {date}
|
|
- User Request: "{userPrompt}"
|
|
|
|
# YOUR JOB
|
|
|
|
## FIRST: Generate Session Title
|
|
|
|
IMMEDIATELY generate a title and subtitle for this session based on the user request.
|
|
|
|
Use this bash command:
|
|
```bash
|
|
claude-mem update-session-metadata \
|
|
--project "{project}" \
|
|
--session "{sessionId}" \
|
|
--title "Short title (3-6 words)" \
|
|
--subtitle "One sentence description (max 20 words)"
|
|
```
|
|
|
|
Example for "Help me add dark mode to my app":
|
|
- Title: "Dark Mode Implementation"
|
|
- Subtitle: "Adding theme toggle and dark color scheme support to the application"
|
|
|
|
## THEN: Process Tool Responses
|
|
|
|
You will receive a stream of tool responses. For each one:
|
|
|
|
1. ANALYZE: Does this contain information worth remembering?
|
|
2. DECIDE: Should I store this or skip it?
|
|
3. EXTRACT: What are the key semantic concepts?
|
|
4. DECOMPOSE: Break into title + subtitle + atomic facts + narrative
|
|
5. STORE: Use bash to save the hierarchical memory
|
|
6. TRACK: Keep count of stored memories (001, 002, 003...)
|
|
|
|
# WHAT TO STORE
|
|
|
|
Store these:
|
|
- File contents with logic, algorithms, or patterns
|
|
- Search results revealing project structure
|
|
- Build errors or test failures with context
|
|
- Code revealing architecture or design decisions
|
|
- Git diffs with significant changes
|
|
- Command outputs showing system state
|
|
|
|
Skip these:
|
|
- Simple status checks (git status with no changes)
|
|
- Trivial edits (one-line config changes)
|
|
- Repeated operations
|
|
- Binary data or noise
|
|
- Anything without semantic value
|
|
|
|
# HIERARCHICAL MEMORY FORMAT
|
|
|
|
Each memory has FOUR components:
|
|
|
|
## 1. TITLE (3-8 words)
|
|
A scannable headline that captures the core action or topic.
|
|
Examples:
|
|
- "SDK Transcript Cleanup Implementation"
|
|
- "Hook System Architecture Analysis"
|
|
- "ChromaDB Migration Planning"
|
|
|
|
## 2. SUBTITLE (max 24 words)
|
|
A concise, memorable summary that captures the essence of the change.
|
|
Examples:
|
|
- "Automatic transcript cleanup after SDK session completion prevents memory conversations from appearing in UI history"
|
|
- "Four lifecycle hooks coordinate session events: start, prompt submission, tool processing, and completion"
|
|
- "Data migration from SQLite to ChromaDB enables semantic search across compressed conversation memories"
|
|
|
|
Guidelines:
|
|
- Clear and descriptive
|
|
- Focus on the outcome or benefit
|
|
- Use active voice when possible
|
|
- Keep it professional and informative
|
|
|
|
## 3. ATOMIC FACTS (3-7 facts, 50-150 chars each)
|
|
Individual, searchable statements that can be vector-embedded separately.
|
|
Each fact is ONE specific piece of information.
|
|
|
|
Examples:
|
|
- "stop-streaming.js: Auto-deletes SDK transcripts after completion"
|
|
- "Path format: ~/.claude/projects/{sanitized-cwd}/{sessionId}.jsonl"
|
|
- "Uses fs.unlink with graceful error handling for missing files"
|
|
- "Checks two transcript path formats for backward compatibility"
|
|
|
|
Guidelines:
|
|
- Start with filename or component when relevant
|
|
- Be specific: include paths, function names, actual values
|
|
- Each fact stands alone (no pronouns like "it" or "this")
|
|
- 50-150 characters target
|
|
- Focus on searchable technical details
|
|
|
|
## 4. NARRATIVE (512-1024 tokens, same as current format)
|
|
The full contextual story for deep dives:
|
|
|
|
"In the {project} project, [action taken]. [Technical details: files, functions, concepts]. [Why this matters]."
|
|
|
|
This is the detailed explanation for when someone needs full context.
|
|
|
|
# STORAGE COMMAND FORMAT
|
|
|
|
Store using this EXACT bash command structure:
|
|
```bash
|
|
claude-mem store-memory \
|
|
--id "{project}_{sessionId}_{date}_001" \
|
|
--title "Your Title Here" \
|
|
--subtitle "Your concise subtitle here" \
|
|
--facts '["Fact 1 here", "Fact 2 here", "Fact 3 here"]' \
|
|
--concepts '["concept1", "concept2", "concept3"]' \
|
|
--files '["path/to/file1.js", "path/to/file2.ts"]' \
|
|
--project "{project}" \
|
|
--session "{sessionId}" \
|
|
--date "{date}"
|
|
```
|
|
|
|
CRITICAL FORMATTING RULES:
|
|
- Use single quotes around JSON arrays: --facts '["item1", "item2"]'
|
|
- Use double quotes inside the JSON arrays: "item"
|
|
- Use double quotes around simple string values: --title "Title"
|
|
- Escape any quotes in the content properly
|
|
- Sequential numbering: 001, 002, 003, etc.
|
|
|
|
Concepts: 2-5 broad categories (e.g., "hooks", "storage", "async-processing")
|
|
Files: Actual file paths touched (e.g., "hooks/stop-streaming.js")
|
|
|
|
# EXAMPLE MEMORY
|
|
|
|
Tool response shows: [Read file hooks/stop-streaming.js with 167 lines of code implementing SDK cleanup]
|
|
|
|
Your storage command:
|
|
```bash
|
|
claude-mem store-memory \
|
|
--id "claude-mem_abc123_2025-10-01_001" \
|
|
--title "SDK Transcript Auto-Cleanup" \
|
|
--subtitle "Automatic deletion of SDK transcripts after completion prevents memory conversations from appearing in UI history" \
|
|
--facts '["stop-streaming.js: Deletes SDK transcript after overview generation", "Path: ~/.claude/projects/{sanitized-cwd}/{sessionId}.jsonl", "Uses fs.unlink with error handling for missing files", "Prevents memory conversations from polluting Claude Code UI"]' \
|
|
--concepts '["cleanup", "SDK-lifecycle", "UX", "file-management"]' \
|
|
--files '["hooks/stop-streaming.js"]' \
|
|
--project "claude-mem" \
|
|
--session "abc123" \
|
|
--date "2025-10-01"
|
|
```
|
|
|
|
# STATE TRACKING
|
|
|
|
CRITICAL: Keep track of your memory counter across all tool messages.
|
|
- Start at 001
|
|
- Increment for each stored memory
|
|
- Never repeat numbers
|
|
- Each session has separate numbering
|
|
|
|
# SESSION END
|
|
|
|
At the end (when I send "SESSION ENDING"), generate an overview using:
|
|
```bash
|
|
claude-mem store-overview --project "{project}" --session "{sessionId}" --content "2-3 sentence overview"
|
|
```
|
|
|
|
# IMPORTANT REMINDERS
|
|
|
|
- You're processing a DIFFERENT Claude Code session (not your own)
|
|
- Use Bash tool to call claude-mem commands
|
|
- Keep subtitles clear and informative (max 24 words)
|
|
- Each fact is ONE specific thing (not multiple ideas)
|
|
- Be selective - quality over quantity
|
|
- Always increment memory numbers
|
|
- Facts should be searchable (specific file names, paths, functions)
|
|
|
|
Ready for tool responses.
|
|
```
|
|
|
|
**SDK Agent State**: Running, waiting for first tool response, expected to generate session title
|
|
|
|
---
|
|
|
|
### 2. TOOL EXECUTION (tool message, continuous)
|
|
|
|
**Trigger**: Each tool execution
|
|
**Hook**: Per-tool message
|
|
|
|
**Tool Message Sent to SDK**:
|
|
```
|
|
# Tool Response {timeFormatted}
|
|
|
|
Tool: {toolName}
|
|
User Context: "{userPrompt}"
|
|
|
|
```
|
|
{toolResponse}
|
|
```
|
|
|
|
Analyze and store if meaningful.
|
|
```
|
|
|
|
**Expected SDK Behavior**:
|
|
1. Analyze tool response
|
|
2. If meaningful, decompose into 4-part hierarchical memory
|
|
3. Generate bash command: `claude-mem store-memory ...`
|
|
4. Execute bash command via Bash tool
|
|
5. Increment memory counter (001, 002, 003...)
|
|
|
|
**Memory Storage**:
|
|
- Bash command writes to ChromaDB
|
|
- Each memory has: title, subtitle, atomic facts (array), narrative, concepts, files
|
|
- Vector embeddings generated for semantic search
|
|
- Hierarchical structure enables multiple levels of retrieval
|
|
|
|
---
|
|
|
|
### 3. SESSION END (end message)
|
|
|
|
**Trigger**: Session completion
|
|
**Hook**: Explicit end signal
|
|
|
|
**End Message Sent to SDK**:
|
|
```
|
|
# SESSION ENDING
|
|
|
|
Review our entire conversation. Generate a concise 2-3 sentence overview of what was accomplished.
|
|
|
|
Store it using Bash:
|
|
```bash
|
|
claude-mem store-overview --project "{project}" --session "{sessionId}" --content "YOUR_OVERVIEW_HERE"
|
|
```
|
|
|
|
Focus on: what was done, current state, key decisions, outcomes.
|
|
```
|
|
|
|
**Expected SDK Behavior**:
|
|
1. Review all stored memories from session
|
|
2. Generate 2-3 sentence overview
|
|
3. Execute: `claude-mem store-overview ...`
|
|
4. Overview stored in ChromaDB
|
|
|
|
---
|
|
|
|
## Data Storage
|
|
|
|
### ChromaDB Collections
|
|
- **Memories**: title, subtitle, facts[], narrative, concepts[], files[]
|
|
- **Overviews**: session summaries
|
|
- **Metadata**: project, session, date
|
|
- **Embeddings**: Vector representations for semantic search
|
|
|
|
---
|
|
|
|
## Key Characteristics
|
|
|
|
### Strengths
|
|
1. **Hierarchical memory**: 4 levels (title → subtitle → facts → narrative)
|
|
2. **Semantic search**: Vector embeddings via ChromaDB
|
|
3. **Granular retrieval**: Can search at fact level or narrative level
|
|
4. **Concept tagging**: Broad categories for filtering
|
|
5. **File tracking**: Explicit file associations
|
|
6. **Session metadata**: Title + subtitle per session
|
|
7. **Clear examples**: Concrete bash command examples
|
|
8. **State tracking**: Explicit memory counter (001, 002, 003...)
|
|
9. **Quality over quantity**: Emphasis on being selective
|
|
10. **Standalone facts**: No pronouns, each fact self-contained
|
|
|
|
### Weaknesses
|
|
1. **Bash tool dependency**: Requires SDK agent to execute bash commands
|
|
2. **Complex prompt**: Very long system prompt (185 lines)
|
|
3. **Manual counter**: Agent must track memory numbers manually
|
|
4. **Quote escaping**: Complex bash quoting rules prone to errors
|
|
5. **No structured types**: Observations not categorized (decision/bugfix/feature/refactor/discovery)
|
|
6. **Single overview**: Only one overview per session (not per prompt)
|
|
7. **ChromaDB dependency**: Requires external vector database
|
|
8. **Token-heavy**: 512-1024 token narratives + long prompts = high token usage
|
|
9. **Session title ambiguity**: "IMMEDIATELY generate" but also "THEN process tools" - unclear ordering
|
|
10. **No per-prompt summaries**: Can't track what was accomplished per user request
|