stk-analyze
分析用户AI使用场景,提供Token节省方案
Datos de origen
- Repositorio
- studyzy/save-token-kit
- Última actividad en el origen
- 16 de octubre de 2026 a las 07:02
- Idioma detectado de SKILL.md
- chino
- Estrellas
- 1
- Forks
- 0
Opciones de instalación
De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.
Revisa los archivos de origen
Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.
Explorador de archivos
13 archivosMostrando SKILL.md
SKILL.md
Instrucciones de origen · Vista previa de solo lectura- name
- stk-analyze
- description
- 分析用户AI使用场景,提供Token节省方案
- disable-model-invocation
- true
# SKILL: stk-analyze
基于 `stk diagnose` 诊断报告(含 `usageStats` 真实调用数据)与当前仓库的代码/文档扫描结果,并行派发多个专注不同优化点的子 Agent——**全程不询问用户意图,所有判定均以 usage 数据与仓库特征为依据**。每个子 Agent 将统一 Schema 的 JSON 落盘到 `save-token/suggestions-<agent-name>.json` 并**自行用 `stk verify --file` 校验格式**(程序化死逻辑,失败则覆盖重写自纠),最后汇总为 `save-token/tasks.md` 待办清单。
## 编排模型(状态机)
采用**显式状态机**驱动,避免子 Agent 之间自由对话、各自为政。每个对象(子 Agent / 前置调研)在其生命周期内处于一个状态,由主 Agent 依据**产物是否落盘且校验通过**来推进:
```text
PENDING → READY → RUNNING → SUCCESS
└── FAILED → (RETRYING) → SUCCESS / FAILED
```
- `PENDING`:对象存在性判定通过、尚未派发。
- `READY`:输入产物(诊断字段 / `repo-scan.json`)齐备,可进入并行派发。
- `RUNNING`:子 Agent 已派发、正在产出并落盘 `suggestions-<name>.json`。
- `SUCCESS`:产物已落盘且通过 `stk verify --file`(或按对象为前置 `repo-analysis.json`)。
- `FAILED`:达到重试上限仍失败 / 超时 → 跳过该维度,汇总其余,摘要标注。
- `RETRYING`:`stk verify` 校验失败后子 Agent 自我修复并覆盖重写的中间态(有限重试,见"失败处理")。
> 主 Agent 只依据**落盘产物的存在性 + 校验结果**推进状态,不靠子 Agent 的自我声称"我完成了"。这与"Artifact 而非 Conversation"一致——Agent 之间通过结构化 JSON 产物通信,不传聊天记录。
## 目标
通过"检查诊断 → 扫描仓库 → 派发子 Agent → 汇总 tasks.md"四阶段,产出可一键执行的 Token 优化待办。每个子 Agent 仅关注一类对象,对象不存在则不启动该 Agent。
## 执行流程
### 平台识别(全局前置)
先判定当前 AI 平台,确定**项目级指令主文件**(下称 `memoryMd`,即每次会话自动全量加载到上下文的项目级记忆/指令文件):
| 平台 | 项目级指令主文件 |
| ----------- | ---------------- |
| CodeBuddy | `CODEBUDDY.md` |
| Claude Code | `CLAUDE.md` |
| CodeX | `AGENTS.md` |
判定方式:以当前运行平台为准(Agent 自知身份);无法确定时检查项目根目录,存在 `./CODEBUDDY.md` 视为 CodeBuddy,存在 `./CLAUDE.md` 视为 Claude Code,存在 `./AGENTS.md` 视为 CodeX,多者并存时以当前平台为准。
下文所有涉及主文件的分析(`repo-scan.json` 字段、`memory-md` 子 Agent 启动条件、建议 `target`、tasks.md 分组标题等)统一用 `memoryMd` 指代实际文件名,**不写死**为具体平台文件名。
### 阶段 1: 诊断数据检查
**步骤 1: 检查诊断数据**
```bash
cat save-token/diagnosis-report.md 2>/dev/null || echo "NOT_FOUND"
```
- 文件存在且其中 `扫描时间:` 行(即 `scanTimestamp`)距当前 ≤ 5 分钟 → 复用,跳到阶段 2。
- 不存在或过期 → 提示用户先运行 `stk diagnose` 或 `/stk-diagnose`,**停止**,不产生任何输出文件。
> 诊断以 `diagnosis-report.md`(由 `stk diagnose` 生成的终端友好 Markdown 摘要)为可读源。**注意:Markdown 摘要不渲染 `usageStats`**——各子 Agent 判定所需的调用频次数据必须直读 `diagnosis-report.json` 的 `usageStats` 字段(5 个维度 `toolUsage` / `skillUsage` / `subagentUsage` / `mcpServerUsage` / `mcpToolUsage`,各有 `all` / `last90Days` / `last30Days` 三个时间桶,`ranking` 为 `{name, count}[]`)。本 SKILL **不询问用户使用场景**(已废除用户场景收集文件),所有画像类判定(scenario / 领域 / 频次)均由 `usageStats` 与 `repo-scan.json` 推断。
### 阶段 2: 仓库代码/文档采集
**步骤 3: 扫描仓库**
在派发子 Agent 前扫描当前工作目录:
```bash
# 代码文件数(按扩展名)
find . -type f \( -name '*.ts' -o -name '*.tsx' -o -name '*.js' -o -name '*.jsx' -o -name '*.py' -o -name '*.go' -o -name '*.rs' -o -name '*.java' -o -name '*.c' -o -name '*.cpp' -o -name '*.vue' -o -name '*.svelte' \) \
-not -path '*/node_modules/*' -not -path '*/.git/*' -not -path '*/dist/*' -not -path '*/build/*' -not -path '*/coverage/*' -not -path '*/.cache/*' | wc -l
# 文档文件数
find . -type f \( -name '*.md' -o -name '*.mdx' -o -name '*.rst' -o -name '*.txt' \) \
-not -path '*/node_modules/*' ... | wc -l
# 项目级指令主文件(按平台识别结果检测,见"平台识别")
ls CODEBUDDY.md CLAUDE.md AGENTS.md 2>/dev/null || true
# monorepo 检测:根外是否存在多个 package.json / Cargo.toml / go.mod
```
统计并写入 `./save-token/repo-scan.json`(字段见下方 RepoScan Schema):
| 字段 | 说明 |
| --------------- | ------------------------------------------------------------------------------------- |
| `scannedAt` | ISO 8601 |
| `codeFileCount` | 代码文件数 |
| `docFileCount` | 文档文件数 |
| `codeLineCount` | 代码总行数(量级) |
| `docLineCount` | 文档总行数(量级) |
| `topLanguages` | Top 3 语言(按文件数降序,≤ 3) |
| `hasDocsDir` | 是否存在 `docs/` 或 `README*` |
| `hasMemoryMd` | 是否存在项目级指令主文件(memoryMd) |
| `memoryMd` | 项目级指令主文件文件名(如 `CODEBUDDY.md` / `CLAUDE.md` / `AGENTS.md`),不存在时省略 |
| `isMonorepo` | 是否 monorepo |
| `scanError` | 失败信息;成功为 `null` |
排除目录:`node_modules` `.git` `dist` `build` `coverage` `.cache`。
**扫描失败处理**:`scanError` 非 null 时不阻塞流程;摘要标注扫描失败。
**步骤 3.5: 前置仓库调研(单独调用,非并行)**
扫描完成后、进入并行派发前,**单独调用一次**前置调研 Agent `repo-scan`(规则见 `../stk-analyze/agents/repo-scan.md`),读取 `repo-scan.json`,产出 `save-token/repo-analysis.json`(含 `flags` 结构化结论 + `suggestions[]`)。
- 此 Agent **不进入阶段 3 并行列表**,由主流程在步骤 3 后单发。
- `flags`(如 `docsOverInjected` / `needsMonorepoSplit` / `needsIndex`)供并行子 Agent 按需读取,避免各 Agent 重复计算仓库特征。
- `suggestions[]` 由汇总阶段(步骤 5)直接消费进 tasks.md 第 7 组"仓库专项",不再经由并行 suggestion 文件。
- 该 Agent 失败/超时 → 跳过仓库专项维度,汇总其余,摘要标注。
### 阶段 3: 并行子 Agent 派发
**步骤 4: 按对象存在性动态启动**
读取诊断报告,仅对**存在且非空**的对象启动对应子 Agent。对象为空 → 不启动,摘要标注跳过。
在**单条消息**中并行发起所有需启动的子 Agent(多次 `Agent` 调用)。每个子 Agent 接收:诊断报告相关字段(**含 `usageStats`**)+ `repo-scan.json` + `repo-analysis.json` 的 `flags`(按需),并**自行落盘**统一 Schema JSON 到 `save-token/suggestions-<agent-name>.json`。
**落盘与格式校验(子 Agent 自验,程序化死逻辑)**:
1. 子 Agent 完成分析后,将建议写入自己的文件 `save-token/suggestions-<agent-name>.json`。
2. 子 Agent **随即运行** `stk verify --file save-token/suggestions-<agent-name>.json` 校验**自己这一个文件**的格式(字段齐全、`operationType`/`risk`/`level` 合法、`estimatedSavingTokens ≥ 0`、`agentName` 与文件名匹配等)。
3. **校验失败** → 子 Agent 依据 `stk verify` 输出的具体错误行**自我修复并覆盖重写**该文件,再次 `stk verify --file`,直至通过。
4. **有限重试**:同一文件连续校验失败达 3 次仍不通过 → 放弃该维度,标记该子 Agent 为 `FAILED`(**不再无限重试**),汇总其余,摘要标注失败原因。
5. 校验通过 → 状态推进到 `SUCCESS`,汇总阶段(步骤 5)直接消费该文件。
> **校验是确定性死逻辑,归程序(`stk verify`)而非 LLM 重读自检**:子 Agent 负责"产出建议 + 依据错误修复",`stk verify` 负责"判定格式对错",二者职责分离(Generate → Independent Verify)。格式校验不涉及主观质量判断,不存在"执行者自我验收的确认偏差"。
>
> **覆盖重写不触发删除**:修复采用覆盖写(`writeFileSync` 同路径),不删除旧文件,避免权限摩擦。
**失败分类与处理**(任一子 Agent 失败/超时):
| 失败类型 | 判定 | 处理 |
| ----------------- | ------------------------------ | ----------------------------------------- |
| `tool_error` | `stk verify` 报错/命令执行失败 | 重试一次 |
| `context_missing` | 子 Agent 反馈缺少必要输入字段 | 补全输入后重派发该 Agent |
| `impl_error` | `stk verify` 返回格式错误清单 | 子 Agent 按清单覆盖重写(见上"有限重试") |
| `plan_error` | 连续 3 次 `impl_error` 仍失败 | 放弃该维度,标记 `FAILED`,不重规划 |
| `unknown` | 超时 / 未产出文件 | 跳过该维度,汇总其余 |
**子 Agent 启动条件表**
下表仅指向**本阶段(stk-analyze)**的 agents,一律使用相对于本 SKILL.md 的锚定路径 `../stk-analyze/agents/`;**禁止**引用 stk-optimize 下的同名 agent(两者语义相反:analyze 只产建议 JSON,optimize 直接改配置)。
| # | 子 Agent | 关注对象 | 启动条件 | 详细规则 |
| --- | ---------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- |
| 1 | `toolkit-enable` | `toolkitDetection[]` | 数组非空 | ../stk-analyze/agents/toolkit-enable.md |
| 2 | `mcp-opt` | `mcpList[]` | 数组非空 | ../stk-analyze/agents/mcp-opt.md |
| 3 | `plugin-opt` | `pluginList[]` | 数组非空 | ../stk-analyze/agents/plugin-opt.md |
| 4 | `agent-opt` | `agentList[]` | 数组非空 | ../stk-analyze/agents/agent-opt.md |
| 5 | `skill-opt` | `skillList[]` | 数组非空 | ../stk-analyze/agents/skill-opt.md |
| 6 | `knowledge-base` | `toolkitDetection[]` + `repo-scan.json` | 存在已装未启用的知识库 **或**(全部未装且 `codeFileCount ≥ 100`);且无任何知识库 `enabled === true` | ../stk-analyze/agents/knowledge-base.md |
| 7 | `command-opt` | `commandList[]`(主 Agent 从诊断报告提取后传入) | `commandList[]` 非空 | ../stk-analyze/agents/command-opt.md |
| 8 | `rules-opt` | `ruleList[]` | 数组非空 | ../stk-analyze/agents/rules-opt.md |
| 9 | `memory-md` | 项目级指令主文件(`memoryMd`) | `hasMemoryMd === true` | ../stk-analyze/agents/memory-md.md |
| 10 | `hook-audit` | `hookList[]` | 数组非空 | ../stk-analyze/agents/hook-audit.md |
| 11 | `tool-opt` | `builtinTools[]` | `agentName ∈ {codebuddy, workbuddy, claude}` **且** 数组非空 **且**(codebuddy/workbuddy:无 `cblite` alias;claude:无已 deny 候选) | ../stk-analyze/agents/tool-opt.md |
> **MCP 优化关键约束**:TAPD(`mcp-server-tapd`)、工蜂(`gongfeng-mcp`)、GitHub(`github-mcp`)等开发协作平台 MCP 是开发必备工具,**不得建议禁用**。应建议用对应 CLI(`tapd-cli` / `gongfeng` / `gh`)替代 MCP,保留功能同时移除工具定义的 Token 开销。调用频次判定(如 `mcpServerUsage` 零调用)不适用于此类开发协作平台——它们对所有开发场景均必要,零调用也仅走 CLI 替代。
> **`knowledge-base` 启动前置判定**(派发前执行,依据诊断报告 `toolkitDetection[]` + `repo-scan.json`,自动推断不询问用户):
>
> - 任一知识库 `enabled === true`(已启用)→ **不启动**该 Agent(已就绪,无需建议)。
> - 存在 `installed === true` 且 `enabled === false` 的知识库 → **启动**(恰 1 个即该工具;多个按 repo 特征选 1:isMonorepo→GitNexus,topLanguages≥3 且 codeFileCount>50→Codebase-Memory-MCP,否则→Graphify)。
> - 全部知识库未安装且 `codeFileCount ≥ 100` → **启动**,按 repo 特征推荐安装(选法同上)。
> - 其余(全未装且 `codeFileCount < 100`)→ 不启动。
> - 判定依据一律取自诊断报告与扫描结果,不猜测。
> **`tool-opt` 启动前置判定**(派发前执行):
>
> - **平台限制**:仅当诊断报告 `agentName` 为 `codebuddy`、`workbuddy` 或 `claude` 时启动;**CodeX 不启动**(无内置工具延迟/禁用统一开关;`mcp_servers.<id>.enabled_tools`/`disabled_tools` 仅 MCP 工具且为白/黑名单禁用)。
> - **CodeBuddy / WorkBuddy**:走 `cblite` alias + `--tools "Defer(...)"`(延迟加载,Top 20 常驻、其余收窄)。WorkBuddy 基于 CodeBuddy CLI 内核,支持相同 `--tools` Defer 语法。
> - **Claude Code**:走 `~/.claude/settings.json` 的 `permissions.deny`(**禁用**语义),候选由 `toolUsage.last30Days` 零调用筛选,**且只对用户明确确认不使用**的工具建议 deny。
Ver en GitHubEste SKILL.md es muy grande, por eso SkillsMP muestra aqui solo la primera seccion. Ver en GitHub