mcpField
N
nuke-cursor-app

nuke-cursor-app

github.com/davidondrej開発4.2k97 回インストール今日更新
リポジトリ

nuke-cursor-app について

nuke-cursor-appは、長時間のエージェントセッションでCursorの画面が遅くなったり停止したりした際の復旧スキルです。再起動前後の情報を記録し、アプリを再起動してメインプロセスを確認します。

主な機能

  1. 01再起動前のプロセスと指標の記録
  2. 02バンドルパスによるCursorプロセスの特定
  3. 03通常終了を試してから強制終了
  4. 04再起動とメインプロセスの確認
  5. 05前後の情報を含むレポート保存

活用シーン

  1. 01長時間の利用で遅くなったCursorの復旧
  2. 02再起動前後のプロセス使用状況の比較
  3. 03アプリ再起動の記録の保存

インストール

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

$npx skills add https://github.com/davidondrej/skills --skill nuke-cursor-app

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

同梱ファイルagents/openai.yaml

詳細

Nuke Cursor App

このツールが必要な理由

Cursor(AI IDE)は、Electron ベースの VS Code フォークです。Cursor も認識している既知のメモリリークがあり、長時間のエージェントセッション中にレンダラープロセスがツール呼び出しの状態(差分、ファイルコンテキスト)を蓄積し、特に Agents ウィンドウでメモリを解放しません。UI の動作が遅くなり、やがてフリーズします。確実に復旧する方法は完全に再起動することだけです。このスキルは、その一連の作業をスナップショット → 強制終了 → 再起動 → 実行前後のレポートまで行います。

Cursor の実行方法

メインプロセスは /Applications/Cursor.app/Contents/MacOS/Cursor にあり、ヘルパープロセス(Renderer、GPU、拡張機能ホスト、ネットワークサービス、crashpad)とともに、すべて /Applications/Cursor.app バンドルパスの下で動作します。

安全ルール

  • プロセスの照合には /Applications/Cursor.app バンドルパスのみを使用してください。「cursor」という単語だけでは絶対に照合しないでください。
  • CursorUIViewService には手を触れないでください。名前に Cursor とありますが、macOS のシステムテキスト入力サービスであり、Cursor アプリの一部ではありません。
  • 重要なエージェント実行が進行中だと思われる場合は、まずユーザーに警告してください。Cursor を強制終了すると、ローカルのエージェントセッションも終了します。
  • macbook-metrics コレクターが cursor-metrics.sqlite3 の所有者です。読み取りには sqlite3 -readonly のみを使用してください。書き込みは絶対にしないでください。
  • スナップショットはベストエフォートです。DB が見つからない場合やクエリに失敗した場合は、その旨をログに記録して続行してください。スナップショットを理由に強制終了を中止しないでください。

手順

1. 強制終了前にスナップショットを取得する
DB="$HOME/Library/Application Support/macbook-metrics/cursor-metrics.sqlite3"
LOG_DIR="$HOME/Library/Application Support/macbook-metrics/nuke-logs"
mkdir -p "$LOG_DIR"
LOG="$LOG_DIR/$(date +%Y-%m-%d-%H%M).md"

# Live per-process readout — these are the "before" numbers
ps -axo pid,rss,comm | grep "/Applications/Cursor.app" | grep -v grep

# Totals for the summary line (rss is in KB on macOS)
ps -axo rss,comm | awk 'index($0, "/Applications/Cursor.app") {n++; s+=$1} END {printf "%d processes, %.1f GB", n, s/1048576; print ""}'

# Last 30 min from the collector (read-only)
sqlite3 -readonly "$DB" "SELECT datetime(timestamp,'unixepoch','localtime'), role, process_count, ROUND(cpu_percent,1), ROUND(resident_bytes/1073741824.0,2) || ' GB' FROM raw_samples WHERE timestamp > strftime('%s','now') - 1800 ORDER BY timestamp;"
sqlite3 -readonly "$DB" "SELECT datetime(timestamp,'unixepoch','localtime'), kind, role, reason, memory_pressure FROM events WHERE timestamp > strftime('%s','now') - 1800 ORDER BY timestamp;"

4 つの出力すべてを、見出し(プロセス一覧、合計、メトリクス(直近 30 分)、イベント(直近 30 分))を付けて $LOG に書き込んでください。再起動後の読み取りは手順 4 で追記します。これにより、この強制終了の全容を 1 つのファイルで確認できます。

2. Cursor の全プロセスを強制終了する
# Graceful quit first — lets Cursor save session state
osascript -e 'tell application "Cursor" to quit' 2>/dev/null
sleep 3

# Kill anything still alive under the bundle path
pkill -f "/Applications/Cursor.app" 2>/dev/null
sleep 1

# Verify; force-kill leftovers by PID if needed
ps -axo pid,comm | grep "/Applications/Cursor.app" | grep -v grep
# if any remain:  kill -9 <pid> ...

# Final check — must print "all Cursor processes gone"
ps -axo pid,comm | grep "/Applications/Cursor.app" | grep -v grep && echo "STILL RUNNING" || echo "all Cursor processes gone"

このスキルが必要になる状況では、通常、正常終了は失敗します。メモリリークを起こしたレンダラーがメインスレッドをブロックするためです。そのため pkill と kill の手順があります。正常終了できたか、強制終了が必要だったかをログに記録してください。

3. 再起動して確認する

ユーザーが Cursor を閉じたままにするよう依頼した場合(「nuke cursor and keep it closed」)のみ、この手順をスキップしてください。

sleep 2
open -a Cursor

# Wait up to 15 s for the main process to come back
for i in $(seq 1 15); do
  ps -axo comm | grep -q "/Applications/Cursor.app/Contents/MacOS/Cursor" && break
  sleep 1
done
ps -axo pid,comm | grep "/Applications/Cursor.app/Contents/MacOS/Cursor" | grep -v grep

ポーリングがタイムアウトした場合は、その旨を報告してください。メインプロセスを確認するまでは、Cursor が復帰したと絶対に伝えないでください。

4. 再起動後の読み取り
sleep 10   # let Cursor settle and restore windows

ps -axo pid,rss,comm | grep "/Applications/Cursor.app" | grep -v grep
ps -axo rss,comm | awk 'index($0, "/Applications/Cursor.app") {n++; s+=$1} END {printf "%d processes, %.1f GB", n, s/1048576; print ""}'

両方の出力を「再起動後」という見出しの下に $LOG へ追記してください。

5. ユーザーに報告する

最後に、次の例のような簡潔な英文の要約を 1 行で記載してください。

14 個のプロセスを強制終了し、21.3 GB を解放しました。Cursor は 9 個のプロセスで復帰し、使用量は 2.1 GB です。スナップショットは nuke-logs/2026-08-14-1832.md に保存しました。

手順 2 の最終確認と(スキップされていない場合は)手順 3 の再起動確認を行わずに、成功したと伝えてはいけません。

既知の失敗モード

  • 強制終了後、再起動時に Cursor が「ウィンドウを復元しますか?」というダイアログを表示することがあります。これは想定内です。ユーザーに「復元」をクリックするよう伝えてください。
  • メトリクス DB に最近の行がない場合(コレクターが停止している場合)は、その旨をログとレポートに記載してください。ps の読み取り値は、実行前後の比較に引き続き使用できます。

コメント