GrepAI Watch Daemon
This skill covers the grepai watch command and daemon management for real-time code indexing.
When to Use This Skill
-
Starting initial code indexing
-
Setting up real-time file monitoring
-
Running the daemon in background
-
Troubleshooting indexing issues
What the Watch Daemon Does
The watch daemon:
-
Scans all source files in your project
-
Chunks code into segments (~512 tokens)
-
Generates embeddings via your configured provider
-
Stores vectors in your configured backend
-
Monitors for file changes in real-time
-
Updates the index when files change
Basic Usage
Start Watching (Foreground)
cd /your/project grepai watch
Output:
🔍 GrepAI Watch Scanning files... Found 245 files Processing chunks... ████████████████████████████████ 100% Indexed 1,234 chunks Watching for changes...
Press Ctrl+C to stop.
Start in Background
grepai watch --background
Output:
🔍 GrepAI Watch (background) Daemon started with PID 12345 Log file: ~/.grepai/daemon.log
Check Daemon Status
grepai watch --status
Output:
✅ GrepAI Daemon Running
PID: 12345 Started: 2025-01-28 10:30:00 Project: /path/to/project
Statistics:
- Files indexed: 245
- Chunks: 1,234
- Last update: 2 minutes ago
Stop the Daemon
grepai watch --stop
Output:
✅ Daemon stopped (PID 12345)
Command Reference
Command Description
grepai watch
Start daemon in foreground
grepai watch --background
Start daemon in background
grepai watch --status
Check daemon status
grepai watch --stop
Stop running daemon
Configuration
Watch Settings
.grepai/config.yaml
watch:
Debounce delay in milliseconds
Groups rapid file changes together
debounce_ms: 500
Debounce Explained
When you save a file, editors often write multiple times quickly. Debouncing waits for changes to settle:
Value Behavior
100
More responsive, more reindexing
500
Balanced (default)
1000
Less responsive, fewer reindexing
Initial Indexing
What Gets Indexed
The daemon indexes files:
-
Matching supported extensions (.go, .js, .ts, .py, etc.)
-
Not in ignore patterns (node_modules, .git, etc.)
-
Respecting .gitignore
Indexing Progress
Large codebases show progress:
Scanning files... Found 10,245 files Processing chunks... ████████████████░░░░░░░░░░░░░░░░ 50% (5,122/10,245)
Indexing Time Estimates
Codebase Files Time (Ollama) Time (OpenAI)
Small 100 ~30s ~10s
Medium 1,000 ~5min ~1min
Large 10,000 ~30min ~5min
Real-Time Monitoring
After initial indexing, the daemon watches for:
-
File creation
-
File modification
-
File deletion
-
File renames
File Change Detection
Uses OS-native file watching:
-
macOS: FSEvents
-
Linux: inotify
-
Windows: ReadDirectoryChangesW
What Triggers Reindexing
Action Result
Save existing file Re-embed file chunks
Create new file Index new chunks
Delete file Remove from index
Rename file Update path, keep vectors
Background Daemon Management
Starting on System Boot
macOS (launchd)
Create ~/Library/LaunchAgents/com.grepai.watch.plist :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.grepai.watch</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/grepai</string> <string>watch</string> </array> <key>WorkingDirectory</key> <string>/path/to/your/project</string> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> </dict> </plist>
Load:
launchctl load ~/Library/LaunchAgents/com.grepai.watch.plist
Linux (systemd)
Create ~/.config/systemd/user/grepai-watch.service :
[Unit] Description=GrepAI Watch Daemon After=network.target
[Service] Type=simple WorkingDirectory=/path/to/your/project ExecStart=/usr/local/bin/grepai watch Restart=always
[Install] WantedBy=default.target
Enable:
systemctl --user enable grepai-watch systemctl --user start grepai-watch
Checking Logs
Background daemon logs
tail -f ~/.grepai/daemon.log
Or with systemd
journalctl --user -u grepai-watch -f
Multiple Projects
One Daemon Per Project
Run separate daemons for each project:
Terminal 1: Project A
cd /path/to/project-a grepai watch --background
Terminal 2: Project B
cd /path/to/project-b grepai watch --background
Using Workspaces
For multi-project setups:
grepai workspace create my-workspace grepai workspace add my-workspace /path/to/project-a grepai workspace add my-workspace /path/to/project-b grepai watch --workspace my-workspace
Troubleshooting
Daemon Won't Start
❌ Problem: "Another daemon is already running" ✅ Solution:
grepai watch --stop grepai watch --background
❌ Problem: "Config not found" ✅ Solution: Initialize first:
grepai init grepai watch
❌ Problem: "Embedder connection failed" ✅ Solution: Start your embedding provider:
ollama serve # For Ollama
Indexing Issues
❌ Problem: Files not being indexed ✅ Solution: Check ignore patterns in config, ensure file extension is supported
❌ Problem: Indexing very slow ✅ Solutions:
-
Use OpenAI for faster cloud embeddings
-
Add more ignore patterns
-
Increase chunking size
❌ Problem: Index seems outdated ✅ Solution: Clear and reindex:
rm .grepai/index.gob grepai watch
File Watch Issues
❌ Problem: Changes not detected ✅ Solutions:
-
Reduce debounce_ms
-
Check inotify limits (Linux): echo 65536 | sudo tee /proc/sys/fs/inotify/max_user_watches
Best Practices
-
Run in background: For continuous monitoring
-
Use workspace for monorepos: Better organization
-
Set up auto-start: launchd or systemd
-
Check logs periodically: Monitor for errors
-
Reindex after config changes: Especially after changing embedding model
Status Check
Regular health check:
grepai status
Output:
✅ GrepAI Status
Project: /path/to/project Config: .grepai/config.yaml
Embedder: Ollama (nomic-embed-text) Storage: GOB (.grepai/index.gob)
Index:
- Files: 245
- Chunks: 1,234
- Size: 12.5 MB
- Last updated: 2025-01-28 10:30:00
Daemon: Running (PID 12345)
Output Format
Watch daemon status:
✅ Watch Daemon Active
Mode: Background PID: 12345 Project: /path/to/project
Initial Index:
- Files scanned: 245
- Chunks created: 1,234
- Duration: 45s
Real-time Monitor:
- Debounce: 500ms
- Events processed: 23
- Last event: 5 minutes ago
Next steps:
- Run 'grepai search "query"' to search
- Run 'grepai watch --status' to check status
- Run 'grepai watch --stop' to stop daemon