# Periodic Context Save - Quick Start

**Auto-save context every 5 minutes of active work**

---

## [OK] System Tested and Working

The periodic context save system has been tested and is working correctly. It:
- [OK] Detects Claude Code activity
- [OK] Tracks active work time (not idle time)
- [OK] Saves context to database every 5 minutes
- [OK] Currently has 2 contexts saved

---

## Setup (One-Time)

### Option 1: Automatic Setup (Recommended)

Run this PowerShell command as Administrator:

```powershell
powershell -ExecutionPolicy Bypass -File D:\ClaudeTools\.claude\hooks\setup_periodic_save.ps1
```

This creates a Windows Task Scheduler task that runs every minute.

### Option 2: Manual Setup

1. Open **Task Scheduler** (taskschd.msc)
2. Create Basic Task:
   - **Name:** `ClaudeTools - Periodic Context Save`
   - **Trigger:** Daily, repeat every 1 minute
   - **Action:** Start a program
     - Program: `python`
     - Arguments: `D:\ClaudeTools\.claude\hooks\periodic_save_check.py`
     - Start in: `D:\ClaudeTools`
   - **Settings:**
     - [OK] Allow task to run on batteries
     - [OK] Start task if connection is not available
     - [OK] Run task as soon as possible after missed start

---

## Verify It's Working

### Check Status

```bash
# View recent logs
tail -10 .claude/periodic-save.log

# Check current state
cat .claude/.periodic-save-state.json | python -m json.tool
```

**Expected output:**
```json
{
  "active_seconds": 120,
  "last_save": "2026-01-17T19:00:32+00:00",
  "last_check": "2026-01-17T19:02:15+00:00"
}
```

### Check Database

```bash
curl -s "http://172.16.3.30:8001/api/conversation-contexts?limit=5" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  | python -m json.tool
```

Look for contexts with title starting with "Periodic Save -"

---

## How It Works

```
Every 1 minute:
├─ Task Scheduler runs periodic_save_check.py
├─ Script checks: Is Claude Code active?
│  ├─ YES → Add 60s to timer
│  └─ NO  → Don't add time (idle)
├─ Check: Has timer reached 300s (5 min)?
│  ├─ YES → Save context to DB, reset timer
│  └─ NO  → Continue
└─ Update state file
```

**Active time =** File changes + Claude running + Recent activity
**Idle time =** No changes + Waiting for input + Permissions prompts

---

## What Gets Saved

Every 5 minutes of active work:

```json
{
  "context_type": "session_summary",
  "title": "Periodic Save - 2026-01-17 12:00",
  "dense_summary": "Auto-saved context after 5 minutes of active work...",
  "relevance_score": 5.0,
  "tags": ["auto-save", "periodic", "active-session"]
}
```

---

## Monitor Activity

### View Logs in Real-Time

```bash
# Windows (PowerShell)
Get-Content .claude\periodic-save.log -Tail 20 -Wait

# Git Bash
tail -f .claude/periodic-save.log
```

### Check Task Scheduler

```powershell
Get-ScheduledTask -TaskName "ClaudeTools - Periodic Context Save"
```

---

## Troubleshooting

### Not Saving Contexts

**Check if task is running:**
```powershell
Get-ScheduledTask -TaskName "ClaudeTools - Periodic Context Save" | Get-ScheduledTaskInfo
```

**Check logs for errors:**
```bash
tail -20 .claude/periodic-save.log
```

**Common issues:**
- JWT token expired (regenerate with `python create_jwt_token.py`)
- Python not in PATH (add Python to system PATH)
- API not accessible (check `curl http://172.16.3.30:8001/health`)

### Activity Not Detected

The script looks for:
- Recent file modifications (within 2 minutes)
- Claude/Node/Code processes running
- Activity in project directories

If it's not detecting activity, check:
```bash
# Is Python finding recent file changes?
python -c "from pathlib import Path; import time; print([f.name for f in Path('.').rglob('*') if f.is_file() and f.stat().st_mtime > time.time()-120][:5])"
```

---

## Configuration

### Change Save Interval

Edit `.claude/hooks/periodic_save_check.py`:

```python
SAVE_INTERVAL_SECONDS = 300  # Change to desired interval

# Common values:
# 300  = 5 minutes
# 600  = 10 minutes
# 900  = 15 minutes
# 1800 = 30 minutes
```

### Change Check Frequency

Modify Task Scheduler trigger to run every 30 seconds or 2 minutes instead of 1 minute.

---

## Uninstall

```powershell
# Remove Task Scheduler task
Unregister-ScheduledTask -TaskName "ClaudeTools - Periodic Context Save" -Confirm:$false

# Optional: Remove files
Remove-Item .claude\hooks\periodic_save_check.py
Remove-Item .claude\.periodic-save-state.json
Remove-Item .claude\periodic-save.log
```

---

## Integration

Works alongside existing hooks:

| Hook | When | What It Saves |
|------|------|---------------|
| user-prompt-submit | Before each message | Recalls context |
| task-complete | After task done | Detailed summary |
| **periodic_save_check** | **Every 5 min active** | **Quick checkpoint** |

**Result:** Never lose more than 5 minutes of context!

---

## Current Status

[OK] **System is installed and working**
[OK] **2 contexts already saved to database**
[OK] **Ready to set up Task Scheduler for automatic saves**

---

**Next Step:** Run the PowerShell setup script to enable automatic periodic saves:

```powershell
powershell -ExecutionPolicy Bypass -File D:\ClaudeTools\.claude\hooks\setup_periodic_save.ps1
```

---

**Created:** 2026-01-17
**Tested:** [OK] Working
**Database:** 172.16.3.30:3306/claudetools
