Initial commit
This commit is contained in:
21
.claude-plugin/plugin.json
Normal file
21
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"name": "episodic-memory",
|
||||||
|
"description": "Semantic search for Claude Code conversations. Remember past discussions, decisions, and patterns.",
|
||||||
|
"version": "1.0.13",
|
||||||
|
"author": {
|
||||||
|
"name": "Jesse Vincent",
|
||||||
|
"email": "jesse@fsck.com"
|
||||||
|
},
|
||||||
|
"agents": [
|
||||||
|
"./agents/search-conversations.md"
|
||||||
|
],
|
||||||
|
"mcp": {
|
||||||
|
"episodic-memory": {
|
||||||
|
"command": "node",
|
||||||
|
"args": [
|
||||||
|
"${CLAUDE_PLUGIN_ROOT}/cli/mcp-server-wrapper.js"
|
||||||
|
],
|
||||||
|
"env": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# episodic-memory
|
||||||
|
|
||||||
|
Semantic search for Claude Code conversations. Remember past discussions, decisions, and patterns.
|
||||||
161
agents/search-conversations.md
Normal file
161
agents/search-conversations.md
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
---
|
||||||
|
description: Gives you memory across sessions. You don't automatically remember past conversations - THIS AGENT RESTORES IT. Search your history before starting any task to recover decisions, solutions, and lessons learned.
|
||||||
|
capabilities: ["semantic-search", "conversation-synthesis", "historical-context", "pattern-recognition", "decision-archaeology"]
|
||||||
|
model: haiku
|
||||||
|
tools: Read, mcp__plugin_episodic-memory_episodic-memory__search, mcp__plugin_episodic-memory_episodic-memory__show
|
||||||
|
---
|
||||||
|
|
||||||
|
# Conversation Search Agent
|
||||||
|
|
||||||
|
You are searching historical Claude Code conversations for relevant context.
|
||||||
|
|
||||||
|
**Your task:**
|
||||||
|
1. Search conversations using the `search` tool
|
||||||
|
2. Read the top 2-5 most relevant results using the `show` tool
|
||||||
|
3. Synthesize key findings (max 1000 words)
|
||||||
|
4. Return synthesis + source pointers (so main agent can dig deeper)
|
||||||
|
|
||||||
|
## How to Search
|
||||||
|
|
||||||
|
Use the MCP tool `search`:
|
||||||
|
```
|
||||||
|
mcp__plugin_episodic-memory_episodic-memory__search
|
||||||
|
query: "your search query"
|
||||||
|
mode: "both" # or "vector" or "text"
|
||||||
|
limit: 10
|
||||||
|
```
|
||||||
|
|
||||||
|
This returns:
|
||||||
|
- Project name and date
|
||||||
|
- Conversation summary (AI-generated)
|
||||||
|
- Matched exchange with similarity score
|
||||||
|
- File path and line numbers
|
||||||
|
|
||||||
|
Read the full conversations for top 2-5 results using `show` to get complete context.
|
||||||
|
|
||||||
|
## What to Look For
|
||||||
|
|
||||||
|
When analyzing conversations, focus on:
|
||||||
|
- What was the problem or question?
|
||||||
|
- What solution was chosen and why?
|
||||||
|
- What alternatives were considered and rejected?
|
||||||
|
- Any gotchas, edge cases, or lessons learned?
|
||||||
|
- Relevant code patterns, APIs, or approaches used
|
||||||
|
- Architectural decisions and rationale
|
||||||
|
|
||||||
|
## Output Format
|
||||||
|
|
||||||
|
**Required structure:**
|
||||||
|
|
||||||
|
### Summary
|
||||||
|
[Synthesize findings in 200-1000 words. Adapt structure to what you found:
|
||||||
|
- Quick answer? 1-2 paragraphs.
|
||||||
|
- Complex topic? Use sections (Context/Solution/Rationale/Lessons/Code).
|
||||||
|
- Multiple approaches? Compare and contrast.
|
||||||
|
- Historical evolution? Show progression chronologically.
|
||||||
|
|
||||||
|
Focus on actionable insights for the current task.]
|
||||||
|
|
||||||
|
### Sources
|
||||||
|
[List ALL conversations examined, in order of relevance:]
|
||||||
|
|
||||||
|
**1. [project-name, YYYY-MM-DD]** - X% match
|
||||||
|
Conversation summary: [One sentence - what was this conversation about?]
|
||||||
|
File: ~/.config/superpowers/conversation-archive/.../uuid.jsonl:start-end
|
||||||
|
Status: [Read in detail | Reviewed summary only | Skimmed]
|
||||||
|
|
||||||
|
**2. [project-name, YYYY-MM-DD]** - X% match
|
||||||
|
Conversation summary: ...
|
||||||
|
File: ...
|
||||||
|
Status: ...
|
||||||
|
|
||||||
|
[Continue for all examined sources...]
|
||||||
|
|
||||||
|
### For Follow-Up
|
||||||
|
|
||||||
|
Main agent can:
|
||||||
|
- Ask you to dig deeper into specific source (#1, #2, etc.)
|
||||||
|
- Ask you to read adjacent exchanges in a conversation
|
||||||
|
- Ask you to search with refined query
|
||||||
|
- Read sources directly (discouraged - risks context bloat)
|
||||||
|
|
||||||
|
## Critical Rules
|
||||||
|
|
||||||
|
**DO:**
|
||||||
|
- Search using the provided query
|
||||||
|
- Read full conversations for top results
|
||||||
|
- Synthesize into actionable insights (200-1000 words)
|
||||||
|
- Include ALL sources with metadata (project, date, summary, file, status)
|
||||||
|
- Focus on what will help the current task
|
||||||
|
- Include specific details (function names, error messages, line numbers)
|
||||||
|
|
||||||
|
**DO NOT:**
|
||||||
|
- Include raw conversation excerpts (synthesize instead)
|
||||||
|
- Paste full file contents
|
||||||
|
- Add meta-commentary ("I searched and found...")
|
||||||
|
- Exceed 1000 words in Summary section
|
||||||
|
- Return search results verbatim
|
||||||
|
|
||||||
|
## Example Output
|
||||||
|
|
||||||
|
```
|
||||||
|
### Summary
|
||||||
|
|
||||||
|
developer needed to handle authentication errors in React Router 7 data loaders
|
||||||
|
without crashing the app. The solution uses RR7's errorElement + useRouteError()
|
||||||
|
to catch 401s and redirect to login.
|
||||||
|
|
||||||
|
**Key implementation:**
|
||||||
|
Protected route wrapper catches loader errors, checks error.status === 401.
|
||||||
|
If 401, redirects to /login with return URL. Otherwise shows error boundary.
|
||||||
|
|
||||||
|
**Why this works:**
|
||||||
|
Loaders can't use hooks (tried useNavigate, failed). Throwing redirect()
|
||||||
|
bypasses error handling. Final approach lets errors bubble to errorElement
|
||||||
|
where component context is available.
|
||||||
|
|
||||||
|
**Critical gotchas:**
|
||||||
|
- Test with expired tokens, not just missing tokens
|
||||||
|
- Error boundaries need unique keys per route or won't reset
|
||||||
|
- Always include return URL in redirect
|
||||||
|
- Loaders execute before components, no hook access
|
||||||
|
|
||||||
|
**Code pattern:**
|
||||||
|
```typescript
|
||||||
|
// In loader
|
||||||
|
if (!response.ok) throw { status: response.status, message: 'Failed' };
|
||||||
|
|
||||||
|
// In ErrorBoundary
|
||||||
|
const error = useRouteError();
|
||||||
|
if (error.status === 401) navigate('/login?return=' + location.pathname);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Sources
|
||||||
|
|
||||||
|
**1. [react-router-7-starter, 2024-09-17]** - 92% match
|
||||||
|
Conversation summary: Built authentication system with JWT, implemented protected routes
|
||||||
|
File: ~/.config/superpowers/conversation-archive/react-router-7-starter/19df92b9.jsonl:145-289
|
||||||
|
Status: Read in detail (multiple exchanges on error handling evolution)
|
||||||
|
|
||||||
|
**2. [react-router-docs-reading, 2024-09-10]** - 78% match
|
||||||
|
Conversation summary: Read RR7 docs, discussed new loader patterns and errorElement
|
||||||
|
File: ~/.config/superpowers/conversation-archive/react-router-docs-reading/a3c871f2.jsonl:56-98
|
||||||
|
Status: Reviewed summary only (confirmed errorElement usage)
|
||||||
|
|
||||||
|
**3. [auth-debugging, 2024-09-18]** - 73% match
|
||||||
|
Conversation summary: Fixed token expiration handling and error boundary reset issues
|
||||||
|
File: ~/.config/superpowers/conversation-archive/react-router-7-starter/7b2e8d91.jsonl:201-345
|
||||||
|
Status: Read in detail (discovered gotchas about keys and expired tokens)
|
||||||
|
|
||||||
|
### For Follow-Up
|
||||||
|
|
||||||
|
Main agent can ask me to:
|
||||||
|
- Dig deeper into source #1 (full error handling evolution)
|
||||||
|
- Read adjacent exchanges in #3 (more debugging context)
|
||||||
|
- Search for "React Router error boundary patterns" more broadly
|
||||||
|
```
|
||||||
|
|
||||||
|
This output:
|
||||||
|
- Synthesis: ~350 words (actionable, specific)
|
||||||
|
- Sources: Full metadata for 3 conversations
|
||||||
|
- Enables iteration without context bloat
|
||||||
45
plugin.lock.json
Normal file
45
plugin.lock.json
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||||
|
"pluginId": "gh:obra/episodic-memory:",
|
||||||
|
"normalized": {
|
||||||
|
"repo": null,
|
||||||
|
"ref": "refs/tags/v20251128.0",
|
||||||
|
"commit": "c48078b2f0190285b865b31937ecbe3afa3444a3",
|
||||||
|
"treeHash": "308239b9cfef2988bd53fb4b19399d7ba280dd9292b9ec98aa877f2cad60a2ce",
|
||||||
|
"generatedAt": "2025-11-28T10:27:24.551911Z",
|
||||||
|
"toolVersion": "publish_plugins.py@0.2.0"
|
||||||
|
},
|
||||||
|
"origin": {
|
||||||
|
"remote": "git@github.com:zhongweili/42plugin-data.git",
|
||||||
|
"branch": "master",
|
||||||
|
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
|
||||||
|
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
|
||||||
|
},
|
||||||
|
"manifest": {
|
||||||
|
"name": "episodic-memory",
|
||||||
|
"description": "Semantic search for Claude Code conversations. Remember past discussions, decisions, and patterns.",
|
||||||
|
"version": "1.0.13"
|
||||||
|
},
|
||||||
|
"content": {
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "README.md",
|
||||||
|
"sha256": "eff4e5157068aa65b260f823effa776c1218f2e830fb5ff5ed602cd8dc39b755"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "agents/search-conversations.md",
|
||||||
|
"sha256": "c3cf385fc5f9b8db56edb3eb6c3741a521c89487c74b142bdb763a6db822b360"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": ".claude-plugin/plugin.json",
|
||||||
|
"sha256": "da97d6d77c044ec6b0b62766cd233b7d5a9a496dfe91700fdd91872d9ddb040c"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dirSha256": "308239b9cfef2988bd53fb4b19399d7ba280dd9292b9ec98aa877f2cad60a2ce"
|
||||||
|
},
|
||||||
|
"security": {
|
||||||
|
"scannedAt": null,
|
||||||
|
"scannerVersion": null,
|
||||||
|
"flags": []
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user