Files
claude-mem/cursor-hooks/README.md
T

247 lines
7.5 KiB
Markdown

# Claude-Mem Cursor Hooks Integration
> **Persistent AI Memory for Cursor - Free Options Available**
Give your Cursor AI persistent memory across sessions. Your agent remembers what it worked on, the decisions it made, and the patterns in your codebase - automatically.
### Why Claude-Mem?
- **Remember context across sessions**: No more re-explaining your codebase every time
- **Automatic capture**: MCP tools, shell commands, and file edits are logged without effort
- **Free tier options**: Works with Gemini (1500 free req/day) or OpenRouter (free models available)
- **Works with or without Claude Code**: Full functionality either way
### Quick Install (5 minutes)
```bash
# Clone and build
git clone https://github.com/thedotmack/claude-mem.git
cd claude-mem && bun install && bun run build
# Interactive setup (configures provider + installs hooks)
bun run cursor:setup
```
---
## Quick Start for Cursor Users
**Using Claude Code?** Skip to [Installation](#installation) - everything works automatically.
**Cursor-only (no Claude Code)?** See [STANDALONE-SETUP.md](STANDALONE-SETUP.md) for free-tier options using Gemini or OpenRouter.
---
## Overview
The hooks bridge Cursor's hook system to claude-mem's worker API, allowing:
- **Session Management**: Initialize sessions and generate summaries
- **Observation Capture**: Record MCP tool usage, shell commands, and file edits
- **Worker Readiness**: Ensure the worker is running before prompt submission
## Context Injection
Context is automatically injected via Cursor's **Rules** system:
1. **Install**: `claude-mem cursor install` generates initial context
2. **Stop hook**: Updates context in `.cursor/rules/claude-mem-context.mdc` after each session
3. **Cursor**: Automatically includes this rule in ALL chat sessions
**The context updates after each session ends**, so the next session sees fresh context.
### Additional Access Methods
- **MCP Tools**: Configure claude-mem's MCP server for `search`, `timeline`, `get_observations` tools
- **Web Viewer**: Access context at `http://localhost:37777`
- **Manual Request**: Ask the agent to search memory
See [CONTEXT-INJECTION.md](CONTEXT-INJECTION.md) for details.
## Installation
### Quick Install (Recommended)
```bash
# Install globally for all projects (recommended)
claude-mem cursor install user
# Or install for current project only
claude-mem cursor install
```
### Manual Installation
<details>
<summary>Click to expand manual installation steps</summary>
**User-level** (recommended - applies to all projects):
```bash
# Copy hooks.json to your home directory
cp cursor-hooks/hooks.json ~/.cursor/hooks.json
# Copy hook scripts
mkdir -p ~/.cursor/hooks
cp cursor-hooks/*.sh ~/.cursor/hooks/
chmod +x ~/.cursor/hooks/*.sh
```
**Project-level** (for per-project hooks):
```bash
# Copy hooks.json to your project
mkdir -p .cursor
cp cursor-hooks/hooks.json .cursor/hooks.json
# Copy hook scripts to your project
mkdir -p .cursor/hooks
cp cursor-hooks/*.sh .cursor/hooks/
chmod +x .cursor/hooks/*.sh
```
</details>
### After Installation
1. **Start the worker**:
```bash
claude-mem start
```
2. **Restart Cursor** to load the hooks
3. **Verify installation**:
```bash
claude-mem cursor status
```
## Hook Mappings
| Cursor Hook | Script | Purpose |
|-------------|--------|---------|
| `beforeSubmitPrompt` | `session-init.sh` | Initialize claude-mem session |
| `beforeSubmitPrompt` | `context-inject.sh` | Ensure worker is running |
| `afterMCPExecution` | `save-observation.sh` | Capture MCP tool usage |
| `afterShellExecution` | `save-observation.sh` | Capture shell command execution |
| `afterFileEdit` | `save-file-edit.sh` | Capture file edits |
| `stop` | `session-summary.sh` | Generate summary + update context file |
## How It Works
### Session Initialization (`session-init.sh`)
- Called before each prompt submission
- Initializes a new session in claude-mem using `conversation_id` as the session ID
- Extracts project name from workspace root
- Outputs `{"continue": true}` to allow prompt submission
### Context Hook (`context-inject.sh`)
- Ensures claude-mem worker is running before session
- Outputs `{"continue": true}` to allow prompt submission
- Note: Context file is updated by `session-summary.sh` (stop hook), not here
### Observation Capture (`save-observation.sh`)
- Captures MCP tool executions and shell commands
- Maps them to claude-mem's observation format
- Sends to `/api/sessions/observations` endpoint (fire-and-forget)
### File Edit Capture (`save-file-edit.sh`)
- Captures file edits made by the agent
- Treats edits as "write_file" tool usage
- Includes edit summaries in observations
### Session Summary (`session-summary.sh`)
- Called when agent loop ends (stop hook)
- Requests summary generation from claude-mem
- **Updates context file** in `.cursor/rules/claude-mem-context.mdc` for next session
## Configuration
The hooks read configuration from `~/.claude-mem/settings.json`:
- `CLAUDE_MEM_WORKER_PORT`: Worker port (default: 37777)
- `CLAUDE_MEM_WORKER_HOST`: Worker host (default: 127.0.0.1)
## Dependencies
The hook scripts require:
- `jq` - JSON processing
- `curl` - HTTP requests
- `bash` - Shell interpreter
Install on macOS: `brew install jq curl`
Install on Ubuntu: `apt-get install jq curl`
## Troubleshooting
### Hooks not executing
1. Check hooks are in the correct location:
```bash
ls .cursor/hooks.json # Project-level
ls ~/.cursor/hooks.json # User-level
```
2. Verify scripts are executable:
```bash
chmod +x ~/.cursor/hooks/*.sh
```
3. Check Cursor Settings → Hooks tab for configuration status
4. Check Hooks output channel in Cursor for error messages
### Worker not responding
1. Verify worker is running:
```bash
curl http://127.0.0.1:37777/api/readiness
```
2. Check worker logs:
```bash
tail -f ~/.claude-mem/logs/worker-$(date +%Y-%m-%d).log
```
3. Restart worker:
```bash
claude-mem restart
```
### Observations not being saved
1. Monitor worker logs for incoming requests
2. Verify session was initialized via web viewer at `http://localhost:37777`
3. Test observation endpoint directly:
```bash
curl -X POST http://127.0.0.1:37777/api/sessions/observations \
-H "Content-Type: application/json" \
-d '{"contentSessionId":"test","tool_name":"test","tool_input":{},"tool_response":{},"cwd":"/tmp"}'
```
## Comparison with Claude Code Integration
| Feature | Claude Code | Cursor |
|---------|-------------|--------|
| Session Initialization | ✅ `SessionStart` hook | ✅ `beforeSubmitPrompt` hook |
| Context Injection | ✅ `additionalContext` field | ✅ Auto-updated `.cursor/rules/` file |
| Observation Capture | ✅ `PostToolUse` hook | ✅ `afterMCPExecution`, `afterShellExecution`, `afterFileEdit` |
| Session Summary | ✅ `Stop` hook with transcript | ⚠️ `stop` hook (no transcript) |
| MCP Search Tools | ✅ Full support | ✅ Full support (if MCP configured) |
## Files
- `hooks.json` - Hook configuration
- `common.sh` - Shared utility functions
- `session-init.sh` - Session initialization
- `context-inject.sh` - Context/worker readiness hook
- `save-observation.sh` - MCP and shell observation capture
- `save-file-edit.sh` - File edit observation capture
- `session-summary.sh` - Summary generation
- `cursorrules-template.md` - Template for `.cursorrules` file
## See Also
- [Claude-Mem Documentation](https://docs.claude-mem.ai)
- [Cursor Hooks Reference](../docs/context/cursor-hooks-reference.md)
- [Claude-Mem Architecture](https://docs.claude-mem.ai/architecture/overview)