61488042d8
* feat: Add batch fetching for observations and update documentation - Implemented a new endpoint for fetching multiple observations by IDs in a single request. - Updated the DataRoutes to include a POST /api/observations/batch endpoint. - Enhanced SKILL.md documentation to reflect changes in the search process and batch fetching capabilities. - Increased the default limit for search results from 5 to 40 for better usability. * feat!: Fix timeline parameter passing with SearchManager alignment BREAKING CHANGE: Timeline MCP tools now use standardized parameter names - anchor_id → anchor - before → depth_before - after → depth_after - obs_type → type (timeline tool only) Fixes timeline endpoint failures caused by parameter name mismatch between MCP layer and SearchManager. Adds new SessionStore methods for fetching prompts and session summaries by ID. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * docs: reframe timeline parameter fix as bug fix, not breaking change The timeline tools were completely broken due to parameter name mismatch. There's nothing to migrate from since the old parameters never worked. Co-authored-by: Alex Newman <thedotmack@users.noreply.github.com> * Refactor mem-search documentation and optimize API tool definitions - Updated SKILL.md to emphasize batch fetching for observations, clarifying usage and efficiency. - Removed deprecated tools from mcp-server.ts and streamlined tool definitions for clarity. - Enhanced formatting in FormattingService.ts for better output readability. - Adjusted SearchManager.ts to improve result headers and removed unnecessary search tips from combined text. * Refactor FormattingService and SearchManager for table-based output - Updated FormattingService to format search results as tables, including methods for formatting observations, sessions, and user prompts. - Removed JSON format handling from SearchManager and streamlined result formatting to consistently use table format. - Enhanced readability and consistency in search tips and formatting logic. - Introduced token estimation for observations and improved time formatting. * refactor: update documentation and API references for version bump and search functionalities * Refactor code structure for improved readability and maintainability * chore: change default model from haiku to sonnet 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: unify timeline formatting across search and context services Extract shared timeline formatting utilities into reusable module to align MCP search output format with context-generator's date/file-grouped format. Changes: - Create src/shared/timeline-formatting.ts with reusable utilities (parseJsonArray, formatDateTime, formatTime, formatDate, toRelativePath, extractFirstFile, groupByDate) - Refactor context-generator.ts to use shared utilities - Update SearchManager.search() to use date/file grouping - Add search-specific row formatters to FormattingService - Fix timeline methods to extract actual file paths from metadata instead of hardcoding 'General' - Remove Work column from search output (kept in context output) Result: Consistent date/file-grouped markdown formatting across both systems while maintaining their different column requirements. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: remove redundant legend from search output Remove legend from search/timeline results since it's already shown in SessionStart context. Saves ~30 tokens per search result. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Refactor session summary rendering to remove links - Removed link generation for session summaries in context generation and search manager. - Updated output formatting to exclude links while maintaining the session summary structure. - Adjusted related components in TimelineService to ensure consistency across the application. * fix: move skillPath declaration outside try block to fix scoping bug The skillPath variable was declared inside the try block but referenced in the catch block for error logging. Since const is block-scoped, this would cause a ReferenceError when the error handler executes. Moved skillPath declaration before the try block so it's accessible in both try and catch scopes. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: address PR #317 code review feedback **Critical Fixes:** - Replace happy_path_error__with_fallback debug calls with proper logger methods in mcp-server.ts - All HTTP API calls now use logger.debug/error for consistent logging **Code Quality Improvements:** - Extract 90-day recency window magic numbers to named constants - Added RECENCY_WINDOW_DAYS and RECENCY_WINDOW_MS constants in SearchManager **Documentation:** - Document model cost implications of Haiku → Sonnet upgrade in CHANGELOG - Provide clear migration path for users who want to revert to Haiku 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: simplify CHANGELOG - remove cost documentation Removed model cost comparison documentation per user feedback. Kept only the technical code quality improvements. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Alex Newman <thedotmack@users.noreply.github.com>
454 lines
14 KiB
Plaintext
454 lines
14 KiB
Plaintext
---
|
|
title: "Configuration"
|
|
description: "Environment variables and settings for Claude-Mem"
|
|
---
|
|
|
|
# Configuration
|
|
|
|
## Settings File
|
|
|
|
Settings are managed in `~/.claude-mem/settings.json`. The file is auto-created with defaults on first run.
|
|
|
|
### Core Settings
|
|
|
|
| Setting | Default | Description |
|
|
|-------------------------------|---------------------------------|---------------------------------------|
|
|
| `CLAUDE_MEM_MODEL` | `sonnet` | AI model for processing observations |
|
|
| `CLAUDE_MEM_CONTEXT_OBSERVATIONS` | `50` | Number of observations to inject |
|
|
| `CLAUDE_MEM_WORKER_PORT` | `37777` | Worker service port |
|
|
| `CLAUDE_MEM_SKIP_TOOLS` | `ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion` | Comma-separated tools to exclude from observations |
|
|
|
|
### System Configuration
|
|
|
|
| Setting | Default | Description |
|
|
|-------------------------------|---------------------------------|---------------------------------------|
|
|
| `CLAUDE_MEM_DATA_DIR` | `~/.claude-mem` | Data directory location |
|
|
| `CLAUDE_MEM_LOG_LEVEL` | `INFO` | Log verbosity (DEBUG, INFO, WARN, ERROR, SILENT) |
|
|
| `CLAUDE_MEM_PYTHON_VERSION` | `3.13` | Python version for chroma-mcp |
|
|
| `CLAUDE_CODE_PATH` | _(auto-detect)_ | Path to Claude Code CLI (for Windows) |
|
|
|
|
## Model Configuration
|
|
|
|
Configure which AI model processes your observations.
|
|
|
|
### Available Models
|
|
|
|
Shorthand model names automatically forward to the latest version:
|
|
|
|
- `haiku` - Fast, cost-efficient
|
|
- `sonnet` - Balanced (default)
|
|
- `opus` - Most capable
|
|
|
|
### Using the Interactive Script
|
|
|
|
```bash
|
|
./claude-mem-settings.sh
|
|
```
|
|
|
|
This script manages settings in `~/.claude-mem/settings.json`.
|
|
|
|
### Manual Configuration
|
|
|
|
Edit `~/.claude-mem/settings.json`:
|
|
|
|
```json
|
|
{
|
|
"CLAUDE_MEM_MODEL": "sonnet"
|
|
}
|
|
```
|
|
|
|
## Files and Directories
|
|
|
|
### Data Directory Structure
|
|
|
|
The data directory location depends on the environment:
|
|
- **Production (installed plugin)**: `~/.claude-mem/` (always, regardless of CLAUDE_PLUGIN_ROOT)
|
|
- **Development**: Can be overridden with `CLAUDE_MEM_DATA_DIR`
|
|
|
|
```
|
|
~/.claude-mem/
|
|
├── claude-mem.db # SQLite database
|
|
├── .install-version # Cached version for smart installer
|
|
├── worker.port # Current worker port file
|
|
└── logs/
|
|
├── worker-out.log # Worker stdout logs
|
|
└── worker-error.log # Worker stderr logs
|
|
```
|
|
|
|
### Plugin Directory Structure
|
|
|
|
```
|
|
${CLAUDE_PLUGIN_ROOT}/
|
|
├── .claude-plugin/
|
|
│ └── plugin.json # Plugin metadata
|
|
├── .mcp.json # MCP server configuration
|
|
├── hooks/
|
|
│ └── hooks.json # Hook configuration
|
|
├── scripts/ # Built executables
|
|
│ ├── smart-install.js # Smart installer script
|
|
│ ├── context-hook.js # Context injection hook
|
|
│ ├── new-hook.js # Session creation hook
|
|
│ ├── save-hook.js # Observation capture hook
|
|
│ ├── summary-hook.js # Summary generation hook
|
|
│ ├── cleanup-hook.js # Session cleanup hook
|
|
│ ├── worker-service.cjs # Worker service (CJS)
|
|
│ └── mcp-server.cjs # MCP search server (CJS)
|
|
└── ui/
|
|
└── viewer.html # Web viewer UI bundle
|
|
```
|
|
|
|
## Plugin Configuration
|
|
|
|
### Hooks Configuration
|
|
|
|
Hooks are configured in `plugin/hooks/hooks.json`:
|
|
|
|
```json
|
|
{
|
|
"description": "Claude-mem memory system hooks",
|
|
"hooks": {
|
|
"SessionStart": [{
|
|
"hooks": [{
|
|
"type": "command",
|
|
"command": "node ${CLAUDE_PLUGIN_ROOT}/scripts/smart-install.js && node ${CLAUDE_PLUGIN_ROOT}/scripts/context-hook.js",
|
|
"timeout": 120
|
|
}]
|
|
}],
|
|
"UserPromptSubmit": [{
|
|
"hooks": [{
|
|
"type": "command",
|
|
"command": "node ${CLAUDE_PLUGIN_ROOT}/scripts/new-hook.js",
|
|
"timeout": 120
|
|
}]
|
|
}],
|
|
"PostToolUse": [{
|
|
"matcher": "*",
|
|
"hooks": [{
|
|
"type": "command",
|
|
"command": "node ${CLAUDE_PLUGIN_ROOT}/scripts/save-hook.js",
|
|
"timeout": 120
|
|
}]
|
|
}],
|
|
"Stop": [{
|
|
"hooks": [{
|
|
"type": "command",
|
|
"command": "node ${CLAUDE_PLUGIN_ROOT}/scripts/summary-hook.js",
|
|
"timeout": 120
|
|
}]
|
|
}],
|
|
"SessionEnd": [{
|
|
"hooks": [{
|
|
"type": "command",
|
|
"command": "node ${CLAUDE_PLUGIN_ROOT}/scripts/cleanup-hook.js",
|
|
"timeout": 120
|
|
}]
|
|
}]
|
|
}
|
|
}
|
|
```
|
|
|
|
### Search Configuration (v5.4.0+)
|
|
|
|
**Migration Note**: As of v5.4.0, Claude-Mem uses skill-based search instead of MCP tools. As of v5.5.0, the skill was renamed to "mem-search" for better scope differentiation.
|
|
|
|
**Previous (v5.3.x and earlier)**: MCP search server with 9 tools (~2,500 tokens per session)
|
|
**Current (v5.4.0+)**: mem-search skill with HTTP API (~250 tokens per session)
|
|
|
|
**No configuration required** - the mem-search skill is automatically available in Claude Code sessions.
|
|
|
|
Search operations are now provided via:
|
|
- **Skill**: `plugin/skills/mem-search/SKILL.md` (auto-invoked when users ask about past work)
|
|
- **HTTP API**: 10 endpoints on worker service port 37777
|
|
- **Progressive Disclosure**: Full instructions loaded on-demand only when needed
|
|
|
|
## Version Channel
|
|
|
|
Claude-Mem supports switching between stable and beta versions via the web viewer UI.
|
|
|
|
### Accessing Version Channel
|
|
|
|
1. Open the viewer at http://localhost:37777
|
|
2. Click the Settings gear icon
|
|
3. Find the **Version Channel** section
|
|
|
|
### Switching Versions
|
|
|
|
- **Try Beta**: Click "Try Beta (Endless Mode)" to switch to the beta branch with experimental features
|
|
- **Switch to Stable**: Click "Switch to Stable" to return to the production release
|
|
- **Check for Updates**: Pull the latest changes for your current branch
|
|
|
|
**Your memory data is preserved** when switching versions. Only the plugin code changes.
|
|
|
|
See [Beta Features](beta-features) for details on what's available in beta.
|
|
|
|
## Worker Service Management
|
|
|
|
Worker service is managed by Bun as a background process. The worker auto-starts on first session and runs continuously in the background.
|
|
|
|
## Context Injection Configuration
|
|
|
|
Claude-Mem injects past observations into each new session, giving Claude awareness of recent work. You can configure exactly what gets injected using the **Context Settings Modal**.
|
|
|
|
### Context Settings Modal
|
|
|
|
Access the settings modal from the web viewer at http://localhost:37777:
|
|
|
|
1. Click the **gear icon** in the header
|
|
2. Adjust settings in the right panel
|
|
3. See changes reflected live in the **Terminal Preview** on the left
|
|
4. Settings auto-save as you change them
|
|
|
|
The Terminal Preview shows exactly what will be injected at the start of your next Claude Code session for the selected project.
|
|
|
|
### Loading Settings
|
|
|
|
Control how many observations are injected:
|
|
|
|
| Setting | Default | Range | Description |
|
|
|---------|---------|-------|-------------|
|
|
| **Observations** | 50 | 1-200 | Total number of recent observations to include |
|
|
| **Sessions** | 10 | 1-50 | Number of recent sessions to pull observations from |
|
|
|
|
**Considerations**:
|
|
- **Higher values** = More context but slower SessionStart and more tokens used
|
|
- **Lower values** = Faster SessionStart but less historical awareness
|
|
- Default of 50 observations from 10 sessions balances context richness with performance
|
|
|
|
### Filter Settings
|
|
|
|
Control which observation types and concepts are included:
|
|
|
|
**Types** (select any combination):
|
|
- `bugfix` - Bug fixes and error resolutions
|
|
- `feature` - New functionality additions
|
|
- `refactor` - Code restructuring
|
|
- `discovery` - Learnings about how code works
|
|
- `decision` - Architectural or design decisions
|
|
- `change` - General code changes
|
|
|
|
**Concepts** (select any combination):
|
|
- `how-it-works` - System behavior explanations
|
|
- `why-it-exists` - Rationale for code/design
|
|
- `what-changed` - Change summaries
|
|
- `problem-solution` - Problem/solution pairs
|
|
- `gotcha` - Edge cases and pitfalls
|
|
- `pattern` - Recurring patterns
|
|
- `trade-off` - Design trade-offs
|
|
|
|
Use "All" or "None" buttons to quickly select/deselect all options.
|
|
|
|
### Display Settings
|
|
|
|
Control how observations appear in the context:
|
|
|
|
**Full Observations**:
|
|
| Setting | Default | Options | Description |
|
|
|---------|---------|---------|-------------|
|
|
| **Count** | 5 | 0-20 | How many observations show expanded details |
|
|
| **Field** | narrative | narrative, facts | Which field to expand |
|
|
|
|
The most recent N observations (set by Count) show their full narrative or facts. Remaining observations show only title, type, and token counts in a compact table format.
|
|
|
|
**Token Economics** (toggles):
|
|
| Setting | Default | Description |
|
|
|---------|---------|-------------|
|
|
| **Read cost** | true | Show tokens to read each observation |
|
|
| **Work investment** | true | Show tokens spent creating the observation |
|
|
| **Savings** | true | Show total tokens saved by reusing context |
|
|
|
|
Token economics help you understand the value of cached observations vs. re-reading files.
|
|
|
|
### Advanced Settings
|
|
|
|
| Setting | Default | Description |
|
|
|---------|---------|-------------|
|
|
| **Model** | sonnet | AI model for generating observations |
|
|
| **Worker Port** | 37777 | Port for background worker service |
|
|
| **MCP search server** | true | Enable Model Context Protocol search tools |
|
|
| **Include last summary** | false | Add previous session's summary to context |
|
|
| **Include last message** | false | Add previous session's final message |
|
|
|
|
### Manual Configuration
|
|
|
|
Settings are stored in `~/.claude-mem/settings.json`:
|
|
|
|
```json
|
|
{
|
|
"CLAUDE_MEM_CONTEXT_OBSERVATIONS": "100",
|
|
"CLAUDE_MEM_CONTEXT_SESSION_COUNT": "20",
|
|
"CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES": "bugfix,decision,discovery",
|
|
"CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS": "how-it-works,gotcha",
|
|
"CLAUDE_MEM_CONTEXT_FULL_COUNT": "10",
|
|
"CLAUDE_MEM_CONTEXT_FULL_FIELD": "narrative",
|
|
"CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS": "true",
|
|
"CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS": "true",
|
|
"CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT": "true",
|
|
"CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY": "false",
|
|
"CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE": "false"
|
|
}
|
|
```
|
|
|
|
**Note**: The Context Settings Modal (at http://localhost:37777) is the recommended way to configure these settings, as it provides live preview of changes.
|
|
|
|
## Customization
|
|
|
|
Settings can be customized in `~/.claude-mem/settings.json`.
|
|
|
|
### Custom Data Directory
|
|
|
|
Edit `~/.claude-mem/settings.json`:
|
|
```json
|
|
{
|
|
"CLAUDE_MEM_DATA_DIR": "/custom/path"
|
|
}
|
|
```
|
|
|
|
### Custom Worker Port
|
|
|
|
Edit `~/.claude-mem/settings.json`:
|
|
```json
|
|
{
|
|
"CLAUDE_MEM_WORKER_PORT": "38000"
|
|
}
|
|
```
|
|
|
|
Then restart the worker:
|
|
```bash
|
|
npm run worker:restart
|
|
```
|
|
|
|
### Custom Model
|
|
|
|
Edit `~/.claude-mem/settings.json`:
|
|
```json
|
|
{
|
|
"CLAUDE_MEM_MODEL": "opus"
|
|
}
|
|
```
|
|
|
|
Then restart the worker:
|
|
```bash
|
|
export CLAUDE_MEM_MODEL=opus
|
|
npm run worker:restart
|
|
```
|
|
|
|
### Custom Skip Tools
|
|
|
|
Control which tools are excluded from observations. Edit `~/.claude-mem/settings.json`:
|
|
```json
|
|
{
|
|
"CLAUDE_MEM_SKIP_TOOLS": "ListMcpResourcesTool,SlashCommand,Skill"
|
|
}
|
|
```
|
|
|
|
**Default excluded tools:**
|
|
- `ListMcpResourcesTool`
|
|
- `SlashCommand`
|
|
- `Skill`
|
|
- `TodoWrite`
|
|
- `AskUserQuestion`
|
|
|
|
**Common customizations:**
|
|
- Include TodoWrite: Remove from skip list to track task planning
|
|
- Include AskUserQuestion: Remove to capture decision-making conversations
|
|
- Skip additional tools: Add tool names to reduce observation noise
|
|
|
|
Changes take effect on the next tool execution (no worker restart needed).
|
|
|
|
## Advanced Configuration
|
|
|
|
### Hook Timeouts
|
|
|
|
Modify timeouts in `plugin/hooks/hooks.json`:
|
|
|
|
```json
|
|
{
|
|
"timeout": 120 // Default: 120 seconds
|
|
}
|
|
```
|
|
|
|
Recommended values:
|
|
- SessionStart: 120s (needs time for smart install check and context retrieval)
|
|
- UserPromptSubmit: 60s
|
|
- PostToolUse: 120s (can process many observations)
|
|
- Stop: 60s
|
|
- SessionEnd: 60s
|
|
|
|
**Note**: With smart install caching (v5.0.3+), SessionStart is typically very fast (10ms) unless dependencies need installation.
|
|
|
|
### Worker Memory Limit
|
|
|
|
The worker service is managed by Bun and will automatically restart if it encounters issues. Memory usage is typically low (~100-200MB).
|
|
|
|
### Logging Verbosity
|
|
|
|
Enable debug logging:
|
|
|
|
```bash
|
|
export DEBUG=claude-mem:*
|
|
npm run worker:restart
|
|
npm run worker:logs
|
|
```
|
|
|
|
## Configuration Best Practices
|
|
|
|
1. **Use defaults**: Default configuration works for most use cases
|
|
2. **Override selectively**: Only change what you need
|
|
3. **Document changes**: Keep track of custom configurations
|
|
4. **Test after changes**: Verify worker restarts successfully
|
|
5. **Monitor logs**: Check worker logs after configuration changes
|
|
|
|
## Troubleshooting Configuration
|
|
|
|
### Configuration Not Applied
|
|
|
|
1. Restart worker after changes:
|
|
```bash
|
|
npm run worker:restart
|
|
```
|
|
|
|
2. Verify environment variables:
|
|
```bash
|
|
echo $CLAUDE_MEM_MODEL
|
|
echo $CLAUDE_MEM_WORKER_PORT
|
|
```
|
|
|
|
3. Check worker logs:
|
|
```bash
|
|
npm run worker:logs
|
|
```
|
|
|
|
### Invalid Model Name
|
|
|
|
If you specify an invalid model name, the worker will fall back to `sonnet` and log a warning.
|
|
|
|
Valid shorthand models (forward to latest version):
|
|
- haiku
|
|
- sonnet
|
|
- opus
|
|
|
|
### Port Already in Use
|
|
|
|
If port 37777 is already in use:
|
|
|
|
1. Set custom port:
|
|
```bash
|
|
export CLAUDE_MEM_WORKER_PORT=38000
|
|
```
|
|
|
|
2. Restart worker:
|
|
```bash
|
|
npm run worker:restart
|
|
```
|
|
|
|
3. Verify new port:
|
|
```bash
|
|
cat ~/.claude-mem/worker.port
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
- [Architecture Overview](architecture/overview) - Understand the system
|
|
- [Troubleshooting](troubleshooting) - Common issues
|
|
- [Development](development) - Building from source
|