关于 nuke-cursor-app
nuke-cursor-app 是一个用于恢复 Cursor 的操作技能,针对长时间 Agent 会话后界面卡顿的情况,按步骤记录状态、重启应用并核验结果。它还会将重启前后的进程与可用指标写入报告。
主要功能
- 01记录重启前的进程与指标
- 02按应用路径识别 Cursor 进程
- 03先尝试正常退出再强制结束
- 04重新启动并核验主进程
- 05保存重启前后报告
适用场景
- 01Cursor 长时间运行后界面卡顿
- 02核对 Cursor 重启前后的进程占用
- 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的读数仍能有效反映操作前后的情况。