cs-trick

Skill file

Preview skill file
---
name: cs-trick
description: 把可复用的编程模式 / 库用法 / 技术技巧整理成处方性参考库,三种类型 pattern / library / technique。触发:用户说"记录一个技巧"、"这个用法值得记"、"tricks"、"记录库用法",或 design / analyze 阶段发现值得沉淀的技巧时推送。
---

# cs-trick

## 启动必读

开始任何判断或动作前,先读取 `.codestable/attention.md`;缺失则视为骨架不完整,提示先补齐或运行 `cs-onboard`,不要回退到外部 AI 入口文件。

cs-trick 是面向问题的**处方性参考库**,回答:**要做 X,经过验证的正确做法是什么?** 不需要触发事件,任何时候发现值得沉淀的模式或用法都可以直接写。

典型内容:某个设计模式在这个项目的标准写法 / 某个库的核心 API 用法 + 已知坑 / 某类操作的命令配方。

> 共享路径与命名约定看 `.codestable/reference/shared-conventions.md`。产物写入 `.codestable/compound/`,命名 `YYYY-MM-DD-trick-{slug}.md`,frontmatter 带 `doc_type: trick`。

---

## 三种类型

frontmatter 的 `type` 字段:

| 类型 | 适用情境 | 示例 |
|---|---|---|
| `pattern` | 设计模式 / 架构模式 / 编程惯用法 | "用 Repository 模式隔离数据访问层"、"用 Builder 构造复杂配置" |
| `library` | 某个库 / 框架的用法 / 配置方式 / 常见坑 | "Prisma 事务的正确写法"、"Pinia store 的 action 错误处理" |
| `technique` | 具体操作技巧 / 工具用法 / 命令配方 | "用 jq 从 JSON 提取嵌套字段"、"git bisect 定位引入 bug 的提交" |

查询用途:查"代码该怎么组织"→ pattern;"库 / 框架某 API 怎么用"→ library;"这类操作怎么做"→ technique。分不清选最接近的,`type` 不影响搜索可用性。

---

## 文档格式

frontmatter / 正文模板 / 长示例见同目录 `reference.md`。流程约束:

- `type` 只允许 `pattern` / `library` / `technique`
- 示例优先用项目真实代码或命令
- "何时不适用 / 已知坑 / 相关文档"是可选节,用户说"没什么"就省略

---

## 工作流阶段

### Phase 1:识别类型

最多两个问题:

1. "这是关于模式 / 结构、某个库 / 框架的用法,还是操作技巧 / 命令?" → 确定 `type`
2. "一句话说:遇到什么情况时会用到它?" → 确定 `topic`

用户描述已清楚就跳过直接进 Phase 1.5。

### Phase 1.5:查重叠与意图分流(必做)

按 `shared-conventions.md` §6 第 5/6 条:

- 含"改 / 更新 / 修订 / 补充 / 某条 trick"或指向某份旧文档 → 直接走**更新已有**,不进新建流程
- 否则用搜索工具 `--query` 查一遍 `topic`,命中相近时把候选列给用户

**更新流程**:读旧文档 → 和用户对齐改哪几节 → 跳过 Phase 2 完整代码调查(被改的节涉及的代码要重读确认未失效)→ 起草 diff 给用户 review → 写回 + `updated: YYYY-MM-DD`。

### Phase 2:代码调查(必做不可跳过)

技巧通过代码体现——**用户不贴代码不等于不需要看代码**。AI 必须主动调查代码仓。

为什么必做:没看代码就写出的"技巧"会停留在抽象层面,下次有人按这条找代码会找不到对应的真实例子,反而失去信心。

1. **根据 topic + type 搜索代码仓**——Grep 关键词(函数名 / 类名 / 库导入 / 模式特征);搜相关文件;必要时语义搜索补充
2. **读取关键文件**——技巧实际使用 / 实现的代码位置:`library` 类找 import 和调用处;`pattern` 类找结构性代码(接口定义 / 类继承 / 组合);`technique` 类找操作步骤对应的脚本或配置
3. **产出**——记下文件路径和关键代码片段。完全找不到(纯经验性技巧、外部工具用法)就在 Phase 3 起草时说明"本技巧暂无项目内代码实例"

补充:用户附带文件 → 仍要搜一遍代码仓确认有没有其他使用点;搜索结果为空 → 可继续但必须在文档注明;找到的代码和用户描述矛盾 → 主动跟用户确认。

### Phase 3:提炼要点(一次一个问题)

**结合 Phase 2 找到的代码**提问——不问用户已经能在代码看到的东西:

1. "标准做法是什么?"(已看到实现的直接展示理解请用户确认)
2. "为什么这样做有效?有什么原理?"
3. "什么情况下不该用它?"(可选)
4. "踩过坑或要注意的?"(可选,library 重点问)
5. "代码片段或命令示例?"(已找到实际代码就跳过,直接用真实代码作为示例)

用户说"没什么"或"跳过"就跳过,宁缺节也不用空话填充。

### Phase 4:起草 + 用户 review

AI 一次性起草完整文档(YAML frontmatter + 正文)。示例代码优先用 Phase 2 找到的真实项目代码(可精简),别凭空编写。展示给用户。

### Phase 5:归档

- 新建:写入 `compound/YYYY-MM-DD-trick-{slug}.md`,frontmatter 带 `doc_type: trick`
- 更新:写回 Phase 1.5 定位的原文件 + `updated: YYYY-MM-DD`
- supersede:按 `shared-conventions.md` §6 第 5 条处理

### Phase 6:可发现性检查

写完若发现一两行"每次 CodeStable 技能启动都该知道"的项目硬约束,提示用户用 `cs-note` 追加到 `.codestable/attention.md`。不要自作主张改 attention,也不要写外部 AI 入口。

---

## 搜索工具

> 完整语法见 `.codestable/reference/tools.md`。

```bash
# 按类型 + 框架筛选

python .codestable/tools/search-yaml.py --dir .codestable/compound --filter doc_type=trick --filter type=library --filter framework~={库名}

# 按技术栈浏览

python .codestable/tools/search-yaml.py --dir .codestable/compound --filter doc_type=trick --filter language=typescript --filter status=active

# 归档后查重叠

python .codestable/tools/search-yaml.py --dir .codestable/compound --filter doc_type=trick --query "{关键词}" --json
```

---

## 守护规则

> 归档类共享规则见 `shared-conventions.md` 第 6 节。本技能特有:

1. **只归档已验证的做法**——"也许应该这样做"不归档;必须用户或 AI 确认过有效
2. **必须调查代码仓**——Phase 2 不可跳过。示例代码优先用项目真实代码不凭空编写
3. **不替用户写原理**——用户说不清"为什么有效"就写"原理待补充",不编造
4. **示例优先于描述**——能用代码说清楚就用代码
5. **只认自己的 doc_type**——只读写 `doc_type: trick`

Source

Creator's repository · liuzhengdongfortest/codestable

View on GitHub

Security

Security checks in progress
Results will appear here once audits complete
What this skill can do
Reads your filesConnects to the internetRuns code on your machine
Checked by 3 independent security firms
Does it try to trick the AI?Not yet checkedPending · Gen Agent Trust Hub
Does it sneak in hidden code?Not yet checkedPending · Socket
Does it have known bugs?Not yet checkedPending · Snyk