Skip to content
Back to skills

Session Health

ASecurity

Session Health: assess the current AI coding tool session — context compaction/condensation ratio, message count, context occupation cost, work nature, recoverability (git/handoff/runtime), and token economics — to judge continue vs new-session. Reads tool session storage read-only. Use when the user mentions context compaction, starting a new session, high context overhead, or long-session continuation (e.g. "go" / "keep going"). NOT for: auditing skill descriptions, full-codebase architectu...

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 25, 2026
ai-agentsgobashsqlgit

Works with

  • cursor

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned October 25, 2026

npx -y skills add NinjaSln-labs/agent-skills --skill session-health --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Session Health?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Session Health
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ninjasln-labs-session-health/badge)](https://www.skillsdirectory.com/skills/ninjasln-labs-session-health)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: session-health
description: >-
  Session Health: assess the current AI coding tool session — context
  compaction/condensation ratio, message count, context occupation cost, work nature,
  recoverability (git/handoff/runtime), and token economics — to judge continue vs
  new-session. Reads tool session storage read-only. Use when the user mentions context
  compaction, starting a new session, high context overhead, or long-session continuation
  (e.g. "go" / "keep going"). NOT for: auditing skill descriptions, full-codebase
  architecture analysis, or product-doc set audits.
slug: session-health
version: 1.0.3
displayName: session-health
---
# 会话健康度评估(Session Health)
在长会话中评估「继续 vs 新开」的得失,判断是否该新开会话。**只评估不修改**任何会话文件。
核心原则:**压缩比例高 ≠ 该切换**;**窗口占比低 ≠ 经济无忧**。决策 = 继续成本(容量 + 质量 + 每轮 token 经济)vs 切换成本(丢失早期精确细节 + 交接轮次)的权衡。
## 何时使用
- **被动**:用户提到「压缩 / 新开会话 / 上下文开销 / context」时,立即完整评估。
- **主动**:长会话中用户持续推进(go / 继续 / 按计划推进)时,顺带检查一次;仅在**状态明显恶化或达到阈值**时提醒,否则一句「会话健康(压缩 x%)」带过。
## 硬约束
1. **只读评估**——不得修改任何工具的会话存储(Deep Code:`~/.deepcode/projects/`;Cursor:`~/.cursor/`;其他工具按适配层定位)。会话 JSONL / SQLite / 索引 / 快照一律只读。
2. **不夸大、不虚构**——数字来自实际文件统计;查不到就说明查不到,不猜。
3. **不机械建议切换**——必须评估工作性质与可恢复性;依赖早期内容的工作(重构/优化)即使压缩高也未必该切换。
4. **未达阈值不展开**——健康时一句话确认即可,完整报告只在达到阈值或用户要求时给。
5. **信号缺失走降级,不装精确**——工具适配层声明「能测什么、不能测什么」;缺失维度按降级规则处理(见「信号缺失降级规则」),不因缺数据默认健康或默认不健康。
## 工具适配层(数据来源入口)
本技能不硬编码任何工具的数据格式——每工具的读取方式集中在 **工具适配层**:
- **`references/tool-data-sources.md`**——已实现的工具适配节(Deep Code / Cursor):会话目录定位、各信号读取命令、恢复能力入口。
- **`references/tool-adapter-template.md`**——新工具接入模板:按模板 + 探测流程为新工具生成适配节。
> **防双源**:SKILL.md 不写具体数据命令(命令会随工具版本漂移——见刷新机制);命令一律只存在于 `references/tool-data-sources.md`。本页只留稳定方法论。
### 工具探测(确定当前跑在哪个工具上)
按以下优先级确认,取第一个可行的:
1. 会话上下文/环境变量已显式说明当前工具(如 agent 自知所在工具)→ 直接用。
2. 探测各工具会话存储目录,取**最近有写入**的那个(`ls -td` 按 mtime 排序比对)。
3. 仍不确定 → AskUserQuestion 问用户当前在哪个工具。
工具确定后,**查 `references/tool-data-sources.md` 对应适配节**执行数据获取。若当前工具未收录,走「新工具接入」流程(见文末 + 模板)。
### 信号可用性(决定能测什么 / 缺失走降级)
| 信号 | 含义 | 缺失时处理 |
|------|------|-----------|
| 消息数 | 当前会话消息/轮次数 | 无 → 定性(凭会话体感 + 工作性质)|
| 压缩/概要化比例 | 早期内容被概要化的程度 | 无 → 跳过该维度(不默认「未压缩」)|
| 上下文占用(绝对值)| 每轮历史输入 token 量 | 无 → 估算降级(消息数 × 单条估算)+ 标注 |
| 模型窗口(分母)| 判定占用比例的基准 | 查 `references/model-contexts.md`;未收录 → 问用户/网络核实 |
| 活跃度/时间跨度 | 会话新旧、持续时长 | 无 → 跳过 |
| 会话恢复能力 | 新会话能否找回旧上下文 | 无 → 按「仅 git + 交接文档」保守评估 |
Deep Code / Cursor 各自的信号可用性明细见 `references/tool-data-sources.md` 汇总表。
## 工作性质评估(切换成本——每次评估必答)
| # | 问题 | 回答为「是」→ 含义 |
|---|------|---------------------|
| 1a | 当前工作是否引用/修改**会话早期(压缩线以前)**的内容?(大型重构 / 优化 / 跨早期改动 = 是)| 依赖早期细节 → 切换丢失精确上下文 |
| 1b | (若 1a 是)依赖的早期**决策依据/命名约定/数字**是否已被交接文档/git/项目文档记录?| **否 → 隐性上下文丢失,切换成本极高**(有代码无理由)|
| 2 | 早期相关改动是否已 **commit/push**?| **否 → 禁止切换**(未提交=切换丢工作成果)|
| 3 | 交接文档 / 项目文档 / 工具的规则系统是否记录了早期关键决策?| 是 → 可恢复性好(新会话可找回)|
| 4 | 预计剩余工作量约多少轮对话?(1-2 轮 / 10-20 轮 / 数十轮)| 轮数多 → 继续会话的每轮历史输入费累积显著(切换省钱)|
- 切换成本 = 隐性上下文(#1b 否 → 极高)× 可恢复性(#2/#3 否 → 更高)× 任务中断(是否在任务边界——见「切换时点」)
- 独立新任务(#1a 否)→ 切换成本低
- **经济维度**(#4):新开会话每轮输入 ≈ 只有新任务上下文(几 K token);继续会话每轮输入 ≈ 上下文占用绝对值(历史)——轮数多时差距累积
- **同工具切换非冷启动**:Deep Code `/resume`、Cursor 历史面板均可列出历史会话继续,恢复成本 ≈ 交接轮次(读交接文档 + 首轮上下文建立),非「从零重建」
## 判定:二维决策模型
### 维度 A —— 继续成本(容量 + 质量 + 经济)
| 信号 | 阈值 | 成本 |
|------|------|------|
| 上下文占用窗口占比 | ≥ 50% 窗口 | 高(容量压力)|
| 上下文占用窗口占比 | 30%–50% 窗口 | 中 |
| 上下文占用窗口占比 | < 30% 窗口 | 低(容量充裕——大窗口下常如此)|
| 经济成本(绝对值 × 轮数)| 占用 ≥ 50K/轮 **且** 预计剩余 ≥10 轮 | 高(每轮历史输入费累积)|
| 经济成本 | 占用 ≥ 50K/轮 **或** 剩余 ≥10 轮 | 中 |
| 经济成本 | 其余(小历史 / 快收尾)| 低 |
| 压缩/概要化比例 | ≥ 50% | 中(早期细节概要化——**非容量危机**,git 可追溯)|
| 压缩/概要化比例 | 30%–50% | 低-中 |
| 消息数 | ≥ 800 条(代理指标,仅参考)| 低-中 |
多个信号取最严。**优先级**:经济成本(绝对值——与窗口无关,每轮都付)> 容量(窗口占比)> 压缩质量 > 消息数。
> 以上阈值为**默认参数**(按主流模型与成本结构校准)——可按项目实际调整。
> 窗口占比与绝对值的区别(以 deepseek-v4-flash 为例,窗口**查引用表**):1M 窗口下 22 万占用 token 占比仅 22%(容量健康),但每轮输入仍按 22 万 token 计费(经济成本——若剩余轮数多,切换显著省钱;若服务端有 context caching,历史部分可能折扣价,差距缩小但仍存在)。窗口值一律查 `references/model-contexts.md`,不在正文写死。
>
> 估算口径:`activeTokens` 为索引**快照**;实际每轮输入 ≈ 压缩后的「摘要 + 未压缩消息」(可能小于快照)——经济评估用快照作上界估算,报告注明口径与方向(如「≤22 万/轮」)。
### 信号缺失降级规则(无 token 数据的工具——如 Cursor)
工具的适配层声明某信号不可得时,按此降级,**报告必须标注口径**:
| 缺失信号 | 降级做法 | 报告标注 |
|----------|---------|---------|
| 上下文占用(绝对值)| 估算 = 消息数 × 单条估算(0.5–2K token/条,按会话内容密度取)÷ 窗口(查表)→ 只给量级(低/中/高),不装精确;涉及切换决策时请用户看 UI 上下文占用条确认 | 「估算值(消息数 × 单条均值),请以 UI 为准」|
| 压缩/概要化比例 | 跳过该维度;用消息数 + 会话时长定性提示概要化风险 | 「不可量化(工具无压缩标记)」|
| 经济成本 | 无法量化 → 不计算,提示用户提供 UI 占用数后可算 | 「无法量化(无 token 快照)」|
| 活跃度/时间跨度 | 跳过 | — |
降级不等于默认健康:容量/经济维度标「未知(估算)」而非「低」。
### 维度 B —— 切换成本(工作性质 + 可恢复性)
| 情形 | 切换成本 |
|------|----------|
| 独立新任务,早期改动已 commit | 低 |
| 依赖早期内容,但已 commit + 交接文档有记录 | 中(可恢复但需交接)|
| 依赖早期内容,且早期改动未提交 | 极高(**禁止切换**)|
### 结论矩阵
| A 继续成本 \ B 切换成本 | B 低(独立任务)| B 高(依赖早期内容)|
|------------------------|----------------|---------------------|
| **A 低**(健康)| 继续 | **继续**(切换反而亏——用 git/会话文件追溯早期细节)|
| **A 中** | 继续 | 继续,留意;如需切换先补交接(交接文档 + commit)|
| **A 高** | **建议切换**(交接收割)| **危险区**:深度交接(交接文档同步早期状态 + commit 后)再切换,或继续+git 追溯 |
## 切换时点建议(降低中断成本)
切换成本与「时点」强相关:
- **任务边界处切换最划算**:一个 commit / 阶段完成、无进行中的推理链 → 中断损失 ≈ 0,交接成本最低
- **任务中间切换最亏**:推理链进行中、半成品未落地 → 切换=打断思路 + 隐性状态丢失
- 主动触发时若处于任务中间:建议「先收尾(commit / 写交接文档)再切换」,不裸切
## 输出格式
### 达到阈值时(建议切换/危险区/留意)
```
## 会话健康度评估
| 指标 | 当前值 | 判定 |
|------|--------|------|
| 压缩比例 | 65%(714/1100)| 概要化(非容量危机——git 可追溯)|
| 消息数 | 1100 条 | 代理指标 |
| 上下文占用 | 221,648(窗口 22%——容量低 / 绝对值高)| 容量 / 经济 |
(Cursor 等无 token 数据的工具:相应行改为「估算值 / 无法量化」并标注,见信号缺失降级规则。)
工作性质评估:
- 依赖早期内容?是/否(重构/优化说明)
- 早期改动已 commit?是/否(未提交 → 禁止切换)
- 交接文档记录?是/否
- 预计剩余轮数?N 轮(× 占用/轮历史输入费 = 继续成本估算;新会话 ≈ 几 K/轮)
→ 切换成本:低/中/极高;经济结论:继续 / 切换省钱
**结论**:(按矩阵——建议切换 / 继续但留意 / 危险区需深度交接)
交接就绪检查(建议切换时):
- [ ] git 工作树干净 / 未提交变更数
- [ ] 关键产出已 push(最新 commit hash)
- [ ] 交接文档存在且同步到最新
- [ ] 运行中进程?(dev server / LSP / 测试服务——切换前说明归属/清理)
- [ ] 会话内临时状态?(临时配置 / 未持久化改动——是否需记录)
- [ ] 测试状态(若项目有质量链)
新会话入口:(按工具——Deep Code:输入「<项目名> 接手」走 project-handoff 或 /resume;Cursor:历史面板 + 项目 rules 文件)
```
### 健康时(继续)或切换反而亏时
> 会话健康(压缩 12%)——继续。
> 或:压缩 65% 但当前重构依赖早期 commit(已提交,可 git 追溯)——**切换反而亏,建议继续**。
## 交接就绪检查命令(建议新开会话时)
```bash
git status --short | head -5                     # 未提交变更
git log --oneline -1                              # 最新 commit
ls .handoff/index 2>/dev/null && echo "交接存储在"  # 现行工作存储
ls HANDOFF.md 2>/dev/null && echo "旧模型待迁移"    # 旧交接件,迁移前不算现行
```
检查失败项(如未提交变更)→ 提醒先提交或说明不切换。
## 反模式
- 修改/删除任何工具会话存储下的文件(只读评估)
- 不看实际数字就凭「感觉很长」建议新开会话
- 不看工作性质机械建议切换(重构依赖早期内容时切换反而亏)
- 只看窗口占比忽略绝对值(1M 窗口下 22% 容量健康 ≠ 每轮 22 万 token 免费)
- 剩余 1-2 轮仍建议切换(交接本身 1-2 轮成本,省不下)
- 早期改动未提交 git 仍建议切换(丢工作成果)
- 任务中间裸切(推理链进行中——先收尾再切)
- 忽略运行中进程/临时状态就建议切换(dev/LSP/test 归属不明)
- 建议新开会话却不给交接就绪检查(让用户裸切换)
- 虚构 token 数 / 窗口大小(查不到就说「索引无该字段」或注明估计)
- 把 token 快照当精确每轮成本(应注明「≤上界」口径)
- **Cursor 等无 token 数据的工具仍编造占用数字**(应走估算降级 + 标注,或请用户看 UI)
- **以「工具无压缩标记」默认未压缩**(应跳过维度并说明不可量化)
- **在 SKILL.md 正文写死数据命令**(命令只存 references/tool-data-sources.md,防版本漂移)
## 完成标准
- [ ] 只读:未修改任何会话/索引/快照文件
- [ ] 数字来自实际文件统计(wc/jq/sqlite3),非估算;估算处明确标注口径
- [ ] 工具已确认(工具探测),数据按适配层执行
- [ ] 工作性质 5 问必答(依赖度 1a/记录完整性 1b/提交状态/交接文档/剩余轮数)——切换成本与经济有依据
- [ ] 结论按二维矩阵给出(继续成本 × 切换成本),非机械阈值
- [ ] 经济评估:窗口占比(容量)与绝对值(每轮成本)分别判;注明快照口径(≤上界)或标注「无法量化」
- [ ] 信号缺失按降级规则处理并标注,不装精确
- [ ] 切换建议含时点判断(任务边界 vs 任务中间——是否需先收尾)
- [ ] 达到阈值时含交接就绪检查(含进程/临时状态);健康或切换反而亏时说明理由
- [ ] 新会话入口指引明确(按工具:/resume / project-handoff / 历史面板 + rules)
## 新工具接入(在其他工具中使用本技能)
1. 将本技能目录复制到该工具的 skills/rules 位置。
2. 打开 `references/tool-adapter-template.md`,按「接入流程」对该工具做只读探测。
3. 按模板生成该工具的适配节,追加到 `references/tool-data-sources.md`(含 lastUpdated + refreshInterval + 置信度)。
4. 更新 `references/tool-data-sources.md` 的信号可用性汇总表。
5. 本 SKILL.md **无需改动**(方法论与工具无关);若工具行为变化,只刷新对应适配节。
> 提示:Cursor 场景除 skills 外,还可将精简版健康度检查要点写入项目 `.cursor/rules/*.mdc` 以便常驻触发——内容从「何时使用」+「硬约束」+「切换时点」提炼即可。

Files in this skill

  • SKILL.md14.9 KB
  • references/model-contexts.md2 KB
  • references/tool-adapter-template.md4.9 KB
  • references/tool-data-sources.md6.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.