233 lines
5.7 KiB
Markdown
233 lines
5.7 KiB
Markdown
# Common Issue Resolutions
|
|
|
|
Quick fixes for frequently encountered claude-mem problems.
|
|
|
|
## Issue: Nothing is Remembered After `/clear` {#nothing-remembered}
|
|
|
|
**Symptoms:**
|
|
- Data doesn't persist across sessions
|
|
- Context is empty after `/clear`
|
|
- Search returns no results for past work
|
|
|
|
**Root cause:** Sessions are marked complete but data should persist. This suggests:
|
|
- Worker not processing observations
|
|
- Database not being written to
|
|
- Context hook not reading from database
|
|
|
|
**Fix:**
|
|
1. Verify worker is running:
|
|
```bash
|
|
pm2 jlist | grep claude-mem-worker
|
|
```
|
|
|
|
2. Check database has recent observations:
|
|
```bash
|
|
sqlite3 ~/.claude-mem/claude-mem.db "SELECT COUNT(*) FROM observations WHERE created_at > datetime('now', '-1 day');"
|
|
```
|
|
|
|
3. Restart worker and start new session:
|
|
```bash
|
|
pm2 restart claude-mem-worker
|
|
```
|
|
|
|
4. Create a test observation: `/skill version-bump` then cancel
|
|
|
|
5. Check if observation appears in viewer:
|
|
```bash
|
|
open http://127.0.0.1:37777
|
|
# Or manually check database:
|
|
sqlite3 ~/.claude-mem/claude-mem.db "SELECT * FROM observations ORDER BY created_at DESC LIMIT 1;"
|
|
```
|
|
|
|
## Issue: Viewer Empty After Every Claude Restart {#viewer-empty}
|
|
|
|
**Symptoms:**
|
|
- Viewer shows no data at http://127.0.0.1:37777
|
|
- Stats endpoint returns all zeros
|
|
- Database appears empty in UI
|
|
|
|
**Root cause:**
|
|
- Database being recreated on startup (shouldn't happen)
|
|
- Worker reading from wrong database location
|
|
- Database permissions issue
|
|
|
|
**Fix:**
|
|
1. Check database file exists and has data:
|
|
```bash
|
|
ls -lh ~/.claude-mem/claude-mem.db
|
|
sqlite3 ~/.claude-mem/claude-mem.db "SELECT COUNT(*) FROM observations;"
|
|
```
|
|
|
|
2. Check file permissions:
|
|
```bash
|
|
ls -la ~/.claude-mem/claude-mem.db
|
|
# Should be readable/writable by your user
|
|
```
|
|
|
|
3. Verify worker is using correct database path in logs:
|
|
```bash
|
|
pm2 logs claude-mem-worker --lines 50 --nostream | grep "Database"
|
|
```
|
|
|
|
4. Test viewer connection manually:
|
|
```bash
|
|
curl -s http://127.0.0.1:37777/api/stats
|
|
# Should show non-zero counts if data exists
|
|
```
|
|
|
|
## Issue: Old Memory in Claude {#old-memory}
|
|
|
|
**Symptoms:**
|
|
- Context contains outdated observations
|
|
- Irrelevant past work appearing in sessions
|
|
- Context feels stale
|
|
|
|
**Root cause:** Context hook injecting stale observations
|
|
|
|
**Fix:**
|
|
1. Check the observation count setting:
|
|
```bash
|
|
grep CLAUDE_MEM_CONTEXT_OBSERVATIONS ~/.claude/settings.json
|
|
```
|
|
|
|
2. Default is 50 observations - you can adjust this:
|
|
```json
|
|
{
|
|
"env": {
|
|
"CLAUDE_MEM_CONTEXT_OBSERVATIONS": "25"
|
|
}
|
|
}
|
|
```
|
|
|
|
3. Check database for actual observation dates:
|
|
```bash
|
|
sqlite3 ~/.claude-mem/claude-mem.db "SELECT created_at, project, title FROM observations ORDER BY created_at DESC LIMIT 10;"
|
|
```
|
|
|
|
4. Consider filtering by project if working on multiple codebases
|
|
|
|
## Issue: Worker Not Starting {#worker-not-starting}
|
|
|
|
**Symptoms:**
|
|
- PM2 shows worker as "stopped" or "errored"
|
|
- Health check fails
|
|
- Viewer not accessible
|
|
|
|
**Root cause:**
|
|
- Port already in use
|
|
- PM2 not installed or not in PATH
|
|
- Missing dependencies
|
|
|
|
**Fix:**
|
|
1. Try manual worker start to see error:
|
|
```bash
|
|
cd ~/.claude/plugins/marketplaces/thedotmack/
|
|
node plugin/scripts/worker-service.cjs
|
|
# Should start server on port 37777 or show error
|
|
```
|
|
|
|
2. If port in use, change it:
|
|
```bash
|
|
mkdir -p ~/.claude-mem
|
|
echo '{"env":{"CLAUDE_MEM_WORKER_PORT":"37778"}}' > ~/.claude-mem/settings.json
|
|
```
|
|
|
|
3. If dependencies missing:
|
|
```bash
|
|
cd ~/.claude/plugins/marketplaces/thedotmack/
|
|
npm install
|
|
pm2 start ecosystem.config.cjs
|
|
```
|
|
|
|
## Issue: Search Results Empty
|
|
|
|
**Symptoms:**
|
|
- Search skill returns no results
|
|
- API endpoints return empty arrays
|
|
- Know there's data but can't find it
|
|
|
|
**Root cause:**
|
|
- FTS5 tables not synchronized
|
|
- Wrong project filter
|
|
- Database not being queried correctly
|
|
|
|
**Fix:**
|
|
1. Check if observations exist in database:
|
|
```bash
|
|
sqlite3 ~/.claude-mem/claude-mem.db "SELECT COUNT(*) FROM observations;"
|
|
```
|
|
|
|
2. Check FTS5 table sync:
|
|
```bash
|
|
sqlite3 ~/.claude-mem/claude-mem.db "SELECT COUNT(*) FROM observations_fts;"
|
|
# Should match observation count
|
|
```
|
|
|
|
3. Try search via API directly:
|
|
```bash
|
|
curl "http://127.0.0.1:37777/api/search/observations?q=test&format=index"
|
|
```
|
|
|
|
4. If FTS5 out of sync, restart worker (triggers reindex):
|
|
```bash
|
|
pm2 restart claude-mem-worker
|
|
```
|
|
|
|
## Issue: Port Conflicts
|
|
|
|
**Symptoms:**
|
|
- Worker won't start
|
|
- Error: "EADDRINUSE: address already in use"
|
|
- Health check fails
|
|
|
|
**Fix:**
|
|
1. Check what's using port 37777:
|
|
```bash
|
|
lsof -i :37777
|
|
```
|
|
|
|
2. Either kill the conflicting process or change claude-mem port:
|
|
```bash
|
|
mkdir -p ~/.claude-mem
|
|
echo '{"env":{"CLAUDE_MEM_WORKER_PORT":"37778"}}' > ~/.claude-mem/settings.json
|
|
pm2 restart claude-mem-worker
|
|
```
|
|
|
|
## Issue: Database Corrupted
|
|
|
|
**Symptoms:**
|
|
- SQLite errors in logs
|
|
- Worker crashes on startup
|
|
- Queries fail
|
|
|
|
**Fix:**
|
|
1. Backup the database:
|
|
```bash
|
|
cp ~/.claude-mem/claude-mem.db ~/.claude-mem/claude-mem.db.backup
|
|
```
|
|
|
|
2. Try to repair:
|
|
```bash
|
|
sqlite3 ~/.claude-mem/claude-mem.db "PRAGMA integrity_check;"
|
|
```
|
|
|
|
3. If repair fails, recreate (loses data):
|
|
```bash
|
|
rm ~/.claude-mem/claude-mem.db
|
|
pm2 restart claude-mem-worker
|
|
# Worker will create new database
|
|
```
|
|
|
|
## Prevention Tips
|
|
|
|
**Keep claude-mem healthy:**
|
|
- Regularly check viewer UI to see if observations are being captured
|
|
- Monitor database size (shouldn't grow unbounded)
|
|
- Update plugin when new versions are released
|
|
- Keep Claude Code updated
|
|
|
|
**Performance tuning:**
|
|
- Adjust `CLAUDE_MEM_CONTEXT_OBSERVATIONS` if context is too large/small
|
|
- Use `/clear` to mark sessions complete and start fresh
|
|
- Use search skill to query specific memories instead of loading everything
|