LifeOS Vitals 技能详解:macOS 系统性能诊断的只读 CLI 与判定式解读
LifeOS Vitals 技能详解macOS 系统性能诊断的只读 CLI 与判定式解读【免费下载链接】LifeOS⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life and work.项目地址: https://gitcode.com/GitHub_Trending/pe/LifeOS导读Vitals 是 LifeOS 提供的一个 macOS 系统性能诊断技能核心思路是用确定性只读 CLI 采集数字再用判定表把数字翻译成诊断结论——而不是丢给你一张冷冰冰的数据转储。读完本文你将掌握Vitals.ts的八个子命令与--json/--top参数用法、三个工作流HealthCheck / FindCulprit / DeepDiagnosis的触发与执行逻辑、阈值表与已知进程表的判定口径以及避开top首帧、powermetrics无界运行、ps -m排序失效等经典坑的实践要点。技能定位从数据转储到诊断结论Vitals 的定位在技能头部描述中写得很明确macOS 系统性能检查——查看机器当前运行状态、找出拖慢系统的元凶CPU/GPU/内存/能耗大户、热降频、内存与交换压力、磁盘占用、Spotlight 索引、launchd 启动负载。它是一条只读契约read-only by contract工具链绝不 kill、renice、unload 或写入系统状态任何修复动作杀进程、launchctl bootout、Spotlight 排除目录、改系统设置都只作为推荐方案交给操作者批准执行技能自身永不擅自执行。从仓库结构看本技能由四个部分组成技能目录文件职责SKILL.md技能总入口自定义化检查、语音通知、工作流路由、快速参考、示例与 GotchasTools/Vitals.ts唯一数据采集工具Bun 脚本确定性子命令式 CLIInterpretation.md判定参考阈值表、已知进程表、诊断形状证据要求Workflows/三个工作流HealthCheck、FindCulprit、DeepDiagnosis定制化与语音通知定制化覆盖机制执行前必须先检查用户定制目录是否存在~/.claude/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Vitals/若该目录存在加载并应用其中的PREFERENCES.md、配置文件或资源这些内容覆盖技能默认行为若不存在则使用技能默认配置继续。这与 LifeOS 的技能定制约定一致每个支持定制的技能会从自己的覆盖目录读取配置片段在运行时与默认值合并该目录只在你主动想覆盖时才创建全新安装时保持为空即可。双通道通知执行任何工作流时必须同时做两件事发送语音通知通过本地通知服务端点curl -s -X POST http://localhost:31337/notify \ -H Content-Type: application/json \ -d {message: Running WORKFLOWNAME in Vitals} \ /dev/null 21 输出文本通知Running **WorkflowName** in **Vitals**...三个工作流各自的语音通知消息模板分别定义在 HealthCheck.md、FindCulprit.md、DeepDiagnosis.md 中。工作流路由三种诊断深度SKILL.md 定义了三档路由按用户诉求的轻重缓急分配工作流触发语示例文件HealthCheckhows my system、check my mac、system healthWorkflows/HealthCheck.mdFindCulpritmac is slow、whats eating CPU/GPU/memory、fans loudWorkflows/FindCulprit.mdDeepDiagnosisfull diagnosis、deep check、慢性/反复性卡顿Workflows/DeepDiagnosis.md任何工作流执行时都要加载判定参考Interpretation.md——阈值表、已知进程表、诊断形状都定义在那里。快速参考八个子命令Vitals 的核心是单文件 CLI Tools/Vitals.ts文件头注释完整定义了子命令语义bun ~/.claude/skills/Vitals/Tools/Vitals.ts check # 快速快照1s bun ~/.claude/skills/Vitals/Tools/Vitals.ts hogs # 实时单进程 CPU/能耗~3s bun ~/.claude/skills/Vitals/Tools/Vitals.ts full # 全部采集~4s # 还有gpu · memory · disk · thermal · startup · --json · --top N各子命令与底层采集依据来自 Vitals.ts 源码对照如下子命令采集内容底层命令/数据源check负载、内存、交换、磁盘、热状态、Top 进程快照sysctl vm.loadavg、vm_stat、pmset -g therm、df、ps -Areohogs实时单进程 CPU/能耗取top第二个样本/usr/bin/top -l 2 -n N -o cpu -stats pid,cpu,power,mem,commandgpuGPU 利用率免 sudoioreg -c IOAccelerator的Device Utilization %memoryvm_stat明细、压力等级、交换、压缩器vm_statkern.memorystatus_vm_pressure_leveldisk卷使用率 Spotlight 索引状态df -h / /System/Volumes/Datamdutil -s /thermal降频状态 电源来源pmset -g thermpmset -g battstartuplaunchd 用户代理审计总数/运行中/失败/bin/launchctl listfull以上全部check hogs gpu startup汇总通用参数--json输出结构化 JSON由JSON_MODE控制渲染函数P()在 JSON 模式下静默最后统一JSON.stringify(out, null, 2)输出--top N控制进程列表长度默认 10最小为 1Math.max(1, parseInt(...) || 10)未传子命令时默认执行check。实现细节确定性与安全设计从源码可以确认几条关键设计决策Vitals.ts无 Shell 插值所有外部命令都通过Bun.spawnSync([bin, ...args], { timeout, stdout: pipe, stderr: pipe })以固定 argv 数组执行注释明确写着 No shell interpolation anywhere从机制上杜绝命令注入统一超时默认 20s 超时防止外部命令挂死按核心归一化的负载load_per_core_1m load_1m / ncpuloadInfo()因为绝对值脱离核数没有意义内存压力等级映射kern.memorystatus_vm_pressure_level的 1/2/4 被映射为 normal/warning/criticalmemoryInfo()中{ 1: normal, 2: warning, 4: critical }显式降级而非静默空白GPU 计数不存在时返回available: false并给出替代建议提示用sudo powermetrics获取 GPU 细节绝不输出空白误导gpuInfo()缺失键视为未降频桌面机可能不报告CPU_Speed_LimitthermalInfo()将缺失键处理为throttled: false而不是报错。判定口径阈值表与不要追的鬼影真正重要的阈值Interpretation.md 给出判定基准信号健康需调查原因每核负载1m 0.7持续 1.0脱离核数的绝对负载毫无意义内存压力等级normalwarning / criticalmacOS 上已用百分比无意义——空闲内存被刻意用于缓存交换用量 换出~0 缓慢增长使用中增长换出swapouts实时攀升 真实的 RAM 短缺CPU_Speed_Limit100或不报告 100机器被物理性降速降频状态下的性能抱怨是热问题不是软件问题GPU 设备利用率空闲桌面 60%无 GPU 应用时 90%指向 WindowServer 压力或失控的 GPU 消费者磁盘容量 85% 90%APFS 在接近写满时变慢且不稳定已知进程表识别正常的忙这是技能防误判的核心——看到高占用先查表避免把系统正常工作当成恶意进程去消灭进程高占用含义正确动作kernel_task通常是热管理钉住核心强制散热——不是失控进程也覆盖驱动工作检查热状态、通风、环境温度——绝不尝试 killWindowServer显示合成窗口/空间/显示器过多、录屏、悬浮层、高刷新外接屏关闭窗口/空间、检查录屏应用、降低透明度mds_stores/mdworkerSpotlight 索引——大批文件变更、迁移、系统更新后负载重用mdutil -s /确认会自行结束只有慢性问题才排除目录photoanalysisd/mediaanalysisdPhotos 机器学习扫描空闲且接电源时运行无害你活跃时它会暂停bird/cloudd/fileproviderdiCloud Drive 同步仅在大同步时负载重backupdTime Machine让它跑完corespotlightd应用内容索引Mail、Notes同 Spotlightsyspolicyd/XProtect安装后的 Gatekeeper/恶意软件扫描瞬时行为Browser Helper (Renderer)是某一个标签页或扩展不是浏览器本身通过浏览器自带的进程管理器找到对应 PID 的标签页coreaudiod音频处理专业音频接口 DAW 运行时偏高属正常只有在无任何音频硬件使用时才可疑诊断形状两个证据类别缺一不可一个罪魁祸首指控需要两类证据进程自身的数字来自hogs的 CPU%/能耗/RSS加一个佐证的系统信号降频状态、压力等级、GPU%、换出数。单张ps快照会过度放大瞬时尖峰——hogs实时第二样本才是确认性探针。修复始终是给操作者的建议kill pid、launchctl bootout、Spotlight 排除、应用设置技能未经提示永不执行。工作流实战HealthCheck一屏速览适用现在机器跑得怎么样。理想产出是一屏十秒可读完的报告先给总判定 健康 / 有东西在卖力 / 降级再按子系统分行CPU 负载、内存、热、磁盘、Top 进程凡异常都对照阈值表点名。正常但看起来吓人的读数高已用内存、kernel_task要明确解除警报不报为问题。bun ~/.claude/skills/Vitals/Tools/Vitals.ts check # 人类可读 bun ~/.claude/skills/Vitals/Tools/Vitals.ts check --json # 结构化输出 bun ~/.claude/skills/Vitals/Tools/Vitals.ts check --top 15 # 更长的进程列表运行时间 1s无需 sudo。若发现异常主动提议转入 FindCulprit而不是往这份报告里注水。FindCulprit点名元凶适用我的 Mac 现在为什么卡。理想产出是点名一个具体元凶或明确说其实没问题——你观察到的现象为什么是正常的且每个指控都带两个证据类别已知 macOS 后台进程被正确识别操作者永远不会把 Spotlight 索引或 kernel_task 当成恶意软件去杀报告结尾为每个元凶给出具体推荐动作一条命令或一项设置变更供批准而非预执行。bun ~/.claude/skills/Vitals/Tools/Vitals.ts hogs # 实时 CPU 能耗第二样本~3s bun ~/.claude/skills/Vitals/Tools/Vitals.ts check # 系统上下文负载、压力、热、磁盘 bun ~/.claude/skills/Vitals/Tools/Vitals.ts gpu # GPU 利用率免 sudo意图到命令的映射表来自 FindCulprit.md用户说命令whats eating my CPUhogswhats eating my memory / RAMcheckTOP MEMORY 段memoryGPU / graphics / 视频通话时风扇狂转gpuhogseverything / 很卡但不知道为啥checkhogsgpuJSON / 脚本化使用追加--json专项坑浏览器 Helper (Renderer) 占高是某一个标签页或扩展不是浏览器本身——拿着 PID 让操作者去浏览器自带的进程管理器里定位是哪个标签页。DeepDiagnosis全量深挖适用快速检查不够用的场景慢性卡顿、反复风扇噪音、随时间逐渐变差的感觉。理想产出是跨所有子系统CPU、内存、GPU、热、磁盘、启动负载的完整画面每项读数对照阈值判定给出按严重程度排序的发现清单最严重在前每条附证据和逐项批准的修复计划。启动项发现要区分失败代理上次退出码非零与仅仅数量多——代理数量多本身不算发现。bun ~/.claude/skills/Vitals/Tools/Vitals.ts full --top 15 # 全部免 sudo~4s bun ~/.claude/skills/Vitals/Tools/Vitals.ts startup # launchd 代理审计可选 sudo 腿仅在操作者同意时绝不强制powermetrics是单进程能耗影响、CPU 频率/驻留、精确 GPU 功率与热压力细节的唯一来源。使用前必须征询拒绝则干净跳过sudo powermetrics -n 1 -i 2000 --samplers tasks,cpu_power,gpu_power,thermal sudo sfltool dumpbtm # 登录项 后台任务管理清单专项坑powermetrics不带-n会永远运行——必须传-n 1或-n 2多采一个稳定样本Apple Silicon 上cpu_power按簇E-core/P-core报告频率与驻留——E 核顶满而 P 核空闲通常意味着后台 QoS 工作不是面向用户的前台负载。执行示例三段典型对话示例 1感觉卡顿User: My Mac is dragging, whats going on? → FindCulprit运行 hogs check gpu → 对照 Interpretation.md这个大户是不是已知后台进程 → 报告点名元凶 两类证据 供批准的推荐动作示例 2例行检查User: Hows my system doing? → HealthCheck运行 check → 一屏判定各子系统 //异常对照阈值点名示例 3风扇狂转User: Why are my fans so loud? → FindCulpritthermal hogs gpu → 若 kernel_task 是最大消费者这正是散热响应——报告热原因而不是这个进程Gotchas 速查七个必踩与避开的坑SKILL.md 将实战中最容易翻车的七个坑集中列明结合源码逐一对应top首帧是垃圾数据——CPU% 是开机以来的累积值。工具始终用-l 2并解析第二个样本topSecondSample()中samples[samples.length - 1]绝不要优化掉这一步ps -m在现代 macOS 上按内存排序不可靠实测出现过 GB 级 RSS 错序——工具在代码内自行排序psTop()中sort((a, b) b.rss_mb - a.rss_mb)保持现状kernel_task高 CPU 是散热系统在工作——钉住核心强制降温不是失控进程绝不建议 kill 它macOS已用内存不是问题信号——空闲内存被刻意用于缓存真正的信号是kern.memorystatus_vm_pressure_level1 正常 / 2 警告 / 4 危急和实时换出数powermetrics需要 sudo 且不带-n会永远运行——它是单进程能耗与 GPU 功率的唯一精确来源保留为 DeepDiagnosis 中可选、需同意的独立分支top -l会截断命令名约 16 字符与 COLUMNS 无关源码中即使设置了COLUMNS: 200依旧如此——用 PID 去完整识别进程ps -p pid -o commApple Silicon 上ioreg -c IOAccelerator免 sudo 可得 GPU 利用率PerformanceStatistics中的Device Utilization %但并非每块 GPU 都保证可用——工具降级为显式不可用消息绝不静默空白pmset -g therm在桌面机上可能不报告CPU_Speed_Limit——工具将缺失键视为未降频而非报错。与 LifeOS 的衔接Vitals 技能完整遵循 LifeOS 的技能体系约定入口 SKILL.md 的 frontmatter 使用统一的name/version/description元数据格式description中同时给出了详细的触发场景USE WHEN ...与明确排除范围NOT FOR不做网络/WiFi 诊断、不做网站或已部署应用健康监控、不做安全扫描执行前检查用户定制目录、执行时发送语音与文本双通道通知。它只读、判定驱动、证据双轨的工作方式使其既能作为独立诊断工具使用也能与 LifeOS 中其他健康监控类组件协同仓库中 PULSE Observability 的 SystemHealthVitals 即为系统健康指标的可视化展示为先诊断、再建议、后批准的系统健康工作流提供标准范式。【免费下载链接】LifeOS⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life and work.项目地址: https://gitcode.com/GitHub_Trending/pe/LifeOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考