nuke-cursor-app について
nuke-cursor-appは、長時間のエージェントセッションでCursorの画面が遅くなったり停止したりした際の復旧スキルです。再起動前後の情報を記録し、アプリを再起動してメインプロセスを確認します。
主な機能
- 01再起動前のプロセスと指標の記録
- 02バンドルパスによるCursorプロセスの特定
- 03通常終了を試してから強制終了
- 04再起動とメインプロセスの確認
- 05前後の情報を含むレポート保存
活用シーン
- 01長時間の利用で遅くなったCursorの復旧
- 02再起動前後のプロセス使用状況の比較
- 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の読み取り値は、実行前後の比較に引き続き使用できます。