Files
claudetools/.claude/hooks/README.md
azcomputerguru 565b6458ba fix: Remove all emojis from documentation for cross-platform compliance
Replaced 50+ emoji types with ASCII text markers for consistent rendering
across all terminals, editors, and operating systems:

  - Checkmarks/status: [OK], [DONE], [SUCCESS], [PASS]
  - Errors/warnings: [ERROR], [FAIL], [WARNING], [CRITICAL]
  - Actions: [DO], [DO NOT], [REQUIRED], [OPTIONAL]
  - Navigation: [NEXT], [PREVIOUS], [TIP], [NOTE]
  - Progress: [IN PROGRESS], [PENDING], [BLOCKED]

Additional changes:
  - Made paths cross-platform (~/ClaudeTools for Mac/Linux)
  - Fixed database host references to 172.16.3.30
  - Updated START_HERE.md and CONTEXT_RECOVERY_PROMPT.md for multi-OS use

Files updated: 58 markdown files across:
  - .claude/ configuration and agents
  - docs/ documentation
  - projects/ project files
  - Root-level documentation

This enforces the NO EMOJIS rule from directives.md and ensures
documentation renders correctly on all systems.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 16:21:06 -07:00

324 lines
7.2 KiB
Markdown

# 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]`