研究问题:将 Hermes skills 文件夹当成知识库来管理,CodeGraph 代码图谱对未来 Harness 优化是否存在有益作用?
分析日期:2026-06-24
工具版本:CodeGraph (latest) · Hermes Agent · tree-sitter AST parser
分析对象:~/.hermes/skills/(60+ 技能目录 · 714 文件 · 含 Harness Engineering 16 章知识体系)
CodeGraph 是一个语义代码智能平台,通过 tree-sitter 将源代码解析为 AST,提取符号(函数、类、方法)和关系(调用、导入、继承),存储到本地 SQLite 知识图谱中,并通过 MCP 协议暴露给 AI Agent。
AI Agent (Hermes / Claude Code / Cursor)
│
│ MCP 协议调用
▼
CodeGraph MCP Server
│ explore · search · callers · callees · impact · node
▼
SQLite 知识图谱
symbols · edges · files · FTS5 全文搜索
| 工具 | 用途 | 典型场景 |
|---|---|---|
codegraph_explore | 语义探索:一次调用返回相关符号的源码 + 调用路径 | "这个系统如何工作?" |
codegraph_search | 快速符号搜索(FTS5 全文 + 结构化过滤) | "找到所有 auth 相关函数" |
codegraph_callers | 查找调用某符号的所有位置 | "谁调用了 submit()?" |
codegraph_callees | 查找某符号调用了什么 | "pipeline.run() 依赖哪些模块?" |
codegraph_impact | 影响分析:改一个符号会影响什么 | "重构前评估爆炸半径" |
codegraph_node | 单符号详情 + 源码,替代 Read 工具 | "查看这个函数的完整实现" |
对 ~/.hermes/skills/ 执行 codegraph init -i,3.3 秒完成索引:
$ cd ~/.hermes/skills && codegraph init -i
◆ Scanning files — 139 found
◆ Parsing code — done
◆ Resolving refs — done
● 2,823 nodes, 6,702 edges in 3.3s
| 维度 | 数据 |
|---|---|
| 索引文件数 | 139 |
| 节点总数 | 2,823(function: 1,233 · import: 692 · variable: 498 · method: 196 · class: 66) |
| 边总数 | 6,702 |
| DB 大小 | 7.32 MB |
| 语言分布 | Python: 132 文件 · YAML: 4 · Liquid: 2 · JavaScript: 1 |
Impact 分析——修改 submit() 函数的爆炸半径:
$ codegraph impact "submit" --depth 1
Impact of changing "submit" — 27 affected symbols:
creative/comfyui/scripts/run_workflow.py
method submit:173
function main:565
creative/comfyui/scripts/health_check.py
function smoke_test:103
last30days/scripts/lib/bird_x.py
function search_handles:346
last30days/scripts/lib/pipeline.py
function run:175
function _retry_thin_sources:743
...(共 27 个受影响的符号,横跨 5 个技能目录)
符号搜索——render 相关函数:
$ codegraph query "render" --kind function --limit 15
function render_full last30days/scripts/lib/render.py:788
function render_html last30days/scripts/lib/html_render.py:346
function render_context last30days/scripts/lib/render.py:932
function render_compact last30days/scripts/lib/render.py:95
function render_for_html last30days/scripts/lib/render.py:190
function render_comparison_multi last30days/scripts/lib/render.py:574
...(共 15 个 render 系列函数)
| 文件类型 | 实际数量 | CodeGraph 索引 | 覆盖率 |
|---|---|---|---|
| Markdown (.md) | 568 | 0 | 0% |
| Python (.py) | 132 | 132 | 100% |
| Shell (.sh) | 14 | 0 | 0% |
| YAML (.yaml) | 4 | 4 | 100% |
| Liquid (.liquid) | 2 | 2 | 100% |
| 总计 | 714 | 139 | 19% |
Harness Engineering 技能的全部核心价值都在 Markdown 中:
chapters/ch01–ch16.md)—— 未索引patterns.md)—— 未索引cheatsheet.md)—— 未索引fusion-audit-methodology.md)—— 未索引hermes-car-baseline.md)—— 未索引hermes-harness-design-practice.md)—— 未索引glossary.md)—— 未索引CodeGraph 看不到:
CodeGraph 的 impact 分析揭示了一个重要发现:
last30days/scripts/lib/pipeline.py
→ calls submit() from comfyui (跨技能复用!)
→ calls query() from academic-research/search_arxiv.py
→ imports from 14+ sibling modules
Harness 优化点:last30days 技能的脚本生态已经形成了一个紧密耦合的子图,任何改动 submit() 函数的行为会影响 27 个下游符号。这正是 Harness Engineering 里"影响分析"的核心。
submit() 被 5 个不同技能的脚本调用(comfyui、last30days、bird_x、competitors、github)。
submit() 改了签名,last30days 会默默坏掉。这违反了 Harness Engineering 的"隔离"原则。
CodeGraph 对每个 blast radius 节点都标注了 ⚠️ no covering tests found。skills 脚本目前零测试覆盖,这对 Harness 的"验证门控"(verification-gate)是一个真实的缺口。
| 方向 | 价值 | 说明 |
|---|---|---|
| 脚本依赖治理 | ⭐⭐⭐ 高 | 发现跨技能脚本耦合、推动共享库抽取 |
| 测试盲区定位 | ⭐⭐⭐ 高 | 配合 verification-gate,定位零覆盖脚本 |
| 脚本 impact 分析 | ⭐⭐ 中 | 改一个脚本函数前知道影响范围 |
| 需求 | CodeGraph 现状 | 需要的能力 |
|---|---|---|
| 概念提取 | 函数/类/方法 | 章节标题、术语、原则条目 |
| 关系类型 | calls / imports / extends | "引用" / "依赖" / "矛盾" / "补充" |
| 全文搜索 | FTS5 on 代码符号 | FTS5 on 中文术语 + 英文关键词 |
| 影响分析 | 改一个函数影响什么 | 改一条原则影响哪些技能/规则 |
| 覆盖分析 | 测试覆盖率 | 知识覆盖率(哪些 Harness 概念没有对应技能?) |
| 方向 | 价值 | 说明 |
|---|---|---|
| 知识体系治理 | ⭐ 无 | CodeGraph 不解析 Markdown,对核心知识内容无效 |
| 概念交叉分析 | ⭐ 无 | 需要 LLM Wiki 或专门的 Markdown 图谱工具 |
| prompt cache 优化 | ⭐ 无 | 与代码图谱无关,属于 Harness 运行时治理 |
需要的不是 CodeGraph(代码图谱),而是一个 Markdown-native 的知识图谱方案:
你已经在用的 LLM Wiki (nashsu/llm_wiki) 天然支持 Markdown 知识图谱:
http://127.0.0.1:19828/api/v1建议:创建一个 "Harness Engineering" 项目,将 skills/ 下的 Markdown 知识全部导入。
编写一个轻量级解析器,从 SKILL.md 的 YAML frontmatter 中提取:
related_skills: [llm-wiki-api, persistence-strategy, verification-gate, ...]
tags: [harness, prompt-engineering, query-loop, ...]
metadata.hermes.category: devops
metadata.hermes.related_skills: [...]
构建技能间的关系图,输出为 JSON 或 SQLite,供 curator 和 Agent 查询。
┌─────────────────────────────────────────┐
│ Harness Knowledge Hub │
│ │
│ ┌─────────────┐ ┌────────────────┐ │
│ │ CodeGraph │ │ LLM Wiki / │ │
│ │ (脚本层) │ │ Markdown 图谱 │ │
│ │ │ │ (知识层) │ │
│ │ 132 个 .py │ │ 568 个 .md │ │
│ │ 2,823 nodes │ │ 概念 + 原则 │ │
│ │ 调用/导入图 │ │ + 章节关系 │ │
│ └──────┬──────┘ └───────┬────────┘ │
│ │ │ │
│ └────────┬─────────┘ │
│ ▼ │
│ Unified Query Layer │
│ "改 verification-gate 原则会影响 │
│ 哪些脚本和哪些章节?" │
└─────────────────────────────────────────┘
| 方向 | 价值评级 | 说明 |
|---|---|---|
| 脚本依赖治理 | ⭐⭐⭐ 高 | 发现跨技能脚本耦合(submit() 被 5 个技能调用),推动共享库抽取,降低隐性耦合风险 |
| 测试盲区定位 | ⭐⭐⭐ 高 | 配合 verification-gate,定位零覆盖脚本(当前 132 个 .py 全部无测试) |
| 脚本 impact 分析 | ⭐⭐ 中 | 改一个脚本函数前知道影响范围(27 个下游符号),辅助重构决策 |
| 知识体系治理 | ⭐ 无 | CodeGraph 不解析 Markdown,对 16 章 Harness 知识内容完全无效 |
| 概念交叉分析 | ⭐ 无 | "十条原则"↔"最终六问"、五层架构↔章节引用等,需要 LLM Wiki 或专用工具 |
| prompt cache 优化 | ⭐ 无 | 与代码图谱无关,属于 Harness 运行时治理(compression/preflight) |
codegraph impact 分析高扇入函数,推动测试覆盖。