Claude-skill-registry learning

Extracts reusable patterns from sessions. Use at session end to capture debugging insights and project-specific knowledge.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/learning" ~/.claude/skills/majiayu000-claude-skill-registry-learning && rm -rf "$T"
manifest: skills/data/learning/SKILL.md
source content

持续学习技能

本技能用于从开发会话中提取可复用的模式和知识,实现持续学习和改进。

触发条件

  • 会话结束时评估
  • 发现新的调试技巧
  • 解决了复杂问题
  • 创建了可复用的解决方案
  • 学到了项目特定知识

学习模式类型

1. 错误解决模式

当解决了一个错误,记录:

  • 错误信息
  • 根本原因
  • 解决方案
  • 预防措施
## 错误: Cannot read property 'xxx' of undefined

### 场景

访问嵌套对象属性时

### 根本原因

异步数据未加载完成就访问

### 解决方案

```typescript
// 使用可选链
const value = obj?.nested?.property;

// 或提供默认值
const value = obj?.nested?.property ?? defaultValue;
```

预防

  • 始终使用可选链访问可能为空的属性
  • 在组件中添加加载状态检查

### 2. 调试技巧

```markdown
## 技巧: 调试 Next.js API 路由

### 场景
API 路由返回意外结果

### 技巧
1. 在 route.ts 开头添加日志
```typescript
export async function GET(request: NextRequest) {
  console.log('[API] GET /api/xxx', {
    url: request.url,
    headers: Object.fromEntries(request.headers)
  })
  // ...
}
  1. 使用 Postman/curl 直接测试
  2. 检查中间件是否拦截

### 3. 变通方案

```markdown
## 变通: Prisma 不支持的复杂查询

### 场景
需要执行 Prisma 不原生支持的 SQL

### 变通方案
```typescript
// 使用 $queryRaw 执行原生 SQL
const result = await prisma.$queryRaw`
  SELECT * FROM users
  WHERE LOWER(name) LIKE ${`%${search.toLowerCase()}%`}
`

// 或使用 $executeRaw 执行命令
await prisma.$executeRaw`
  UPDATE users SET updated_at = NOW()
  WHERE id = ${userId}
`

注意

  • 需要手动处理 SQL 注入防护
  • 返回类型需要手动指定

### 4. 项目特定知识

```markdown
## 项目: 用户认证流程

### 流程
1. 用户提交凭证 → POST /api/auth/login
2. 验证凭证 → 检查数据库
3. 生成 JWT → 设置 httpOnly cookie
4. 返回用户信息

### 关键文件
- `src/app/api/auth/login/route.ts` - 登录接口
- `src/lib/auth.ts` - 认证工具函数
- `src/middleware.ts` - 路由保护

### 注意事项
- Token 有效期 7 天
- 刷新 Token 在 /api/auth/refresh
- 受保护路由在 middleware.ts 配置

评估清单

会话结束时,检查以下内容:

值得记录的模式

- [ ] 解决了一个复杂的 Bug?
- [ ] 发现了一个调试技巧?
- [ ] 创建了一个可复用的代码片段?
- [ ] 学到了框架/库的新用法?
- [ ] 遇到并解决了性能问题?
- [ ] 找到了一个变通方案?
- [ ] 了解了项目特定的知识?

不值得记录的模式

- [ ] 简单的拼写错误
- [ ] 一次性的配置问题
- [ ] 外部 API 临时故障
- [ ] 已知的简单问题

知识库结构

.claude/
└── learned/
    ├── errors/
    │   ├── prisma-connection-issues.md
    │   └── react-hydration-mismatch.md
    ├── debugging/
    │   ├── next-api-routes.md
    │   └── database-query-slow.md
    ├── workarounds/
    │   ├── prisma-raw-queries.md
    │   └── nextauth-custom-session.md
    ├── patterns/
    │   ├── error-handling.md
    │   └── api-response-format.md
    └── project/
        ├── auth-flow.md
        └── data-models.md

知识文档模板

---
title: [标题]
category: [errors|debugging|workarounds|patterns|project]
tags: [tag1, tag2]
created: YYYY-MM-DD
updated: YYYY-MM-DD
---

# [标题]

## 场景

[描述遇到这个问题/使用这个模式的场景]

## 问题/需求

[具体的问题描述或需求说明]

## 解决方案

[详细的解决方案,包括代码示例]

## 相关文件

- `path/to/file.ts` - [说明]

## 参考

- [链接1](url)
- [链接2](url)

## 注意事项

[使用时需要注意的点]

自动化脚本

会话评估脚本

#!/bin/bash
# evaluate-session.sh
# 在会话结束时评估是否有可提取的模式

LEARNED_PATH="${HOME}/.claude/learned"
MIN_SESSION_LENGTH=${MIN_SESSION_LENGTH:-10}

# 获取会话消息数
message_count=$(grep -c '"type":"user"' "$CLAUDE_TRANSCRIPT_PATH" 2>/dev/null || echo "0")

# 短会话跳过
if [ "$message_count" -lt "$MIN_SESSION_LENGTH" ]; then
  echo "[Learning] 会话过短 ($message_count 消息), 跳过评估" >&2
  exit 0
fi

# 提示评估
echo "[Learning] 会话有 $message_count 消息 - 考虑提取可复用模式" >&2
echo "[Learning] 检查是否有:" >&2
echo "[Learning]   - 解决的复杂 Bug" >&2
echo "[Learning]   - 新的调试技巧" >&2
echo "[Learning]   - 可复用的代码模式" >&2
echo "[Learning]   - 项目特定知识" >&2
echo "[Learning] 保存位置: $LEARNED_PATH" >&2

配置文件

{
  "min_session_length": 10,
  "extraction_threshold": "medium",
  "auto_approve": false,
  "learned_skills_path": "~/.claude/learned/",
  "patterns_to_detect": [
    "error_resolution",
    "debugging_techniques",
    "workarounds",
    "project_specific"
  ],
  "ignore_patterns": ["simple_typos", "one_time_fixes", "external_api_issues"]
}

本能系统(进阶)

本能是介于"观察"和"正式技能"之间的中间状态,用于捕捉重复出现的模式。

本能的生命周期

观察 ──→ 记录 ──→ 本能 ──→ 演化
 │        │        │        │
 │        │        │        └─→ 技能/命令/智能体
 │        │        └─→ 置信度评估
 │        └─→ observations.jsonl
 └─→ Hook 自动捕获

置信度评分

置信度含义动作
0.3首次观察记录但不采取行动
0.5重复出现形成初步本能
0.7多次验证考虑演化为技能
0.9高度可靠正式演化为技能/命令

本能记录格式

## 本能: [名称]

### 触发模式

[什么情况下触发]

### 推荐行为

[应该如何响应]

### 置信度: 0.X

[基于多少次观察]

### 观察记录

- 2025-01-20: [场景1]
- 2025-01-22: [场景2]

### 演化候选

- [ ] 升级为技能
- [ ] 升级为命令
- [ ] 写入 CLAUDE.md

自动观察 Hook(可选)

// hooks/observe-patterns.js
const {
  appendFile,
  getSessionIdShort,
  getDateTimeString,
} = require("./lib/utils");

async function observePattern(input) {
  const observation = {
    sessionId: getSessionIdShort(),
    timestamp: getDateTimeString(),
    tool: input.tool_name,
    pattern: detectPattern(input),
    context: summarizeContext(input),
  };

  if (observation.pattern) {
    appendFile(
      ".claude/learned/observations.jsonl",
      JSON.stringify(observation) + "\n",
    );
  }
}

最佳实践

  1. 及时记录 - 解决问题后立即记录,不要等
  2. 结构化 - 使用统一的模板格式
  3. 具体示例 - 包含代码示例和文件路径
  4. 定期回顾 - 定期整理和更新知识库
  5. 团队共享 - 有价值的知识分享给团队
  6. 版本控制 - 将知识库纳入版本控制
  7. 标签分类 - 使用标签便于搜索
  8. 保持简洁 - 只记录有价值的内容
  9. 更新过时 - 及时更新过时的信息
  10. 关联项目 - 记录项目特定的上下文
  11. 本能演化 - 重复模式升级为正式技能

记住:每次调试都是学习机会。记录下来,下次就能更快解决类似问题。

进阶:使用本能系统可以让学习更系统化,从观察到技能的演化过程让知识沉淀更有效。