mcpField
O
ops-daemon

ops-daemon

github.com/davepoonクラウド・DevOps3.7k73 回インストール1 日前に更新
リポジトリ

ops-daemon について

ops-daemonは、バックグラウンドのops-daemonプロセスを診断・管理するClaude Code向けスキルです。デーモンとサービスの状態を確認し、ユーザー確認を経て個別の修復を行います。

主な機能

  1. 01デーモンとサービスの状態確認
  2. 02機械可読なステータス出力
  3. 03インストール、更新、再起動、削除
  4. 04dry-runによる変更の事前確認
  5. 05問題ごとの修復案内

活用シーン

  1. 01バックグラウンドサービス停止の原因調査
  2. 02プラグイン更新後のデーモンパス修正
  3. 03修復適用前の操作確認

インストール

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

$npx skills add https://github.com/davepoon/buildwithclaude --skill ops-daemon

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

詳細

実行時コンテキスト

診断を始める前に、以下を読み込んでください。

  1. プラグインのルート:echo "${CLAUDE_PLUGIN_ROOT:-$(ls -d "$HOME/.claude/plugins/cache/ops-marketplace/ops"/*/ 2>/dev/null | sort -V | tail -1)}" — インストール済みの最新バージョン
  2. デーモンの状態:cat ${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/daemon-health.json — 主な診断入力
  3. サービス設定:cat ${CLAUDE_PLUGIN_DATA_DIR}/daemon-services.json — サービスごとのコマンドと cron 定義
  4. OS:uname -s — デーモンのインストールは macOS のみ(launchd)です。Linux/WSL/Windows では手動実行にフォールバックします。

OPS ► DAEMON

バックグラウンドの ops-daemon プロセスの診断と自動修復を行います。ユーザーが実際に不具合を目にする単一のサブシステム、つまり briefing-pre-warm、memory-extractor、message-listener、inbox-digest、competitor-intel を稼働させ続ける launchd デーモンに対象を絞った ops-doctor のように動作します。

CLI/API リファレンス

bin/ops-daemon-manager.sh
コマンド用途出力
${CLAUDE_PLUGIN_ROOT}/scripts/ops-daemon-manager.sh statusJSON スナップショットを出力{os, installed, running, pid, plist_version_match, health_fresh, ...}
${CLAUDE_PLUGIN_ROOT}/scripts/ops-daemon-manager.sh install初回インストール(冪等)plist を書き込み、launchd に読み込みます
${CLAUDE_PLUGIN_ROOT}/scripts/ops-daemon-manager.sh upgradeplist の参照先を現在の PLUGIN_ROOT に変更して再読み込み古いバージョンのパスを修正します
${CLAUDE_PLUGIN_ROOT}/scripts/ops-daemon-manager.sh restart再設定せずにアンロードして再読み込み停止した状態を解消します
${CLAUDE_PLUGIN_ROOT}/scripts/ops-daemon-manager.sh uninstall停止して plist を削除インストール前の状態に戻します

自動検出を上書きする --plugin-root PATH と、副作用なしでプレビューする --dry-run を指定できます。

ヘルスファイルのスキーマ

${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json:

{
  "timestamp": "<ISO-8601 UTC>",
  "pid": <int>,
  "uptime_seconds": <int>,
  "services": {
    "<name>": {
      "status": "running|polling|scheduled|dead|needs_reauth",
      "pid": <int|null>,
      "last_health": "<string|null>",
      "last_run": "<ISO-8601|empty>",
      "next_run": "<ISO-8601|empty>",
      "restarts": <int>
    }
  },
  "action_needed": null | {"kind": "...", "service": "...", "message": "..."}
}

正常なデーモンは、このファイルを 30 秒ごとに更新します。mtime が 120 秒を超えて古い場合は、障害の強い兆候です。


タスク

最初の引数に応じて処理を振り分けます。

引数アクション
check(デフォルト)すべての診断を実行し、色付きのレポートを出力します。正常なら 0、それ以外なら 1 で終了します
fixcheck を実行し、検出された問題ごとにユーザーに確認してから修正を適用します
restartops-daemon-manager.sh restart を呼び出します
statusops-daemon-manager.sh status の JSON 出力をそのまま出力します。他のスキルで使用されます
uninstallAskUserQuestion で [Uninstall]/[Cancel] を尋ねてから、マネージャーを呼び出します
診断チェックリスト

各チェックを実行し、結果を pass / fail / warn として記録します。

  1. プラグインのルートが解決されている — CLAUDE_PLUGIN_ROOT 環境変数が設定されている、または ~/.claude/plugins/cache/ops-marketplace/ops/<version>/scripts/ops-daemon.sh が存在します。
  2. OS がサポートされている — uname -s が Darwin です。Linux/WSL では手動での実行方法を表示し、warn の注記を付けて終了コード 0 で終了します。ネイティブ Windows では「not supported」と表示します。
  3. Plist がインストールされている — ~/Library/LaunchAgents/com.claude-ops.daemon.plist が存在します。
  4. Plist が現在のバージョンを指している — ProgramArguments 内の 2 番目の <string> が ${PLUGIN_ROOT}/scripts/ops-daemon.sh と一致します。不一致の場合は アップグレード後に古いまま です(最もよくある障害モード)。
  5. Plist が有効な XML である — plutil -lint に合格します。
  6. Launchctl に登録されている — launchctl list にラベルが実際の PID(- ではない)とともに表示されます。
  7. プロセスが生存している — kill -0 <pid> が成功します。
  8. Bash バイナリが存在する — ProgramArguments 内の最初の <string> が実行可能で、BASH_VERSINFO >= 4 を報告します(デーモンスクリプトの declare -A に必要です)。
  9. ヘルスファイルが新しい — daemon-health.json が存在し、mtime が直近 120 秒以内です。
  10. すべてのサービスにコマンドがある — daemon-services.json のサービスを順に確認し、有効な各エントリに空でない command フィールドがあることを確認します。command がない場合、サービスは警告なしにスキップされます(過去のバグ)。
  11. 実行中のサービスが生存している — ヘルスファイル内で status=running|polling の各サービスについて、kill -0 <pid> が成功することを確認します。
  12. Cron サービスの next_run が未来である — scheduled サービスには、未来の next_run タイムスタンプが必要です。
  13. wacli-sync のパスが解決される — 有効な場合、~/.wacli/.health が存在し、新しいことを確認します。(任意 — 存在しない場合は fail ではなく warn として記録します。)
  14. ゾンビ状態の子プロセスがない — 親プロセスが ops-daemon.sh ではない ops-message-listener.sh または wacli-keepalive.sh の孤立プロセスがないことを確認します。
修正手順

失敗したチェックごとに、fix モードでは具体的な修復方法を提案し、AskUserQuestion でユーザーに確認します(選択肢は最大 4 つ — 必ず [Skip] を含めます)。

失敗修正破壊的操作?
Plist のバージョンパスが古いops-daemon-manager.sh upgradeはい — アンロードして再ロードします
Plist がないops-daemon-manager.sh installいいえ
Plist の XML が無効(バックアップ後に)install で再生成しますはい — 上書きします
プロセスは停止しているが Plist は正常ops-daemon-manager.sh restartはい — 再起動します
ヘルスファイルが古い(>120 秒)ops-daemon-manager.sh restartはい
サービスに command がない差分を表示した後、scripts/daemon-services.example.json の内容をユーザーの daemon-services.json にマージしますはい — 設定を書き込みます
Bash バイナリがない/バージョンが 4 未満macOS では brew install bash を実行します。Linux では $(command -v bash) のバージョンを確認し、インストールするようユーザーに尋ねますいいえ(報告のみ)
ゾンビ状態の子プロセスプロセスごとに確認(ルール 5)を行って kill <pid> を実行しますはい
サービス設定の JSON が破損している確認とバックアップの後、scripts/daemon-services.default.json から復元しますはい

修正をまとめて実行してはいけません。 ルール 5 に従い、破壊的操作ごとに [Apply] / [Skip] の選択肢を含む独立した AskUserQuestion が必要です。

check の出力形式
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 OPS ► DAEMON CHECK
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 OS:           macos
 Plugin root:  ${CLAUDE_PLUGIN_ROOT}
 Daemon PID:   57004
 Uptime:       1h 12m

 ✓ Plist installed
 ✓ Plist points at current version
 ✓ Plist is valid XML
 ✓ Launchctl registered, PID alive
 ✓ Bash binary found (5.3)
 ✓ Health file fresh (mtime 23s ago)
 ✓ All 5 enabled services have commands
 ✓ Running services alive
 ✓ Cron services have future next_run

 STATUS: GREEN — daemon healthy

失敗した場合は ✓ を ✗ に置き換え、1 行の修復ヒントを追加します。/ops:ops-status が赤色の状態を表示できるよう、終了コード 1 で終了します。

status の出力形式

ops-daemon-manager.sh status の JSON をそのまま出力します。ラップしてはいけません。これは ops-status、ops-go、その他のスキルが使用する、機械可読な契約です。

fix の出力形式

check レポートを表示し、失敗した各チェックについて確認ループを開始します。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 OPS ► DAEMON FIX — 3 issues found
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 ✗ Plist points at old version 1.0.0
   → Proposed: ops-daemon-manager.sh upgrade

続いて、[Apply fix] / [Skip this issue] / [Cancel all] の選択肢を含む AskUserQuestion を表示します。各問題について繰り返します。すべての操作後に check を再実行し、実行前後の差分を表示します。

OS 間の注意事項

  • macOS:launchd による完全なサポートを提供しています。すべてのサブコマンドを利用できます。
  • Linux / WSL:ops-daemon-manager.sh install は EX_UNAVAILABLE (69) で終了し、手動で実行する nohup の呼び出し方を表示します。check は引き続きデーモンスクリプトとサービス設定を検証します。
  • Windows ネイティブ:サポート対象外です。WSL を使用してください。

この SKILL では launchctl をハードコードしないでください。必ずマネージャースクリプトを経由してください。これにより、将来の systemd / タスクスケジューラのサポートを 1 行の追加で実現できます。

例

# Morning habit: confirm the daemon survived overnight
/ops:daemon check

# After a plugin upgrade (`/plugin upgrade claude-ops`):
/ops:daemon fix
# → detects stale plist, asks [Apply upgrade], reloads, verifies

# Embedded in another skill:
/ops:daemon status | jq -r '.health_fresh'

コメント