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
| 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:
| 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
| 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
| 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