mcpField
G
grepai-watch-daemon

grepai-watch-daemon

github.com/yoanbernabeu開発20704 回インストール38 週間前に更新
リポジトリ

grepai-watch-daemon について

プロジェクトのコードをインデックス化し、最新状態に保つ `grepai watch` コマンドとデーモンのスキルガイドです。フォアグラウンドやバックグラウンドでの実行、状態確認、設定、トラブルシューティングを開発者向けに説明します。

主な機能

  1. 01プロジェクトのソースファイルをスキャンしてインデックス化
  2. 02ファイル変更を監視してインデックスを更新
  3. 03フォアグラウンドまたはバックグラウンドで実行
  4. 04状態確認、デーモン停止、ログ確認
  5. 05デバウンスとワークスペース監視の設定

活用シーン

  1. 01コードの初期インデックス作成
  2. 02ファイル変更に応じたインデックス更新
  3. 03複数プロジェクトのバックグラウンド処理管理
  4. 04デーモンやファイル監視の問題調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/yoanbernabeu/grepai-skills --skill grepai-watch-daemon

インストール後、Claude Code で/grepai-watch-daemonを入力して読み込まれたか確認します。

詳細

GrepAI Watch デーモン

このスキルでは、リアルタイムのコードインデックス作成に使う grepai watch コマンドとデーモンの管理について説明します。

このスキルを使う場面

  • コードの初回インデックス作成を開始するとき
  • リアルタイムのファイル監視を設定するとき
  • デーモンをバックグラウンドで実行するとき
  • インデックス作成の問題をトラブルシューティングするとき

Watch デーモンの機能

watch デーモンは次の処理を行います。

  1. プロジェクト内のすべてのソースファイルをスキャンします
  2. コードをセグメント(約512トークン)に分割します
  3. 設定済みのプロバイダーを使って埋め込みを生成します
  4. 設定済みのバックエンドにベクトルを保存します
  5. ファイルの変更をリアルタイムで監視します
  6. ファイルの変更時にインデックスを更新します

基本的な使い方

フォアグラウンドで監視を開始する
cd /your/project
grepai watch

出力:

🔍 GrepAI Watch
   Scanning files...
   Found 245 files
   Processing chunks...
   ████████████████████████████████ 100%
   Indexed 1,234 chunks
   Watching for changes...

停止するには Ctrl+C を押します。

バックグラウンドで開始する
grepai watch --background

出力:

🔍 GrepAI Watch (background)
   Daemon started with PID 12345
   Log file: ~/.grepai/daemon.log
デーモンのステータスを確認する
grepai watch --status

出力:

✅ 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
デーモンを停止する
grepai watch --stop

出力:

✅ Daemon stopped (PID 12345)

コマンドリファレンス

コマンド説明
grepai watchデーモンをフォアグラウンドで開始します
grepai watch --backgroundデーモンをバックグラウンドで開始します
grepai watch --statusデーモンのステータスを確認します
grepai watch --stop実行中のデーモンを停止します

設定

Watch の設定
# .grepai/config.yaml
watch:
  # Debounce delay in milliseconds
  # Groups rapid file changes together
  debounce_ms: 500
デバウンスについて

ファイルを保存すると、エディターは短時間に何度も書き込みを行うことがあります。デバウンスは、変更が落ち着くまで待機します。

値動作
100応答性は高くなりますが、再インデックスの回数が増えます
500バランスが取れています(デフォルト)
1000応答性は低くなりますが、再インデックスの回数が減ります

初回のインデックス作成

インデックス作成の対象

デーモンは次のファイルをインデックス化します。

  • 対応する拡張子(.go、.js、.ts、.py など)に一致するファイル
  • 除外パターン(node_modules、.git など)に含まれないファイル
  • .gitignore の設定に従ったファイル
インデックス作成の進行状況

大規模なコードベースでは進行状況が表示されます。

Scanning files...
Found 10,245 files
Processing chunks...
████████████████░░░░░░░░░░░░░░░░ 50% (5,122/10,245)
インデックス作成時間の目安
コードベースファイル数所要時間(Ollama)所要時間(OpenAI)
小規模100約30秒約10秒
中規模1,000約5分約1分
大規模10,000約30分約5分

リアルタイム監視

初回のインデックス作成後、デーモンは次の変更を監視します。

  • ファイルの作成
  • ファイルの変更
  • ファイルの削除
  • ファイル名の変更
ファイル変更の検出

OS 標準のファイル監視機能を使用します。

  • macOS: FSEvents
  • Linux: inotify
  • Windows: ReadDirectoryChangesW
再インデックスが実行される操作
操作結果
既存ファイルの保存ファイルのチャンクを再度埋め込みます
新しいファイルの作成新しいチャンクをインデックス化します
ファイルの削除インデックスから削除します
ファイル名の変更パスを更新し、ベクトルは保持します

バックグラウンドデーモンの管理

システム起動時に開始する
macOS(launchd)

~/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>

読み込みます。

launchctl load ~/Library/LaunchAgents/com.grepai.watch.plist
Linux(systemd)

~/.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

有効にします。

systemctl --user enable grepai-watch
systemctl --user start grepai-watch
ログの確認
# Background daemon logs
tail -f ~/.grepai/daemon.log

# Or with systemd
journalctl --user -u grepai-watch -f

複数のプロジェクト

プロジェクトごとに1つのデーモン

プロジェクトごとに個別のデーモンを実行します。

# Terminal 1: Project A
cd /path/to/project-a
grepai watch --background

# Terminal 2: Project B
cd /path/to/project-b
grepai watch --background
ワークスペースの使用

複数のプロジェクトを設定する場合:

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

トラブルシューティング

デーモンが起動しない

❌ 問題:「別のデーモンがすでに実行中です」 ✅ 解決方法:

grepai watch --stop
grepai watch --background

❌ 問題:「設定が見つかりません」 ✅ 解決方法: まず初期化します。

grepai init
grepai watch

❌ 問題:「埋め込みプロバイダーへの接続に失敗しました」 ✅ 解決方法: 埋め込みプロバイダーを起動します。

ollama serve  # For Ollama
インデックス作成の問題

❌ 問題: ファイルがインデックス化されない ✅ 解決方法: 設定の除外パターンを確認し、ファイル拡張子が対応していることを確認します。

❌ 問題: インデックス作成が非常に遅い ✅ 解決方法:

  • クラウド埋め込みを高速に行うには OpenAI を使用します
  • 除外パターンを追加します
  • チャンクサイズを大きくします

❌ 問題: インデックスが古いように見える ✅ 解決方法: インデックスをクリアして再作成します。

rm .grepai/index.gob
grepai watch
ファイル監視の問題

❌ 問題: 変更が検出されない ✅ 解決方法:

  • debounce_ms の値を小さくします
  • inotify の上限を確認します(Linux):
    echo 65536 | sudo tee /proc/sys/fs/inotify/max_user_watches
    

ベストプラクティス

  1. バックグラウンドで実行する: 継続的な監視に適しています
  2. モノレポではワークスペースを使用する: 整理しやすくなります
  3. 自動起動を設定する: launchd または systemd
  4. 定期的にログを確認する: エラーを監視します
  5. 設定を変更した後に再インデックスする: 特に埋め込みモデルを変更した後

ステータス確認

定期的なヘルスチェック:

grepai status

出力:

✅ 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)

出力形式

デーモンのステータスを監視します:

✅ 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

コメント