mcpField
N
nuke-cursor-app

nuke-cursor-app

github.com/davidondrej开发4.2k97 次安装今天更新
代码仓库

关于 nuke-cursor-app

nuke-cursor-app 是一个用于恢复 Cursor 的操作技能,针对长时间 Agent 会话后界面卡顿的情况,按步骤记录状态、重启应用并核验结果。它还会将重启前后的进程与可用指标写入报告。

主要功能

  1. 01记录重启前的进程与指标
  2. 02按应用路径识别 Cursor 进程
  3. 03先尝试正常退出再强制结束
  4. 04重新启动并核验主进程
  5. 05保存重启前后报告

适用场景

  1. 01Cursor 长时间运行后界面卡顿
  2. 02核对 Cursor 重启前后的进程占用
  3. 03保留应用重启操作记录

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/nuke-cursor-app确认已加载。

附带文件agents/openai.yaml

详细介绍

彻底重启 Cursor 应用

为什么需要这个工具

Cursor(这款 AI IDE)是基于 Electron 的 VS Code 分支。它存在一个已知且获 Cursor 承认的内存泄漏:在较长时间的 Agent 会话中,渲染进程会不断累积工具调用状态(差异内容、文件上下文),却从不释放,尤其是在 Agents 窗口中。界面会先变得卡顿,随后冻结。唯一可靠的恢复方法是完整重启——本工具会端到端地完成这一过程:快照 → 终止 → 重新启动 → 前后对比报告。

Cursor 如何运行

一个主进程位于 /Applications/Cursor.app/Contents/MacOS/Cursor,另有多个辅助进程(渲染器、GPU、扩展宿主、网络服务、crashpad),它们都位于 /Applications/Cursor.app 应用包路径下。

安全规则

  • 仅通过应用包路径 /Applications/Cursor.app 匹配进程—— 绝不要仅按单词“cursor”匹配。
  • 不要操作 CursorUIViewService——尽管名称中有 Cursor,它是 macOS 系统文本输入服务,并非 Cursor 应用的一部分。
  • 如果有理由认为重要的 Agent 运行正在进行,先提醒用户;终止 Cursor 会结束其本地 Agent 会话。
  • macbook-metrics 收集器拥有 cursor-metrics.sqlite3。只能使用 sqlite3 -readonly 读取。切勿写入。
  • 快照尽力而为:如果数据库缺失或查询失败,在日志中注明并继续——绝不要因此阻止彻底重启。

操作步骤

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;"

将全部四项输出写入 $LOG,并添加标题:进程列表、总计、指标(最近 30 分钟)、事件(最近 30 分钟)。重启后的读取结果会在步骤 4 中追加——因此一个文件就能记录这次彻底重启的完整情况。

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 关闭时,才跳过此步骤 (“彻底退出 Cursor 并保持关闭”)。

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. 向用户报告

最后用一句简单的英文总结,例如:

已终止 14 个进程,释放 21.3 GB。Cursor 已重新启动,当前有 9 个进程,占用 2.1 GB。快照已保存至 nuke-logs/2026-08-14-1832.md。

如果没有完成步骤 2 的最终检查,以及(除非跳过)步骤 3 的重新启动检查,绝不要声称操作成功。

已知故障模式

  • 强制终止后,Cursor 重新启动时可能会显示“恢复窗口?”对话框。这是正常情况——告诉用户点击“恢复”。
  • 如果指标数据库没有近期记录(收集器已停滞),请在日志和报告中说明;ps 的读数仍能有效反映操作前后的情况。

评论

支持 Markdown