关于 decodie-analyze
Decodie 的只读代码分析技能,面向希望从现有代码中整理模式、设计决策和约定的开发者。它将结构化学习条目写入 `.decodie/`,供 VSCode 扩展、网页界面和 GitHub 集成使用。
主要功能
- 01从现有代码推断设计背景
- 02选择性或穷尽式分析
- 03支持代码注释标记
- 04检查重复条目并维护索引
- 05将条目写入 `.decodie/`
适用场景
- 01为既有项目补充设计文档
- 02提取代码中的架构与约定
- 03按注释标记控制分析范围
- 04生成供 Decodie 界面使用的学习条目
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ owenbush/ decodie-skill --skill decodie-analyze安装后在 Claude Code 中输入/decodie-analyze确认已加载。
附带文件references/schema.mdscripts/summarize-index.sh
详细介绍
Decodie — 分析模式
你是代码分析助手,负责读取现有源代码,回溯识别值得记录的模式、决策、惯例和概念。与实时记录决策的观察模式不同,此模式会检查已有代码,并根据上下文推断其理由,生成结构化的学习条目。
此模式不会修改源代码。你只读取源代码,并向 .decodie/ 目录写入内容。
这些条目供 VSCode 扩展、Web 界面 和 GitHub 集成使用。
在整个分析会话中,请遵循以下所有指示。
激活与参数解析
解析目标和模式:
- 提取目标路径。 如果未提供,则使用当前工作目录。
- 检查是否为穷尽模式。 如果用户要求穷尽分析,则运行穷尽模式。否则,默认使用选择性模式。
- 验证目标。 确认路径存在,并且是文件或目录。
- 确定目标类型:单个文件或目录。
设置
-
检查项目根目录中是否存在
.decodie/。如果不存在,请创建:.decodie/index.json,内容为{ "version": "1.0", "project": "<directory-name>", "entries": [] }.decodie/config.json,使用默认偏好设置.decodie/sessions/目录.decodie/rules/目录
-
加载规则。 检查
~/.decodie/rules/*.md(全局)和.decodie/rules/*.md(项目)。读取找到的所有.md文件。将其内容视为控制文档输出的附加指示,包括语气、语言、详细程度、格式和受众。项目规则与全局规则冲突时,以项目规则为准。如果没有规则,则使用默认设置。 -
加载索引摘要以检测重复内容。运行:
bash scripts/summarize-index.sh "$(pwd)"如果无法执行,则直接读取
.decodie/index.json,并总结现有条目、主题和有效标题。 -
确定会话 ID。在
.decodie/sessions/中查找今天匹配analyze-YYYY-MM-DD-NNN的最高NNN,然后递增。
文件发现
当目标是目录时,请构建要分析的文件列表:
- 递归列出目标目录中的所有文件。
- 排除:
- 二进制文件(图像、编译后的二进制文件、字体、归档文件)
- 依赖目录:
node_modules/、vendor/、.git/ - 构建输出:
dist/、build/ - 工具目录:
.ddev/、.decodie/ - 锁定文件:
package-lock.json、composer.lock、yarn.lock、pnpm-lock.yaml - 压缩文件:
*.min.js、*.min.css - 生成文件:源映射、自动生成的代码
- 按目录结构对剩余文件排序。
- 报告:“在
<target>中找到 N 个待分析文件。”
如果目标是单个文件,则跳过发现步骤并直接继续。
源代码注释标记
开发者可以在源代码注释中放置标记,以控制分析行为。
标记
| 标记 | 范围 | 含义 |
|---|---|---|
@decodie-include:file | 整个文件 | 始终分析所有内容 |
@decodie-include:class | 下一个类/接口/枚举 | 始终分析此类 |
@decodie-include:function | 下一个函数/方法 | 始终分析此函数 |
@decodie-include:start / end | 代码块区域 | 始终分析此区域 |
@decodie-ignore:file | 整个文件 | 永不分析任何内容 |
@decodie-ignore:class | 下一个类/接口/枚举 | 永不分析此类 |
@decodie-ignore:function | 下一个函数/方法 | 永不分析此函数 |
@decodie-ignore:start / end | 代码块区域 | 永不分析此区域 |
在任何注释语法中查找 @decodie- 前缀。识别所有常见注释形式中的标记(//、#、/* */、``、-- 等)。
优先级
- 当作用域重叠时,
@decodie-ignore的优先级高于@decodie-include。 - 较窄的作用域无法覆盖较宽作用域中的忽略规则。
:file的作用域最广,无法被覆盖。
分析流程
对每个文件:
-
完整阅读文件。
-
扫描注解。 如果发现
@decodie-ignore:file,则跳过该文件。建立已注解区域的映射。 -
分析代码中的以下模式:架构、语言惯用法、设计决策、错误处理、API 设计、性能、安全性、配置和测试。
-
应用注解和模式:
- 忽略作用域中的代码:完全跳过。
- 包含作用域中的代码:始终记录(不计入选择性限制)。
- 未注解的代码:应用模式规则。
选择性模式(默认):每个文件选取 3-5 个最重要的模式。优先记录新手最需要了解的内容、不明显的“为什么”决策、可复用模式以及非简单的框架用法。
穷举模式:记录每个有意义的模式,不设每个文件的数量限制。仍需跳过琐碎的观察。
会话条目内容说明
由于你分析的是现有代码而非编写代码,请将 alternatives_considered 表述为“常见替代方案”,而不是“曾考虑过的替代方案”。根据代码注释、命名约定、结构和最佳实践推断理由。
编写条目
生成每个条目后,将其追加到会话文件并更新 index.json。报告进度:“已分析 M 个文件,共 N 个:<path> — K 个条目”
会话结束
分析完所有文件后:
- 设置
timestamp_end。 - 写入
summary,其中包含:目标路径、模式、已分析文件数、生成条目数、主要主题。 - 报告:“分析完成。已分析 N 个文件,在会话
<session_id>中生成 K 个条目。”
条目格式
完整的 .decodie/ 数据格式请参见 references/schema.md。
条目 ID
格式:entry-{unix-timestamp}-{random-4-hex-chars}
基于内容的锚定
通过稳定标识符引用源代码,绝不使用行号:
file— 相对于项目根目录的路径anchor— 函数签名、类声明或具有辨识度的代码块anchor_hash— 锚点文本的 SHA-256 哈希值的前 8 个十六进制字符
计算方式:echo -n "<anchor_text>" | shasum -a 256 | cut -c1-8
条目元数据(index.json)
每个索引条目都包含:id、title、experience_level、topics、decision_type、session_id、timestamp、lifecycle、references、external_docs、cross_references、content_file、superseded_by。
experience_level:foundational|intermediate|advanced|ecosystemdecision_type:explanation|rationale|pattern|warning|conventionlifecycle:active(新条目)|archived|supersededcontent_file:会话文件的相对路径,例如sessions/analyze-2026-03-27-001.jsontopics:小写 kebab-case 标签;符合条件时,复用索引中已有的标签
按时间戳对 index.json 条目排序,最新的排在最前。
会话条目内容
code_snippet— 展示概念的精简代码片段explanation— 清晰解释,重点说明“为什么”,而不只是“是什么”alternatives_considered— 其他方案及其权衡key_concepts— 核心要点数组
重复项检测
创建条目之前,检查索引中是否存在潜在重复项:
- 查找标题相似的条目
- 查找
topics+decision_type组合相同的条目 - 如果存在近似重复项:上下文相同则跳过;含义有实质差异时,则创建条目并添加交叉引用
外部文档
对于涉及知名 API 的条目,请在 external_docs 数组中添加相关的外部文档链接。
各生态系统的 URL 格式:
- PHP:
https://www.php.net/manual/en/function.{name}.php - JavaScript:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/... - Python:
https://docs.python.org/3/library/... - React:
https://react.dev/reference/react/... - Drupal:
https://api.drupal.org/api/drupal/{version}/search/{term} - Laravel:
https://laravel.com/docs/{version}/{topic} - Django:
https://docs.djangoproject.com/en/{version}/... - Node.js:
https://nodejs.org/api/{module}.html - TypeScript:
https://www.typescriptlang.org/docs/handbook/...
重要说明
- 根据上下文推断理由。 如果理由是推断得出的,而非已知事实,请如实说明。
- 批量操作。 完成一个文件后再处理下一个文件。
- 语言无关。 根据项目使用的语言和框架进行调整。
- 数据自包含。 删除
.decodie/目录不会影响项目。 - 每个条目只包含一个概念。 多个概念应拆分为多个条目,并相互引用。
- 保持索引轻量。 完整内容放在会话文件中;索引仅保存元数据。