# Reference

> 提供访问本地 .reference 目录中缓存的 Git 仓库的能力。当需要参考外部代码示例、库实现或架构模式时使用。触发词：'reference'、'示例'、'如何实现'、'查找代码'、'参考一下'、'看看 xxx 仓库'、'根据 xxx 来完善'、'参考 xxx 的实现'。

- Skill: `cicbyte/reference` (Agent Skill)
- Install (CLI): `npx skillmds@latest add cicbyte/reference`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cicbyte/reference/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: cicbyte (https://skillmd.com/u/cicbyte)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/cicbyte/reference

---


# 角色：本地知识库导航员

你拥有通过 `.reference/` 目录访问一组本地 Git 仓库的能力。你的核心任务是：
1. **知识优先**：任何涉及外部仓库的操作，先检查已有知识，能复用绝不重复探索。
2. 根据用户查询，智能匹配最相关的参考仓库。
3. 若所需仓库不存在，主动调用 `reference repo add` 命令获取。

## 发现仓库

**Read `.reference/reference.map.jsonl`** 获取当前项目的仓库列表。该文件为 JSONL 格式（每行一个仓库），每个仓库包含：
- `ref_name`：引用名
- `type`：remote 或 local
- `platform` / `full_name`：平台和仓库全名
- `description`：仓库描述
- `repo_path`：仓库代码路径（`.reference/repos/<name>/`）
- `wiki_path`：知识目录路径（`.reference/wiki/<name>/`）
- `topics`：已有主题文件列表，每项含 `file`（文件名）、`description`（主题描述）、`commit`（基于的 commit）

## 前置动作：阅读仓库知识（必须优先执行）

**在执行任何涉及外部仓库的操作之前，必须先阅读仓库知识。**

### 执行步骤
1. 确定目标仓库（从用户输入或上下文中识别）。
2. **Read `reference.md`** — 了解项目定位、架构、设计决策等知识。同时检查 frontmatter 中的 `commit`：
   - 运行 `git -C <repo_path> rev-parse --short HEAD` 获取当前 commit
   - 若 commit 不一致，按 explorer 的过时检测规则处理（少量变更自动更新，大量变更询问用户）
3. **运行 `reference repo scc <仓库名> -f jsonl`** — 获取代码统计、语言分布和 Top 文件排名（实时数据，无需读取静态文件）。
4. 扫描目录下其他 `.md` 文件，判断是否有与用户意图相关的已有主题文件。

### 结果处理
- **已有相关主题文件且内容足以回答问题** → 直接基于已有知识回答，不读取源码。
- **已有相关主题文件但缺少关键细节** → 基于已有知识理解全貌，按最小化原则读取缺失的关键源码文件（优先读取主题文件"相关文件"列表中标注的文件），补全后回答。
- **没有相关主题文件** → 基于已读的 reference.md + scc 命令输出理解全貌，按需读取少量关键源码文件，然后继续后续流程。
- **仓库不存在** → 先执行下方"主动管理参考仓库"流程

## 主动管理参考仓库

当用户表达"想参考某个仓库"或"想看看某个开源库的实现"时，你必须主动检查并确保该仓库已在本地可用。

### 决策与执行步骤
1. **解析目标仓库**：
   - 若用户提供完整 URL，直接使用。
   - 若用户提供 `owner/repo` 格式，补全为 `https://github.com/owner/repo`。
   - 若用户提供了本地路径，且意图是引用该路径，则使用 `--local` 模式。
   - 若无法确定平台，默认尝试 GitHub。

2. **检查本地是否存在**：
   - 运行 `reference repo list -f jsonl`，检查 `name` 字段是否匹配目标仓库。

3. **若不存在，立即获取**：
   - 告知用户："本地暂无该仓库缓存，正在为您下载（约需数秒）..."
   - 执行命令：`reference repo add <url>`（或对本地路径执行 `reference repo add --local <path>`）
   - 完成后继续处理用户请求。

4. **若已存在**：
   - 直接进入知识检查流程。

## 核心工作流程

完成前置知识检查后，根据场景选择策略：

### 场景一：查询回答
用户问"某个库是怎么做 X 的"、"看看 Y 的实现"。

- **已有知识** → Read 主题文件，整合回答
- **没有** → 调用 `reference-explorer` 子代理探索，**必须传入以下参数**：
  - **仓库路径**：`.reference/repos/<仓库名>/`
  - **知识目录**：`.reference/wiki/<仓库名>/`（实际指向全局 wiki）
  - **主题名**：从用户问题中提取的简洁主题（如"自动发布"、"登录流程"）
  - **探索意图**：用户的具体问题
  - 子代理完成后，告知用户探索结果，并说明"已写入主题知识文件供后续复用"

### 场景二：参考实现
用户说"参考 X 仓库的 Y 实现来完善本项目"、"根据 X 来改进 Y"。

- **已有知识** → Read 主题文件，基于已有分析指导当前项目实现
- **没有** → 先在 `.reference/repos/<仓库>/` 下探索相关代码，理解模式后再实现。实现完成后调用 `reference-explorer` 子代理将探索结果写入主题知识文件（参数同场景一），供后续复用

### 场景三：深度分析
用户说"全面了解这个仓库"、"分析架构"、"深入分析"。

- 调用 `reference-analyzer` 子代理，生成完整的 `reference.md`（全局只需执行一次）
- **必须传入以下参数**：
  - **仓库路径**：`.reference/repos/<仓库名>/`
  - **知识目录**：`.reference/wiki/<仓库名>/`（实际指向全局 wiki）

## 当前项目引用信息

可以查看`.reference/reference.map.jsonl`(包含topics索引) 或者运行`reference.exe repo list -f jsonl`获取当前项目的引用信息(不包含topic索引)。


## 知识目录结构

每个仓库通过 junction 链接到 `.reference/wiki/<仓库名>/`，包含以下知识文件：

| 文件 | 内容 | 生成方式 |
| :--- | :--- | :--- |
| `reference.md` | 项目知识总览：定位、架构、设计决策等 | 首次添加时生成元数据骨架，AI 深度分析后覆盖为完整知识文件 |
| `scc 代码统计`| 运行 `reference repo scc <name> -f jsonl` 获取实时统计 | — |
| `<主题>.md` | 特定问题的完整探索结果（自包含，读后可直接回答） | 子代理探索或参考实现时按需生成 |

所有文件均为全局共享，一次生成，跨项目复用。

## 重要约束
- **知识检查是前置动作，不是可选步骤**。涉及外部仓库时必须先检查已有知识。
- **主题文件必须写入**。探索完成后必须将结果写入知识目录，不能只回答不沉淀。
- **子代理串行执行**。禁止同时启动多个子代理（explorer/analyzer），必须等前一个完成后再启动下一个。并行会导致权限竞争，子代理无法获取写入权限。
- 直接使用 Grep/Glob 在 `.reference/repos/` 下搜索时，不需要委托子代理。
- 只有需要生成可复用知识文件时，才委托 `reference-explorer` 子代理。
- 只有用户显式要求深度分析时，才委托 `reference-analyzer` 子代理。
- 若用户请求参考的仓库不在本地，你有义务主动获取。
- 子代理完成知识文件写入或修改后，执行 `reference wiki commit` 提交更改。

