- Documents the automatic hook setup in initialize-project
- Shows before/after comparison
- Provides default folder mappings for each MCP type
- Includes troubleshooting guide and testing procedures
- Lists API endpoints for manual hook management
- Adds FAQ section
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
230 lines
6 KiB
Markdown
230 lines
6 KiB
Markdown
# File Watcher Hooks - Quick Start Guide
|
|
|
|
## What Changed?
|
|
|
|
The `initialize-project` skill now **automatically configures file watchers** for your project's knowledge bases. No more manual setup needed!
|
|
|
|
## Before vs After
|
|
|
|
### Before (Manual Setup Required)
|
|
```bash
|
|
# Initialize project
|
|
initialize-project: 1
|
|
|
|
# Then manually enable hooks via API
|
|
curl -X POST http://localhost:8051/api/projects/1/hooks/knowledge_docs/enable \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"folder_path": "/path/to/knowledge_docs"}'
|
|
|
|
# Then manually start the file watcher
|
|
curl -X POST http://localhost:8051/api/watcher/start/1
|
|
|
|
# Only THEN would new files auto-sync
|
|
```
|
|
|
|
### After (Fully Automatic)
|
|
```bash
|
|
# Initialize project
|
|
initialize-project: 1
|
|
|
|
# ✨ File watchers are now automatically configured!
|
|
# New files will be auto-synced immediately
|
|
```
|
|
|
|
## How File Watchers Work
|
|
|
|
When you initialize a project, the system automatically:
|
|
|
|
1. **Creates hooks for all 4 MCP types:**
|
|
- `knowledge_docs` → Watches your project's documentation folder
|
|
- `project_profile` → Watches `.claude-os/project-profile/`
|
|
- `project_index` → Watches `.claude-os/project-index/`
|
|
- `project_memories` → Watches `.claude-os/memories/`
|
|
|
|
2. **Starts the file watcher service**
|
|
- Monitors all configured folders
|
|
- Detects file changes within ~2 seconds
|
|
- Automatically syncs changes to knowledge bases
|
|
|
|
3. **Creates the necessary folders**
|
|
- Project folders are created if they don't exist
|
|
- Ready to accept new files immediately
|
|
|
|
## Default Folder Mappings
|
|
|
|
| MCP Type | Default Folder | Behavior |
|
|
|----------|---|---|
|
|
| `knowledge_docs` | `docs/` (or `documentation/`) | Watches for markdown, text, PDF files |
|
|
| `project_profile` | `.claude-os/project-profile/` | Auto-created, stores profile docs |
|
|
| `project_index` | `.claude-os/project-index/` | Auto-created, stores code index |
|
|
| `project_memories` | `.claude-os/memories/` | Auto-created, stores insights |
|
|
|
|
## Using Custom Folders
|
|
|
|
If you want to use a different folder for `knowledge_docs`:
|
|
|
|
```bash
|
|
# Create your custom folder
|
|
mkdir my-docs
|
|
|
|
# Enable hook for custom folder
|
|
curl -X POST "http://localhost:8051/api/projects/1/hooks/knowledge_docs/enable" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"folder_path": "/path/to/my-docs"}'
|
|
|
|
# Restart the watcher to pick up changes
|
|
curl -X POST "http://localhost:8051/api/watcher/restart/1"
|
|
```
|
|
|
|
## Verify Hooks Are Working
|
|
|
|
### Check Watcher Status
|
|
```bash
|
|
curl http://localhost:8051/api/watcher/status
|
|
```
|
|
|
|
Expected output shows your project is being watched:
|
|
```json
|
|
{
|
|
"status": {
|
|
"enabled": true,
|
|
"projects_watched": 1,
|
|
"projects": {
|
|
"1": {
|
|
"watched_paths": {
|
|
"knowledge_docs": "/path/to/docs",
|
|
"project_profile": "/path/to/.claude-os/project-profile",
|
|
...
|
|
},
|
|
"event_handlers": ["knowledge_docs", "project_profile", ...]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Check Hooks Configuration
|
|
```bash
|
|
cat /path/to/project/.claude-os/hooks.json
|
|
```
|
|
|
|
Should show something like:
|
|
```json
|
|
{
|
|
"version": "1.0",
|
|
"project_id": 1,
|
|
"hooks": {
|
|
"knowledge_docs": {
|
|
"enabled": true,
|
|
"folder_path": "/path/to/docs",
|
|
"synced_files": {}
|
|
},
|
|
...
|
|
}
|
|
}
|
|
```
|
|
|
|
## Testing Auto-Sync
|
|
|
|
### Test knowledge_docs Auto-Sync
|
|
```bash
|
|
# Create a test file
|
|
echo "# Test Document" > /path/to/docs/test.md
|
|
|
|
# Wait 2-3 seconds for the watcher to pick it up
|
|
|
|
# Verify it was indexed
|
|
sqlite3 /path/to/claude-os/data/claude-os.db \
|
|
"SELECT COUNT(*) FROM documents WHERE doc_id LIKE 'test.md%' AND kb_id = 1"
|
|
```
|
|
|
|
Should show a count > 0 if successfully indexed.
|
|
|
|
## Troubleshooting
|
|
|
|
### Hooks not triggering auto-sync?
|
|
|
|
1. **Check if watcher is running:**
|
|
```bash
|
|
curl http://localhost:8051/api/watcher/status
|
|
```
|
|
If `"enabled": false`, start it:
|
|
```bash
|
|
curl -X POST "http://localhost:8051/api/watcher/start/1"
|
|
```
|
|
|
|
2. **Check hooks configuration:**
|
|
```bash
|
|
cat .claude-os/hooks.json
|
|
```
|
|
Verify `"enabled": true` for your MCP type
|
|
|
|
3. **Check folder permissions:**
|
|
- Ensure folder is readable by the MCP server
|
|
- Try creating a test file manually
|
|
|
|
4. **Check MCP server logs:**
|
|
- Look for errors in `/private/tmp/` or application logs
|
|
- Check if server is running: `ps aux | grep python | grep server`
|
|
|
|
### Files not appearing in search?
|
|
|
|
1. **Verify files were indexed:**
|
|
```bash
|
|
sqlite3 /path/to/claude-os/data/claude-os.db \
|
|
"SELECT COUNT(*) FROM documents WHERE kb_id = 1"
|
|
```
|
|
|
|
2. **Check file format is supported:**
|
|
- Default: `.md`, `.txt`, `.pdf`, `.py`, `.js`, `.ts`, `.json`, `.yaml`
|
|
- Configure custom patterns in hooks.json `file_patterns` array
|
|
|
|
3. **Manually trigger sync:**
|
|
```bash
|
|
curl -X POST "http://localhost:8051/api/projects/1/hooks/sync?mcp_type=knowledge_docs"
|
|
```
|
|
|
|
## Advanced: Restart Watchers
|
|
|
|
If watchers stop responding:
|
|
|
|
```bash
|
|
# Restart a specific project's watcher
|
|
curl -X POST "http://localhost:8051/api/watcher/restart/1"
|
|
|
|
# Or restart all watchers
|
|
# (Note: not available via API, requires server restart)
|
|
```
|
|
|
|
## Git Integration
|
|
|
|
The system also installs **git post-commit hooks** that:
|
|
- Auto-index changed files on each commit
|
|
- Periodically expand the index with new files (every 10 commits)
|
|
- Track commit count for smart indexing
|
|
|
|
This works seamlessly with the file watcher hooks.
|
|
|
|
## FAQ
|
|
|
|
**Q: Do I need to restart anything after running initialize-project?**
|
|
A: No! Everything is set up automatically. File watchers start immediately.
|
|
|
|
**Q: Can I add files while the watcher is running?**
|
|
A: Yes! Add files anytime. They'll be indexed within ~2 seconds.
|
|
|
|
**Q: What if I want to disable auto-sync for a folder?**
|
|
A: Disable the hook via API:
|
|
```bash
|
|
curl -X POST "http://localhost:8051/api/projects/1/hooks/knowledge_docs/disable"
|
|
```
|
|
|
|
**Q: Can multiple projects have watchers running?**
|
|
A: Yes! The system can monitor multiple projects simultaneously.
|
|
|
|
**Q: Do file watchers persist after server restart?**
|
|
A: No, watchers stop when the server restarts. They'll restart automatically when projects are loaded.
|
|
|
|
---
|
|
|
|
**Last Updated:** October 28, 2025
|