名称: 技能-刷新 描述: 管理 Claude Code 资源 - 终止孤儿进程并清理 ~/.claude/ 目录 允许的工具: Bash, AskUserQuestion
刷新技能 (直接执行)
用于管理 Claude Code 资源的直接执行技能。执行两个操作:
- 进程清理:识别并终止孤儿 Claude Code 进程
- 目录清理:清理 ~/.claude/ 中积累的文件
此技能内联执行,无需生成子代理。
执行
步骤 1: 解析参数
从命令输入中提取标志:
--dry-run: 预览模式--force: 跳过确认,使用 8 小时默认值
# 从命令输入解析
dry_run=false
force=false
if [[ "$*" == *"--dry-run"* ]]; then
dry_run=true
fi
if [[ "$*" == *"--force"* ]]; then
force=true
fi
步骤 2: 运行进程清理
执行进程清理脚本:
.claude/scripts/claude-refresh.sh $( [ "$force" = true ] && echo "--force" )
存储进程清理输出以供显示。
步骤 3: 清理孤儿后飞行标记
清理规格目录中任何孤儿后飞行协调文件。这些文件通常在技能后飞行完成后被清理,但如果进程中断可能会遗留。
echo ""
echo "=== 清理孤儿后飞行标记 ==="
echo ""
# 查找孤儿后飞行标记(超过 1 小时)
orphaned_pending=$(find specs -maxdepth 3 -name ".postflight-pending" -mmin +60 -type f 2>/dev/null)
orphaned_guard=$(find specs -maxdepth 3 -name ".postflight-loop-guard" -mmin +60 -type f 2>/dev/null)
# 同时检查遗留的全局标记
legacy_pending=""
legacy_guard=""
if [ -f "specs/.postflight-pending" ]; then
legacy_pending="specs/.postflight-pending"
fi
if [ -f "specs/.postflight-loop-guard" ]; then
legacy_guard="specs/.postflight-loop-guard"
fi
if [ -n "$orphaned_pending" ] || [ -n "$orphaned_guard" ] || [ -n "$legacy_pending" ] || [ -n "$legacy_guard" ]; then
if [ "$dry_run" = true ]; then
echo "将删除以下孤儿标记:"
[ -n "$orphaned_pending" ] && echo "$orphaned_pending"
[ -n "$orphaned_guard" ] && echo "$orphaned_guard"
[ -n "$legacy_pending" ] && echo "$legacy_pending"
[ -n "$legacy_guard" ] && echo "$legacy_guard"
else
# 删除孤儿任务范围标记
find specs -maxdepth 3 -name ".postflight-pending" -mmin +60 -delete 2>/dev/null
find specs -maxdepth 3 -name ".postflight-loop-guard" -mmin +60 -delete 2>/dev/null
# 删除遗留全局标记
rm -f specs/.postflight-pending 2>/dev/null
rm -f specs/.postflight-loop-guard 2>/dev/null
echo "已清理孤儿后飞行标记。"
fi
else
echo "未找到孤儿后飞行标记。"
fi
步骤 4: 运行目录调查
显示当前目录状态而不进行清理:
.claude/scripts/claude-cleanup.sh
这会显示:
- 当前 ~/.claude/ 目录大小
- 按目录细分
- 可回收的空间
步骤 5: 基于模式执行
干运行模式
如果设置了 --dry-run:
echo ""
echo "=== 干运行模式 ==="
echo "显示 8 小时清理预览..."
echo ""
.claude/scripts/claude-cleanup.sh --dry-run --age 8
显示预览后退出。
强制模式
如果设置了 --force:
echo ""
echo "=== 执行清理(8 小时默认值) ==="
echo ""
.claude/scripts/claude-cleanup.sh --force --age 8
显示结果并退出。
交互模式(默认)
如果未设置任何标志:
-
检查是否存在清理候选(claude-cleanup.sh 如果找到候选则退出代码 1)
-
如果没有候选,显示消息并退出:
未在默认阈值内找到清理候选。
所有文件要么受保护,要么最近修改过。
- 如果存在候选,提示用户选择清理年龄阈值:
{
"question": "选择清理年龄阈值:",
"header": "年龄阈值",
"multiSelect": false,
"options": [
{
"label": "8 小时(默认)",
"description": "删除超过 8 小时的文件 - 积极清理"
},
{
"label": "2 天",
"description": "删除超过 2 天的文件 - 保守清理"
},
{
"label": "干净状态",
"description": "删除除安全边距(1 小时)外的所有内容"
}
]
}
-
映射用户选择到年龄参数:
- “8 小时(默认)” →
--age 8 - “2 天” →
--age 48 - “干净状态” →
--age 0
- “8 小时(默认)” →
-
使用选定年龄执行清理:
case "$selection" in
"8 小时(默认)")
.claude/scripts/claude-cleanup.sh --force --age 8
;;
"2 天")
.claude/scripts/claude-cleanup.sh --force --age 48
;;
"干净状态")
.claude/scripts/claude-cleanup.sh --force --age 0
;;
esac
- 显示清理结果
示例执行流程
交互流程
# 用户运行:/refresh
# 输出:
Claude Code 刷新
===================
未找到孤儿进程。
所有 3 个 Claude 进程都是活动会话。
---
Claude Code 目录清理
=============================
目标: ~/.claude/
当前总大小: 7.3 GB
扫描目录...
目录 总计 可清理 文件
---------- ------- ---------- -----
projects/ 7.0 GB 6.5 GB 980
debug/ 151.0 MB 140.0 MB 650
...
总计 7.3 GB 6.7 GB 5577
可回收的空间: 6.7 GB
# 出现提示:
[年龄阈值]
选择清理年龄阈值:
1. 8 小时(默认) - 删除超过 8 小时的文件
2. 2 天 - 删除超过 2 天的文件
3. 干净状态 - 删除除安全边距外的所有内容
# 用户选择选项 1
# 清理执行:
清理完成
================
已删除: 5577 个文件
失败: 0 个文件
回收空间: 6.7 GB
新总大小: 600.0 MB
干运行流程
# 用户运行:/refresh --dry-run
# 显示调查,然后:
=== 干运行模式 ===
显示 8 小时清理预览...
将删除: 5577 个文件
将回收: 6.7 GB
干运行摘要
===============
未进行任何更改。
强制流程
# 用户运行:/refresh --force
# 显示调查,然后立即:
=== 执行清理(8 小时默认值) ===
清理完成
================
已删除: 5577 个文件
回收空间: 6.7 GB
安全措施
受保护文件(永不删除)
sessions-index.json(在每个项目目录中)settings.json.credentials.jsonhistory.jsonl
安全边距
最后 1 小时内修改的文件永不删除,无论年龄阈值。
进程安全
- 仅针对孤儿进程(TTY = “?”)
- 永不杀死活动会话
- 排除当前进程树
错误处理
脚本未找到
如果脚本不存在:
错误: 在 .claude/scripts/ 未找到清理脚本
请确保 claude-refresh.sh 和 claude-cleanup.sh 已安装。
权限被拒绝
如果由于权限而杀死/删除失败:
警告: 某些操作因权限不足而失败。
失败的文件: 5
成功删除的文件: 5572
无 ~/.claude/ 目录
如果目录不存在:
错误: 未找到 ~/.claude/ 目录。
无需清理。