# Claude Code Context Recall Hooks

Automatically inject and save relevant context from the ClaudeTools database into Claude Code conversations.

## Overview

This system provides seamless context continuity across Claude Code sessions by:

1. **Recalling context** - Automatically inject relevant context from previous sessions before each message
2. **Saving context** - Automatically save conversation summaries after task completion
3. **Project awareness** - Track project state and maintain context across sessions

## Hooks

### `user-prompt-submit`

**Runs:** Before each user message is processed

**Purpose:** Injects relevant context from the database into the conversation

**What it does:**
- Detects the current project ID (from git config or remote URL)
- Calls `/api/conversation-contexts/recall` to fetch relevant contexts
- Injects context as a formatted markdown section
- Falls back gracefully if API is unavailable

**Example output:**
```markdown
## [DOCS] Previous Context

The following context has been automatically recalled from previous sessions:

### 1. Database Schema Updates (Score: 8.5/10)
*Type: technical_decision*

Updated the Project model to include new fields for MSP integration...

---
```

### `task-complete`

**Runs:** After a task is completed

**Purpose:** Saves conversation context to the database for future recall

**What it does:**
- Gathers task information (git branch, commit, modified files)
- Creates a compressed summary of the task
- POST to `/api/conversation-contexts` to save context
- Updates project state via `/api/project-states`

**Saved information:**
- Task summary
- Git branch and commit hash
- Modified files
- Timestamp
- Metadata for future retrieval

## Configuration

### Quick Setup

Run the automated setup script:

```bash
bash scripts/setup-context-recall.sh
```

This will:
1. Create a JWT token
2. Detect or create your project
3. Configure environment variables
4. Make hooks executable
5. Test the system

### Manual Setup

1. **Get JWT Token**

```bash
curl -X POST http://localhost:8000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "your-password"}'
```

2. **Get/Create Project**

```bash
curl -X POST http://localhost:8000/api/projects \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ClaudeTools",
    "description": "Your project description"
  }'
```

3. **Configure `.claude/context-recall-config.env`**

```bash
CLAUDE_API_URL=http://localhost:8000
CLAUDE_PROJECT_ID=your-project-uuid-here
JWT_TOKEN=your-jwt-token-here
CONTEXT_RECALL_ENABLED=true
MIN_RELEVANCE_SCORE=5.0
MAX_CONTEXTS=10
```

4. **Make hooks executable**

```bash
chmod +x .claude/hooks/user-prompt-submit
chmod +x .claude/hooks/task-complete
```

### Configuration Options

| Variable | Default | Description |
|----------|---------|-------------|
| `CLAUDE_API_URL` | `http://localhost:8000` | API base URL |
| `CLAUDE_PROJECT_ID` | Auto-detect | Project UUID |
| `JWT_TOKEN` | Required | Authentication token |
| `CONTEXT_RECALL_ENABLED` | `true` | Enable/disable system |
| `MIN_RELEVANCE_SCORE` | `5.0` | Minimum score (0-10) |
| `MAX_CONTEXTS` | `10` | Max contexts per query |
| `AUTO_SAVE_CONTEXT` | `true` | Save after completion |
| `DEBUG_CONTEXT_RECALL` | `false` | Enable debug logs |

## Project ID Detection

The system automatically detects your project ID using:

1. **Git config** - `git config --local claude.projectid`
2. **Git remote URL hash** - Consistent ID from remote URL
3. **Environment variable** - `CLAUDE_PROJECT_ID`

To manually set project ID in git config:

```bash
git config --local claude.projectid "your-project-uuid"
```

## Testing

Run the test script:

```bash
bash scripts/test-context-recall.sh
```

This will:
- Test API connectivity
- Test context recall endpoint
- Test context saving
- Verify hooks are working

## Usage

Once configured, the system works automatically:

1. **Start Claude Code** - Context is automatically recalled
2. **Work normally** - All your conversations happen as usual
3. **Complete tasks** - Context is automatically saved
4. **Next session** - Previous context is automatically available

## Troubleshooting

### Context not appearing?

1. Enable debug mode:
   ```bash
   echo "DEBUG_CONTEXT_RECALL=true" >> .claude/context-recall-config.env
   ```

2. Check API is running:
   ```bash
   curl http://localhost:8000/health
   ```

3. Verify JWT token:
   ```bash
   curl -H "Authorization: Bearer $JWT_TOKEN" http://localhost:8000/api/projects
   ```

4. Check hooks are executable:
   ```bash
   ls -la .claude/hooks/
   ```

### Context not saving?

1. Check task-complete hook output:
   ```bash
   bash -x .claude/hooks/task-complete
   ```

2. Verify project ID:
   ```bash
   source .claude/context-recall-config.env
   echo $CLAUDE_PROJECT_ID
   ```

3. Check API logs for errors

### Hooks not running?

1. Verify hook permissions:
   ```bash
   chmod +x .claude/hooks/*
   ```

2. Test hook manually:
   ```bash
   bash .claude/hooks/user-prompt-submit
   ```

3. Check Claude Code hook documentation:
   https://docs.claude.com/claude-code/hooks

### API connection errors?

1. Verify API is running:
   ```bash
   curl http://localhost:8000/health
   ```

2. Check firewall/port blocking

3. Verify API URL in config

## How It Works

### Context Recall Flow

```
User sends message
    ↓
[user-prompt-submit hook runs]
    ↓
Detect project ID
    ↓
Call /api/conversation-contexts/recall
    ↓
Format and inject context
    ↓
Claude processes message with context
```

### Context Save Flow

```
Task completes
    ↓
[task-complete hook runs]
    ↓
Gather task information
    ↓
Create context summary
    ↓
POST to /api/conversation-contexts
    ↓
Update /api/project-states
    ↓
Context saved for future recall
```

## API Endpoints Used

- `GET /api/conversation-contexts/recall` - Retrieve relevant contexts
- `POST /api/conversation-contexts` - Save new context
- `POST /api/project-states` - Update project state
- `GET /api/projects` - Get project information
- `POST /api/auth/login` - Get JWT token

## Security Notes

- JWT tokens are stored in `.claude/context-recall-config.env`
- This file should be in `.gitignore` (DO NOT commit tokens!)
- Tokens expire after 24 hours (configurable)
- Hooks fail gracefully if authentication fails

## Advanced Usage

### Custom Context Types

Modify `task-complete` hook to create custom context types:

```bash
CONTEXT_TYPE="bug_fix"  # or "feature", "refactor", etc.
RELEVANCE_SCORE=9.0     # Higher for important contexts
```

### Filtering Contexts

Adjust recall parameters in config:

```bash
MIN_RELEVANCE_SCORE=7.0  # Only high-quality contexts
MAX_CONTEXTS=5           # Fewer contexts per query
```

### Manual Context Injection

You can manually trigger context recall:

```bash
bash .claude/hooks/user-prompt-submit
```

## References

- [Claude Code Hooks Documentation](https://docs.claude.com/claude-code/hooks)
- [ClaudeTools API Documentation](.claude/API_SPEC.md)
- [Database Schema](.claude/SCHEMA_CORE.md)

## Support

For issues or questions:
1. Check troubleshooting section above
2. Review API logs: `tail -f api/logs/app.log`
3. Test with `scripts/test-context-recall.sh`
4. Check hook output with `bash -x .claude/hooks/[hook-name]`
