mirror of
https://github.com/sweetwisdom/everything-claude-code-zh.git
synced 2026-11-12 17:00:45 +00:00
chore: sync with upstream ae2c063 + update zh translations
This commit is contained in:
1 parent
6c531eb17b
commit
b1d03833b9
30 files changed
+1694
-516
No files matched your search
@@ -1,22 +1,22 @@
|
||||
# 插件清单模式(Manifest Schema)注意事项
|
||||
# 插件清单模式(Plugin Manifest Schema)说明
|
||||
|
||||
本文档记录了 Claude Code 插件清单校验器中**未见于文档但强制执行的约束**。
|
||||
本文档记录了 Claude Code 插件清单校验器(Validator)中**未公开但强制执行的约束条件**。
|
||||
|
||||
这些规则基于真实的安装失败案例、校验器行为以及与已知可用插件的对比。
|
||||
设置这些规则是为了防止隐性故障和重复的回归问题。
|
||||
这些规则基于真实的安装失败案例、校验器行为分析以及与已知可用插件的对比。
|
||||
它们的存在是为了防止隐性破坏(silent breakage)和重复出现的回归(regressions)问题。
|
||||
|
||||
如果你编辑 `.claude-plugin/plugin.json`,请先阅读本文。
|
||||
如果你需要编辑 `.claude-plugin/plugin.json`,请务必先阅读本文。
|
||||
|
||||
---
|
||||
|
||||
## 摘要(优先阅读)
|
||||
|
||||
Claude 插件清单校验器**极其严格且具有主观性**。
|
||||
它执行了一些在公开模式(Schema)参考文档中未完全说明的规则。
|
||||
Claude 插件清单校验器非常**严格且具有确定性**。
|
||||
它强制执行了一些在公共模式(Schema)引用中未完全记录的规则。
|
||||
|
||||
最常见的失败模式是:
|
||||
|
||||
> 清单看起来很合理,但校验器以模糊的错误拒绝它,例如:
|
||||
> 清单看起来很合理,但校验器拒绝了它,并给出模糊的错误提示,例如
|
||||
> `agents: Invalid input`
|
||||
|
||||
本文档将解释其原因。
|
||||
@@ -25,11 +25,11 @@ Claude 插件清单校验器**极其严格且具有主观性**。
|
||||
|
||||
## 必填字段
|
||||
|
||||
### `version`(强制性)
|
||||
### `version`(强制要求)
|
||||
|
||||
即便在某些示例中被省略,校验器也要求必须包含 `version` 字段。
|
||||
校验器要求必须包含 `version` 字段,即使在某些示例中省略了它。
|
||||
|
||||
如果缺失,在应用市场安装或 CLI 校验期间可能会失败。
|
||||
如果缺失该字段,在应用市场安装或 CLI 校验期间可能会失败。
|
||||
|
||||
示例:
|
||||
|
||||
@@ -50,9 +50,9 @@ Claude 插件清单校验器**极其严格且具有主观性**。
|
||||
* `skills`
|
||||
* `hooks`(如果存在)
|
||||
|
||||
即便只有一个条目,**也不接受字符串(Strings)**。
|
||||
即使只有一个条目,**也不接受字符串(Strings)类型**。
|
||||
|
||||
### 错误写法(Invalid)
|
||||
### 错误示例(Invalid)
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -60,7 +60,7 @@ Claude 插件清单校验器**极其严格且具有主观性**。
|
||||
}
|
||||
```
|
||||
|
||||
### 正确写法(Valid)
|
||||
### 正确示例(Valid)
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -68,17 +68,17 @@ Claude 插件清单校验器**极其严格且具有主观性**。
|
||||
}
|
||||
```
|
||||
|
||||
这适用于所有组件路径字段。
|
||||
这一规则一致适用于所有组件路径字段。
|
||||
|
||||
---
|
||||
|
||||
## 路径解析规则(至关重要)
|
||||
## 路径解析规则(关键)
|
||||
|
||||
### Agents 必须使用显式文件路径
|
||||
|
||||
校验器**不接受 `agents` 使用目录路径**。
|
||||
校验器**不接受 `agents` 字段使用目录路径**。
|
||||
|
||||
即便如下写法也会失败:
|
||||
即使是以下写法也会失败:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -86,7 +86,7 @@ Claude 插件清单校验器**极其严格且具有主观性**。
|
||||
}
|
||||
```
|
||||
|
||||
相反,你必须显式列举智能体(Agent)文件:
|
||||
相反,你必须显式枚举智能体(Agent)文件:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -100,21 +100,58 @@ Claude 插件清单校验器**极其严格且具有主观性**。
|
||||
|
||||
这是校验错误最常见的来源。
|
||||
|
||||
### Commands 和 Skills
|
||||
### 命令(Commands)与技能(Skills)
|
||||
|
||||
* `commands` 和 `skills` 仅在**包裹在数组中**时才接受目录路径。
|
||||
* 使用显式文件路径是最安全且面向未来的做法。
|
||||
* `commands` 和 `skills` **仅在包裹在数组中时**接受目录路径。
|
||||
* 显式文件路径是最安全且最能兼容未来的做法。
|
||||
|
||||
---
|
||||
|
||||
## 校验器行为备注
|
||||
## 校验器行为注意事项
|
||||
|
||||
* `claude plugin validate` 比某些应用市场预览更严格。
|
||||
* 校验可能在本地通过,但如果路径含义模糊,则在安装时可能会失败。
|
||||
* 错误通常很笼统(`Invalid input`),且不指示根本原因。
|
||||
* `claude plugin validate` 比某些应用市场预览(marketplace previews)更严格。
|
||||
* 校验可能在本地通过,但如果路径含义模糊,在安装时可能会失败。
|
||||
* 错误提示通常很通用(`Invalid input`),且不会指出根本原因。
|
||||
* 跨平台安装(尤其是 Windows)对路径假设的容忍度较低。
|
||||
|
||||
请假设校验器是“带有敌意的”且完全字面化的。
|
||||
请假设校验器是严苛且完全按字面意思理解的。
|
||||
|
||||
---
|
||||
|
||||
## `hooks` 字段:请勿添加
|
||||
|
||||
> ⚠️ **关键(CRITICAL):** 请勿在 `plugin.json` 中添加 `"hooks"` 字段。这是一个回归测试强制要求的规则。
|
||||
|
||||
### 为什么这很重要
|
||||
|
||||
按照约定,Claude Code v2.1+ 会**自动加载**任何已安装插件中的 `hooks/hooks.json`。如果你在 `plugin.json` 中也声明了它,你会得到:
|
||||
|
||||
```
|
||||
Duplicate hooks file detected: ./hooks/hooks.json resolves to already-loaded file.
|
||||
The standard hooks/hooks.json is loaded automatically, so manifest.hooks should
|
||||
only reference additional hook files.
|
||||
```
|
||||
|
||||
### 反复变更的历史
|
||||
|
||||
这曾导致此仓库中出现多次“修复/回滚”循环:
|
||||
|
||||
| 提交 | 动作 | 触发原因 |
|
||||
|--------|--------|---------|
|
||||
| `22ad036` | 添加(ADD)hooks | 用户报告“钩子未加载” |
|
||||
| `a7bc5f2` | 移除(REMOVE)hooks | 用户报告“重复钩子错误” (#52) |
|
||||
| `779085e` | 添加(ADD)hooks | 用户报告“智能体未加载” (#88) |
|
||||
| `e3a1306` | 移除(REMOVE)hooks | 用户报告“重复钩子错误” (#103) |
|
||||
|
||||
**根本原因:** Claude Code CLI 在不同版本间更改了行为:
|
||||
- v2.1 之前:需要显式声明 `hooks`。
|
||||
- v2.1+:按约定自动加载,显式声明会导致重复错误。
|
||||
|
||||
### 当前规则(由测试强制执行)
|
||||
|
||||
`tests/hooks/hooks.test.js` 中的测试 `plugin.json does NOT have explicit hooks declaration` 会阻止重新引入此声明。
|
||||
|
||||
**如果你要添加额外的钩子文件**(非 `hooks/hooks.json`),可以声明它们。但标准路径 `hooks/hooks.json` **绝不能**被声明。
|
||||
|
||||
---
|
||||
|
||||
@@ -123,16 +160,17 @@ Claude 插件清单校验器**极其严格且具有主观性**。
|
||||
这些看起来正确但会被拒绝:
|
||||
|
||||
* 使用字符串值而非数组
|
||||
* 为 `agents` 提供目录数组
|
||||
* 在 `agents` 中使用目录数组
|
||||
* 缺失 `version`
|
||||
* 依赖推断路径
|
||||
* 假设应用市场的行为与本地校验一致
|
||||
* 假设应用市场行为与本地校验一致
|
||||
* **添加 `"hooks": "./hooks/hooks.json"`** —— 按约定自动加载,会导致重复错误
|
||||
|
||||
不要耍小聪明。请保持显式。
|
||||
不要尝试“取巧”,请保持显式声明。
|
||||
|
||||
---
|
||||
|
||||
## 最小已知有效示例
|
||||
## 最小已知可用示例
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -146,35 +184,37 @@ Claude 插件清单校验器**极其严格且具有主观性**。
|
||||
}
|
||||
```
|
||||
|
||||
该结构已通过 Claude 插件校验器的验证。
|
||||
此结构已通过 Claude 插件校验器的验证。
|
||||
|
||||
**重要提示:** 请注意这里**没有** `"hooks"` 字段。`hooks/hooks.json` 文件会按约定自动加载。显式添加它会导致重复错误。
|
||||
|
||||
---
|
||||
|
||||
## 对贡献者的建议
|
||||
## 贡献者建议
|
||||
|
||||
在提交涉及 `plugin.json` 的更改之前:
|
||||
在提交涉及 `plugin.json` 的更改前:
|
||||
|
||||
1. 为 agents 使用显式文件路径
|
||||
1. 为智能体(Agents)使用显式文件路径
|
||||
2. 确保所有组件字段均为数组
|
||||
3. 包含 `version`
|
||||
4. 运行:
|
||||
3. 包含 `version` 字段
|
||||
4. 运行以下命令:
|
||||
|
||||
```bash
|
||||
claude plugin validate .claude-plugin/plugin.json
|
||||
```
|
||||
|
||||
如有疑问,宁可繁琐也不要追求便利。
|
||||
如有疑问,宁可繁琐也不要为了方便而导致解析失败。
|
||||
|
||||
---
|
||||
|
||||
## 为什么存在此文件
|
||||
|
||||
此仓库被广泛 fork 并用作参考实现。
|
||||
此仓库被广泛 Fork 并作为参考实现。
|
||||
|
||||
在此记录校验器的特性:
|
||||
在此记录校验器的奇特行为(quirks)是为了:
|
||||
|
||||
* 防止重复出现的问题
|
||||
* 减少贡献者的挫败感
|
||||
* 随着生态系统的演进保持插件的稳定性
|
||||
|
||||
如果校验器发生变化,请首先更新本文档。
|
||||
如果校验器规则发生变化,请首先更新此文档。
|
||||
@@ -0,0 +1,5 @@
|
||||
### 插件清单注意事项(Plugin Manifest Gotchas)
|
||||
|
||||
如果你计划编辑 `.claude-plugin/plugin.json`,请注意 Claude 插件验证器(plugin validator)强制执行了一些**未公开但严格的约束**,这些约束可能导致安装失败并显示模糊的错误(例如,`agents: Invalid input`)。特别是,组件字段必须是数组(arrays),`agents` 必须使用明确的文件路径而非目录,且为了实现可靠的验证和安装,必须包含 `version` 字段。
|
||||
|
||||
这些约束在公开示例中并不明显,且在过去曾多次导致安装失败。它们在 `.claude-plugin/PLUGIN_SCHEMA_NOTES.md` 中有详细记录,在对插件清单(plugin manifest)进行任何更改之前,应仔细阅读该文档。
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "everything-claude-code",
|
||||
"version": "1.0.0",
|
||||
"description": "Complete collection of battle-tested Claude Code configs from an Anthropic hackathon winner - agents, skills, hooks, commands, and rules evolved over 10+ months of intensive daily use",
|
||||
"version": "1.2.0",
|
||||
"description": "Complete collection of battle-tested Claude Code configs from an Anthropic hackathon winner - agents, skills, hooks, and rules evolved over 10+ months of intensive daily use",
|
||||
"author": {
|
||||
"name": "Affaan Mustafa",
|
||||
"url": "https://x.com/affaanmustafa"
|
||||
@@ -14,7 +14,6 @@
|
||||
"agents",
|
||||
"skills",
|
||||
"hooks",
|
||||
"commands",
|
||||
"rules",
|
||||
"tdd",
|
||||
"code-review",
|
||||
@@ -23,8 +22,7 @@
|
||||
"automation",
|
||||
"best-practices"
|
||||
],
|
||||
"commands": ["./commands/"],
|
||||
"skills": ["./skills/"],
|
||||
"skills": ["./skills/", "./commands/"],
|
||||
"agents": [
|
||||
"./agents/architect.md",
|
||||
"./agents/build-error-resolver.md",
|
||||
@@ -38,6 +36,5 @@
|
||||
"./agents/refactor-cleaner.md",
|
||||
"./agents/security-reviewer.md",
|
||||
"./agents/tdd-guide.md"
|
||||
],
|
||||
"hooks": "./hooks/hooks.json"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
## Description
|
||||
<!-- Brief description of changes -->
|
||||
|
||||
## Type of Change
|
||||
- [ ] `fix:` Bug fix
|
||||
- [ ] `feat:` New feature
|
||||
- [ ] `refactor:` Code refactoring
|
||||
- [ ] `docs:` Documentation
|
||||
- [ ] `test:` Tests
|
||||
- [ ] `chore:` Maintenance/tooling
|
||||
- [ ] `ci:` CI/CD changes
|
||||
|
||||
## Checklist
|
||||
- [ ] Tests pass locally (`node tests/run-all.js`)
|
||||
- [ ] Validation scripts pass
|
||||
- [ ] Follows conventional commits format
|
||||
- [ ] Updated relevant documentation
|
||||
@@ -0,0 +1,218 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
# Prevent duplicate runs
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
# Minimal permissions
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Test (${{ matrix.os }}, Node ${{ matrix.node }}, ${{ matrix.pm }})
|
||||
runs-on: ${{ matrix.os }}
|
||||
timeout-minutes: 10
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
node: ['18.x', '20.x', '22.x']
|
||||
pm: [npm, pnpm, yarn, bun]
|
||||
exclude:
|
||||
# Bun has limited Windows support
|
||||
- os: windows-latest
|
||||
pm: bun
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js ${{ matrix.node }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
|
||||
# Package manager setup
|
||||
- name: Setup pnpm
|
||||
if: matrix.pm == 'pnpm'
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: latest
|
||||
|
||||
- name: Setup Bun
|
||||
if: matrix.pm == 'bun'
|
||||
uses: oven-sh/setup-bun@v2
|
||||
|
||||
# Cache configuration
|
||||
- name: Get npm cache directory
|
||||
if: matrix.pm == 'npm'
|
||||
id: npm-cache-dir
|
||||
shell: bash
|
||||
run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache npm
|
||||
if: matrix.pm == 'npm'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.npm-cache-dir.outputs.dir }}
|
||||
key: ${{ runner.os }}-node-${{ matrix.node }}-npm-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-${{ matrix.node }}-npm-
|
||||
|
||||
- name: Get pnpm store directory
|
||||
if: matrix.pm == 'pnpm'
|
||||
id: pnpm-cache-dir
|
||||
shell: bash
|
||||
run: echo "dir=$(pnpm store path)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache pnpm
|
||||
if: matrix.pm == 'pnpm'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.pnpm-cache-dir.outputs.dir }}
|
||||
key: ${{ runner.os }}-node-${{ matrix.node }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-${{ matrix.node }}-pnpm-
|
||||
|
||||
- name: Get yarn cache directory
|
||||
if: matrix.pm == 'yarn'
|
||||
id: yarn-cache-dir
|
||||
shell: bash
|
||||
run: |
|
||||
# Try Yarn Berry first, fall back to Yarn v1
|
||||
if yarn config get cacheFolder >/dev/null 2>&1; then
|
||||
echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Cache yarn
|
||||
if: matrix.pm == 'yarn'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir.outputs.dir }}
|
||||
key: ${{ runner.os }}-node-${{ matrix.node }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-${{ matrix.node }}-yarn-
|
||||
|
||||
- name: Cache bun
|
||||
if: matrix.pm == 'bun'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.bun/install/cache
|
||||
key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-bun-
|
||||
|
||||
# Install dependencies
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
case "${{ matrix.pm }}" in
|
||||
npm) npm ci ;;
|
||||
pnpm) pnpm install ;;
|
||||
# --ignore-engines required for Node 18 compat with some devDependencies (e.g., markdownlint-cli)
|
||||
yarn) yarn install --ignore-engines ;;
|
||||
bun) bun install ;;
|
||||
*) echo "Unsupported package manager: ${{ matrix.pm }}" && exit 1 ;;
|
||||
esac
|
||||
|
||||
# Run tests
|
||||
- name: Run tests
|
||||
run: node tests/run-all.js
|
||||
env:
|
||||
CLAUDE_CODE_PACKAGE_MANAGER: ${{ matrix.pm }}
|
||||
|
||||
# Upload test artifacts on failure
|
||||
- name: Upload test artifacts
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: test-results-${{ matrix.os }}-node${{ matrix.node }}-${{ matrix.pm }}
|
||||
path: |
|
||||
tests/
|
||||
!tests/node_modules/
|
||||
|
||||
validate:
|
||||
name: Validate Components
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 5
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20.x'
|
||||
|
||||
- name: Validate agents
|
||||
run: node scripts/ci/validate-agents.js
|
||||
continue-on-error: false
|
||||
|
||||
- name: Validate hooks
|
||||
run: node scripts/ci/validate-hooks.js
|
||||
continue-on-error: false
|
||||
|
||||
- name: Validate commands
|
||||
run: node scripts/ci/validate-commands.js
|
||||
continue-on-error: false
|
||||
|
||||
- name: Validate skills
|
||||
run: node scripts/ci/validate-skills.js
|
||||
continue-on-error: false
|
||||
|
||||
- name: Validate rules
|
||||
run: node scripts/ci/validate-rules.js
|
||||
continue-on-error: false
|
||||
|
||||
security:
|
||||
name: Security Scan
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 5
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20.x'
|
||||
|
||||
- name: Run npm audit
|
||||
run: npm audit --audit-level=high
|
||||
continue-on-error: true # Allows PR to proceed, but marks job as failed if vulnerabilities found
|
||||
|
||||
lint:
|
||||
name: Lint
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 5
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20.x'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Run ESLint
|
||||
run: npx eslint scripts/**/*.js tests/**/*.js
|
||||
|
||||
- name: Run markdownlint
|
||||
run: npx markdownlint "agents/**/*.md" "skills/**/*.md" "commands/**/*.md" "rules/**/*.md"
|
||||
@@ -0,0 +1,51 @@
|
||||
name: Scheduled Maintenance
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 9 * * 1' # Weekly Monday 9am UTC
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
dependency-check:
|
||||
name: Check Dependencies
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20.x'
|
||||
- name: Check for outdated packages
|
||||
run: npm outdated || true
|
||||
|
||||
security-audit:
|
||||
name: Security Audit
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20.x'
|
||||
- name: Run security audit
|
||||
run: |
|
||||
if [ -f package-lock.json ]; then
|
||||
npm ci
|
||||
npm audit --audit-level=high
|
||||
else
|
||||
echo "No package-lock.json found; skipping npm audit"
|
||||
fi
|
||||
|
||||
stale:
|
||||
name: Stale Issues/PRs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
stale-issue-message: 'This issue is stale due to inactivity.'
|
||||
stale-pr-message: 'This PR is stale due to inactivity.'
|
||||
days-before-stale: 30
|
||||
days-before-close: 7
|
||||
@@ -0,0 +1,47 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ['v*']
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Create Release
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Validate version tag
|
||||
run: |
|
||||
if ! [[ "${{ github.ref_name }}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
echo "Invalid version tag format. Expected vX.Y.Z"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Generate changelog
|
||||
id: changelog
|
||||
run: |
|
||||
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
|
||||
if [ -z "$PREV_TAG" ]; then
|
||||
COMMITS=$(git log --pretty=format:"- %s" HEAD)
|
||||
else
|
||||
COMMITS=$(git log --pretty=format:"- %s" ${PREV_TAG}..HEAD)
|
||||
fi
|
||||
echo "commits<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$COMMITS" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
body: |
|
||||
## Changes
|
||||
${{ steps.changelog.outputs.commits }}
|
||||
generate_release_notes: false
|
||||
@@ -0,0 +1,59 @@
|
||||
name: Reusable Release Workflow
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
tag:
|
||||
description: 'Version tag (e.g., v1.0.0)'
|
||||
required: true
|
||||
type: string
|
||||
generate-notes:
|
||||
description: 'Auto-generate release notes'
|
||||
required: false
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Create Release
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Validate version tag
|
||||
run: |
|
||||
if ! [[ "${{ inputs.tag }}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
echo "Invalid version tag format. Expected vX.Y.Z"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Generate changelog
|
||||
id: changelog
|
||||
run: |
|
||||
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
|
||||
if [ -z "$PREV_TAG" ]; then
|
||||
COMMITS=$(git log --pretty=format:"- %s" HEAD)
|
||||
else
|
||||
COMMITS=$(git log --pretty=format:"- %s" ${PREV_TAG}..HEAD)
|
||||
fi
|
||||
# Use unique delimiter to prevent truncation if commit messages contain EOF
|
||||
DELIMITER="COMMITS_END_$(date +%s)"
|
||||
echo "commits<<${DELIMITER}" >> $GITHUB_OUTPUT
|
||||
echo "$COMMITS" >> $GITHUB_OUTPUT
|
||||
echo "${DELIMITER}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ inputs.tag }}
|
||||
body: |
|
||||
## Changes
|
||||
${{ steps.changelog.outputs.commits }}
|
||||
generate_release_notes: ${{ inputs.generate-notes }}
|
||||
@@ -0,0 +1,130 @@
|
||||
name: Reusable Test Workflow
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
os:
|
||||
description: 'Operating system'
|
||||
required: false
|
||||
type: string
|
||||
default: 'ubuntu-latest'
|
||||
node-version:
|
||||
description: 'Node.js version'
|
||||
required: false
|
||||
type: string
|
||||
default: '20.x'
|
||||
package-manager:
|
||||
description: 'Package manager to use'
|
||||
required: false
|
||||
type: string
|
||||
default: 'npm'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Test
|
||||
runs-on: ${{ inputs.os }}
|
||||
timeout-minutes: 10
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ inputs.node-version }}
|
||||
|
||||
- name: Setup pnpm
|
||||
if: inputs.package-manager == 'pnpm'
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: latest
|
||||
|
||||
- name: Setup Bun
|
||||
if: inputs.package-manager == 'bun'
|
||||
uses: oven-sh/setup-bun@v2
|
||||
|
||||
- name: Get npm cache directory
|
||||
if: inputs.package-manager == 'npm'
|
||||
id: npm-cache-dir
|
||||
shell: bash
|
||||
run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache npm
|
||||
if: inputs.package-manager == 'npm'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.npm-cache-dir.outputs.dir }}
|
||||
key: ${{ runner.os }}-node-${{ inputs.node-version }}-npm-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-${{ inputs.node-version }}-npm-
|
||||
|
||||
- name: Get pnpm store directory
|
||||
if: inputs.package-manager == 'pnpm'
|
||||
id: pnpm-cache-dir
|
||||
shell: bash
|
||||
run: echo "dir=$(pnpm store path)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache pnpm
|
||||
if: inputs.package-manager == 'pnpm'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.pnpm-cache-dir.outputs.dir }}
|
||||
key: ${{ runner.os }}-node-${{ inputs.node-version }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-${{ inputs.node-version }}-pnpm-
|
||||
|
||||
- name: Get yarn cache directory
|
||||
if: inputs.package-manager == 'yarn'
|
||||
id: yarn-cache-dir
|
||||
shell: bash
|
||||
run: |
|
||||
# Try Yarn Berry first, fall back to Yarn v1
|
||||
if yarn config get cacheFolder >/dev/null 2>&1; then
|
||||
echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Cache yarn
|
||||
if: inputs.package-manager == 'yarn'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir.outputs.dir }}
|
||||
key: ${{ runner.os }}-node-${{ inputs.node-version }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-${{ inputs.node-version }}-yarn-
|
||||
|
||||
- name: Cache bun
|
||||
if: inputs.package-manager == 'bun'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.bun/install/cache
|
||||
key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-bun-
|
||||
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
case "${{ inputs.package-manager }}" in
|
||||
npm) npm ci ;;
|
||||
pnpm) pnpm install ;;
|
||||
yarn) yarn install --ignore-engines ;;
|
||||
bun) bun install ;;
|
||||
*) echo "Unsupported package manager: ${{ inputs.package-manager }}" && exit 1 ;;
|
||||
esac
|
||||
|
||||
- name: Run tests
|
||||
run: node tests/run-all.js
|
||||
env:
|
||||
CLAUDE_CODE_PACKAGE_MANAGER: ${{ inputs.package-manager }}
|
||||
|
||||
- name: Upload test artifacts
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: test-results-${{ inputs.os }}-node${{ inputs.node-version }}-${{ inputs.package-manager }}
|
||||
path: |
|
||||
tests/
|
||||
!tests/node_modules/
|
||||
@@ -0,0 +1,40 @@
|
||||
name: Reusable Validation Workflow
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
node-version:
|
||||
description: 'Node.js version'
|
||||
required: false
|
||||
type: string
|
||||
default: '20.x'
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
name: Validate Components
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 5
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ inputs.node-version }}
|
||||
|
||||
- name: Validate agents
|
||||
run: node scripts/ci/validate-agents.js
|
||||
|
||||
- name: Validate hooks
|
||||
run: node scripts/ci/validate-hooks.js
|
||||
|
||||
- name: Validate commands
|
||||
run: node scripts/ci/validate-commands.js
|
||||
|
||||
- name: Validate skills
|
||||
run: node scripts/ci/validate-skills.js
|
||||
|
||||
- name: Validate rules
|
||||
run: node scripts/ci/validate-rules.js
|
||||
@@ -27,3 +27,6 @@ private/
|
||||
|
||||
# Session templates (not committed)
|
||||
examples/sessions/*.tmp
|
||||
|
||||
# Local drafts
|
||||
marketing/
|
||||
@@ -1,4 +1,6 @@
|
||||
# Everything Claude Code (Claude Code 全集)
|
||||
**语言:** [English](README.md) | 繁體中文
|
||||
|
||||
# Everything Claude Code
|
||||
|
||||
[](https://github.com/affaan-m/everything-claude-code/stargazers)
|
||||
[](LICENSE)
|
||||
@@ -7,49 +9,54 @@
|
||||

|
||||

|
||||
|
||||
**来自 Anthropic 黑客松获胜者的 Claude Code 配置完整合集。**
|
||||
<p align="left">
|
||||
<a href="README.md">English</a> |
|
||||
<span>简体中文</span>
|
||||
</p>
|
||||
|
||||
包含生产级智能体(Agents)、技能(Skills)、钩子(Hooks)、命令(Commands)、规约(Rules)以及 MCP 配置,这些都是在超过 10 个月的真实产品开发与深度日常使用中演进出来的。
|
||||
**由 Anthropic 黑客松获胜者整理的 Claude Code 配置完整合集。**
|
||||
|
||||
这是在 10 个月以上高强度日常开发真实产品的过程中,不断演进出的生产级智能体(Agents)、技能(Skills)、钩子(Hooks)、命令(Commands)、规则(Rules)以及 MCP 配置。
|
||||
|
||||
---
|
||||
|
||||
## 指南文档
|
||||
## 指南(The Guides)
|
||||
|
||||
本仓库仅包含原始代码。以下指南将解释一切。
|
||||
本仓库仅包含原始代码。以下指南将解释所有细节。
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<a href="https://x.com/affaanmustafa/status/2012378465664745795">
|
||||
<img src="https://github.com/user-attachments/assets/1a471488-59cc-425b-8345-5245c7efbcef" alt="The Shorthand Guide to Everything Claude Code" />
|
||||
<a href="the-shortform-guide_zh.md">
|
||||
<img src="https://github.com/user-attachments/assets/1a471488-59cc-425b-8345-5245c7efbcef" alt="Everything Claude Code 简明指南" />
|
||||
</a>
|
||||
</td>
|
||||
<td width="50%">
|
||||
<a href="https://x.com/affaanmustafa/status/2014040193557471352">
|
||||
<img src="https://github.com/user-attachments/assets/c9ca43bc-b149-427f-b551-af6840c368f0" alt="The Longform Guide to Everything Claude Code" />
|
||||
<a href="the-longform-guide.md">
|
||||
<img src="https://github.com/user-attachments/assets/c9ca43bc-b149-427f-b551-af6840c368f0" alt="Everything Claude Code 深度指南" />
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><b>简明指南 (Shorthand Guide)</b><br/>安装设置、基础概念与哲学。<b>请先阅读此篇。</b></td>
|
||||
<td align="center"><b>深度指南 (Longform Guide)</b><br/>Token 优化、内存持久化、评测(Evals)与并行化。</td>
|
||||
<td align="center"><b>简明指南 (Shorthand Guide)</b><br/>安装、基础、哲学。<b>请先阅读此篇。</b></td>
|
||||
<td align="center"><b>深度指南 (Longform Guide)</b><br/>Token 优化、内存持久化、评测(Evals)、并行化。</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
| 主题 | 你将学到什么 |
|
||||
|-------|-------------------|
|
||||
| Token 优化 | 模型选择、系统提示词瘦身、后台进程 |
|
||||
| 内存持久化 | 自动跨会话保存/加载上下文的钩子(Hooks) |
|
||||
| Token 优化 | 模型选择、系统提示词精简、后台进程 |
|
||||
| 内存持久化 | 跨会话(Session)自动保存/加载上下文的钩子(Hooks) |
|
||||
| 持续学习 | 从会话中自动提取模式并转化为可复用的技能(Skills) |
|
||||
| 验证循环 | 检查点 vs 持续评测、打分器类型、pass@k 指标 |
|
||||
| 并行化 | Git worktrees、级联法(Cascade method)、何时扩展实例 |
|
||||
| 子智能体编排 | 上下文问题、迭代检索模式(Iterative retrieval pattern) |
|
||||
| 验证循环 | 检查点(Checkpoint)与持续评测(Evals)、评分器类型、pass@k 指标 |
|
||||
| 并行化 | Git worktrees、级联方法、何时扩展实例 |
|
||||
| 子智能体编排 | 上下文问题、迭代检索模式 |
|
||||
|
||||
---
|
||||
|
||||
## 跨平台支持
|
||||
|
||||
本插件现已全面支持 **Windows、macOS 和 Linux**。所有钩子和脚本均已使用 Node.js 重写,以实现最大兼容性。
|
||||
该插件现已全面支持 **Windows、macOS 和 Linux**。所有钩子(Hooks)和脚本都已使用 Node.js 重写,以实现最大的兼容性。
|
||||
|
||||
### 包管理器检测
|
||||
|
||||
@@ -58,7 +65,7 @@
|
||||
1. **环境变量**:`CLAUDE_PACKAGE_MANAGER`
|
||||
2. **项目配置**:`.claude/package-manager.json`
|
||||
3. **package.json**:`packageManager` 字段
|
||||
4. **锁文件**:根据 package-lock.json, yarn.lock, pnpm-lock.yaml, 或 bun.lockb 检测
|
||||
4. **锁文件**:根据 package-lock.json, yarn.lock, pnpm-lock.yaml 或 bun.lockb 检测
|
||||
5. **全局配置**:`~/.claude/package-manager.json`
|
||||
6. **备选项**:第一个可用的包管理器
|
||||
|
||||
@@ -82,9 +89,9 @@ node scripts/setup-package-manager.js --detect
|
||||
|
||||
---
|
||||
|
||||
## 核心内容
|
||||
## 包含内容
|
||||
|
||||
本仓库是一个 **Claude Code 插件** —— 你可以直接安装,也可以手动复制组件。
|
||||
本仓库是一个 **Claude Code 插件** —— 你可以直接安装它,或者手动复制组件。
|
||||
|
||||
```
|
||||
everything-claude-code/
|
||||
@@ -92,133 +99,193 @@ everything-claude-code/
|
||||
| |-- plugin.json # 插件元数据与组件路径
|
||||
| |-- marketplace.json # 用于 /plugin marketplace add 的市场目录
|
||||
|
|
||||
|-- agents/ # 用于任务委派的专用子智能体
|
||||
|-- agents/ # 用于任务委派的专用子智能体(Subagents)
|
||||
| |-- planner.md # 功能实现规划
|
||||
| |-- architect.md # 系统设计决策
|
||||
| |-- tdd-guide.md # 测试驱动开发 (TDD)
|
||||
| |-- code-reviewer.md # 质量与安全审查
|
||||
| |-- tdd-guide.md # 测试驱动开发(TDD)
|
||||
| |-- code-reviewer.md # 代码质量与安全评审
|
||||
| |-- security-reviewer.md # 漏洞分析
|
||||
| |-- build-error-resolver.md # 构建错误修复
|
||||
| |-- e2e-runner.md # Playwright E2E 测试
|
||||
| |-- refactor-cleaner.md # 冗余代码清理
|
||||
| |-- build-error-resolver.md # 构建错误解决
|
||||
| |-- e2e-runner.md # Playwright 端到端测试
|
||||
| |-- refactor-cleaner.md # 死代码清理
|
||||
| |-- doc-updater.md # 文档同步
|
||||
| |-- go-reviewer.md # Go 代码审查 (新增)
|
||||
| |-- go-build-resolver.md # Go 构建错误解决 (新增)
|
||||
| |-- go-reviewer.md # Go 代码评审(新增)
|
||||
| |-- go-build-resolver.md # Go 构建错误解决(新增)
|
||||
|
|
||||
|-- skills/ # 工作流定义与领域知识
|
||||
| |-- coding-standards/ # 编程语言最佳实践
|
||||
|-- skills/ # 工作流(Workflow)定义与领域知识
|
||||
| |-- coding-standards/ # 语言最佳实践
|
||||
| |-- backend-patterns/ # API、数据库、缓存模式
|
||||
| |-- frontend-patterns/ # React, Next.js 模式
|
||||
| |-- continuous-learning/ # 从会话中自动提取模式 (深度指南)
|
||||
| |-- continuous-learning-v2/ # 基于本能 (Instinct) 的学习与置信度评分
|
||||
| |-- iterative-retrieval/ # 为子智能体提供渐进式上下文精炼
|
||||
| |-- strategic-compact/ # 手动压缩建议 (深度指南)
|
||||
| |-- frontend-patterns/ # React、Next.js 模式
|
||||
| |-- continuous-learning/ # 从会话中自动提取模式(深度指南内容)
|
||||
| |-- continuous-learning-v2/ # 基于直觉(Instinct)的带置信度评分学习系统
|
||||
| |-- iterative-retrieval/ # 子智能体的渐进式上下文精炼
|
||||
| |-- strategic-compact/ # 手动压缩建议(深度指南内容)
|
||||
| |-- tdd-workflow/ # TDD 方法论
|
||||
| |-- security-review/ # 安全检查清单
|
||||
| |-- eval-harness/ # 验证循环评估 (深度指南)
|
||||
| |-- verification-loop/ # 持续验证 (深度指南)
|
||||
| |-- golang-patterns/ # Go 惯用法与最佳实践 (新增)
|
||||
| |-- golang-testing/ # Go 测试模式、TDD、基准测试 (新增)
|
||||
| |-- security-review/ # 安全自查表
|
||||
| |-- eval-harness/ # 验证循环评测(深度指南内容)
|
||||
| |-- verification-loop/ # 持续验证(深度指南内容)
|
||||
| |-- golang-patterns/ # Go 惯用法与最佳实践(新增)
|
||||
| |-- golang-testing/ # Go 测试模式、TDD、基准测试(新增)
|
||||
|
|
||||
|-- commands/ # 用于快速执行的斜杠命令 (/命令)
|
||||
|-- commands/ # 用于快速执行的斜杠命令(Slash Commands)
|
||||
| |-- tdd.md # /tdd - 测试驱动开发
|
||||
| |-- plan.md # /plan - 实现规划
|
||||
| |-- e2e.md # /e2e - E2E 测试生成
|
||||
| |-- code-review.md # /code-review - 质量审查
|
||||
| |-- e2e.md # /e2e - 端到端测试生成
|
||||
| |-- code-review.md # /code-review - 质量评审
|
||||
| |-- build-fix.md # /build-fix - 修复构建错误
|
||||
| |-- refactor-clean.md # /refactor-clean - 冗余代码移除
|
||||
| |-- learn.md # /learn - 会话中途提取模式 (深度指南)
|
||||
| |-- checkpoint.md # /checkpoint - 保存验证状态 (深度指南)
|
||||
| |-- verify.md # /verify - 运行验证循环 (深度指南)
|
||||
| |-- refactor-clean.md # /refactor-clean - 移除死代码
|
||||
| |-- learn.md # /learn - 会话中途提取模式(深度指南内容)
|
||||
| |-- checkpoint.md # /checkpoint - 保存验证状态(深度指南内容)
|
||||
| |-- verify.md # /verify - 运行验证循环(深度指南内容)
|
||||
| |-- setup-pm.md # /setup-pm - 配置包管理器
|
||||
| |-- go-review.md # /go-review - Go 代码审查 (新增)
|
||||
| |-- go-test.md # /go-test - Go TDD 工作流 (新增)
|
||||
| |-- go-build.md # /go-build - 修复 Go 构建错误 (新增)
|
||||
| |-- go-review.md # /go-review - Go 代码评审(新增)
|
||||
| |-- go-test.md # /go-test - Go TDD 工作流(新增)
|
||||
| |-- go-build.md # /go-build - 修复 Go 构建错误(新增)
|
||||
| |-- skill-create.md # /skill-create - 从 git 历史生成技能(新增)
|
||||
| |-- instinct-status.md # /instinct-status - 查看已学习的直觉(新增)
|
||||
| |-- instinct-import.md # /instinct-import - 导入直觉(新增)
|
||||
| |-- instinct-export.md # /instinct-export - 导出直觉(新增)
|
||||
| |-- evolve.md # /evolve - 将相关直觉聚类为技能(新增)
|
||||
|
|
||||
|-- rules/ # 必须遵守的指南 (复制到 ~/.claude/rules/)
|
||||
|-- rules/ # 必须遵守的准则(复制到 ~/.claude/rules/)
|
||||
| |-- security.md # 强制性安全检查
|
||||
| |-- coding-style.md # 不可变性、文件组织结构
|
||||
| |-- coding-style.md # 不可变性、文件组织
|
||||
| |-- testing.md # TDD、80% 覆盖率要求
|
||||
| |-- git-workflow.md # Commit 格式、PR 流程
|
||||
| |-- git-workflow.md # 提交格式、PR 流程
|
||||
| |-- agents.md # 何时委派给子智能体
|
||||
| |-- performance.md # 模型选择、上下文管理
|
||||
|
|
||||
|-- hooks/ # 基于触发器的自动化
|
||||
| |-- hooks.json # 所有钩子配置 (PreToolUse, PostToolUse, Stop 等)
|
||||
| |-- memory-persistence/ # 会话生命周期钩子 (深度指南)
|
||||
| |-- strategic-compact/ # 压缩建议 (深度指南)
|
||||
| |-- hooks.json # 所有钩子配置(PreToolUse, PostToolUse, Stop 等)
|
||||
| |-- memory-persistence/ # 会话生命周期钩子(深度指南内容)
|
||||
| |-- strategic-compact/ # 压缩建议(深度指南内容)
|
||||
|
|
||||
|-- scripts/ # 跨平台 Node.js 脚本 (新增)
|
||||
|-- scripts/ # 跨平台 Node.js 脚本(新增)
|
||||
| |-- lib/ # 共享实用程序
|
||||
| | |-- utils.js # 跨平台文件/路径/系统工具
|
||||
| | |-- package-manager.js # 包管理器检测与选择
|
||||
| |-- hooks/ # 钩子实现
|
||||
| | |-- session-start.js # 会话启动时加载上下文
|
||||
| | |-- session-start.js # 会话开始时加载上下文
|
||||
| | |-- session-end.js # 会话结束时保存状态
|
||||
| | |-- pre-compact.js # 压缩前的状态保存
|
||||
| | |-- suggest-compact.js # 策略性压缩建议
|
||||
| | |-- pre-compact.js # 压缩前状态保存
|
||||
| | |-- suggest-compact.js # 战略性压缩建议
|
||||
| | |-- evaluate-session.js # 从会话中提取模式
|
||||
| |-- setup-package-manager.js # 交互式包管理器设置
|
||||
|
|
||||
|-- tests/ # 测试套件 (新增)
|
||||
|-- tests/ # 测试套件(新增)
|
||||
| |-- lib/ # 库测试
|
||||
| |-- hooks/ # 钩子测试
|
||||
| |-- run-all.js # 运行所有测试
|
||||
|
|
||||
|-- contexts/ # 动态系统提示词注入上下文 (深度指南)
|
||||
|-- contexts/ # 动态系统提示词注入上下文(深度指南内容)
|
||||
| |-- dev.md # 开发模式上下文
|
||||
| |-- review.md # 代码审查模式上下文
|
||||
| |-- review.md # 代码评审模式上下文
|
||||
| |-- research.md # 研究/探索模式上下文
|
||||
|
|
||||
|-- examples/ # 示例配置与会话
|
||||
|-- examples/ # 配置与会话示例
|
||||
| |-- CLAUDE.md # 项目级配置示例
|
||||
| |-- user-CLAUDE.md # 用户级配置示例
|
||||
|
|
||||
|-- mcp-configs/ # MCP 服务器配置
|
||||
|-- mcp-configs/ # MCP 服务配置
|
||||
| |-- mcp-servers.json # GitHub, Supabase, Vercel, Railway 等
|
||||
|
|
||||
|-- marketplace.json # 自托管市场配置 (用于 /plugin marketplace add)
|
||||
|-- marketplace.json # 自托管市场配置(用于 /plugin marketplace add)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 生态工具
|
||||
|
||||
### ecc.tools - 技能生成器 (Skill Creator)
|
||||
### 技能创建器(Skill Creator)
|
||||
|
||||
自动根据你的仓库生成 Claude Code 技能(Skills)。
|
||||
有两种方法可以从你的仓库生成 Claude Code 技能:
|
||||
|
||||
#### 方案 A:本地分析(内置)
|
||||
|
||||
使用 `/skill-create` 命令进行本地分析,无需外部服务:
|
||||
|
||||
```bash
|
||||
/skill-create # 分析当前仓库
|
||||
/skill-create --instincts # 同时为持续学习(continuous-learning)生成直觉(instincts)
|
||||
```
|
||||
|
||||
该命令会在本地分析你的 git 历史并生成 SKILL.md 文件。
|
||||
|
||||
#### 方案 B:GitHub App(高级)
|
||||
|
||||
适用于高级功能(1万+ commit、自动 PR、团队共享):
|
||||
|
||||
[安装 GitHub App](https://github.com/apps/skill-creator) | [ecc.tools](https://ecc.tools)
|
||||
|
||||
分析你的仓库并创建:
|
||||
- **SKILL.md 文件** - 开箱即用的 Claude Code 技能
|
||||
- **本能 (Instinct) 集合** - 适用于 continuous-learning-v2
|
||||
- **模式提取** - 从你的 commit 历史中学习
|
||||
|
||||
```bash
|
||||
# 安装 GitHub App 后,技能将出现在:
|
||||
~/.claude/skills/generated/
|
||||
# 在任何 issue 下留言:
|
||||
/skill-creator analyze
|
||||
|
||||
# 或者在 push 到默认分支时自动触发
|
||||
```
|
||||
|
||||
与 `continuous-learning-v2` 技能完美配合,实现遗传式的本能学习。
|
||||
两种方案都会创建:
|
||||
- **SKILL.md 文件** - 可直接用于 Claude Code 的技能
|
||||
- **直觉集合(Instinct collections)** - 用于 continuous-learning-v2
|
||||
- **模式提取(Pattern extraction)** - 从你的提交历史中学习
|
||||
|
||||
### 持续学习(Continuous Learning)v2
|
||||
|
||||
基于直觉(instinct)的学习系统会自动学习你的开发模式:
|
||||
|
||||
```bash
|
||||
/instinct-status # 显示带有置信度的已学习直觉
|
||||
/instinct-import <file> # 导入他人的直觉
|
||||
/instinct-export # 导出你的直觉以便分享
|
||||
/evolve # 将相关的直觉聚类为技能(skills)
|
||||
```
|
||||
|
||||
详见 `skills/continuous-learning-v2/` 的完整文档。
|
||||
|
||||
---
|
||||
|
||||
## 安装方法
|
||||
## 要求
|
||||
|
||||
### Claude Code CLI 版本
|
||||
|
||||
**最低版本:v2.1.0 或更高**
|
||||
|
||||
由于插件系统处理钩子(hooks)方式的变更,本插件要求 Claude Code CLI v2.1.0+。
|
||||
|
||||
检查你的版本:
|
||||
```bash
|
||||
claude --version
|
||||
```
|
||||
|
||||
### 重要:钩子(Hooks)自动加载行为
|
||||
|
||||
> ⚠️ **对贡献者的提醒:** 请勿在 `.claude-plugin/plugin.json` 中添加 `"hooks"` 字段。这是由回归测试强制执行的。
|
||||
|
||||
Claude Code v2.1+ 会**自动加载**已安装插件中约定的 `hooks/hooks.json`。在 `plugin.json` 中显式声明会导致重复检测错误:
|
||||
|
||||
```
|
||||
Duplicate hooks file detected: ./hooks/hooks.json resolves to already-loaded file
|
||||
```
|
||||
|
||||
**历史背景:** 此问题在本仓库中曾多次出现修复/回退循环([#29](https://github.com/affaan-m/everything-claude-code/issues/29), [#52](https://github.com/affaan-m/everything-claude-code/issues/52), [#103](https://github.com/affaan-m/everything-claude-code/issues/103))。Claude Code 版本间的行为差异导致了混淆。我们现在已加入回归测试以防止此类问题再次发生。
|
||||
|
||||
---
|
||||
|
||||
## 安装
|
||||
|
||||
### 方案 1:作为插件安装(推荐)
|
||||
|
||||
使用本仓库最简单的方法 —— 作为 Claude Code 插件安装:
|
||||
这是使用本仓库最简单的方法 —— 作为 Claude Code 插件安装:
|
||||
|
||||
```bash
|
||||
# 将此仓库添加为市场
|
||||
# 将此仓库添加为市场(marketplace)
|
||||
/plugin marketplace add affaan-m/everything-claude-code
|
||||
|
||||
# 安装插件
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
```
|
||||
|
||||
或者直接添加到你的 `~/.claude/settings.json` 中:
|
||||
或者直接添加到你的 `~/.claude/settings.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -236,18 +303,18 @@ everything-claude-code/
|
||||
}
|
||||
```
|
||||
|
||||
安装后你即可立即使用所有命令、智能体、技能和钩子。
|
||||
安装后即可立即使用所有命令(commands)、智能体(agents)、技能(skills)和钩子(hooks)。
|
||||
|
||||
> **注意:** Claude Code 插件系统目前不支持通过插件分发 `rules`([上游限制](https://code.claude.com/docs/en/plugins-reference))。你需要手动安装规约(Rules):
|
||||
>
|
||||
> **注意:** Claude Code 插件系统目前不支持通过插件分发规则(`rules`)(这是 [上游限制](https://code.claude.com/docs/en/plugins-reference))。你需要手动安装规则:
|
||||
>
|
||||
> ```bash
|
||||
> # 先克隆仓库
|
||||
> # 首先克隆仓库
|
||||
> git clone https://github.com/affaan-m/everything-claude-code.git
|
||||
>
|
||||
> # 选项 A:用户级规约 (适用于所有项目)
|
||||
>
|
||||
> # 方案 A:用户级规则(应用于所有项目)
|
||||
> cp -r everything-claude-code/rules/* ~/.claude/rules/
|
||||
>
|
||||
> # 选项 B:项目级规约 (仅适用于当前项目)
|
||||
>
|
||||
> # 方案 B:项目级规则(仅应用于当前项目)
|
||||
> mkdir -p .claude/rules
|
||||
> cp -r everything-claude-code/rules/* .claude/rules/
|
||||
> ```
|
||||
@@ -256,85 +323,85 @@ everything-claude-code/
|
||||
|
||||
### 方案 2:手动安装
|
||||
|
||||
如果你更喜欢手动控制安装内容:
|
||||
如果你更倾向于手动控制安装的内容:
|
||||
|
||||
```bash
|
||||
# 克隆仓库
|
||||
git clone https://github.com/affaan-m/everything-claude-code.git
|
||||
|
||||
# 将智能体复制到你的 Claude 配置目录
|
||||
# 复制智能体(agents)到你的 Claude 配置目录
|
||||
cp everything-claude-code/agents/*.md ~/.claude/agents/
|
||||
|
||||
# 复制规约 (Rules)
|
||||
# 复制规则(rules)
|
||||
cp everything-claude-code/rules/*.md ~/.claude/rules/
|
||||
|
||||
# 复制命令 (Commands)
|
||||
# 复制命令(commands)
|
||||
cp everything-claude-code/commands/*.md ~/.claude/commands/
|
||||
|
||||
# 复制技能 (Skills)
|
||||
# 复制技能(skills)
|
||||
cp -r everything-claude-code/skills/* ~/.claude/skills/
|
||||
```
|
||||
|
||||
#### 将钩子 (Hooks) 添加到 settings.json
|
||||
#### 将钩子(hooks)添加到 settings.json
|
||||
|
||||
将 `hooks/hooks.json` 中的钩子配置复制到你的 `~/.claude/settings.json`。
|
||||
将 `hooks/hooks.json` 中的钩子配置复制到你的 `~/.claude/settings.json` 中。
|
||||
|
||||
#### 配置 MCP
|
||||
#### 配置 MCPs
|
||||
|
||||
将 `mcp-configs/mcp-servers.json` 中需要的 MCP 服务器配置复制到你的 `~/.claude.json`。
|
||||
将 `mcp-configs/mcp-servers.json` 中你需要的 MCP 服务配置复制到你的 `~/.claude.json`。
|
||||
|
||||
**重要:** 请将 `YOUR_*_HERE` 占位符替换为你实际的 API 密钥。
|
||||
**重要:** 请将 `YOUR_*_HERE` 占位符替换为你真实的 API 密钥。
|
||||
|
||||
---
|
||||
|
||||
## 核心概念
|
||||
|
||||
### 智能体 (Agents)
|
||||
### 智能体(Agents)
|
||||
|
||||
子智能体负责处理具有特定范围的委派任务。示例:
|
||||
子智能体(Subagents)负责处理受限范围内的委派任务。示例:
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: code-reviewer
|
||||
description: 审查代码的质量、安全性与可维护性
|
||||
description: 评审代码质量、安全性与可维护性
|
||||
tools: ["Read", "Grep", "Glob", "Bash"]
|
||||
model: opus
|
||||
---
|
||||
|
||||
你是一个资深代码审查员...
|
||||
你是一名资深代码评审员...
|
||||
```
|
||||
|
||||
### 技能 (Skills)
|
||||
### 技能(Skills)
|
||||
|
||||
技能是由命令或智能体调用的工作流定义:
|
||||
技能(Skills)是可由命令或智能体调用的工作流定义:
|
||||
|
||||
```markdown
|
||||
# TDD 工作流
|
||||
|
||||
1. 首先定义接口
|
||||
2. 编写失败的测试 (RED)
|
||||
3. 实现最简代码 (GREEN)
|
||||
4. 重构 (IMPROVE)
|
||||
5. 验证 80% 以上的覆盖率
|
||||
2. 编写失败的测试(RED)
|
||||
3. 实现最简代码(GREEN)
|
||||
4. 重构(IMPROVE)
|
||||
5. 验证覆盖率是否达到 80% 以上
|
||||
```
|
||||
|
||||
### 钩子 (Hooks)
|
||||
### 钩子(Hooks)
|
||||
|
||||
钩子在工具事件上触发。示例 —— 警告关于 console.log 的使用:
|
||||
钩子(Hooks)在工具事件发生时触发。示例 —— 针对 console.log 发出警告:
|
||||
|
||||
```json
|
||||
{
|
||||
"matcher": "tool == \"Edit\" && tool_input.file_path matches \"\\.(ts|tsx|js|jsx)$\"",
|
||||
"hooks": [{
|
||||
"type": "command",
|
||||
"command": "#!/bin/bash\ngrep -n 'console\.log' \"$file_path\" && echo '[Hook] 移除 console.log' >&2"
|
||||
"command": "#!/bin/bash\ngrep -n 'console\\.log' \"$file_path\" && echo '[Hook] Remove console.log' >&2"
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
### 规约 (Rules)
|
||||
### 规则(Rules)
|
||||
|
||||
规约是必须始终遵循的指南。保持模块化:
|
||||
规则(Rules)是必须始终遵守的准则。请保持它们的模块化:
|
||||
|
||||
```
|
||||
~/.claude/rules/
|
||||
@@ -347,7 +414,7 @@ model: opus
|
||||
|
||||
## 运行测试
|
||||
|
||||
本插件包含完整的测试套件:
|
||||
本插件包含一个全面的测试套件:
|
||||
|
||||
```bash
|
||||
# 运行所有测试
|
||||
@@ -361,56 +428,56 @@ node tests/hooks/hooks.test.js
|
||||
|
||||
---
|
||||
|
||||
## 贡献指南
|
||||
## 贡献
|
||||
|
||||
**欢迎并鼓励大家做出贡献。**
|
||||
**非常欢迎并鼓励贡献。**
|
||||
|
||||
本仓库旨在作为一个社区资源。如果你有:
|
||||
本仓库旨在成为一个社区资源。如果你有:
|
||||
- 有用的智能体或技能
|
||||
- 巧妙的钩子
|
||||
- 更好的 MCP 配置
|
||||
- 改进后的规约
|
||||
- 改进后的规则
|
||||
|
||||
请提交贡献!参见 [CONTRIBUTING.md](CONTRIBUTING.md) 获取指南。
|
||||
请提交你的贡献!参考 [CONTRIBUTING.md](CONTRIBUTING.md) 了解指南。
|
||||
|
||||
### 贡献思路
|
||||
|
||||
- 特定语言的技能 (Python, Rust 模式) —— Go 已包含!
|
||||
- 特定框架的配置 (Django, Rails, Laravel)
|
||||
- DevOps 智能体 (Kubernetes, Terraform, AWS)
|
||||
- 测试策略 (针对不同框架)
|
||||
- 领域特定知识 (机器学习, 数据工程, 移动端)
|
||||
- 语言专用技能(Python, Rust 模式)—— 已包含 Go!
|
||||
- 框架专用配置(Django, Rails, Laravel)
|
||||
- DevOps 智能体(Kubernetes, Terraform, AWS)
|
||||
- 测试策略(不同框架)
|
||||
- 领域特定知识(机器学习、数据工程、移动开发)
|
||||
|
||||
---
|
||||
|
||||
## 背景故事
|
||||
## 背景
|
||||
|
||||
自实验性推出以来,我一直在使用 Claude Code。在 2025 年 9 月的 Anthropic x Forum Ventures 黑客松中,我与 [@DRodriguezFX](https://x.com/DRodriguezFX) 合作构建了 [zenith.chat](https://zenith.chat),并最终获胜 —— 整个过程完全使用了 Claude Code。
|
||||
我从 Claude Code 实验阶段就开始使用了。在 2025 年 9 月的 Anthropic x Forum Ventures 黑客松中,我与 [@DRodriguezFX](https://x.com/DRodriguezFX) 合作开发了 [zenith.chat](https://zenith.chat),并获得了冠军 —— 该项目完全使用 Claude Code 构建。
|
||||
|
||||
这些配置在多个生产级应用中经过了实战测试。
|
||||
这些配置在多个生产级应用中经过了实战检验。
|
||||
|
||||
---
|
||||
|
||||
## 重要注意事项
|
||||
## 重要提示
|
||||
|
||||
### 上下文窗口管理
|
||||
|
||||
**关键:** 不要一次性启用所有 MCP。开启过多工具会将你 200k 的上下文窗口压缩到 70k。
|
||||
**至关重要:** 不要一次性启用所有 MCP。如果启用的工具过多,你的 200k 上下文窗口可能会缩减到 70k。
|
||||
|
||||
经验法则:
|
||||
- 配置 20-30 个 MCP
|
||||
- 每个项目保持启用 10 个以下
|
||||
- 活跃工具总数保持在 80 个以下
|
||||
- 每个项目保持启用 10 个以内
|
||||
- 活跃工具总数控制在 80 个以内
|
||||
|
||||
在项目配置中使用 `disabledMcpServers` 来禁用不常用的服务器。
|
||||
在项目配置中使用 `disabledMcpServers` 来禁用不需要的服务。
|
||||
|
||||
### 自定义
|
||||
|
||||
这些配置适合我的工作流。你应该:
|
||||
1. 从产生共鸣的内容开始
|
||||
这些配置适用于我的工作流。你应该:
|
||||
1. 从你产生共鸣的内容开始
|
||||
2. 根据你的技术栈进行修改
|
||||
3. 移除你不使用的部分
|
||||
4. 添加你自己的模式
|
||||
3. 移除你不需要的内容
|
||||
4. 加入你自己的模式
|
||||
|
||||
---
|
||||
|
||||
@@ -422,17 +489,17 @@ node tests/hooks/hooks.test.js
|
||||
|
||||
## 相关链接
|
||||
|
||||
- **简明指南 (从这里开始):** [The Shorthand Guide to Everything Claude Code](https://x.com/affaanmustafa/status/2012378465664745795)
|
||||
- **深度指南 (进阶):** [The Longform Guide to Everything Claude Code](https://x.com/affaanmustafa/status/2014040193557471352)
|
||||
- **关注:** [@affaanmustafa](https://x.com/affaanmustafa)
|
||||
- **zenith.chat:** [zenith.chat](https://zenith.chat)
|
||||
- **简明指南(入门必读):** [Everything Claude Code 简明指南](https://x.com/affaanmustafa/status/2012378465664745795)
|
||||
- **深度指南(进阶参考):** [Everything Claude Code 深度指南](https://x.com/affaanmustafa/status/2014040193557471352)
|
||||
- **关注我:** [@affaanmustafa](https://x.com/affaanmustafa)
|
||||
- **zenith.chat:** [zenith.chat](https://zenith.chat)
|
||||
|
||||
---
|
||||
|
||||
## 许可证
|
||||
|
||||
MIT - 自由使用,根据需要修改,如果可以请回馈社区。
|
||||
MIT - 自由使用,按需修改,如果可以请回馈社区。
|
||||
|
||||
---
|
||||
|
||||
**如果对你有帮助,请给本仓库点个 Star。阅读两篇指南。构建伟大的产品。**
|
||||
**如果对你有帮助,请给本仓库点个 Star。阅读两份指南。构建伟大的产品。**
|
||||
+171
-171
@@ -1,31 +1,31 @@
|
||||
---
|
||||
name: database-reviewer
|
||||
description: PostgreSQL 数据库专家,专注于查询优化、模式设计、安全性和性能。在编写 SQL、创建迁移(migrations)、设计模式(schemas)或排除数据库性能故障时应主动使用。整合了 Supabase 的最佳实践。
|
||||
description: PostgreSQL 数据库专家,专注于查询优化、模式设计、安全性和性能。在编写 SQL、创建迁移、设计模式或排查数据库性能问题时主动使用。包含 Supabase 最佳实践。
|
||||
tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob"]
|
||||
model: opus
|
||||
---
|
||||
|
||||
# 数据库审查员 (Database Reviewer)
|
||||
# 数据库评审专家 (Database Reviewer)
|
||||
|
||||
你是一名资深的 PostgreSQL 数据库专家,专注于查询优化、模式设计(Schema Design)、安全性以及性能表现。你的使命是确保数据库代码遵循最佳实践、预防性能瓶颈并维护数据完整性。本智能体(Agent)整合了来自 [Supabase's postgres-best-practices](https://github.com/supabase/agent-skills) 的模式。
|
||||
你是一名专家级 PostgreSQL 数据库专家,专注于查询优化(Query Optimization)、模式设计(Schema Design)、安全性(Security)和性能(Performance)。你的使命是确保数据库代码遵循最佳实践,防止性能问题,并维护数据完整性。该智能体集成了来自 [Supabase's postgres-best-practices](https://github.com/supabase/agent-skills) 的模式。
|
||||
|
||||
## 核心职责
|
||||
## 核心职责 (Core Responsibilities)
|
||||
|
||||
1. **查询性能 (Query Performance)** - 优化查询,添加合适的索引,防止全表扫描。
|
||||
2. **模式设计 (Schema Design)** - 设计高效的模式,使用正确的数据类型和约束。
|
||||
3. **安全性与 RLS (Security & RLS)** - 实施行级安全性(Row Level Security),遵循最小权限访问原则。
|
||||
4. **连接管理 (Connection Management)** - 配置连接池、超时和限制。
|
||||
5. **并发控制 (Concurrency)** - 预防死锁,优化锁定策略。
|
||||
1. **查询性能 (Query Performance)** - 优化查询,添加合适的索引,防止全表扫描(Table Scans)。
|
||||
2. **模式设计 (Schema Design)** - 使用正确的数据类型和约束设计高效的模式。
|
||||
3. **安全性与 RLS (Security & RLS)** - 实现行级安全性(Row Level Security, RLS),遵循最小权限原则。
|
||||
4. **连接管理 (Connection Management)** - 配置连接池(Pooling)、超时、限制。
|
||||
5. **并发 (Concurrency)** - 防止死锁(Deadlocks),优化锁策略。
|
||||
6. **监控 (Monitoring)** - 设置查询分析和性能跟踪。
|
||||
|
||||
## 可用工具
|
||||
## 你可以使用的工具 (Tools at Your Disposal)
|
||||
|
||||
### 数据库分析命令
|
||||
```bash
|
||||
# 连接到数据库
|
||||
psql $DATABASE_URL
|
||||
|
||||
# 检查慢查询 (需要 pg_stat_statements 扩展)
|
||||
# 检查慢查询(需要 pg_stat_statements)
|
||||
psql -c "SELECT query, mean_exec_time, calls FROM pg_stat_statements ORDER BY mean_exec_time DESC LIMIT 10;"
|
||||
|
||||
# 检查表大小
|
||||
@@ -37,26 +37,26 @@ psql -c "SELECT indexrelname, idx_scan, idx_tup_read FROM pg_stat_user_indexes O
|
||||
# 查找外键上缺失的索引
|
||||
psql -c "SELECT conrelid::regclass, a.attname FROM pg_constraint c JOIN pg_attribute a ON a.attrelid = c.conrelid AND a.attnum = ANY(c.conkey) WHERE c.contype = 'f' AND NOT EXISTS (SELECT 1 FROM pg_index i WHERE i.indrelid = c.conrelid AND a.attnum = ANY(i.indkey));"
|
||||
|
||||
# 检查表膨胀情况
|
||||
# 检查表膨胀(Table Bloat)
|
||||
psql -c "SELECT relname, n_dead_tup, last_vacuum, last_autovacuum FROM pg_stat_user_tables WHERE n_dead_tup > 1000 ORDER BY n_dead_tup DESC;"
|
||||
```
|
||||
|
||||
## 数据库审查工作流
|
||||
## 数据库评审工作流 (Database Review Workflow)
|
||||
|
||||
### 1. 查询性能审查 (关键)
|
||||
### 1. 查询性能评审 (CRITICAL)
|
||||
|
||||
针对每一个 SQL 查询,请验证:
|
||||
对于每一个 SQL 查询,验证:
|
||||
|
||||
```
|
||||
a) 索引使用情况
|
||||
- WHERE 子句涉及的列是否已建索引?
|
||||
- JOIN 子句涉及的列是否已建索引?
|
||||
- 索引类型是否合适 (B-tree, GIN, BRIN)?
|
||||
a) 索引使用 (Index Usage)
|
||||
- WHERE 列是否已索引?
|
||||
- JOIN 列是否已索引?
|
||||
- 索引类型是否合适(B-tree, GIN, BRIN)?
|
||||
|
||||
b) 查询计划分析
|
||||
b) 查询计划分析 (Query Plan Analysis)
|
||||
- 对复杂查询运行 EXPLAIN ANALYZE
|
||||
- 检查大表是否存在全表扫描 (Seq Scan)
|
||||
- 验证估算行数是否与实际匹配
|
||||
- 检查大表是否存在顺序扫描(Seq Scans)
|
||||
- 验证预估行数是否与实际匹配
|
||||
|
||||
c) 常见问题
|
||||
- N+1 查询模式
|
||||
@@ -64,43 +64,43 @@ c) 常见问题
|
||||
- 索引中的列顺序错误
|
||||
```
|
||||
|
||||
### 2. 模式设计审查 (高优先级)
|
||||
### 2. 模式设计评审 (HIGH)
|
||||
|
||||
```
|
||||
a) 数据类型
|
||||
- ID 使用 bigint (而非 int)
|
||||
- 字符串使用 text (除非需要特定约束,否则不用 varchar(n))
|
||||
- 时间戳使用 timestamptz (而非 timestamp)
|
||||
- 货币使用 numeric (而非 float)
|
||||
- 标志位使用 boolean (而非 varchar)
|
||||
a) 数据类型 (Data Types)
|
||||
- ID 使用 bigint(不要用 int)
|
||||
- 字符串使用 text(不要用 varchar(n),除非需要约束)
|
||||
- 时间戳使用 timestamptz(不要用 timestamp)
|
||||
- 金额使用 numeric(不要用 float)
|
||||
- 标志位使用 boolean(不要用 varchar)
|
||||
|
||||
b) 约束
|
||||
- 已定义主键 (Primary keys)
|
||||
- 外键具有合适的 ON DELETE 策略
|
||||
b) 约束 (Constraints)
|
||||
- 定义主键(Primary keys)
|
||||
- 带有正确 ON DELETE 的外键(Foreign keys)
|
||||
- 在适当的地方使用 NOT NULL
|
||||
- 使用 CHECK 约束进行数据校验
|
||||
- 用于验证的 CHECK 约束
|
||||
|
||||
c) 命名规范
|
||||
- 使用 lowercase_snake_case (避免使用引号引起来的标识符)
|
||||
- 保持一致的命名模式
|
||||
c) 命名 (Naming)
|
||||
- 使用 lowercase_snake_case(避免使用带引号的标识符)
|
||||
- 命名模式保持一致
|
||||
```
|
||||
|
||||
### 3. 安全性审查 (关键)
|
||||
### 3. 安全评审 (CRITICAL)
|
||||
|
||||
```
|
||||
a) 行级安全性 (Row Level Security / RLS)
|
||||
a) 行级安全性 (Row Level Security)
|
||||
- 多租户表是否启用了 RLS?
|
||||
- 策略(Policies)是否使用了 (select auth.uid()) 模式?
|
||||
- RLS 涉及的列是否已建索引?
|
||||
- 策略是否使用 (select auth.uid()) 模式?
|
||||
- RLS 列是否已索引?
|
||||
|
||||
b) 权限管理
|
||||
b) 权限 (Permissions)
|
||||
- 是否遵循最小权限原则?
|
||||
- 是否没有向应用用户授予 GRANT ALL 权限?
|
||||
- 是否撤销了 public 模式的权限?
|
||||
- 是否向应用用户授予了 GRANT ALL?
|
||||
- 公共模式(Public schema)权限是否已撤销?
|
||||
|
||||
c) 数据保护
|
||||
- 敏感数据是否加密?
|
||||
- 个人可识别信息 (PII) 的访问是否已记录日志?
|
||||
- 敏感数据是否已加密?
|
||||
- PII(个人身份信息)访问是否记录日志?
|
||||
```
|
||||
|
||||
---
|
||||
@@ -112,14 +112,14 @@ c) 数据保护
|
||||
**影响:** 在大表上可使查询速度提升 100-1000 倍。
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:外键上没有索引
|
||||
-- ❌ 错误:外键上没有索引
|
||||
CREATE TABLE orders (
|
||||
id bigint PRIMARY KEY,
|
||||
customer_id bigint REFERENCES customers(id)
|
||||
-- 缺失索引!
|
||||
-- 缺少索引!
|
||||
);
|
||||
|
||||
-- ✅ 正确示例:在外键上建立索引
|
||||
-- ✅ 正确:外键上有索引
|
||||
CREATE TABLE orders (
|
||||
id bigint PRIMARY KEY,
|
||||
customer_id bigint REFERENCES customers(id)
|
||||
@@ -129,19 +129,19 @@ CREATE INDEX orders_customer_id_idx ON orders (customer_id);
|
||||
|
||||
### 2. 选择正确的索引类型
|
||||
|
||||
| 索引类型 | 使用场景 | 运算符 |
|
||||
| 索引类型 | 场景 | 运算符 |
|
||||
|------------|----------|-----------|
|
||||
| **B-tree** (默认) | 等值、范围查询 | `=`, `<`, `>`, `BETWEEN`, `IN` |
|
||||
| **GIN** | 数组、JSONB、全文检索 | `@>`, `?`, `?&`, `?|`, `@@` |
|
||||
| **BRIN** | 大型时间序列数据表 | 对有序数据的范围查询 |
|
||||
| **Hash** | 仅等值查询 | `=` (略快于 B-tree) |
|
||||
| **B-tree** (默认) | 等值、范围 | `=`, `<`, `>`, `BETWEEN`, `IN` |
|
||||
| **GIN** | 数组、JSONB、全文检索 | `@>`, `?`, `?&`, `?\|`, `@@` |
|
||||
| **BRIN** | 大型时序表 | 排序数据上的范围查询 |
|
||||
| **Hash** | 仅等值 | `=` (略快于 B-tree) |
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:对 JSONB 包含关系使用 B-tree
|
||||
-- ❌ 错误:在 JSONB 包含查询中使用 B-tree
|
||||
CREATE INDEX products_attrs_idx ON products (attributes);
|
||||
SELECT * FROM products WHERE attributes @> '{"color": "red"}';
|
||||
|
||||
-- ✅ 正确示例:对 JSONB 使用 GIN
|
||||
-- ✅ 正确:对 JSONB 使用 GIN
|
||||
CREATE INDEX products_attrs_idx ON products USING gin (attributes);
|
||||
```
|
||||
|
||||
@@ -150,48 +150,48 @@ CREATE INDEX products_attrs_idx ON products USING gin (attributes);
|
||||
**影响:** 多列查询速度提升 5-10 倍。
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:分开建立索引
|
||||
-- ❌ 错误:单独的索引
|
||||
CREATE INDEX orders_status_idx ON orders (status);
|
||||
CREATE INDEX orders_created_idx ON orders (created_at);
|
||||
|
||||
-- ✅ 正确示例:复合索引 (等值列在前,范围列在后)
|
||||
-- ✅ 正确:复合索引(等值列在前,范围列在后)
|
||||
CREATE INDEX orders_status_created_idx ON orders (status, created_at);
|
||||
```
|
||||
|
||||
**左前缀规则 (Leftmost Prefix Rule):**
|
||||
**最左前缀原则 (Leftmost Prefix Rule):**
|
||||
- 索引 `(status, created_at)` 适用于:
|
||||
- `WHERE status = 'pending'`
|
||||
- `WHERE status = 'pending' AND created_at > '2024-01-01'`
|
||||
- **不适用于:**
|
||||
- **不适用于**:
|
||||
- 单独的 `WHERE created_at > '2024-01-01'`
|
||||
|
||||
### 4. 覆盖索引 (Covering Indexes / Index-Only Scans)
|
||||
|
||||
**影响:** 通过避免表查找,使查询速度提升 2-5 倍。
|
||||
**影响:** 通过避免回表查询,速度提升 2-5 倍。
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:必须从表中获取 name 字段
|
||||
-- ❌ 错误:必须从表中获取 name
|
||||
CREATE INDEX users_email_idx ON users (email);
|
||||
SELECT email, name FROM users WHERE email = 'user@example.com';
|
||||
|
||||
-- ✅ 正确示例:索引包含所有需要的列
|
||||
-- ✅ 正确:索引中包含所有列
|
||||
CREATE INDEX users_email_idx ON users (email) INCLUDE (name, created_at);
|
||||
```
|
||||
|
||||
### 5. 过滤查询的部分索引 (Partial Indexes)
|
||||
|
||||
**影响:** 索引体积缩小 5-20 倍,写入和查询速度更快。
|
||||
**影响:** 索引减小 5-20 倍,写入和查询速度更快。
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:全量索引包含已删除的行
|
||||
-- ❌ 错误:全量索引包含已删除的行
|
||||
CREATE INDEX users_email_idx ON users (email);
|
||||
|
||||
-- ✅ 正确示例:部分索引排除已删除的行
|
||||
-- ✅ 正确:部分索引排除已删除的行
|
||||
CREATE INDEX users_active_email_idx ON users (email) WHERE deleted_at IS NULL;
|
||||
```
|
||||
|
||||
**常见模式:**
|
||||
- 逻辑删除:`WHERE deleted_at IS NULL`
|
||||
- 软删除:`WHERE deleted_at IS NULL`
|
||||
- 状态过滤:`WHERE status = 'pending'`
|
||||
- 非空值:`WHERE sku IS NOT NULL`
|
||||
|
||||
@@ -202,16 +202,16 @@ CREATE INDEX users_active_email_idx ON users (email) WHERE deleted_at IS NULL;
|
||||
### 1. 数据类型选择
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:糟糕的类型选择
|
||||
-- ❌ 错误:糟糕的类型选择
|
||||
CREATE TABLE users (
|
||||
id int, -- 超过 21 亿时会溢出
|
||||
email varchar(255), -- 人为设置的限制
|
||||
created_at timestamp, -- 没有时区信息
|
||||
id int, -- 在 21 亿时溢出
|
||||
email varchar(255), -- 人为限制长度
|
||||
created_at timestamp, -- 无时区
|
||||
is_active varchar(5), -- 应该是 boolean
|
||||
balance float -- 会导致精度丢失
|
||||
balance float -- 精度丢失
|
||||
);
|
||||
|
||||
-- ✅ 正确示例:合适的类型
|
||||
-- ✅ 正确:合适的类型
|
||||
CREATE TABLE users (
|
||||
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||
email text NOT NULL,
|
||||
@@ -221,32 +221,32 @@ CREATE TABLE users (
|
||||
);
|
||||
```
|
||||
|
||||
### 2. 主键策略
|
||||
### 2. 主键策略 (Primary Key Strategy)
|
||||
|
||||
```sql
|
||||
-- ✅ 单数据库环境:IDENTITY (默认,推荐)
|
||||
-- ✅ 单数据库:IDENTITY(默认,推荐)
|
||||
CREATE TABLE users (
|
||||
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY
|
||||
);
|
||||
|
||||
-- ✅ 分布式系统:UUIDv7 (按时间排序)
|
||||
-- ✅ 分布式系统:UUIDv7(按时间排序)
|
||||
CREATE EXTENSION IF NOT EXISTS pg_uuidv7;
|
||||
CREATE TABLE orders (
|
||||
id uuid DEFAULT uuid_generate_v7() PRIMARY KEY
|
||||
);
|
||||
|
||||
-- ❌ 避免使用:随机 UUID 会导致索引碎片
|
||||
-- ❌ 避免:随机 UUID 会导致索引碎片(Index Fragmentation)
|
||||
CREATE TABLE events (
|
||||
id uuid DEFAULT gen_random_uuid() PRIMARY KEY -- 会导致插入时的索引碎片!
|
||||
id uuid DEFAULT gen_random_uuid() PRIMARY KEY -- 会导致插入碎片化!
|
||||
);
|
||||
```
|
||||
|
||||
### 3. 表分区 (Table Partitioning)
|
||||
|
||||
**适用场景:** 数据表超过 1 亿行、时间序列数据、需要定期删除旧数据。
|
||||
**适用场景:** 表数据量 > 1 亿行,时序数据,需要删除旧数据。
|
||||
|
||||
```sql
|
||||
-- ✅ 正确示例:按月分区
|
||||
-- ✅ 正确:按月分区
|
||||
CREATE TABLE events (
|
||||
id bigint GENERATED ALWAYS AS IDENTITY,
|
||||
created_at timestamptz NOT NULL,
|
||||
@@ -260,35 +260,35 @@ CREATE TABLE events_2024_02 PARTITION OF events
|
||||
FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');
|
||||
|
||||
-- 瞬间删除旧数据
|
||||
DROP TABLE events_2023_01; -- 瞬间完成,对比 DELETE 可能需要数小时
|
||||
DROP TABLE events_2023_01; -- 瞬间完成,而 DELETE 可能需要数小时
|
||||
```
|
||||
|
||||
### 4. 使用小写标识符
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:双引号引起来的混合大小写标识符在任何地方都需要加引号
|
||||
-- ❌ 错误:带引号的混合大小写要求到处都要加引号
|
||||
CREATE TABLE "Users" ("userId" bigint, "firstName" text);
|
||||
SELECT "firstName" FROM "Users"; -- 必须加引号!
|
||||
|
||||
-- ✅ 正确示例:小写标识符不需要加引号即可工作
|
||||
-- ✅ 正确:小写不需要引号
|
||||
CREATE TABLE users (user_id bigint, first_name text);
|
||||
SELECT first_name FROM users;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 安全性与行级安全性 (RLS)
|
||||
## 安全与行级安全性 (RLS)
|
||||
|
||||
### 1. 为多租户数据启用 RLS
|
||||
|
||||
**影响:** 关键级别 - 数据库强制执行的租户隔离。
|
||||
**影响:** 关键(CRITICAL)- 数据库层面强制执行的租户隔离。
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:仅靠应用程序过滤
|
||||
-- ❌ 错误:仅靠应用层过滤
|
||||
SELECT * FROM orders WHERE user_id = $current_user_id;
|
||||
-- 一旦出现 Bug 意味着所有订单都会暴露!
|
||||
-- 一旦有 Bug 意味着所有订单都会暴露!
|
||||
|
||||
-- ✅ 正确示例:数据库强制执行 RLS
|
||||
-- ✅ 正确:数据库层强制执行 RLS
|
||||
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE orders FORCE ROW LEVEL SECURITY;
|
||||
|
||||
@@ -308,25 +308,25 @@ CREATE POLICY orders_user_policy ON orders
|
||||
**影响:** RLS 查询速度提升 5-10 倍。
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:每行都调用一次函数
|
||||
-- ❌ 错误:每行都调用函数
|
||||
CREATE POLICY orders_policy ON orders
|
||||
USING (auth.uid() = user_id); -- 处理 100 万行时会调用 100 万次!
|
||||
USING (auth.uid() = user_id); -- 对 100 万行调用 100 万次!
|
||||
|
||||
-- ✅ 正确示例:包装在 SELECT 中 (会被缓存,仅调用一次)
|
||||
-- ✅ 正确:包装在 SELECT 中(会被缓存,仅调用一次)
|
||||
CREATE POLICY orders_policy ON orders
|
||||
USING ((SELECT auth.uid()) = user_id); -- 速度快 100 倍
|
||||
|
||||
-- 务必在 RLS 策略涉及的列上建立索引
|
||||
-- 始终索引 RLS 策略涉及的列
|
||||
CREATE INDEX orders_user_id_idx ON orders (user_id);
|
||||
```
|
||||
|
||||
### 3. 最小权限访问
|
||||
### 3. 最小权限访问 (Least Privilege Access)
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:权限过大
|
||||
-- ❌ 错误:权限过大
|
||||
GRANT ALL PRIVILEGES ON ALL TABLES TO app_user;
|
||||
|
||||
-- ✅ 正确示例:最小权限
|
||||
-- ✅ 正确:最小权限
|
||||
CREATE ROLE app_readonly NOLOGIN;
|
||||
GRANT USAGE ON SCHEMA public TO app_readonly;
|
||||
GRANT SELECT ON public.products, public.categories TO app_readonly;
|
||||
@@ -345,15 +345,15 @@ REVOKE ALL ON SCHEMA public FROM public;
|
||||
|
||||
### 1. 连接限制
|
||||
|
||||
**计算公式:** `(RAM_in_MB / 5MB_per_connection) - reserved`
|
||||
**公式:** `(内存_MB / 每连接_5MB) - 预留空间`
|
||||
|
||||
```sql
|
||||
-- 以 4GB RAM 为例
|
||||
-- 4GB 内存示例
|
||||
ALTER SYSTEM SET max_connections = 100;
|
||||
ALTER SYSTEM SET work_mem = '8MB'; -- 8MB * 100 = 800MB 最大消耗
|
||||
ALTER SYSTEM SET work_mem = '8MB'; -- 8MB * 100 = 最大 800MB
|
||||
SELECT pg_reload_conf();
|
||||
|
||||
-- 监控连接情况
|
||||
-- 监控连接
|
||||
SELECT count(*), state FROM pg_stat_activity GROUP BY state;
|
||||
```
|
||||
|
||||
@@ -367,59 +367,59 @@ SELECT pg_reload_conf();
|
||||
|
||||
### 3. 使用连接池 (Connection Pooling)
|
||||
|
||||
- **事务模式 (Transaction mode)**:最适用于大多数应用 (连接在每个事务后返回)。
|
||||
- **会话模式 (Session mode)**:用于预处理语句、临时表。
|
||||
- **连接池大小**:`(CPU_cores * 2) + spindle_count`
|
||||
- **事务模式 (Transaction mode)**:适用于大多数应用(每个事务后返回连接)。
|
||||
- **会话模式 (Session mode)**:用于预处理语句(Prepared statements)、临时表。
|
||||
- **池大小 (Pool size)**:`(CPU 核心数 * 2) + 磁盘驱动器数量`
|
||||
|
||||
---
|
||||
|
||||
## 并发与锁定 (Concurrency & Locking)
|
||||
## 并发与锁 (Concurrency & Locking)
|
||||
|
||||
### 1. 保持事务短小
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:在调用外部 API 期间持有锁
|
||||
-- ❌ 错误:在外部 API 调用期间持有锁
|
||||
BEGIN;
|
||||
SELECT * FROM orders WHERE id = 1 FOR UPDATE;
|
||||
-- HTTP 调用耗时 5 秒...
|
||||
-- HTTP 调用花费了 5 秒...
|
||||
UPDATE orders SET status = 'paid' WHERE id = 1;
|
||||
COMMIT;
|
||||
|
||||
-- ✅ 正确示例:最小化锁持有时长
|
||||
-- 先在事务外部完成 API 调用
|
||||
-- ✅ 正确:最小化持锁时间
|
||||
-- 先进行 API 调用,在事务之外
|
||||
BEGIN;
|
||||
UPDATE orders SET status = 'paid', payment_id = $1
|
||||
WHERE id = $2 AND status = 'pending'
|
||||
RETURNING *;
|
||||
COMMIT; -- 锁仅持有几毫秒
|
||||
COMMIT; -- 持锁时间仅为毫秒级
|
||||
```
|
||||
|
||||
### 2. 预防死锁
|
||||
### 2. 防止死锁 (Deadlocks)
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:不一致的加锁顺序导致死锁
|
||||
-- 事务 A:锁定行 1,然后锁定行 2
|
||||
-- 事务 B:锁定行 2,然后锁定行 1
|
||||
-- 死锁发生!
|
||||
-- ❌ 错误:不一致的加锁顺序导致死锁
|
||||
-- 事务 A:锁定第 1 行,然后是第 2 行
|
||||
-- 事务 B:锁定第 2 行,然后是第 1 行
|
||||
-- 死锁!
|
||||
|
||||
-- ✅ 正确示例:一致的加锁顺序
|
||||
-- ✅ 正确:一致的加锁顺序
|
||||
BEGIN;
|
||||
SELECT * FROM accounts WHERE id IN (1, 2) ORDER BY id FOR UPDATE;
|
||||
-- 现在两行都已锁定,可以按任何顺序更新
|
||||
-- 现在两行都被锁定了,可以按任何顺序更新
|
||||
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
|
||||
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
|
||||
COMMIT;
|
||||
```
|
||||
|
||||
### 3. 队列使用 SKIP LOCKED
|
||||
### 3. 在队列中使用 SKIP LOCKED
|
||||
|
||||
**影响:** 工作队列吞吐量提升 10 倍。
|
||||
**影响:** 提升工作队列吞吐量 10 倍。
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:工作线程互相等待
|
||||
-- ❌ 错误:工作进程互相等待
|
||||
SELECT * FROM jobs WHERE status = 'pending' LIMIT 1 FOR UPDATE;
|
||||
|
||||
-- ✅ 正确示例:工作线程跳过已锁定的行
|
||||
-- ✅ 正确:工作进程跳过已锁定的行
|
||||
UPDATE jobs
|
||||
SET status = 'processing', worker_id = $1, started_at = now()
|
||||
WHERE id = (
|
||||
@@ -438,39 +438,39 @@ RETURNING *;
|
||||
|
||||
### 1. 批量插入 (Batch Inserts)
|
||||
|
||||
**影响:** 大批量插入速度提升 10-50 倍。
|
||||
**影响:** 批量插入速度提升 10-50 倍。
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:单条插入
|
||||
-- ❌ 错误:逐条插入
|
||||
INSERT INTO events (user_id, action) VALUES (1, 'click');
|
||||
INSERT INTO events (user_id, action) VALUES (2, 'view');
|
||||
-- 1000 次往返请求
|
||||
-- 需要 1000 次往返(Round trips)
|
||||
|
||||
-- ✅ 正确示例:批量插入
|
||||
-- ✅ 正确:批量插入
|
||||
INSERT INTO events (user_id, action) VALUES
|
||||
(1, 'click'),
|
||||
(2, 'view'),
|
||||
(3, 'click');
|
||||
-- 1 次往返请求
|
||||
-- 1 次往返
|
||||
|
||||
-- ✅ 最佳实践:对于极大数据集使用 COPY
|
||||
-- ✅ 最佳:对大数据集使用 COPY
|
||||
COPY events (user_id, action) FROM '/path/to/data.csv' WITH (FORMAT csv);
|
||||
```
|
||||
|
||||
### 2. 消除 N+1 查询
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:N+1 模式
|
||||
-- ❌ 错误:N+1 模式
|
||||
SELECT id FROM users WHERE active = true; -- 返回 100 个 ID
|
||||
-- 然后执行 100 次查询:
|
||||
SELECT * FROM orders WHERE user_id = 1;
|
||||
SELECT * FROM orders WHERE user_id = 2;
|
||||
-- ... 还有 98 次
|
||||
|
||||
-- ✅ 正确示例:使用 ANY 执行单词查询
|
||||
-- ✅ 正确:使用 ANY 进行单次查询
|
||||
SELECT * FROM orders WHERE user_id = ANY(ARRAY[1, 2, 3, ...]);
|
||||
|
||||
-- ✅ 正确示例:使用 JOIN
|
||||
-- ✅ 正确:使用 JOIN
|
||||
SELECT u.id, u.name, o.*
|
||||
FROM users u
|
||||
LEFT JOIN orders o ON o.user_id = u.id
|
||||
@@ -479,26 +479,26 @@ WHERE u.active = true;
|
||||
|
||||
### 3. 基于游标的分页 (Cursor-Based Pagination)
|
||||
|
||||
**影响:** 无论页码深度如何,均能保持稳定的 O(1) 性能。
|
||||
**影响:** 无论页码多深,始终保持一致的 O(1) 性能。
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:OFFSET 在页数深时变慢
|
||||
-- ❌ 错误:OFFSET 随着深度增加而变慢
|
||||
SELECT * FROM products ORDER BY id LIMIT 20 OFFSET 199980;
|
||||
-- 扫描了 200,000 行!
|
||||
|
||||
-- ✅ 正确示例:基于游标 (始终快速)
|
||||
-- ✅ 正确:基于游标(始终很快)
|
||||
SELECT * FROM products WHERE id > 199980 ORDER BY id LIMIT 20;
|
||||
-- 使用索引,O(1)
|
||||
```
|
||||
|
||||
### 4. 使用 UPSERT 执行“插入或更新”
|
||||
### 4. 使用 UPSERT 进行“插入或更新”
|
||||
|
||||
```sql
|
||||
-- ❌ 错误示例:竞态条件
|
||||
-- ❌ 错误:竞态条件(Race condition)
|
||||
SELECT * FROM settings WHERE user_id = 123 AND key = 'theme';
|
||||
-- 两个线程都没找到结果,都执行插入,其中一个会失败
|
||||
-- 两个线程都没发现记录,都尝试插入,其中一个失败
|
||||
|
||||
-- ✅ 正确示例:原子的 UPSERT
|
||||
-- ✅ 正确:原子性的 UPSERT
|
||||
INSERT INTO settings (user_id, key, value)
|
||||
VALUES (123, 'theme', 'dark')
|
||||
ON CONFLICT (user_id, key)
|
||||
@@ -538,9 +538,9 @@ SELECT * FROM orders WHERE customer_id = 123;
|
||||
| 指标 | 问题 | 解决方案 |
|
||||
|-----------|---------|----------|
|
||||
| 大表上的 `Seq Scan` | 缺失索引 | 在过滤列上添加索引 |
|
||||
| `Rows Removed by Filter` 很高 | 区分度差 | 检查 WHERE 子句 |
|
||||
| `Rows Removed by Filter` 过高 | 区分度(Selectivity)差 | 检查 WHERE 子句 |
|
||||
| `Buffers: read >> hit` | 数据未缓存 | 增加 `shared_buffers` |
|
||||
| `Sort Method: external merge` | `work_mem` 过低 | 增加 `work_mem` |
|
||||
| `Sort Method: external merge` | `work_mem` 太低 | 增加 `work_mem` |
|
||||
|
||||
### 3. 维护统计信息
|
||||
|
||||
@@ -548,12 +548,12 @@ SELECT * FROM orders WHERE customer_id = 123;
|
||||
-- 分析特定表
|
||||
ANALYZE orders;
|
||||
|
||||
-- 检查上次分析时间
|
||||
-- 检查上次分析的时间
|
||||
SELECT relname, last_analyze, last_autoanalyze
|
||||
FROM pg_stat_user_tables
|
||||
ORDER BY last_analyze NULLS FIRST;
|
||||
|
||||
-- 为高频变动的表调整自动清理 (autovacuum)
|
||||
-- 为高频变动的表调整 autovacuum
|
||||
ALTER TABLE orders SET (
|
||||
autovacuum_vacuum_scale_factor = 0.05,
|
||||
autovacuum_analyze_scale_factor = 0.02
|
||||
@@ -564,22 +564,22 @@ ALTER TABLE orders SET (
|
||||
|
||||
## JSONB 模式 (JSONB Patterns)
|
||||
|
||||
### 1. 为 JSONB 列建立索引
|
||||
### 1. 为 JSONB 列创建索引
|
||||
|
||||
```sql
|
||||
-- 为包含运算符建立 GIN 索引
|
||||
-- 为包含运算符创建 GIN 索引
|
||||
CREATE INDEX products_attrs_gin ON products USING gin (attributes);
|
||||
SELECT * FROM products WHERE attributes @> '{"color": "red"}';
|
||||
|
||||
-- 为特定键建立表达式索引
|
||||
-- 为特定键创建表达式索引
|
||||
CREATE INDEX products_brand_idx ON products ((attributes->>'brand'));
|
||||
SELECT * FROM products WHERE attributes->>'brand' = 'Nike';
|
||||
|
||||
-- jsonb_path_ops:体积缩小 2-3 倍,仅支持 @> 运算符
|
||||
-- jsonb_path_ops:体积减小 2-3 倍,但仅支持 @>
|
||||
CREATE INDEX idx ON products USING gin (attributes jsonb_path_ops);
|
||||
```
|
||||
|
||||
### 2. 使用 tsvector 进行全文检索
|
||||
### 2. 使用 tsvector 进行全文检索 (Full-Text Search)
|
||||
|
||||
```sql
|
||||
-- 添加生成的 tsvector 列
|
||||
@@ -594,7 +594,7 @@ CREATE INDEX articles_search_idx ON articles USING gin (search_vector);
|
||||
SELECT * FROM articles
|
||||
WHERE search_vector @@ to_tsquery('english', 'postgresql & performance');
|
||||
|
||||
-- 带权重排名
|
||||
-- 带排名(Ranking)
|
||||
SELECT *, ts_rank(search_vector, query) as rank
|
||||
FROM articles, to_tsquery('english', 'postgresql') query
|
||||
WHERE search_vector @@ query
|
||||
@@ -603,52 +603,52 @@ ORDER BY rank DESC;
|
||||
|
||||
---
|
||||
|
||||
## 需要警示的反模式 (Anti-Patterns to Flag)
|
||||
## 需要标记的反模式 (Anti-Patterns to Flag)
|
||||
|
||||
### ❌ 查询反模式
|
||||
- 在生产环境代码中使用 `SELECT *`
|
||||
- 生产代码中使用 `SELECT *`
|
||||
- WHERE/JOIN 列缺失索引
|
||||
- 在大表上使用 OFFSET 分页
|
||||
- 大表上的 OFFSET 分页
|
||||
- N+1 查询模式
|
||||
- 未参数化的查询 (存在 SQL 注入风险)
|
||||
- 未参数化的查询(存在 SQL 注入风险)
|
||||
|
||||
### ❌ 模式设计反模式
|
||||
- ID 使用 `int` (应使用 `bigint`)
|
||||
- 无理由地使用 `varchar(255)` (应使用 `text`)
|
||||
- 不带时区的 `timestamp` (应使用 `timestamptz`)
|
||||
- 使用随机 UUID 作为主键 (应使用 UUIDv7 或 IDENTITY)
|
||||
- 使用需要加引号的混合大小写标识符
|
||||
### ❌ 模式反模式
|
||||
- ID 使用 `int`(应使用 `bigint`)
|
||||
- 无理由使用 `varchar(255)`(应使用 `text`)
|
||||
- 时间戳不带时区(应使用 `timestamptz`)
|
||||
- 使用随机 UUID 作为主键(应使用 UUIDv7 或 IDENTITY)
|
||||
- 混合大小写的标识符(强制要求引号)
|
||||
|
||||
### ❌ 安全性反模式
|
||||
### ❌ 安全反模式
|
||||
- 向应用用户授予 `GRANT ALL`
|
||||
- 多租户表缺失 RLS
|
||||
- RLS 策略每行调用函数 (未包装在 SELECT 中)
|
||||
- RLS 策略涉及的列未建索引
|
||||
- RLS 策略每行调用函数(未包装在 SELECT 中)
|
||||
- 未索引的 RLS 策略涉及列
|
||||
|
||||
### ❌ 连接反模式
|
||||
- 未使用连接池
|
||||
- 未设置空闲超时
|
||||
- 没有连接池
|
||||
- 没有空闲超时
|
||||
- 在事务模式连接池中使用预处理语句
|
||||
- 在调用外部 API 期间持有锁
|
||||
- 在外部 API 调用期间持有锁
|
||||
|
||||
---
|
||||
|
||||
## 审查检查清单 (Review Checklist)
|
||||
## 评审检查清单 (Review Checklist)
|
||||
|
||||
### 在批准数据库更改前:
|
||||
- [ ] 所有 WHERE/JOIN 列都已建索引
|
||||
- [ ] 复合索引的列顺序正确
|
||||
- [ ] 数据类型合适 (bigint, text, timestamptz, numeric)
|
||||
### 在批准数据库更改之前:
|
||||
- [ ] 所有 WHERE/JOIN 列已建立索引
|
||||
- [ ] 复合索引中的列顺序正确
|
||||
- [ ] 数据类型正确(bigint, text, timestamptz, numeric)
|
||||
- [ ] 多租户表已启用 RLS
|
||||
- [ ] RLS 策略使用了 `(SELECT auth.uid())` 模式
|
||||
- [ ] 外键具有索引
|
||||
- [ ] 无 N+1 查询模式
|
||||
- [ ] RLS 策略使用 `(SELECT auth.uid())` 模式
|
||||
- [ ] 外键已建立索引
|
||||
- [ ] 没有 N+1 查询模式
|
||||
- [ ] 对复杂查询运行了 EXPLAIN ANALYZE
|
||||
- [ ] 使用了小写标识符
|
||||
- [ ] 事务保持短小
|
||||
- [ ] 保持事务短小
|
||||
|
||||
---
|
||||
|
||||
**请记住**:数据库问题通常是应用程序性能问题的根源。请尽早优化查询和模式设计。使用 EXPLAIN ANALYZE 验证假设。务必为外键和 RLS 策略列建立索引。
|
||||
**记住**:数据库问题通常是应用性能问题的根源。应尽早优化查询和模式设计。使用 EXPLAIN ANALYZE 验证假设。务必索引外键和 RLS 策略列。
|
||||
|
||||
*模式参考自 [Supabase Agent Skills](https://github.com/supabase/agent-skills),基于 MIT 许可。*
|
||||
*模式改编自 [Supabase Agent Skills](https://github.com/supabase/agent-skills),遵循 MIT 许可。*
|
||||
@@ -0,0 +1,424 @@
|
||||
# Everything Claude Code
|
||||
|
||||
[](https://github.com/affaan-m/everything-claude-code/stargazers)
|
||||
[](LICENSE)
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
**来自 Anthropic 黑客松冠军的完整 Claude Code 配置集。**
|
||||
|
||||
经过 10 个月以上密集日常使用、打造真实产品所淬炼出的生产就绪智能体(Agents)、技能(Skills)、钩子(Hooks)、指令(Commands)、规则(Rules)和 MCP 配置。
|
||||
|
||||
---
|
||||
|
||||
## 指南
|
||||
|
||||
本仓库仅包含原始代码。指南会解释所有内容。
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<a href="https://x.com/affaanmustafa/status/2012378465664745795">
|
||||
<img src="https://github.com/user-attachments/assets/1a471488-59cc-425b-8345-5245c7efbcef" alt="Everything Claude Code 简明指南" />
|
||||
</a>
|
||||
</td>
|
||||
<td width="50%">
|
||||
<a href="https://x.com/affaanmustafa/status/2014040193557471352">
|
||||
<img src="https://github.com/user-attachments/assets/c9ca43bc-b149-427f-b551-af6840c368f0" alt="Everything Claude Code 完整指南" />
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><b>简明指南</b><br/>配置、基础、理念。<b>请先阅读此指南。</b></td>
|
||||
<td align="center"><b>完整指南</b><br/>Token 优化、记忆持久化、评估、并行处理。</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
| 主题 | 学习内容 |
|
||||
|------|----------|
|
||||
| Token 优化 | 模型选择、系统提示精简、后台进程 |
|
||||
| 记忆持久化 | 自动跨会话(Session)保存/加载上下文的钩子(Hooks) |
|
||||
| 持续学习 | 从会话中自动提取模式并转化为可重用技能(Skills) |
|
||||
| 验证循环 | 检查点 vs 持续评估、评分器类型、pass@k 指标 |
|
||||
| 并行处理 | Git worktrees、串联方法、何时扩展实例 |
|
||||
| 子智能体协调 | 上下文问题、渐进式检索模式 |
|
||||
|
||||
---
|
||||
|
||||
## 跨平台支持
|
||||
|
||||
此插件现已完整支持 **Windows、macOS 和 Linux**。所有钩子和脚本已使用 Node.js 重写以获得最佳兼容性。
|
||||
|
||||
### 包管理器检测
|
||||
|
||||
插件会自动检测您偏好的包管理器(npm、pnpm、yarn 或 bun),优先级如下:
|
||||
|
||||
1. **环境变量**:`CLAUDE_PACKAGE_MANAGER`
|
||||
2. **项目配置**:`.claude/package-manager.json`
|
||||
3. **package.json**:`packageManager` 字段
|
||||
4. **锁文件**:从 package-lock.json、yarn.lock、pnpm-lock.yaml 或 bun.lockb 检测
|
||||
5. **全局配置**:`~/.claude/package-manager.json`
|
||||
6. **备选方案**:第一个可用的包管理器
|
||||
|
||||
设置您偏好的包管理器:
|
||||
|
||||
```bash
|
||||
# 通过环境变量
|
||||
export CLAUDE_PACKAGE_MANAGER=pnpm
|
||||
|
||||
# 通过全局配置
|
||||
node scripts/setup-package-manager.js --global pnpm
|
||||
|
||||
# 通过项目配置
|
||||
node scripts/setup-package-manager.js --project bun
|
||||
|
||||
# 检测当前配置
|
||||
node scripts/setup-package-manager.js --detect
|
||||
```
|
||||
|
||||
或在 Claude Code 中使用 `/setup-pm` 指令。
|
||||
|
||||
---
|
||||
|
||||
## 内容概览
|
||||
|
||||
本仓库是一个 **Claude Code 插件** - 可直接安装或手动复制组件。
|
||||
|
||||
```
|
||||
everything-claude-code/
|
||||
|-- .claude-plugin/ # 插件和市场清单
|
||||
| |-- plugin.json # 插件元数据和组件路径
|
||||
| |-- marketplace.json # 用于 /plugin marketplace add 的市场目录
|
||||
|
|
||||
|-- agents/ # 用于委派任务的专门子智能体(Agents)
|
||||
| |-- planner.md # 功能实现规划
|
||||
| |-- architect.md # 系统设计决策
|
||||
| |-- tdd-guide.md # 测试驱动开发
|
||||
| |-- code-reviewer.md # 质量与安全审查
|
||||
| |-- security-reviewer.md # 漏洞分析
|
||||
| |-- build-error-resolver.md
|
||||
| |-- e2e-runner.md # Playwright E2E 测试
|
||||
| |-- refactor-cleaner.md # 无用代码清理
|
||||
| |-- doc-updater.md # 文档同步
|
||||
| |-- go-reviewer.md # Go 代码审查(新增)
|
||||
| |-- go-build-resolver.md # Go 构建错误解决(新增)
|
||||
|
|
||||
|-- skills/ # 工作流(Workflow)定义和领域知识
|
||||
| |-- coding-standards/ # 编程语言最佳实践
|
||||
| |-- backend-patterns/ # API、数据库、缓存模式
|
||||
| |-- frontend-patterns/ # React、Next.js 模式
|
||||
| |-- continuous-learning/ # 从会话中自动提取模式(完整指南)
|
||||
| |-- continuous-learning-v2/ # 基于本能的学习与信心评分
|
||||
| |-- iterative-retrieval/ # 子代理的渐进式上下文精炼
|
||||
| |-- strategic-compact/ # 手动压缩建议(完整指南)
|
||||
| |-- tdd-workflow/ # TDD 方法论
|
||||
| |-- security-review/ # 安全性检查清单
|
||||
| |-- eval-harness/ # 验证循环评估(完整指南)
|
||||
| |-- verification-loop/ # 持续验证(完整指南)
|
||||
| |-- golang-patterns/ # Go 惯用法和最佳实践(新增)
|
||||
| |-- golang-testing/ # Go 测试模式、TDD、基准测试(新增)
|
||||
|
|
||||
|-- commands/ # 快速执行的斜杠指令(Commands)
|
||||
| |-- tdd.md # /tdd - 测试驱动开发
|
||||
| |-- plan.md # /plan - 实现规划
|
||||
| |-- e2e.md # /e2e - E2E 测试生成
|
||||
| |-- code-review.md # /code-review - 质量审查
|
||||
| |-- build-fix.md # /build-fix - 修复构建错误
|
||||
| |-- refactor-clean.md # /refactor-clean - 移除无用代码
|
||||
| |-- learn.md # /learn - 会话中提取模式(完整指南)
|
||||
| |-- checkpoint.md # /checkpoint - 保存验证状态(完整指南)
|
||||
| |-- verify.md # /verify - 执行验证循环(完整指南)
|
||||
| |-- setup-pm.md # /setup-pm - 设置包管理器
|
||||
| |-- go-review.md # /go-review - Go 代码审查(新增)
|
||||
| |-- go-test.md # /go-test - Go TDD 工作流(新增)
|
||||
| |-- go-build.md # /go-build - 修复 Go 构建错误(新增)
|
||||
|
|
||||
|-- rules/ # 必须遵守的准则(Rules)(复制到 ~/.claude/rules/)
|
||||
| |-- security.md # 强制性安全检查
|
||||
| |-- coding-style.md # 不变性、文件组织
|
||||
| |-- testing.md # TDD、80% 覆盖率要求
|
||||
| |-- git-workflow.md # 提交格式、PR 流程
|
||||
| |-- agents.md # 何时委派给子智能体
|
||||
| |-- performance.md # 模型选择、上下文管理
|
||||
|
|
||||
|-- hooks/ # 基于触发器的自动化钩子(Hooks)
|
||||
| |-- hooks.json # 所有钩子配置(PreToolUse、PostToolUse、Stop 等)
|
||||
| |-- memory-persistence/ # 会话生命周期钩子(完整指南)
|
||||
| |-- strategic-compact/ # 压缩建议(完整指南)
|
||||
|
|
||||
|-- scripts/ # 跨平台 Node.js 脚本(新增)
|
||||
| |-- lib/ # 共享工具
|
||||
| | |-- utils.js # 跨平台文件/路径/系统工具
|
||||
| | |-- package-manager.js # 包管理器检测与选择
|
||||
| |-- hooks/ # 钩子实现
|
||||
| | |-- session-start.js # 会话开始时加载上下文
|
||||
| | |-- session-end.js # 会话结束时保存状态
|
||||
| | |-- pre-compact.js # 压缩前状态保存
|
||||
| | |-- suggest-compact.js # 策略性压缩建议
|
||||
| | |-- evaluate-session.js # 从会话中提取模式
|
||||
| |-- setup-package-manager.js # 交互式包管理器设置
|
||||
|
|
||||
|-- tests/ # 测试套件(新增)
|
||||
| |-- lib/ # 库测试
|
||||
| |-- hooks/ # 钩子测试
|
||||
| |-- run-all.js # 执行所有测试
|
||||
|
|
||||
|-- contexts/ # 动态系统提示词(Prompt)注入上下文(完整指南)
|
||||
| |-- dev.md # 开发模式上下文
|
||||
| |-- review.md # 代码审查模式上下文
|
||||
| |-- research.md # 研究/探索模式上下文
|
||||
|
|
||||
|-- examples/ # 示例配置和会话
|
||||
| |-- CLAUDE.md # 项目级配置示例
|
||||
| |-- user-CLAUDE.md # 用户级配置示例
|
||||
|
|
||||
|-- mcp-configs/ # MCP 服务器配置
|
||||
| |-- mcp-servers.json # GitHub、Supabase、Vercel、Railway 等
|
||||
|
|
||||
|-- marketplace.json # 自托管市场配置(用于 /plugin marketplace add)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 生态系统工具
|
||||
|
||||
### ecc.tools - 技能生成器
|
||||
|
||||
从您的仓库自动生成 Claude Code 技能(Skills)。
|
||||
|
||||
[安装 GitHub App](https://github.com/apps/skill-creator) | [ecc.tools](https://ecc.tools)
|
||||
|
||||
分析您的仓库并创建:
|
||||
- **SKILL.md 文件** - 可直接用于 Claude Code 的技能
|
||||
- **本能集合** - 用于 continuous-learning-v2
|
||||
- **模式提取** - 从您的提交历史学习
|
||||
|
||||
```bash
|
||||
# 安装 GitHub App 后,技能会出现在:
|
||||
~/.claude/skills/generated/
|
||||
```
|
||||
|
||||
与 `continuous-learning-v2` 技能无缝整合以继承本能。
|
||||
|
||||
---
|
||||
|
||||
## 安装
|
||||
|
||||
### 选项 1:以插件(Plugin)安装(推荐)
|
||||
|
||||
使用本仓库最简单的方式 - 安装为 Claude Code 插件:
|
||||
|
||||
```bash
|
||||
# 将此仓库添加为市场
|
||||
/plugin marketplace add affaan-m/everything-claude-code
|
||||
|
||||
# 安装插件
|
||||
/plugin install everything-claude-code@everything-claude-code
|
||||
```
|
||||
|
||||
或直接添加到您的 `~/.claude/settings.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"extraKnownMarketplaces": {
|
||||
"everything-claude-code": {
|
||||
"source": {
|
||||
"source": "github",
|
||||
"repo": "affaan-m/everything-claude-code"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enabledPlugins": {
|
||||
"everything-claude-code@everything-claude-code": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
这会让您立即访问所有指令、智能体、技能和钩子。
|
||||
|
||||
---
|
||||
|
||||
### 选项 2:手动安装
|
||||
|
||||
如果您偏好手动控制安装内容:
|
||||
|
||||
```bash
|
||||
# 克隆仓库
|
||||
git clone https://github.com/affaan-m/everything-claude-code.git
|
||||
|
||||
# 将智能体复制到您的 Claude 配置
|
||||
cp everything-claude-code/agents/*.md ~/.claude/agents/
|
||||
|
||||
# 复制规则
|
||||
cp everything-claude-code/rules/*.md ~/.claude/rules/
|
||||
|
||||
# 复制指令
|
||||
cp everything-claude-code/commands/*.md ~/.claude/commands/
|
||||
|
||||
# 复制技能
|
||||
cp -r everything-claude-code/skills/* ~/.claude/skills/
|
||||
```
|
||||
|
||||
#### 将钩子添加到 settings.json
|
||||
|
||||
将 `hooks/hooks.json` 中的钩子复制到您的 `~/.claude/settings.json`。
|
||||
|
||||
#### 配置 MCP
|
||||
|
||||
将 `mcp-configs/mcp-servers.json` 中所需的 MCP 服务器配置复制到您的 `~/.claude.json`。
|
||||
|
||||
**重要:** 将 `YOUR_*_HERE` 占位符替换为您实际的 API 密钥。
|
||||
|
||||
---
|
||||
|
||||
## 核心概念
|
||||
|
||||
### 智能体(Agents)
|
||||
|
||||
子智能体以有限范围处理委派的任务。示例:
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: code-reviewer
|
||||
description: Reviews code for quality, security, and maintainability
|
||||
tools: ["Read", "Grep", "Glob", "Bash"]
|
||||
model: opus
|
||||
---
|
||||
|
||||
You are a senior code reviewer...
|
||||
```
|
||||
|
||||
### 技能(Skills)
|
||||
|
||||
技能是由指令或智能体调用的工作流定义:
|
||||
|
||||
```markdown
|
||||
# TDD Workflow
|
||||
|
||||
1. Define interfaces first
|
||||
2. Write failing tests (RED)
|
||||
3. Implement minimal code (GREEN)
|
||||
4. Refactor (IMPROVE)
|
||||
5. Verify 80%+ coverage
|
||||
```
|
||||
|
||||
### 钩子(Hooks)
|
||||
|
||||
钩子在工具(Tool)事件时触发。示例 - 警告 console.log:
|
||||
|
||||
```json
|
||||
{
|
||||
"matcher": "tool == \"Edit\" && tool_input.file_path matches \"\\.(ts|tsx|js|jsx)$\"",
|
||||
"hooks": [{
|
||||
"type": "command",
|
||||
"command": "#!/bin/bash\ngrep -n 'console\\.log' \"$file_path\" && echo '[Hook] Remove console.log' >&2"
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
### 规则(Rules)
|
||||
|
||||
规则是必须遵守的准则。保持模块化:
|
||||
|
||||
```
|
||||
~/.claude/rules/
|
||||
security.md # 禁止硬编码密钥
|
||||
coding-style.md # 不变性、文件组织
|
||||
testing.md # TDD、80% 覆盖率要求
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 执行测试
|
||||
|
||||
插件包含完整的测试套件:
|
||||
|
||||
```bash
|
||||
# 执行所有测试
|
||||
node tests/run-all.js
|
||||
|
||||
# 执行个别测试文件
|
||||
node tests/lib/utils.test.js
|
||||
node tests/lib/package-manager.test.js
|
||||
node tests/hooks/hooks.test.js
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 贡献
|
||||
|
||||
**欢迎并鼓励贡献。**
|
||||
|
||||
本仓库旨在成为社区资源。如果您有:
|
||||
- 实用的智能体或技能
|
||||
- 巧妙的钩子
|
||||
- 更好的 MCP 配置
|
||||
- 改进的规则
|
||||
|
||||
请贡献!详见 [CONTRIBUTING.md](CONTRIBUTING.md) 的指南。
|
||||
|
||||
### 贡献想法
|
||||
|
||||
- 特定语言的技能(Python、Rust 模式)- Go 现已包含!
|
||||
- 特定框架的配置(Django、Rails、Laravel)
|
||||
- DevOps 智能体(Kubernetes、Terraform、AWS)
|
||||
- 测试策略(不同框架)
|
||||
- 特定领域知识(ML、数据工程、移动开发)
|
||||
|
||||
---
|
||||
|
||||
## 背景
|
||||
|
||||
我从实验性推出就开始使用 Claude Code。2025 年 9 月与 [@DRodriguezFX](https://x.com/DRodriguezFX) 一起使用 Claude Code 打造 [zenith.chat](https://zenith.chat),赢得了 Anthropic x Forum Ventures 黑客松。
|
||||
|
||||
这些配置已在多个生产应用程序中经过实战测试。
|
||||
|
||||
---
|
||||
|
||||
## 重要注意事项
|
||||
|
||||
### 上下文窗口管理
|
||||
|
||||
**关键:** 不要同时启用所有 MCP。启用过多工具会让您的 200k 上下文窗口缩减至 70k。
|
||||
|
||||
经验法则:
|
||||
- 设置 20-30 个 MCP
|
||||
- 每个项目启用少于 10 个
|
||||
- 启用的工具少于 80 个
|
||||
|
||||
在项目配置中使用 `disabledMcpServers` 来禁用未使用的 MCP。
|
||||
|
||||
### 自定义
|
||||
|
||||
这些配置适合我的工作流。您应该:
|
||||
1. 从您认同的部分开始
|
||||
2. 根据您的技术栈修改
|
||||
3. 移除不需要的部分
|
||||
4. 添加您自己的模式
|
||||
|
||||
---
|
||||
|
||||
## Star 历史
|
||||
|
||||
[](https://star-history.com/#affaan-m/everything-claude-code&Date)
|
||||
|
||||
---
|
||||
|
||||
## 链接
|
||||
|
||||
- **简明指南(从这里开始):** [Everything Claude Code 简明指南](https://x.com/affaanmustafa/status/2012378465664745795)
|
||||
- **完整指南(进阶):** [Everything Claude Code 完整指南](https://x.com/affaanmustafa/status/2014040193557471352)
|
||||
- **关注:** [@affaanmustafa](https://x.com/affaanmustafa)
|
||||
- **zenith.chat:** [zenith.chat](https://zenith.chat)
|
||||
|
||||
---
|
||||
|
||||
## 授权
|
||||
|
||||
MIT - 自由使用、依需求修改、如可能请回馈贡献。
|
||||
|
||||
---
|
||||
|
||||
**如果有帮助请为本仓库点赞(Star)。阅读两份指南。打造伟大的作品。**
|
||||
+1
-1
@@ -105,7 +105,7 @@
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "node -e \"const{execSync}=require('child_process');const fs=require('fs');let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const i=JSON.parse(d);const p=i.tool_input?.file_path;if(p&&fs.existsSync(p)){try{execSync('npx prettier --write \"'+p+'\"',{stdio:['pipe','pipe','pipe']})}catch(e){}}console.log(d)})\""
|
||||
"command": "node -e \"const{execFileSync}=require('child_process');const fs=require('fs');let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const i=JSON.parse(d);const p=i.tool_input?.file_path;if(p&&fs.existsSync(p)){try{execFileSync('npx',['prettier','--write',p],{stdio:['pipe','pipe','pipe']})}catch(e){}}console.log(d)})\""
|
||||
}
|
||||
],
|
||||
"description": "Auto-format JS/TS files with Prettier after edits"
|
||||
|
||||
@@ -52,7 +52,7 @@ process.stdin.on('end', () => {
|
||||
if (hasConsole) {
|
||||
console.error('[Hook] Remove console.log statements before committing');
|
||||
}
|
||||
} catch (error) {
|
||||
} catch (_error) {
|
||||
// Silently ignore errors (git might not be available, etc.)
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ const {
|
||||
getTimeString,
|
||||
getSessionIdShort,
|
||||
ensureDir,
|
||||
readFile,
|
||||
writeFile,
|
||||
replaceInFile,
|
||||
log
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
* files and notifies Claude of available context to load.
|
||||
*/
|
||||
|
||||
const path = require('path');
|
||||
const {
|
||||
getSessionsDir,
|
||||
getLearnedSkillsDir,
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
*/
|
||||
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const {
|
||||
getTempDir,
|
||||
readFile,
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { commandExists, getClaudeDir, readFile, writeFile, log, runCommand } = require('./utils');
|
||||
const { commandExists, getClaudeDir, readFile, writeFile } = require('./utils');
|
||||
|
||||
// Package manager definitions
|
||||
const PACKAGE_MANAGERS = {
|
||||
|
||||
+27
-6
@@ -79,17 +79,34 @@ function getTimeString() {
|
||||
return `${hours}:${minutes}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the git repository name
|
||||
*/
|
||||
function getGitRepoName() {
|
||||
const result = runCommand('git rev-parse --show-toplevel');
|
||||
if (!result.success) return null;
|
||||
return path.basename(result.output);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get project name from git repo or current directory
|
||||
*/
|
||||
function getProjectName() {
|
||||
const repoName = getGitRepoName();
|
||||
if (repoName) return repoName;
|
||||
return path.basename(process.cwd()) || null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get short session ID from CLAUDE_SESSION_ID environment variable
|
||||
* Returns the last 8 characters for uniqueness with brevity
|
||||
* @param {string} fallback - Fallback value if no session ID (default: 'default')
|
||||
* Returns last 8 characters, falls back to project name then 'default'
|
||||
*/
|
||||
function getSessionIdShort(fallback = 'default') {
|
||||
const sessionId = process.env.CLAUDE_SESSION_ID;
|
||||
if (!sessionId || sessionId.length === 0) {
|
||||
return fallback;
|
||||
if (sessionId && sessionId.length > 0) {
|
||||
return sessionId.slice(-8);
|
||||
}
|
||||
return sessionId.slice(-8);
|
||||
return getProjectName() || fallback;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -148,7 +165,7 @@ function findFiles(dir, pattern, options = {}) {
|
||||
searchDir(fullPath);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
} catch (_err) {
|
||||
// Ignore permission errors
|
||||
}
|
||||
}
|
||||
@@ -373,7 +390,11 @@ module.exports = {
|
||||
getDateString,
|
||||
getTimeString,
|
||||
getDateTimeString,
|
||||
|
||||
// Session/Project
|
||||
getSessionIdShort,
|
||||
getGitRepoName,
|
||||
getProjectName,
|
||||
|
||||
// File operations
|
||||
findFiles,
|
||||
|
||||
@@ -19,10 +19,8 @@ const {
|
||||
setProjectPackageManager,
|
||||
getAvailablePackageManagers,
|
||||
detectFromLockFile,
|
||||
detectFromPackageJson,
|
||||
getSelectionPrompt
|
||||
detectFromPackageJson
|
||||
} = require('./lib/package-manager');
|
||||
const { log } = require('./lib/utils');
|
||||
|
||||
function showHelp() {
|
||||
console.log(`
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
---
|
||||
name: continuous-learning-v2
|
||||
description: 基于直觉的学习系统,通过钩子(hooks)观察会话,创建带有置信度评分的原子直觉(atomic instincts),并将其演化为技能/命令/智能体。
|
||||
description: 基于直觉(Instinct)的学习系统,通过钩子(Hooks)观测会话,创建带有置信度评分(Confidence Scoring)的原子直觉,并将其演进为技能(Skills)、命令(Commands)或智能体(Agents)。
|
||||
version: 2.0.0
|
||||
---
|
||||
|
||||
# 持续学习 v2 - 基于直觉的架构 (Instinct-Based Architecture)
|
||||
# 持续学习 v2 - 基于直觉的架构(Instinct-Based Architecture)
|
||||
|
||||
一个高级学习系统,通过原子“直觉(instincts)”——带有置信度评分的小型习得行为,将你的 Claude Code 会话转化为可复用的知识。
|
||||
这是一个先进的学习系统,通过原子化“直觉(Instincts)”——即带有置信度评分的小型习得行为,将你的 Claude Code 会话转化为可复用的知识。
|
||||
|
||||
## v2 版本新特性
|
||||
|
||||
| 特性 | v1 | v2 |
|
||||
|---------|----|----|
|
||||
| 观察 (Observation) | Stop 钩子(会话结束) | PreToolUse/PostToolUse (100% 可靠) |
|
||||
| 分析 (Analysis) | 主上下文 (Main context) | 后台智能体 (Haiku) |
|
||||
| 粒度 (Granularity) | 完整技能 (Full skills) | 原子“直觉(instincts)” |
|
||||
| 置信度 (Confidence) | 无 | 0.3-0.9 加权 |
|
||||
| 演化 (Evolution) | 直接转换为技能 | 直觉 → 聚类 → 技能/命令/智能体 |
|
||||
| 共享 (Sharing) | 无 | 导出/导入直觉 |
|
||||
| 观测(Observation) | Stop 钩子(会话结束时) | PreToolUse/PostToolUse (100% 可靠) |
|
||||
| 分析(Analysis) | 主上下文(Main context) | 后台智能体 (Haiku) |
|
||||
| 粒度(Granularity) | 完整技能(Full skills) | 原子化“直觉(Instincts)” |
|
||||
| 置信度(Confidence) | 无 | 0.3-0.9 加权评分 |
|
||||
| 演进(Evolution) | 直接转化为技能 | 直觉 → 聚类 → 技能/命令/智能体 |
|
||||
| 共享(Sharing) | 无 | 导出/导入直觉 |
|
||||
|
||||
## 直觉模型 (The Instinct Model)
|
||||
## 直觉模型(The Instinct Model)
|
||||
|
||||
“直觉(instinct)”是一个小型的习得行为:
|
||||
直觉(Instinct)是一种小型习得行为:
|
||||
|
||||
```yaml
|
||||
---
|
||||
@@ -32,41 +32,41 @@ domain: "code-style"
|
||||
source: "session-observation"
|
||||
---
|
||||
|
||||
# 偏好函数式风格 (Prefer Functional Style)
|
||||
# 偏好函数式风格(Prefer Functional Style)
|
||||
|
||||
## 操作 (Action)
|
||||
在合适的时候,优先使用函数式模式而非类(class)。
|
||||
## 动作(Action)
|
||||
在合适的情况下,优先使用函数式模式(Functional Patterns)而非类(Classes)。
|
||||
|
||||
## 证据 (Evidence)
|
||||
- 观察到 5 次偏好函数式模式的实例
|
||||
- 用户在 2025-01-15 将基于类的方法修正为函数式
|
||||
## 证据(Evidence)
|
||||
- 观测到 5 次函数式模式偏好实例
|
||||
- 用户在 2025-01-15 将基于类的方法修正为函数式方法
|
||||
```
|
||||
|
||||
**属性:**
|
||||
- **原子性 (Atomic)** — 一个触发器,一个动作
|
||||
- **置信度加权 (Confidence-weighted)** — 0.3 = 尝试性的,0.9 = 近乎确定
|
||||
- **领域标签 (Domain-tagged)** — code-style、testing、git、debugging、workflow 等
|
||||
- **证据支持 (Evidence-backed)** — 追踪是哪些观察结果创建了它
|
||||
- **原子化(Atomic)** — 一个触发器对应一个动作
|
||||
- **置信度加权(Confidence-weighted)** — 0.3 = 尝试性的,0.9 = 近乎确定
|
||||
- **领域标签(Domain-tagged)** — 代码风格(code-style)、测试(testing)、git、调试(debugging)、工作流(workflow)等
|
||||
- **证据支持(Evidence-backed)** — 追踪是哪些观测结果创建了它
|
||||
|
||||
## 工作原理
|
||||
|
||||
```
|
||||
会话活动 (Session Activity)
|
||||
会话活动(Session Activity)
|
||||
│
|
||||
│ 钩子捕获提示词 + 工具使用 (100% 可靠)
|
||||
│ 钩子(Hooks)捕获提示词 + 工具使用 (100% 可靠)
|
||||
▼
|
||||
┌─────────────────────────────────────────┐
|
||||
│ observations.jsonl │
|
||||
│ (提示词, 工具调用, 结果) │
|
||||
│ (提示词、工具调用、执行结果) │
|
||||
└─────────────────────────────────────────┘
|
||||
│
|
||||
│ 观察者智能体读取 (后台运行, Haiku)
|
||||
│ 观测者智能体读取 (后台运行, Haiku)
|
||||
▼
|
||||
┌─────────────────────────────────────────┐
|
||||
│ 模式检测 (PATTERN DETECTION) │
|
||||
│ • 用户修正 → 直觉 │
|
||||
│ • 错误修复 → 直觉 │
|
||||
│ • 重复工作流 → 直觉 │
|
||||
│ 模式检测(PATTERN DETECTION) │
|
||||
│ • 用户修正 → 直觉 │
|
||||
│ • 错误解决 → 直觉 │
|
||||
│ • 重复工作流 → 直觉 │
|
||||
└─────────────────────────────────────────┘
|
||||
│
|
||||
│ 创建/更新
|
||||
@@ -88,11 +88,36 @@ source: "session-observation"
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 快速开始
|
||||
## 快速入门
|
||||
|
||||
### 1. 启用观察钩子 (Observation Hooks)
|
||||
### 1. 启用观测钩子(Observation Hooks)
|
||||
|
||||
添加到你的 `~/.claude/settings.json`:
|
||||
将以下内容添加到你的 `~/.claude/settings.json` 中。
|
||||
|
||||
**如果作为插件安装**(推荐):
|
||||
|
||||
```json
|
||||
{
|
||||
"hooks": {
|
||||
"PreToolUse": [{
|
||||
"matcher": "*",
|
||||
"hooks": [{
|
||||
"type": "command",
|
||||
"command": "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/hooks/observe.sh pre"
|
||||
}]
|
||||
}],
|
||||
"PostToolUse": [{
|
||||
"matcher": "*",
|
||||
"hooks": [{
|
||||
"type": "command",
|
||||
"command": "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/hooks/observe.sh post"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**如果手动安装**到 `~/.claude/skills`:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -117,30 +142,32 @@ source: "session-observation"
|
||||
|
||||
### 2. 初始化目录结构
|
||||
|
||||
Python CLI 会自动创建这些目录,但你也可以手动创建:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.claude/homunculus/{instincts/{personal,inherited},evolved/{agents,skills,commands}}
|
||||
touch ~/.claude/homunculus/observations.jsonl
|
||||
```
|
||||
|
||||
### 3. 运行观察者智能体 (可选)
|
||||
|
||||
观察者可以在后台运行,分析观察结果:
|
||||
### 3. 使用直觉命令
|
||||
|
||||
```bash
|
||||
# 启动后台观察者
|
||||
~/.claude/skills/continuous-learning-v2/agents/start-observer.sh
|
||||
/instinct-status # 显示已习得的直觉及其置信度评分
|
||||
/evolve # 将相关的直觉聚类为技能/命令
|
||||
/instinct-export # 导出直觉以便分享
|
||||
/instinct-import # 从他人处导入直觉
|
||||
```
|
||||
|
||||
## 命令
|
||||
## 命令(Commands)
|
||||
|
||||
| 命令 | 描述 |
|
||||
|---------|-------------|
|
||||
| `/instinct-status` | 显示所有习得的直觉及其置信度 |
|
||||
| `/instinct-status` | 显示所有已习得的直觉及置信度 |
|
||||
| `/evolve` | 将相关的直觉聚类为技能/命令 |
|
||||
| `/instinct-export` | 导出直觉以便共享 |
|
||||
| `/instinct-export` | 导出直觉以便分享 |
|
||||
| `/instinct-import <file>` | 从他人处导入直觉 |
|
||||
|
||||
## 配置
|
||||
## 配置(Configuration)
|
||||
|
||||
编辑 `config.json`:
|
||||
|
||||
@@ -183,8 +210,8 @@ touch ~/.claude/homunculus/observations.jsonl
|
||||
```
|
||||
~/.claude/homunculus/
|
||||
├── identity.json # 你的个人资料、技术水平
|
||||
├── observations.jsonl # 当前会话观察结果
|
||||
├── observations.archive/ # 已处理的观察结果
|
||||
├── observations.jsonl # 当前会话观测结果
|
||||
├── observations.archive/ # 已处理的观测结果
|
||||
├── instincts/
|
||||
│ ├── personal/ # 自动习得的直觉
|
||||
│ └── inherited/ # 从他人处导入的直觉
|
||||
@@ -194,64 +221,64 @@ touch ~/.claude/homunculus/observations.jsonl
|
||||
└── commands/ # 生成的命令
|
||||
```
|
||||
|
||||
## 与技能创建器 (Skill Creator) 集成
|
||||
## 与 Skill Creator 集成
|
||||
|
||||
当你使用 [Skill Creator GitHub App](https://skill-creator.app) 时,它现在会**同时**生成:
|
||||
- 传统的 SKILL.md 文件(为了向后兼容)
|
||||
- 直觉集合 (Instinct collections)(为了 v2 学习系统)
|
||||
- 传统的 SKILL.md 文件(用于向下兼容)
|
||||
- 直觉集合(用于 v2 学习系统)
|
||||
|
||||
来自仓库分析的直觉带有 `source: "repo-analysis"` 标签,并包含源仓库的 URL。
|
||||
来自仓库分析的直觉具有 `source: "repo-analysis"` 属性,并包含源仓库 URL。
|
||||
|
||||
## 置信度评分 (Confidence Scoring)
|
||||
## 置信度评分(Confidence Scoring)
|
||||
|
||||
置信度会随时间演化:
|
||||
置信度随时间演进:
|
||||
|
||||
| 分数 | 含义 | 行为 |
|
||||
|-------|---------|----------|
|
||||
| 0.3 | 尝试性 (Tentative) | 建议但不强制执行 |
|
||||
| 0.5 | 中等 (Moderate) | 在相关时应用 |
|
||||
| 0.7 | 强 (Strong) | 自动批准应用 |
|
||||
| 0.9 | 近乎确定 (Near-certain) | 核心行为 |
|
||||
| 0.3 | 尝试性的(Tentative) | 建议但不强制执行 |
|
||||
| 0.5 | 中等(Moderate) | 在相关时应用 |
|
||||
| 0.7 | 强(Strong) | 自动批准应用 |
|
||||
| 0.9 | 近乎确定(Near-certain) | 核心行为 |
|
||||
|
||||
**置信度增加** 的情况:
|
||||
- 模式被重复观察到
|
||||
**置信度增加**的情况:
|
||||
- 模式被重复观测到
|
||||
- 用户没有修正建议的行为
|
||||
- 来自其他来源的类似直觉达成一致
|
||||
|
||||
**置信度降低** 的情况:
|
||||
**置信度降低**的情况:
|
||||
- 用户明确修正了该行为
|
||||
- 模式在很长一段时间内没有被观察到
|
||||
- 模式长时间未被观测到
|
||||
- 出现矛盾的证据
|
||||
|
||||
## 为什么使用钩子 (Hooks) 而非技能 (Skills) 进行观察?
|
||||
## 为什么使用钩子(Hooks)而非技能(Skills)进行观测?
|
||||
|
||||
> “v1 依赖技能进行观察。技能是概率性的——根据 Claude 的判断,它们的触发率约为 50-80%。”
|
||||
> "v1 依赖技能进行观测。技能具有概率性——根据 Claude 的判断,其触发率约为 50-80%。"
|
||||
|
||||
钩子(Hooks)的触发是 **100% 确定性**的。这意味着:
|
||||
- 每一个工具调用都会被观察到
|
||||
钩子(Hooks)的触发是 **100% 确定性的**。这意味着:
|
||||
- 每一个工具调用都会被观测到
|
||||
- 不会遗漏任何模式
|
||||
- 学习是全面的
|
||||
|
||||
## 向后兼容性
|
||||
## 向下兼容性
|
||||
|
||||
v2 完全兼容 v1:
|
||||
- 现有的 `~/.claude/skills/learned/` 技能仍然有效
|
||||
- Stop 钩子仍然运行(但现在也会输入到 v2 系统中)
|
||||
- 渐进式迁移路径:并行运行两者
|
||||
- Stop 钩子仍然运行(但现在也会为 v2 提供输入)
|
||||
- 渐进式迁移路径:两者并行运行
|
||||
|
||||
## 隐私
|
||||
## 隐私(Privacy)
|
||||
|
||||
- 观察结果保存在你的本地机器上
|
||||
- 只有 **直觉(instincts)**(即模式)可以被导出
|
||||
- 不会共享实际的代码或对话内容
|
||||
- 你可以控制哪些内容被导出
|
||||
- 观测结果保存在你本地机器上
|
||||
- 只有**直觉**(模式)可以被导出
|
||||
- 不会分享实际的代码或对话内容
|
||||
- 你可以控制导出的内容
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [Skill Creator](https://skill-creator.app) - 从仓库历史生成直觉
|
||||
- [Homunculus](https://github.com/humanplane/homunculus) - v2 架构的灵感来源
|
||||
- [The Longform Guide](https://x.com/affaanmustafa/status/2014040193557471352) - 持续学习章节
|
||||
- [长篇指南(The Longform Guide)](https://x.com/affaanmustafa/status/2014040193557471352) - 持续学习章节
|
||||
|
||||
---
|
||||
|
||||
*基于直觉的学习:通过一次又一次的观察,教会 Claude 你的模式。*
|
||||
*基于直觉的学习:通过每一次观测,教会 Claude 你的模式。*
|
||||
@@ -1,11 +1,11 @@
|
||||
---
|
||||
name: evolve
|
||||
description: 将相关本能(Instincts)聚类为技能、命令或智能体
|
||||
description: 将相关本能 (Instincts) 聚类为技能 (Skills)、命令 (Commands) 或智能体 (Agents)
|
||||
command: /evolve
|
||||
implementation: python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve
|
||||
---
|
||||
|
||||
# 演进(Evolve)命令
|
||||
# 演进 (Evolve) 命令
|
||||
|
||||
## 实现
|
||||
|
||||
@@ -13,23 +13,23 @@ implementation: python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve [--generate]
|
||||
```
|
||||
|
||||
分析本能(Instincts)并将相关的本能聚类为更高级别的结构:
|
||||
- **命令(Commands)**:当本能描述的是用户调用的操作时
|
||||
- **技能(Skills)**:当本能描述的是自动触发的行为时
|
||||
- **智能体(Agents)**:当本能描述的是复杂的、多步骤的过程时
|
||||
分析本能 (Instincts) 并将相关的本能聚类为更高级别的结构:
|
||||
- **命令 (Commands)**:当本能描述的是用户调用的操作时
|
||||
- **技能 (Skills)**:当本能描述的是自动触发的行为时
|
||||
- **智能体 (Agents)**:当本能描述的是复杂的、多步骤的过程时
|
||||
|
||||
## 用法
|
||||
|
||||
```
|
||||
/evolve # 分析所有本能并建议演进方案
|
||||
/evolve --domain testing # 仅演进测试领域(testing domain)中的本能
|
||||
/evolve --domain testing # 仅演进测试领域 (testing domain) 中的本能
|
||||
/evolve --dry-run # 显示将要创建的内容而不实际执行
|
||||
/evolve --threshold 5 # 要求 5 个或更多相关本能才进行聚类
|
||||
```
|
||||
|
||||
## 演进规则
|
||||
|
||||
### → 命令(Command,用户调用)
|
||||
### → 命令 (Command,用户调用)
|
||||
当本能描述用户会显式请求的操作时:
|
||||
- 多个关于“当用户要求...”的本能
|
||||
- 带有“在创建新的 X 时”等触发器的本能
|
||||
@@ -42,7 +42,7 @@ python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve [
|
||||
|
||||
→ 创建:`/new-table` 命令
|
||||
|
||||
### → 技能(Skill,自动触发)
|
||||
### → 技能 (Skill,自动触发)
|
||||
当本能描述应该自动发生的行为时:
|
||||
- 模式匹配触发器
|
||||
- 错误处理响应
|
||||
@@ -55,9 +55,9 @@ python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve [
|
||||
|
||||
→ 创建:`functional-patterns` 技能
|
||||
|
||||
### → 智能体(Agent,需要深度/隔离)
|
||||
### → 智能体 (Agent,需要深度/隔离)
|
||||
当本能描述受益于隔离的复杂、多步骤过程时:
|
||||
- 调试工作流(Workflow)
|
||||
- 调试工作流 (Workflow)
|
||||
- 重构序列
|
||||
- 研究任务
|
||||
|
||||
@@ -85,7 +85,7 @@ python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve [
|
||||
## 输出格式
|
||||
|
||||
```
|
||||
🧬 演进分析(Evolve Analysis)
|
||||
🧬 演进分析 (Evolve Analysis)
|
||||
==================
|
||||
|
||||
发现 3 个已准备好演进的聚类:
|
||||
@@ -121,7 +121,7 @@ python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve [
|
||||
运行 `/evolve --execute` 来创建这些文件。
|
||||
```
|
||||
|
||||
## 标志(Flags)
|
||||
## 标志 (Flags)
|
||||
|
||||
- `--execute`:实际创建演进后的结构(默认为预览)
|
||||
- `--dry-run`:预览而不创建
|
||||
|
||||
@@ -132,4 +132,4 @@ original_source: "session-observation" # 或 "repo-analysis"
|
||||
新直觉已保存至:~/.claude/homunculus/instincts/inherited/
|
||||
|
||||
运行 /instinct-status 查看所有直觉。
|
||||
```
|
||||
```
|
||||
@@ -5,15 +5,31 @@
|
||||
# Claude Code passes hook data via stdin as JSON.
|
||||
#
|
||||
# Hook config (in ~/.claude/settings.json):
|
||||
#
|
||||
# If installed as a plugin, use ${CLAUDE_PLUGIN_ROOT}:
|
||||
# {
|
||||
# "hooks": {
|
||||
# "PreToolUse": [{
|
||||
# "matcher": "*",
|
||||
# "hooks": [{ "type": "command", "command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh" }]
|
||||
# "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/hooks/observe.sh pre" }]
|
||||
# }],
|
||||
# "PostToolUse": [{
|
||||
# "matcher": "*",
|
||||
# "hooks": [{ "type": "command", "command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh" }]
|
||||
# "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/hooks/observe.sh post" }]
|
||||
# }]
|
||||
# }
|
||||
# }
|
||||
#
|
||||
# If installed manually to ~/.claude/skills:
|
||||
# {
|
||||
# "hooks": {
|
||||
# "PreToolUse": [{
|
||||
# "matcher": "*",
|
||||
# "hooks": [{ "type": "command", "command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh pre" }]
|
||||
# }],
|
||||
# "PostToolUse": [{
|
||||
# "matcher": "*",
|
||||
# "hooks": [{ "type": "command", "command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh post" }]
|
||||
# }]
|
||||
# }
|
||||
# }
|
||||
|
||||
@@ -8,7 +8,7 @@ const assert = require('assert');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const os = require('os');
|
||||
const { execSync, spawn } = require('child_process');
|
||||
const { spawn } = require('child_process');
|
||||
|
||||
// Test helper
|
||||
function test(name, fn) {
|
||||
@@ -113,14 +113,19 @@ async function runTests() {
|
||||
// Run the script
|
||||
await runScript(path.join(scriptsDir, 'session-end.js'));
|
||||
|
||||
// Check if session file was created (default session ID)
|
||||
// Check if session file was created
|
||||
// Note: Without CLAUDE_SESSION_ID, falls back to project name (not 'default')
|
||||
// Use local time to match the script's getDateString() function
|
||||
const sessionsDir = path.join(os.homedir(), '.claude', 'sessions');
|
||||
const now = new Date();
|
||||
const today = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`;
|
||||
const sessionFile = path.join(sessionsDir, `${today}-default-session.tmp`);
|
||||
|
||||
assert.ok(fs.existsSync(sessionFile), 'Session file should exist');
|
||||
// Get the expected session ID (project name fallback)
|
||||
const utils = require('../../scripts/lib/utils');
|
||||
const expectedId = utils.getSessionIdShort();
|
||||
const sessionFile = path.join(sessionsDir, `${today}-${expectedId}-session.tmp`);
|
||||
|
||||
assert.ok(fs.existsSync(sessionFile), `Session file should exist: ${sessionFile}`);
|
||||
})) passed++; else failed++;
|
||||
|
||||
if (await asyncTest('includes session ID in filename', async () => {
|
||||
@@ -296,7 +301,7 @@ async function runTests() {
|
||||
}
|
||||
};
|
||||
|
||||
for (const [eventType, hookArray] of Object.entries(hooks.hooks)) {
|
||||
for (const [, hookArray] of Object.entries(hooks.hooks)) {
|
||||
checkHooks(hookArray);
|
||||
}
|
||||
})) passed++; else failed++;
|
||||
@@ -320,11 +325,27 @@ async function runTests() {
|
||||
}
|
||||
};
|
||||
|
||||
for (const [eventType, hookArray] of Object.entries(hooks.hooks)) {
|
||||
for (const [, hookArray] of Object.entries(hooks.hooks)) {
|
||||
checkHooks(hookArray);
|
||||
}
|
||||
})) passed++; else failed++;
|
||||
|
||||
// plugin.json validation
|
||||
console.log('\nplugin.json Validation:');
|
||||
|
||||
if (test('plugin.json does NOT have explicit hooks declaration', () => {
|
||||
// Claude Code automatically loads hooks/hooks.json by convention.
|
||||
// Explicitly declaring it in plugin.json causes a duplicate detection error.
|
||||
// See: https://github.com/affaan-m/everything-claude-code/issues/103
|
||||
const pluginPath = path.join(__dirname, '..', '..', '.claude-plugin', 'plugin.json');
|
||||
const plugin = JSON.parse(fs.readFileSync(pluginPath, 'utf8'));
|
||||
|
||||
assert.ok(
|
||||
!plugin.hooks,
|
||||
'plugin.json should NOT have "hooks" field - Claude Code auto-loads hooks/hooks.json'
|
||||
);
|
||||
})) passed++; else failed++;
|
||||
|
||||
// Summary
|
||||
console.log('\n=== Test Results ===');
|
||||
console.log(`Passed: ${passed}`);
|
||||
|
||||
@@ -11,7 +11,6 @@ const os = require('os');
|
||||
|
||||
// Import the modules
|
||||
const pm = require('../../scripts/lib/package-manager');
|
||||
const utils = require('../../scripts/lib/utils');
|
||||
|
||||
// Test helper
|
||||
function test(name, fn) {
|
||||
|
||||
+25
-32
@@ -7,7 +7,6 @@
|
||||
const assert = require('assert');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const os = require('os');
|
||||
|
||||
// Import the module
|
||||
const utils = require('../../scripts/lib/utils');
|
||||
@@ -106,58 +105,52 @@ function runTests() {
|
||||
assert.ok(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(dt), `Expected YYYY-MM-DD HH:MM:SS, got ${dt}`);
|
||||
})) passed++; else failed++;
|
||||
|
||||
// Project name tests
|
||||
console.log('\nProject Name Functions:');
|
||||
|
||||
if (test('getGitRepoName returns string or null', () => {
|
||||
const repoName = utils.getGitRepoName();
|
||||
assert.ok(repoName === null || typeof repoName === 'string');
|
||||
})) passed++; else failed++;
|
||||
|
||||
if (test('getProjectName returns non-empty string', () => {
|
||||
const name = utils.getProjectName();
|
||||
assert.ok(name && name.length > 0);
|
||||
})) passed++; else failed++;
|
||||
|
||||
// Session ID tests
|
||||
console.log('\nSession ID Functions:');
|
||||
|
||||
if (test('getSessionIdShort returns default when no env var', () => {
|
||||
const originalEnv = process.env.CLAUDE_SESSION_ID;
|
||||
if (test('getSessionIdShort falls back to project name', () => {
|
||||
const original = process.env.CLAUDE_SESSION_ID;
|
||||
delete process.env.CLAUDE_SESSION_ID;
|
||||
try {
|
||||
const shortId = utils.getSessionIdShort();
|
||||
assert.strictEqual(shortId, 'default');
|
||||
assert.strictEqual(shortId, utils.getProjectName());
|
||||
} finally {
|
||||
if (originalEnv) process.env.CLAUDE_SESSION_ID = originalEnv;
|
||||
if (original) process.env.CLAUDE_SESSION_ID = original;
|
||||
}
|
||||
})) passed++; else failed++;
|
||||
|
||||
if (test('getSessionIdShort returns last 8 characters', () => {
|
||||
const originalEnv = process.env.CLAUDE_SESSION_ID;
|
||||
const original = process.env.CLAUDE_SESSION_ID;
|
||||
process.env.CLAUDE_SESSION_ID = 'test-session-abc12345';
|
||||
try {
|
||||
const shortId = utils.getSessionIdShort();
|
||||
assert.strictEqual(shortId, 'abc12345');
|
||||
assert.strictEqual(utils.getSessionIdShort(), 'abc12345');
|
||||
} finally {
|
||||
if (originalEnv) {
|
||||
process.env.CLAUDE_SESSION_ID = originalEnv;
|
||||
} else {
|
||||
delete process.env.CLAUDE_SESSION_ID;
|
||||
}
|
||||
}
|
||||
})) passed++; else failed++;
|
||||
|
||||
if (test('getSessionIdShort uses custom fallback', () => {
|
||||
const originalEnv = process.env.CLAUDE_SESSION_ID;
|
||||
delete process.env.CLAUDE_SESSION_ID;
|
||||
try {
|
||||
const shortId = utils.getSessionIdShort('custom');
|
||||
assert.strictEqual(shortId, 'custom');
|
||||
} finally {
|
||||
if (originalEnv) process.env.CLAUDE_SESSION_ID = originalEnv;
|
||||
if (original) process.env.CLAUDE_SESSION_ID = original;
|
||||
else delete process.env.CLAUDE_SESSION_ID;
|
||||
}
|
||||
})) passed++; else failed++;
|
||||
|
||||
if (test('getSessionIdShort handles short session IDs', () => {
|
||||
const originalEnv = process.env.CLAUDE_SESSION_ID;
|
||||
const original = process.env.CLAUDE_SESSION_ID;
|
||||
process.env.CLAUDE_SESSION_ID = 'short';
|
||||
try {
|
||||
const shortId = utils.getSessionIdShort();
|
||||
assert.strictEqual(shortId, 'short');
|
||||
assert.strictEqual(utils.getSessionIdShort(), 'short');
|
||||
} finally {
|
||||
if (originalEnv) {
|
||||
process.env.CLAUDE_SESSION_ID = originalEnv;
|
||||
} else {
|
||||
delete process.env.CLAUDE_SESSION_ID;
|
||||
}
|
||||
if (original) process.env.CLAUDE_SESSION_ID = original;
|
||||
else delete process.env.CLAUDE_SESSION_ID;
|
||||
}
|
||||
})) passed++; else failed++;
|
||||
|
||||
|
||||
+22
-14
@@ -4,8 +4,8 @@
|
||||
"content": "# Claude Code \u5168\u65b9\u4f4d\u901f\u67e5\u624b\u518c\n\n\n\n---\n\n**\u81ea 2 \u6708\u4efd\u5b9e\u9a8c\u6027\u63a8\u51fa\u4ee5\u6765\uff0c\u6211\u4e00\u76f4\u662f Claude Code \u7684\u5fe0\u5b9e\u7528\u6237\u3002\u6211\u4e0e [@DRodriguezFX](https://x.com/DRodriguezFX) \u5408\u4f5c\uff0c\u5b8c\u5168\u4f7f\u7528 Claude Code \u5f00\u53d1\u4e86 [zenith.chat](https://zenith.chat)\uff0c\u5e76\u8d62\u5f97\u4e86 Anthropic x Forum Ventures \u9ed1\u5ba2\u677e\u3002**\n\n\u4ee5\u4e0b\u662f\u6211\u5728 10 \u4e2a\u6708\u7684\u65e5\u5e38\u4f7f\u7528\u540e\u603b\u7ed3\u51fa\u7684\u5b8c\u6574\u914d\u7f6e\uff1a\u6280\u80fd\uff08Skills\uff09\u3001\u751f\u547d\u5468\u671f\u94a9\u5b50\uff08Hooks\uff09\u3001\u5b50\u667a\u80fd\u4f53\uff08Subagents\uff09\u3001\u6a21\u578b\u4e0a\u4e0b\u6587\u534f\u8bae\uff08MCPs\uff09\u3001\u63d2\u4ef6\uff08Plugins\uff09\u4ee5\u53ca\u771f\u6b63\u884c\u4e4b\u6709\u6548\u7684\u5b9e\u8df5\u65b9\u6848\u3002\n\n---\n\n## \u6280\u80fd\uff08Skills\uff09\u4e0e\u547d\u4ee4\uff08Commands\uff09\n\n\u6280\u80fd\uff08Skills\uff09\u7c7b\u4f3c\u4e8e\u89c4\u5219\uff0c\u4f46\u88ab\u9650\u5b9a\u5728\u7279\u5b9a\u7684\u4f5c\u7528\u57df\u548c\u5de5\u4f5c\u6d41\u4e2d\u3002\u5f53\u4f60\u9700\u8981\u6267\u884c\u7279\u5b9a\u5de5\u4f5c\u6d41\u65f6\uff0c\u5b83\u4eec\u662f\u63d0\u793a\u8bcd\uff08Prompts\uff09\u7684\u5feb\u6377\u65b9\u5f0f\u3002\n\n\u5728\u4f7f\u7528 Opus 4.5 \u8fdb\u884c\u957f\u65f6\u95f4\u7f16\u7801\u540e\uff0c\u60f3\u8981\u6e05\u7406\u5e9f\u5f03\u4ee3\u7801\u548c\u6563\u843d\u7684 .md \u6587\u4ef6\uff1f\u8fd0\u884c `/refactor-clean`\u3002\u9700\u8981\u6d4b\u8bd5\uff1f\u4f7f\u7528 `/tdd`\u3001`/e2e`\u3001`/test-coverage`\u3002\u6280\u80fd\u8fd8\u53ef\u4ee5\u5305\u542b\u4ee3\u7801\u6620\u5c04\uff08Codemaps\uff09\u2014\u2014\u8fd9\u662f\u4e00\u79cd\u8ba9 Claude \u5feb\u901f\u5bfc\u822a\u4ee3\u7801\u5e93\u7684\u65b9\u6cd5\uff0c\u800c\u4e0d\u4f1a\u5728\u63a2\u7d22\u8fc7\u7a0b\u4e2d\u6d6a\u8d39\u4e0a\u4e0b\u6587\uff08Context\uff09\u3002\n\n\n*\u94fe\u5f0f\u8c03\u7528\u591a\u4e2a\u547d\u4ee4*\n\n\u547d\u4ee4\uff08Commands\uff09\u662f\u901a\u8fc7\u659c\u6760\u547d\u4ee4\uff08Slash Commands\uff09\u6267\u884c\u7684\u6280\u80fd\u3002\u5b83\u4eec\u5728\u529f\u80fd\u4e0a\u6709\u91cd\u53e0\uff0c\u4f46\u5b58\u50a8\u65b9\u5f0f\u4e0d\u540c\uff1a\n\n- **\u6280\u80fd (Skills)**: `~/.claude/skills/` - \u66f4\u5e7f\u6cdb\u7684\u5de5\u4f5c\u6d41\u5b9a\u4e49\n- **\u547d\u4ee4 (Commands)**: `~/.claude/commands/` - \u5feb\u901f\u53ef\u6267\u884c\u7684\u63d0\u793a\u8bcd\n\n```bash\n# \u793a\u4f8b\u6280\u80fd\u7ed3\u6784\n~/.claude/skills/\n pmx-guidelines.md # \u9879\u76ee\u7279\u5b9a\u6a21\u5f0f\n coding-standards.md # \u8bed\u8a00\u6700\u4f73\u5b9e\u8df5\n tdd-workflow/ # \u5305\u542b README.md \u7684\u591a\u6587\u4ef6\u6280\u80fd\n security-review/ # \u57fa\u4e8e\u6e05\u5355\u7684\u6280\u80fd\n```\n\n---\n\n## \u751f\u547d\u5468\u671f\u94a9\u5b50\uff08Hooks\uff09\n\n\u751f\u547d\u5468\u671f\u94a9\u5b50\uff08Hooks\uff09\u662f\u57fa\u4e8e\u89e6\u53d1\u5668\u7684\u81ea\u52a8\u5316\u529f\u80fd\uff0c\u5728\u7279\u5b9a\u4e8b\u4ef6\u53d1\u751f\u65f6\u89e6\u53d1\u3002\u4e0e\u6280\u80fd\u4e0d\u540c\uff0c\u5b83\u4eec\u88ab\u9650\u5236\u5728\u5de5\u5177\u8c03\u7528\uff08Tool Calls\uff09\u548c\u751f\u547d\u5468\u671f\u4e8b\u4ef6\u4e2d\u3002\n\n**\u94a9\u5b50\u7c7b\u578b\uff1a**\n\n1. **PreToolUse** - \u5de5\u5177\u6267\u884c\u524d\uff08\u9a8c\u8bc1\u3001\u63d0\u9192\uff09\n2. **PostToolUse** - \u5de5\u5177\u6267\u884c\u540e\uff08\u683c\u5f0f\u5316\u3001\u53cd\u9988\u5faa\u73af\uff09\n3. **UserPromptSubmit** - \u53d1\u9001\u6d88\u606f\u65f6\n4. **Stop** - Claude \u5b8c\u6210\u54cd\u5e94\u65f6\n5. **PreCompact** - \u4e0a\u4e0b\u6587\u538b\u7f29\u524d\n6. **Notification** - \u6743\u9650\u8bf7\u6c42\n\n**\u793a\u4f8b\uff1a\u5728\u6267\u884c\u8017\u65f6\u547d\u4ee4\u524d\u53d1\u9001 tmux \u63d0\u9192**\n\n```json\n{\n \"PreToolUse\": [\n {\n \"matcher\": \"tool == \\\"Bash\\\" && tool_input.command matches \\\"(npm|pnpm|yarn|cargo|pytest)\\\"\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"if [ -z \\\"$TMUX\\\" ]; then echo '[Hook] Consider tmux for session persistence' >&2; fi\"\n }\n ]\n }\n ]\n}\n```\n\n\n*\u8fd0\u884c PostToolUse \u94a9\u5b50\u65f6\u5728 Claude Code \u4e2d\u83b7\u5f97\u7684\u53cd\u9988\u793a\u4f8b*\n\n**\u4e13\u5bb6\u63d0\u793a\uff1a** \u4f7f\u7528 `hookify` \u63d2\u4ef6\u53ef\u4ee5\u901a\u8fc7\u5bf9\u8bdd\u65b9\u5f0f\u521b\u5efa\u94a9\u5b50\uff0c\u800c\u65e0\u9700\u624b\u52a8\u7f16\u5199 JSON\u3002\u8fd0\u884c `/hookify` \u5e76\u63cf\u8ff0\u4f60\u7684\u9700\u6c42\u53Line truncated
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/README.md": {
|
||||
"md5": "cedc12b4caa63f6ddeb8fbbb7cf84949",
|
||||
"content": "# Everything Claude Code (Claude Code \u5168\u96c6)\n\n[](https://github.com/affaan-m/everything-claude-code/stargazers)\n[](LICENSE)\n\n\n\n\n\n**\u6765\u81ea Anthropic \u9ed1\u5ba2\u677e\u83b7\u80dc\u8005\u7684 Claude Code \u914d\u7f6e\u5b8c\u6574\u5408\u96c6\u3002**\n\n\u5305\u542b\u751f\u4ea7\u7ea7\u667a\u80fd\u4f53\uff08Agents\uff09\u3001\u6280\u80fd\uff08Skills\uff09\u3001\u94a9\u5b50\uff08Hooks\uff09\u3001\u547d\u4ee4\uff08Commands\uff09\u3001\u89c4\u7ea6\uff08Rules\uff09\u4ee5\u53ca MCP \u914d\u7f6e\uff0c\u8fd9\u4e9b\u90fd\u662f\u5728\u8d85\u8fc7 10 \u4e2a\u6708\u7684\u771f\u5b9e\u4ea7\u54c1\u5f00\u53d1\u4e0e\u6df1\u5ea6\u65e5\u5e38\u4f7f\u7528\u4e2d\u6f14\u8fdb\u51fa\u6765\u7684\u3002\n\n---\n\n## \u6307\u5357\u6587\u6863\n\n\u672c\u4ed3\u5e93\u4ec5\u5305\u542b\u539f\u59cb\u4ee3\u7801\u3002\u4ee5\u4e0b\u6307\u5357\u5c06\u89e3\u91ca\u4e00\u5207\u3002\n\n<table>\n<tr>\n<td width=\"50%\">\n<a href=\"https://x.com/affaanmustafa/status/2012378465664745795\">\n<img src=\"https://github.com/user-attachments/assets/1a471488-59cc-425b-8345-5245c7efbcef\" alt=\"The Shorthand Guide to Everything Claude Code\" />\n</a>\n</td>\n<td width=\"50%\">\n<a href=\"https://x.com/affaanmustafa/status/2014040193557471352\">\n<img src=\"https://github.com/user-attachments/assets/c9ca43bc-b149-427f-b551-af6840c368f0\" alt=\"The Longform Guide to Everything Claude Code\" />\n</a>\n</td>\n</tr>\n<tr>\n<td align=\"center\"><b>\u7b80\u660e\u6307\u5357 (Shorthand Guide)</b><br/>\u5b89\u88c5\u8bbe\u7f6e\u3001\u57fa\u7840\u6982\u5ff5\u4e0e\u54f2\u5b66\u3002<b>\u8bf7\u5148\u9605\u8bfb\u6b64\u7bc7\u3002</b></td>\n<td align=\"center\"><b>\u6df1\u5ea6\u6307\u5357 (Longform Guide)</b><br/>Token \u4f18\u5316\u3001\u5185\u5b58\u6301\u4e45\u5316\u3001\u8bc4\u6d4b\uff08Evals\uff09\u4e0e\u5e76\u884c\u5316\u3002</td>\n</tr>\n</table>\n\n| \u4e3b\u9898 | \u4f60\u5c06\u5b66\u5230\u4ec0\u4e48 |\n|-------|-------------------|\n| Token \u4f18\u5316 | \u6a21\u578b\u9009\u62e9\u3001\u7cfb\u7edf\u63d0\u793a\u8bcd\u7626\u8eab\u3001\u540e\u53f0\u8fdb\u7a0b |\n| \u5185\u5b58\u6301\u4e45\u5316 | \u81ea\u52a8\u8de8\u4f1a\u8bdd\u4fdd\u5b58/\u52a0\u8f7d\u4e0a\u4e0b\u6587\u7684\u94a9\u5b50\uff08Hooks\uff09 |\n| \u6301\u7eed\u5b66\u4e60 | \u4ece\u4f1a\u8bdd\u4e2d\u81ea\u52a8\u63d0\u53d6\u6a21\u5f0f\u5e76\u8f6c\u5316\u4e3a\u53ef\u590d\u7528\u7684\u6280\u80fd\uff08Skills\uff09 |\n| \u9a8c\u8bc1\u5faa\u73af | \u68c0\u67e5\u70b9 vs \u6301\u7eed\u8bc4\u6d4b\u3001\u6253\u5206\u5668\u7c7b\u578b\u3001pass@k \u6307\u6807 |\n| \u5e76\u884c\u5316 | Git worktrees\u3001\u7ea7\u8054\u6cd5\uff08Cascade method\uff09\u3001\u4f55\u65f6\u6269\u5c55\u5b9e\u4f8b |\n| \u5b50\u667a\u80fd\u4f53\u7f16\u6392 | \u4e0a\u4e0b\u6587\u95ee\u9898\u3001\u8fed\u4ee3\u68c0\u7d22\u6a21\u5f0f\uff08Iterative retrieval pattern\uff09 |\n\n---\n\n## \u8de8\u5e73\u53f0\u652f\u6301\n\n\u672c\u63d2\u4ef6\u73b0\u5df2\u5168\u9762\u652f\u6301 **Windows\u3001macOS \u548c Linux**\u3002\u6240\u6709\u94a9\u5b50\u548c\u811a\u672c\u5747\u5df2\u4f7f\u7528 Node.js \u91cd\u5199\uff0c\u4ee5\u5b9e\u73b0\u6700\u5927\u517c\u5bb9\u6027\u3002\n\n### \u5305\u7ba1\u7406\u5668\u68c0\u6d4b\n\n\u63d2\u4ef6\u4f1a\u81ea\u52a8\u68c0\u6d4b\u4f60\u504f\u597d\u7684\u5305\u7ba1\u7406\u5668\uff08npm, pnpm, yarn, \u6216 bun\uff09\uff0c\u4f18\u5148\u7ea7\u5982\u4e0b\uff1a\n\n1. **\u73af\u5883\u53d8\u91cf**\uff1a`CLAUDE_PACKAGE_MANAGER`\n2. **\u9879\u76ee\u914d\u7f6e**\uff1a`.claude/package-manager.json`\n3. **package.json**\uff1a`packageManager` \u5b57\u6bb5\n4. **\u9501\u6587\u4ef6**\uff1a\u6839\u636e package-lock.json, yarn.lock, pnpm-lock.yaml, \u6216 bun.lockb \u68c0\u6d4b\n5. **\u5168\u5c40\u914d\u7f6e**\uff1a`~/.claude/package-manager.json`\n6. **\u5907\u9009\u9879**\uff1a\u7b2c\u4e00\u4e2a\u53ef\u7528\u7684\u5305\u7ba1\u7406\u5668\n\n\u8bbe\u7f6e\u4f60\u504f\u597d\u7684\u5305\u7ba1\u7406\u5668\uff1a\n\n```bash\n# \u901a\u8fc7\u73af\u5883\u53d8\u91cf\nexport CLAUDE_PACKAGE_MANAGER=pnpm\n\n# \u901a\u8fc7\u5168\u5c40\u914d\u7f6e\nnode scripts/setup-package-manager.js --global pnpm\n\n# \u901a\u8fc7\u9879\u76ee\u914d\u7f6e\nnode scripts/setup-package-manager.js --project bun\n\n# \u68c0\u6d4b\u5f53\u524d\u8bbe\u7f6e\nnode scripts/setup-package-manager.js --detect\n```\n\n\u6216\u8005\u5728 Claude Code \u4e2d\u4f7f\u7528 `/setup-pm` \u547d\u4ee4\u3002\n\n---\n\n## \u6838\u5fc3\u5185\u5bb9\n\n\u672c\u4ed3\u5e93\u662f\u4e00\u4e2a **Claude Code \u63d2\u4ef6** \u2014\u2014 \u4f60\u53ef\u4ee5\u76f4\u63a5\u5b89\u88c5\uff0c\u4e5f\u53ef\u4ee5\u624bLine truncated
|
||||
"md5": "1d090c2531031d817553cd6b1e0b9b6d",
|
||||
"content": "**\u8bed\u8a00\uff1a** [English](README.md) | \u7e41\u9ad4\u4e2d\u6587\n\n# Everything Claude Code\n\n[](https://github.com/affaan-m/everything-claude-code/stargazers)\n[](LICENSE)\n\n\n\n\n\n<p align=\"left\">\n <a href=\"README.md\">English</a> |\n <span>\u7b80\u4f53\u4e2d\u6587</span>\n</p>\n\n**\u7531 Anthropic \u9ed1\u5ba2\u677e\u83b7\u80dc\u8005\u6574\u7406\u7684 Claude Code \u914d\u7f6e\u5b8c\u6574\u5408\u96c6\u3002**\n\n\u8fd9\u662f\u5728 10 \u4e2a\u6708\u4ee5\u4e0a\u9ad8\u5f3a\u5ea6\u65e5\u5e38\u5f00\u53d1\u771f\u5b9e\u4ea7\u54c1\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4e0d\u65ad\u6f14\u8fdb\u51fa\u7684\u751f\u4ea7\u7ea7\u667a\u80fd\u4f53\uff08Agents\uff09\u3001\u6280\u80fd\uff08Skills\uff09\u3001\u94a9\u5b50\uff08Hooks\uff09\u3001\u547d\u4ee4\uff08Commands\uff09\u3001\u89c4\u5219\uff08Rules\uff09\u4ee5\u53ca MCP \u914d\u7f6e\u3002\n\n---\n\n## \u6307\u5357\uff08The Guides\uff09\n\n\u672c\u4ed3\u5e93\u4ec5\u5305\u542b\u539f\u59cb\u4ee3\u7801\u3002\u4ee5\u4e0b\u6307\u5357\u5c06\u89e3\u91ca\u6240\u6709\u7ec6\u8282\u3002\n\n<table>\n<tr>\n<td width=\"50%\">\n<a href=\"the-shortform-guide_zh.md\">\n<img src=\"https://github.com/user-attachments/assets/1a471488-59cc-425b-8345-5245c7efbcef\" alt=\"Everything Claude Code \u7b80\u660e\u6307\u5357\" />\n</a>\n</td>\n<td width=\"50%\">\n<a href=\"the-longform-guide.md\">\n<img src=\"https://github.com/user-attachments/assets/c9ca43bc-b149-427f-b551-af6840c368f0\" alt=\"Everything Claude Code \u6df1\u5ea6\u6307\u5357\" />\n</a>\n</td>\n</tr>\n<tr>\n<td align=\"center\"><b>\u7b80\u660e\u6307\u5357 (Shorthand Guide)</b><br/>\u5b89\u88c5\u3001\u57fa\u7840\u3001\u54f2\u5b66\u3002<b>\u8bf7\u5148\u9605\u8bfb\u6b64\u7bc7\u3002</b></td>\n<td align=\"center\"><b>\u6df1\u5ea6\u6307\u5357 (Longform Guide)</b><br/>Token \u4f18\u5316\u3001\u5185\u5b58\u6301\u4e45\u5316\u3001\u8bc4\u6d4b\uff08Evals\uff09\u3001\u5e76\u884c\u5316\u3002</td>\n</tr>\n</table>\n\n| \u4e3b\u9898 | \u4f60\u5c06\u5b66\u5230\u4ec0\u4e48 |\n|-------|-------------------|\n| Token \u4f18\u5316 | \u6a21\u578b\u9009\u62e9\u3001\u7cfb\u7edf\u63d0\u793a\u8bcd\u7cbe\u7b80\u3001\u540e\u53f0\u8fdb\u7a0b |\n| \u5185\u5b58\u6301\u4e45\u5316 | \u8de8\u4f1a\u8bdd\uff08Session\uff09\u81ea\u52a8\u4fdd\u5b58/\u52a0\u8f7d\u4e0a\u4e0b\u6587\u7684\u94a9\u5b50\uff08Hooks\uff09 |\n| \u6301\u7eed\u5b66\u4e60 | \u4ece\u4f1a\u8bdd\u4e2d\u81ea\u52a8\u63d0\u53d6\u6a21\u5f0f\u5e76\u8f6c\u5316\u4e3a\u53ef\u590d\u7528\u7684\u6280\u80fd\uff08Skills\uff09 |\n| \u9a8c\u8bc1\u5faa\u73af | \u68c0\u67e5\u70b9\uff08Checkpoint\uff09\u4e0e\u6301\u7eed\u8bc4\u6d4b\uff08Evals\uff09\u3001\u8bc4\u5206\u5668\u7c7b\u578b\u3001pass@k \u6307\u6807 |\n| \u5e76\u884c\u5316 | Git worktrees\u3001\u7ea7\u8054\u65b9\u6cd5\u3001\u4f55\u65f6\u6269\u5c55\u5b9e\u4f8b |\n| \u5b50\u667a\u80fd\u4f53\u7f16\u6392 | \u4e0a\u4e0b\u6587\u95ee\u9898\u3001\u8fed\u4ee3\u68c0\u7d22\u6a21\u5f0f |\n\n---\n\n## \u8de8\u5e73\u53f0\u652f\u6301\n\n\u8be5\u63d2\u4ef6\u73b0\u5df2\u5168\u9762\u652f\u6301 **Windows\u3001macOS \u548c Linux**\u3002\u6240\u6709\u94a9\u5b50\uff08Hooks\uff09\u548c\u811a\u672c\u90fd\u5df2\u4f7f\u7528 Node.js \u91cd\u5199\uff0c\u4ee5\u5b9e\u73b0\u6700\u5927\u7684\u517c\u5bb9\u6027\u3002\n\n### \u5305\u7ba1\u7406\u5668\u68c0\u6d4b\n\n\u63d2\u4ef6\u4f1a\u81ea\u52a8\u68c0\u6d4b\u4f60\u504f\u597d\u7684\u5305\u7ba1\u7406\u5668\uff08npm, pnpm, yarn, \u6216 bun\uff09\uff0c\u4f18\u5148\u7ea7\u5982\u4e0b\uff1a\n\n1. **\u73af\u5883\u53d8\u91cf**\uff1a`CLAUDE_PACKAGE_MANAGER`\n2. **\u9879\u76ee\u914d\u7f6e**\uff1a`.claude/package-manager.json`\n3. **package.json**\uff1a`packageManager` \u5b57\u6bb5\n4. **\u9501\u6587\u4ef6**\uff1a\u6839\u636e package-lock.json, yarn.lock, pnpm-lock.yaml \u6216 bun.lockb \u68c0\u6d4b\n5. **\u5168\u5c40\u914d\u7f6e**\uff1a`~/.claude/package-manager.json`\n6. **\u5907\u9009\u9879**\uff1a\u7b2c\u4e00\u4e2a\u53ef\u7528\u7684\u5305\u7ba1\u7406\u5668\n\n\u8bbe\u7f6e\u4f60\u504f\u597d\u7684\u5305\u7ba1\u7406\u5668\uff1a\n\n```bash\n# \u901a\u8fc7\u73af\u5883\u53d8\u91cf\nexport CLAUDE_PACKAGE_MANAGER=pnpm\n\n# \u901a\u8fc7\u5168\u5c40\u914d\u7f6e\nnode scripts/setup-package-manager.js --global pnpm\n\n# \u901a\u8fc7\u9879\u76ee\u914d\u7f6e\nnode scripts/setup-package-manager.js --project bun\n\n# \u68c0\u6d4b\u5f53\u524d\u8bbe\u7f6e\nnode scripts/setup-package-manager.js --detect\n```\n\n\u6216\u8005\u5728 Claude Code \u4e2d\u4f7f\u7528 `/setup-pm` \u547d\u4ee4\u3002\n\n---\n\n## \u5305\u542b\u5185\u5bb9\n\n\u672c\u4ed3\u5e93\u662f\u4e00\u4e2a **ClaudLine truncated
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/CONTRIBUTING.md": {
|
||||
"md5": "eccf62e6ed292589dc5661a208902ddb",
|
||||
@@ -88,8 +88,8 @@
|
||||
"content": "---\nname: build-error-resolver\ndescription: \u6784\u5efa\u4e0e TypeScript \u9519\u8bef\u4fee\u590d\u4e13\u5bb6\u3002\u5f53\u6784\u5efa\u5931\u8d25\u6216\u51fa\u73b0\u7c7b\u578b\u9519\u8bef\u65f6\u4e3b\u52a8\u4f7f\u7528\u3002\u4ec5\u4ee5\u6700\u5c0f\u5dee\u5f02\u4fee\u6539\uff08minimal diffs\uff09\u4fee\u590d\u6784\u5efa/\u7c7b\u578b\u9519\u8bef\uff0c\u4e0d\u8fdb\u884c\u67b6\u6784\u5c42\u9762\u7684\u7f16\u8f91\u3002\u4e13\u6ce8\u4e8e\u5feb\u901f\u6062\u590d\u7eff\u8272\u6784\u5efa\u72b6\u6001\u3002\ntools: [\"Read\", \"Write\", \"Edit\", \"Bash\", \"Grep\", \"Glob\"]\nmodel: opus\n---\n\n# \u6784\u5efa\u9519\u8bef\u4fee\u590d\u4e13\u5bb6 (Build Error Resolver)\n\n\u4f60\u662f\u4e00\u540d\u8d44\u6df1\u7684\u6784\u5efa\u9519\u8bef\u4fee\u590d\u4e13\u5bb6\uff0c\u4e13\u6ce8\u4e8e\u5feb\u901f\u9ad8\u6548\u5730\u4fee\u590d TypeScript\u3001\u7f16\u8bd1\u548c\u6784\u5efa\u9519\u8bef\u3002\u4f60\u7684\u4f7f\u547d\u662f\u4f7f\u7528\u6700\u5c0f\u7684\u6539\u52a8\u8ba9\u6784\u5efa\u901a\u8fc7\uff0c\u4e0d\u6d89\u53ca\u4efb\u4f55\u67b6\u6784\u4fee\u6539\u3002\n\n## \u6838\u5fc3\u804c\u8d23\n\n1. **TypeScript \u9519\u8bef\u89e3\u51b3** - \u4fee\u590d\u7c7b\u578b\u9519\u8bef\u3001\u63a8\u65ad\u95ee\u9898\u3001\u6cdb\u578b\u7ea6\u675f\u3002\n2. **\u6784\u5efa\u9519\u8bef\u4fee\u590d** - \u89e3\u51b3\u7f16\u8bd1\u5931\u8d25\u3001\u6a21\u5757\u89e3\u6790\uff08Module Resolution\uff09\u95ee\u9898\u3002\n3. **\u4f9d\u8d56\u95ee\u9898** - \u4fee\u590d\u5bfc\u5165\u9519\u8bef\u3001\u7f3a\u5931\u7684\u5305\u3001\u7248\u672c\u51b2\u7a81\u3002\n4. **\u914d\u7f6e\u9519\u8bef** - \u89e3\u51b3 `tsconfig.json`\u3001webpack\u3001Next.js \u914d\u7f6e\u95ee\u9898\u3002\n5. **\u6700\u5c0f\u5dee\u5f02\u4fee\u6539 (Minimal Diffs)** - \u5c3d\u53ef\u80fd\u901a\u8fc7\u6700\u5c0f\u7684\u6539\u52a8\u6765\u4fee\u590d\u9519\u8bef\u3002\n6. **\u7981\u6b62\u67b6\u6784\u66f4\u6539** - \u4ec5\u4fee\u590d\u9519\u8bef\uff0c\u4e0d\u8fdb\u884c\u91cd\u6784\u6216\u91cd\u65b0\u8bbe\u8ba1\u3002\n\n## \u53ef\u7528\u5de5\u5177\n\n### \u6784\u5efa\u4e0e\u7c7b\u578b\u68c0\u67e5\u5de5\u5177\n- **tsc** - \u7528\u4e8e\u7c7b\u578b\u68c0\u67e5\u7684 TypeScript \u7f16\u8bd1\u5668\u3002\n- **npm/yarn** - \u5305\u7ba1\u7406\u3002\n- **eslint** - \u4ee3\u7801\u68c0\u67e5\uff08\u53ef\u80fd\u5bfc\u81f4\u6784\u5efa\u5931\u8d25\uff09\u3002\n- **next build** - Next.js \u751f\u4ea7\u73af\u5883\u6784\u5efa\u3002\n\n### \u8bca\u65ad\u547d\u4ee4\n```bash\n# TypeScript \u7c7b\u578b\u68c0\u67e5\uff08\u4e0d\u8f93\u51fa\u6587\u4ef6\uff09\nnpx tsc --noEmit\n\n# \u5e26\u6709\u7f8e\u5316\u8f93\u51fa\u7684 TypeScript \u68c0\u67e5\nnpx tsc --noEmit --pretty\n\n# \u663e\u793a\u6240\u6709\u9519\u8bef\uff08\u4e0d\u5728\u7b2c\u4e00\u4e2a\u9519\u8bef\u5904\u505c\u6b62\uff09\nnpx tsc --noEmit --pretty --incremental false\n\n# \u68c0\u67e5\u7279\u5b9a\u6587\u4ef6\nnpx tsc --noEmit path/to/file.ts\n\n# ESLint \u68c0\u67e5\nnpx eslint . --ext .ts,.tsx,.js,.jsx\n\n# Next.js \u6784\u5efa\uff08\u751f\u4ea7\u73af\u5883\uff09\nnpm run build\n\n# \u5e26\u6709\u8c03\u8bd5\u4fe1\u606f\u7684 Next.js \u6784\u5efa\nnpm run build -- --debug\n```\n\n## \u9519\u8bef\u5904\u7406\u5de5\u4f5c\u6d41\n\n### 1. \u6536\u96c6\u6240\u6709\u9519\u8bef\n```\na) \u8fd0\u884c\u5b8c\u6574\u7684\u7c7b\u578b\u68c0\u67e5\n - npx tsc --noEmit --pretty\n - \u6355\u83b7\u6240\u6709\u9519\u8bef\uff0c\u800c\u4e0d\u53ea\u662f\u7b2c\u4e00\u4e2a\n\nb) \u6309\u7c7b\u578b\u5bf9\u9519\u8bef\u8fdb\u884c\u5206\u7c7b\n - \u7c7b\u578b\u63a8\u65ad\u5931\u8d25\n - \u7f3a\u5931\u7c7b\u578b\u5b9a\u4e49\n - \u5bfc\u5165/\u5bfc\u51fa\u9519\u8bef\n - \u914d\u7f6e\u9519\u8bef\n - \u4f9d\u8d56\u95ee\u9898\n\nc) \u6309\u5f71\u54cd\u7a0b\u5ea6\u6392\u5e8f\n - \u963b\u585e\u6784\u5efa\u7684\u95ee\u9898\uff1a\u4f18\u5148\u4fee\u590d\n - \u7c7b\u578b\u9519\u8bef\uff1a\u6309\u987a\u5e8f\u4fee\u590d\n - \u8b66\u544a\uff1a\u65f6\u95f4\u5141\u8bb8\u65f6\u4fee\u590d\n```\n\n### 2. \u4fee\u590d\u7b56\u7565\uff08\u6700\u5c0f\u6539\u52a8\uff09\n```\n\u9488\u5bf9\u6bcf\u4e2a\u9519\u8bef\uff1a\n\n1. \u7406\u89e3\u9519\u8bef\n - \u4ed4\u7ec6\u9605\u8bfb\u9519\u8bef\u4fe1\u606f\n - \u68c0\u67e5\u6587\u4ef6\u548c\u884c\u53f7\n - \u7406\u89e3\u201c\u9884\u671f\u7c7b\u578b\u201d\u4e0e\u201c\u5b9e\u9645\u7c7b\u578b\u201d\u7684\u533a\u522b\n\n2. \u5bfb\u627e\u6700\u5c0f\u4fee\u590d\u65b9\u6848\n - \u6dfb\u52a0\u7f3a\u5931\u7684\u7c7b\u578b\u6ce8\u89e3\n - \u4fee\u590d\u5bfc\u5165\u8bed\u53e5\n - \u6dfb\u52a0\u7a7a\u503c\u68c0\u67e5\uff08Null check\uff09\n - \u4f7f\u7528\u7c7b\u578b\u65ad\u8a00\uff08\u4ec5\u4f5c\u4e3a\u6700\u540e\u624b\u6bb5\uff09\n\n3. \u9a8c\u8bc1\u4fee\u590d\u662f\u5426\u7834\u574f\u4e86\u5176\u4ed6\u4ee3\u7801\n - \u6bcf\u6b21\u4fee\u590d\u540e\u518d\u6b21\u8fd0\u884c tsc\n - \u68c0\u67e5\u76f8\u5173\u6587\u4ef6\n - \u786e\u4fdd\u6ca1\u6709\u5f15\u5165\u65b0\u7684\u9519\u8bef\n\n4. \u8fed\u4ee3\u76f4\u81f3\u6784\u5efa\u901a\u8fc7\n - \u4e00\u6b21\u53ea\u4fee\u590d\u4e00\u4e2a\u9519\u8bef\n Line truncated
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/agents/database-reviewer.md": {
|
||||
"md5": "2860171c8b2d66fb5f4fa712f1ac32d5",
|
||||
"content": "---\nname: database-reviewer\ndescription: PostgreSQL \u6570\u636e\u5e93\u4e13\u5bb6\uff0c\u4e13\u6ce8\u4e8e\u67e5\u8be2\u4f18\u5316\u3001\u6a21\u5f0f\u8bbe\u8ba1\u3001\u5b89\u5168\u6027\u548c\u6027\u80fd\u3002\u5728\u7f16\u5199 SQL\u3001\u521b\u5efa\u8fc1\u79fb\uff08migrations\uff09\u3001\u8bbe\u8ba1\u6a21\u5f0f\uff08schemas\uff09\u6216\u6392\u9664\u6570\u636e\u5e93\u6027\u80fd\u6545\u969c\u65f6\u5e94\u4e3b\u52a8\u4f7f\u7528\u3002\u6574\u5408\u4e86 Supabase \u7684\u6700\u4f73\u5b9e\u8df5\u3002\ntools: [\"Read\", \"Write\", \"Edit\", \"Bash\", \"Grep\", \"Glob\"]\nmodel: opus\n---\n\n# \u6570\u636e\u5e93\u5ba1\u67e5\u5458 (Database Reviewer)\n\n\u4f60\u662f\u4e00\u540d\u8d44\u6df1\u7684 PostgreSQL \u6570\u636e\u5e93\u4e13\u5bb6\uff0c\u4e13\u6ce8\u4e8e\u67e5\u8be2\u4f18\u5316\u3001\u6a21\u5f0f\u8bbe\u8ba1\uff08Schema Design\uff09\u3001\u5b89\u5168\u6027\u4ee5\u53ca\u6027\u80fd\u8868\u73b0\u3002\u4f60\u7684\u4f7f\u547d\u662f\u786e\u4fdd\u6570\u636e\u5e93\u4ee3\u7801\u9075\u5faa\u6700\u4f73\u5b9e\u8df5\u3001\u9884\u9632\u6027\u80fd\u74f6\u9888\u5e76\u7ef4\u62a4\u6570\u636e\u5b8c\u6574\u6027\u3002\u672c\u667a\u80fd\u4f53\uff08Agent\uff09\u6574\u5408\u4e86\u6765\u81ea [Supabase's postgres-best-practices](https://github.com/supabase/agent-skills) \u7684\u6a21\u5f0f\u3002\n\n## \u6838\u5fc3\u804c\u8d23\n\n1. **\u67e5\u8be2\u6027\u80fd (Query Performance)** - \u4f18\u5316\u67e5\u8be2\uff0c\u6dfb\u52a0\u5408\u9002\u7684\u7d22\u5f15\uff0c\u9632\u6b62\u5168\u8868\u626b\u63cf\u3002\n2. **\u6a21\u5f0f\u8bbe\u8ba1 (Schema Design)** - \u8bbe\u8ba1\u9ad8\u6548\u7684\u6a21\u5f0f\uff0c\u4f7f\u7528\u6b63\u786e\u7684\u6570\u636e\u7c7b\u578b\u548c\u7ea6\u675f\u3002\n3. **\u5b89\u5168\u6027\u4e0e RLS (Security & RLS)** - \u5b9e\u65bd\u884c\u7ea7\u5b89\u5168\u6027\uff08Row Level Security\uff09\uff0c\u9075\u5faa\u6700\u5c0f\u6743\u9650\u8bbf\u95ee\u539f\u5219\u3002\n4. **\u8fde\u63a5\u7ba1\u7406 (Connection Management)** - \u914d\u7f6e\u8fde\u63a5\u6c60\u3001\u8d85\u65f6\u548c\u9650\u5236\u3002\n5. **\u5e76\u53d1\u63a7\u5236 (Concurrency)** - \u9884\u9632\u6b7b\u9501\uff0c\u4f18\u5316\u9501\u5b9a\u7b56\u7565\u3002\n6. **\u76d1\u63a7 (Monitoring)** - \u8bbe\u7f6e\u67e5\u8be2\u5206\u6790\u548c\u6027\u80fd\u8ddf\u8e2a\u3002\n\n## \u53ef\u7528\u5de5\u5177\n\n### \u6570\u636e\u5e93\u5206\u6790\u547d\u4ee4\n```bash\n# \u8fde\u63a5\u5230\u6570\u636e\u5e93\npsql $DATABASE_URL\n\n# \u68c0\u67e5\u6162\u67e5\u8be2 (\u9700\u8981 pg_stat_statements \u6269\u5c55)\npsql -c \"SELECT query, mean_exec_time, calls FROM pg_stat_statements ORDER BY mean_exec_time DESC LIMIT 10;\"\n\n# \u68c0\u67e5\u8868\u5927\u5c0f\npsql -c \"SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_stat_user_tables ORDER BY pg_total_relation_size(relid) DESC;\"\n\n# \u68c0\u67e5\u7d22\u5f15\u4f7f\u7528\u60c5\u51b5\npsql -c \"SELECT indexrelname, idx_scan, idx_tup_read FROM pg_stat_user_indexes ORDER BY idx_scan DESC;\"\n\n# \u67e5\u627e\u5916\u952e\u4e0a\u7f3a\u5931\u7684\u7d22\u5f15\npsql -c \"SELECT conrelid::regclass, a.attname FROM pg_constraint c JOIN pg_attribute a ON a.attrelid = c.conrelid AND a.attnum = ANY(c.conkey) WHERE c.contype = 'f' AND NOT EXISTS (SELECT 1 FROM pg_index i WHERE i.indrelid = c.conrelid AND a.attnum = ANY(i.indkey));\"\n\n# \u68c0\u67e5\u8868\u81a8\u80c0\u60c5\u51b5\npsql -c \"SELECT relname, n_dead_tup, last_vacuum, last_autovacuum FROM pg_stat_user_tables WHERE n_dead_tup > 1000 ORDER BY n_dead_tup DESC;\"\n```\n\n## \u6570\u636e\u5e93\u5ba1\u67e5\u5de5\u4f5c\u6d41\n\n### 1. \u67e5\u8be2\u6027\u80fd\u5ba1\u67e5 (\u5173\u952e)\n\n\u9488\u5bf9\u6bcf\u4e00\u4e2a SQL \u67e5\u8be2\uff0c\u8bf7\u9a8c\u8bc1\uff1a\n\n```\na) \u7d22\u5f15\u4f7f\u7528\u60c5\u51b5\n - WHERE \u5b50\u53e5\u6d89\u53ca\u7684\u5217\u662f\u5426\u5df2\u5efa\u7d22\u5f15\uff1f\n - JOIN \u5b50\u53e5\u6d89\u53ca\u7684\u5217\u662f\u5426\u5df2\u5efa\u7d22\u5f15\uff1f\n - \u7d22\u5f15\u7c7b\u578b\u662f\u5426\u5408\u9002 (B-tree, GIN, BRIN)\uff1f\n\nb) \u67e5\u8be2\u8ba1\u5212\u5206\u6790\n - \u5bf9\u590d\u6742\u67e5\u8be2\u8fd0\u884c EXPLAIN ANALYZE\n - \u68c0\u67e5\u5927\u8868\u662f\u5426\u5b58\u5728\u5168\u8868\u626b\u63cf (Seq Scan)\n - \u9a8c\u8bc1\u4f30\u7b97\u884c\u6570\u662f\u5426\u4e0e\u5b9e\u9645\u5339\u914d\n\nc) \u5e38\u89c1\u95ee\u9898\n - N+1 \u67e5\u8be2\u6a21\u5f0f\n - \u7f3a\u5931\u590d\u5408\u7d22\u5f15\n - \u7d22\u5f15\u4e2d\u7684\u5217\u987a\u5e8f\u9519\u8bef\n```\n\n### 2. \u6a21\u5f0f\u8bbe\u8ba1\u5ba1\u67e5 (\u9ad8\u4f18\u5148\u7ea7)\n\n```\na) \u6570\u636e\u7c7b\u578b\n - ID \u4f7f\u7528 bigint (\u800c\u975e int)\n - \u5b57\u7b26\u4e32\u4f7f\u7528 text (\u9664\u975e\u9700\u8981\u7279\u5b9a\u7ea6\u675f\uff0c\u5426\u5219\u4e0d\u7528 varchar(n))\n - \u65f6\u95f4\u6233\u4f7f\u7528 timestamptz (\u800c\u975e timestamp)\n - \u8d27\u5e01\u4f7f\u7528 numeric (\u800c\u975e float)\n - \u6807\u5fd7\u4f4d\u4f7f\u7528 boolean (\u800c\u975e varchar)\n\nb) \u7ea6\u675f\n - \u5df2\u5b9a\u4e49\u4e3b\u952e (PrimaryLine truncated
|
||||
"md5": "627b52ec99466a97d8c4982963e98219",
|
||||
"content": "---\nname: database-reviewer\ndescription: PostgreSQL \u6570\u636e\u5e93\u4e13\u5bb6\uff0c\u4e13\u6ce8\u4e8e\u67e5\u8be2\u4f18\u5316\u3001\u6a21\u5f0f\u8bbe\u8ba1\u3001\u5b89\u5168\u6027\u548c\u6027\u80fd\u3002\u5728\u7f16\u5199 SQL\u3001\u521b\u5efa\u8fc1\u79fb\u3001\u8bbe\u8ba1\u6a21\u5f0f\u6216\u6392\u67e5\u6570\u636e\u5e93\u6027\u80fd\u95ee\u9898\u65f6\u4e3b\u52a8\u4f7f\u7528\u3002\u5305\u542b Supabase \u6700\u4f73\u5b9e\u8df5\u3002\ntools: [\"Read\", \"Write\", \"Edit\", \"Bash\", \"Grep\", \"Glob\"]\nmodel: opus\n---\n\n# \u6570\u636e\u5e93\u8bc4\u5ba1\u4e13\u5bb6 (Database Reviewer)\n\n\u4f60\u662f\u4e00\u540d\u4e13\u5bb6\u7ea7 PostgreSQL \u6570\u636e\u5e93\u4e13\u5bb6\uff0c\u4e13\u6ce8\u4e8e\u67e5\u8be2\u4f18\u5316\uff08Query Optimization\uff09\u3001\u6a21\u5f0f\u8bbe\u8ba1\uff08Schema Design\uff09\u3001\u5b89\u5168\u6027\uff08Security\uff09\u548c\u6027\u80fd\uff08Performance\uff09\u3002\u4f60\u7684\u4f7f\u547d\u662f\u786e\u4fdd\u6570\u636e\u5e93\u4ee3\u7801\u9075\u5faa\u6700\u4f73\u5b9e\u8df5\uff0c\u9632\u6b62\u6027\u80fd\u95ee\u9898\uff0c\u5e76\u7ef4\u62a4\u6570\u636e\u5b8c\u6574\u6027\u3002\u8be5\u667a\u80fd\u4f53\u96c6\u6210\u4e86\u6765\u81ea [Supabase's postgres-best-practices](https://github.com/supabase/agent-skills) \u7684\u6a21\u5f0f\u3002\n\n## \u6838\u5fc3\u804c\u8d23 (Core Responsibilities)\n\n1. **\u67e5\u8be2\u6027\u80fd (Query Performance)** - \u4f18\u5316\u67e5\u8be2\uff0c\u6dfb\u52a0\u5408\u9002\u7684\u7d22\u5f15\uff0c\u9632\u6b62\u5168\u8868\u626b\u63cf\uff08Table Scans\uff09\u3002\n2. **\u6a21\u5f0f\u8bbe\u8ba1 (Schema Design)** - \u4f7f\u7528\u6b63\u786e\u7684\u6570\u636e\u7c7b\u578b\u548c\u7ea6\u675f\u8bbe\u8ba1\u9ad8\u6548\u7684\u6a21\u5f0f\u3002\n3. **\u5b89\u5168\u6027\u4e0e RLS (Security & RLS)** - \u5b9e\u73b0\u884c\u7ea7\u5b89\u5168\u6027\uff08Row Level Security, RLS\uff09\uff0c\u9075\u5faa\u6700\u5c0f\u6743\u9650\u539f\u5219\u3002\n4. **\u8fde\u63a5\u7ba1\u7406 (Connection Management)** - \u914d\u7f6e\u8fde\u63a5\u6c60\uff08Pooling\uff09\u3001\u8d85\u65f6\u3001\u9650\u5236\u3002\n5. **\u5e76\u53d1 (Concurrency)** - \u9632\u6b62\u6b7b\u9501\uff08Deadlocks\uff09\uff0c\u4f18\u5316\u9501\u7b56\u7565\u3002\n6. **\u76d1\u63a7 (Monitoring)** - \u8bbe\u7f6e\u67e5\u8be2\u5206\u6790\u548c\u6027\u80fd\u8ddf\u8e2a\u3002\n\n## \u4f60\u53ef\u4ee5\u4f7f\u7528\u7684\u5de5\u5177 (Tools at Your Disposal)\n\n### \u6570\u636e\u5e93\u5206\u6790\u547d\u4ee4\n```bash\n# \u8fde\u63a5\u5230\u6570\u636e\u5e93\npsql $DATABASE_URL\n\n# \u68c0\u67e5\u6162\u67e5\u8be2\uff08\u9700\u8981 pg_stat_statements\uff09\npsql -c \"SELECT query, mean_exec_time, calls FROM pg_stat_statements ORDER BY mean_exec_time DESC LIMIT 10;\"\n\n# \u68c0\u67e5\u8868\u5927\u5c0f\npsql -c \"SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_stat_user_tables ORDER BY pg_total_relation_size(relid) DESC;\"\n\n# \u68c0\u67e5\u7d22\u5f15\u4f7f\u7528\u60c5\u51b5\npsql -c \"SELECT indexrelname, idx_scan, idx_tup_read FROM pg_stat_user_indexes ORDER BY idx_scan DESC;\"\n\n# \u67e5\u627e\u5916\u952e\u4e0a\u7f3a\u5931\u7684\u7d22\u5f15\npsql -c \"SELECT conrelid::regclass, a.attname FROM pg_constraint c JOIN pg_attribute a ON a.attrelid = c.conrelid AND a.attnum = ANY(c.conkey) WHERE c.contype = 'f' AND NOT EXISTS (SELECT 1 FROM pg_index i WHERE i.indrelid = c.conrelid AND a.attnum = ANY(i.indkey));\"\n\n# \u68c0\u67e5\u8868\u81a8\u80c0\uff08Table Bloat\uff09\npsql -c \"SELECT relname, n_dead_tup, last_vacuum, last_autovacuum FROM pg_stat_user_tables WHERE n_dead_tup > 1000 ORDER BY n_dead_tup DESC;\"\n```\n\n## \u6570\u636e\u5e93\u8bc4\u5ba1\u5de5\u4f5c\u6d41 (Database Review Workflow)\n\n### 1. \u67e5\u8be2\u6027\u80fd\u8bc4\u5ba1 (CRITICAL)\n\n\u5bf9\u4e8e\u6bcf\u4e00\u4e2a SQL \u67e5\u8be2\uff0c\u9a8c\u8bc1\uff1a\n\n```\na) \u7d22\u5f15\u4f7f\u7528 (Index Usage)\n - WHERE \u5217\u662f\u5426\u5df2\u7d22\u5f15\uff1f\n - JOIN \u5217\u662f\u5426\u5df2\u7d22\u5f15\uff1f\n - \u7d22\u5f15\u7c7b\u578b\u662f\u5426\u5408\u9002\uff08B-tree, GIN, BRIN\uff09\uff1f\n\nb) \u67e5\u8be2\u8ba1\u5212\u5206\u6790 (Query Plan Analysis)\n - \u5bf9\u590d\u6742\u67e5\u8be2\u8fd0\u884c EXPLAIN ANALYZE\n - \u68c0\u67e5\u5927\u8868\u662f\u5426\u5b58\u5728\u987a\u5e8f\u626b\u63cf\uff08Seq Scans\uff09\n - \u9a8c\u8bc1\u9884\u4f30\u884c\u6570\u662f\u5426\u4e0e\u5b9e\u9645\u5339\u914d\n\nc) \u5e38\u89c1\u95ee\u9898\n - N+1 \u67e5\u8be2\u6a21\u5f0f\n - \u7f3a\u5931\u590d\u5408\u7d22\u5f15\n - \u7d22\u5f15\u4e2d\u7684\u5217\u987a\u5e8f\u9519\u8bef\n```\n\n### 2. \u6a21\u5f0f\u8bbe\u8ba1\u8bc4\u5ba1 (HIGH)\n\n```\na) \u6570\u636e\u7c7b\u578b (Data Types)\n - ID \u4f7f\u7528 bigint\uff08\u4e0d\u8981\u7528 int\uff09\n - \u5b57\u7b26\u4e32\u4f7f\u7528 text\uff08\u4e0d\u8981\u7528 varchar(n)\uff0c\u9664\u975e\u9700\u8981\u7ea6\u675f\uff09\n - \u65f6\u95f4\u6233\u4f7f\u7528 timestamptz\uff08\u4e0d\u8981\u7528 timestamp\uff09\n - \u91d1\u989d\u4f7f\u7528 numeric\uff08\u4e0d\u8981\u7528 float\uff09\n - \u6807Line truncated
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/examples/user-CLAUDE.md": {
|
||||
"md5": "15e8967c97b6145eecc8605469c1427b",
|
||||
@@ -100,8 +100,8 @@
|
||||
"content": "# \u9879\u76ee\u793a\u4f8b CLAUDE.md\n\n\u8fd9\u662f\u4e00\u4e2a\u9879\u76ee\u7ea7 CLAUDE.md \u6587\u4ef6\u7684\u793a\u4f8b\u3002\u8bf7\u5c06\u5176\u653e\u7f6e\u5728\u9879\u76ee\u6839\u76ee\u5f55\u4e0b\u3002\n\n## \u9879\u76ee\u6982\u89c8\n\n[\u7b80\u8981\u63cf\u8ff0\u60a8\u7684\u9879\u76ee - \u529f\u80fd\u3001\u6280\u672f\u6808]\n\n## \u6838\u5fc3\u89c4\u5219\n\n### 1. \u4ee3\u7801\u7ec4\u7ec7\n\n- \u503e\u5411\u4e8e\u4f7f\u7528\u591a\u4e2a\u5c0f\u6587\u4ef6\uff0c\u800c\u975e\u5c11\u6570\u5927\u6587\u4ef6\n- \u9ad8\u5185\u805a\uff0c\u4f4e\u8026\u5408\n- \u901a\u5e38\u4e3a 200-400 \u884c\uff0c\u5355\u6587\u4ef6\u6700\u5927\u4e0d\u8d85\u8fc7 800 \u884c\n- \u6309\u529f\u80fd/\u9886\u57df\uff08Feature/Domain\uff09\u7ec4\u7ec7\uff0c\u800c\u975e\u6309\u7c7b\u578b\u7ec4\u7ec7\n\n### 2. \u4ee3\u7801\u98ce\u683c\n\n- \u4ee3\u7801\u3001\u6ce8\u91ca\u6216\u6587\u6863\u4e2d\u4e0d\u5f97\u4f7f\u7528\u8868\u60c5\u7b26\u53f7\uff08Emoji\uff09\n- \u59cb\u7ec8\u575a\u6301\u4e0d\u53ef\u53d8\u6027\uff08Immutability\uff09 - \u4e25\u7981\u76f4\u63a5\u4fee\u6539\u5bf9\u8c61\u6216\u6570\u7ec4\n- \u751f\u4ea7\u4ee3\u7801\u4e2d\u4e25\u7981\u4f7f\u7528 `console.log`\n- \u4f7f\u7528 try/catch \u8fdb\u884c\u59a5\u5584\u7684\u9519\u8bef\u5904\u7406\n- \u4f7f\u7528 Zod \u6216\u7c7b\u4f3c\u5de5\u5177\u8fdb\u884c\u8f93\u5165\u9a8c\u8bc1\n\n### 3. \u6d4b\u8bd5\n\n- \u6d4b\u8bd5\u9a71\u52a8\u5f00\u53d1\uff08TDD\uff09\uff1a\u5148\u5199\u6d4b\u8bd5\n- \u6700\u4f4e 80% \u7684\u8986\u76d6\u7387\n- \u4e3a\u5de5\u5177\u51fd\u6570\u7f16\u5199\u5355\u5143\u6d4b\u8bd5\n- \u4e3a API \u7f16\u5199\u96c6\u6210\u6d4b\u8bd5\n- \u4e3a\u6838\u5fc3\u6d41\u7a0b\u7f16\u5199\u7aef\u5230\u7aef\uff08E2E\uff09\u6d4b\u8bd5\n\n### 4. \u5b89\u5168\n\n- \u4e25\u7981\u786c\u7f16\u7801\u79d8\u94a5\uff08Secrets\uff09\n- \u654f\u611f\u6570\u636e\u4f7f\u7528\u73af\u5883\u53d8\u91cf\n- \u9a8c\u8bc1\u6240\u6709\u7528\u6237\u8f93\u5165\n- \u4ec5\u4f7f\u7528\u53c2\u6570\u5316\u67e5\u8be2\uff08Parameterized queries\uff09\n- \u542f\u7528\u8de8\u7ad9\u8bf7\u6c42\u4f2a\u9020\uff08CSRF\uff09\u9632\u62a4\n\n## \u6587\u4ef6\u7ed3\u6784\n\n```\nsrc/\n|-- app/ # Next.js \u5e94\u7528\u8def\u7531\n|-- components/ # \u53ef\u590d\u7528\u7684 UI \u7ec4\u4ef6\n|-- hooks/ # \u81ea\u5b9a\u4e49 React hooks\n|-- lib/ # \u5de5\u5177\u5e93\n|-- types/ # TypeScript \u5b9a\u4e49\n```\n\n## \u5173\u952e\u6a21\u5f0f\n\n### API \u54cd\u5e94\u683c\u5f0f\n\n```typescript\ninterface ApiResponse<T> {\n success: boolean\n data?: T\n error?: string\n}\n```\n\n### \u9519\u8bef\u5904\u7406\n\n```typescript\ntry {\n const result = await operation()\n return { success: true, data: result }\n} catch (error) {\n console.error('\u64cd\u4f5c\u5931\u8d25:', error)\n return { success: false, error: '\u7528\u6237\u53cb\u597d\u63d0\u793a\u4fe1\u606f' }\n}\n```\n\n## \u73af\u5883\u53d8\u91cf\n\n```bash\n# \u5fc5\u586b\nDATABASE_URL=\nAPI_KEY=\n\n# \u9009\u586b\nDEBUG=false\n```\n\n## \u53ef\u7528\u547d\u4ee4\n\n- `/tdd` - \u6d4b\u8bd5\u9a71\u52a8\u5f00\u53d1\uff08TDD\uff09\u5de5\u4f5c\u6d41\n- `/plan` - \u521b\u5efa\u5b9e\u73b0\u65b9\u6848\n- `/code-review` - \u4ee3\u7801\u8d28\u91cf\u8bc4\u5ba1\n- `/build-fix` - \u4fee\u590d\u6784\u5efa\u9519\u8bef\n\n## Git \u5de5\u4f5c\u6d41\n\n- \u7ea6\u5b9a\u5f0f\u63d0\u4ea4\uff08Conventional commits\uff09\uff1a`feat:`, `fix:`, `refactor:`, `docs:`, `test:`\n- \u4e25\u7981\u76f4\u63a5\u63d0\u4ea4\u5230 main \u5206\u652f\n- \u5408\u5e76\u8bf7\u6c42\uff08PRs\uff09\u5fc5\u987b\u7ecf\u8fc7\u8bc4\u5ba1\n- \u6240\u6709\u6d4b\u8bd5\u5fc5\u987b\u901a\u8fc7\u540e\u65b9\u53ef\u5408\u5e76\n"
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/.claude-plugin/PLUGIN_SCHEMA_NOTES.md": {
|
||||
"md5": "790f0e0ed6c7f91f21e646a603d3df3f",
|
||||
"content": "# \u63d2\u4ef6\u6e05\u5355\u6a21\u5f0f\uff08Manifest Schema\uff09\u6ce8\u610f\u4e8b\u9879\n\n\u672c\u6587\u6863\u8bb0\u5f55\u4e86 Claude Code \u63d2\u4ef6\u6e05\u5355\u6821\u9a8c\u5668\u4e2d**\u672a\u89c1\u4e8e\u6587\u6863\u4f46\u5f3a\u5236\u6267\u884c\u7684\u7ea6\u675f**\u3002\n\n\u8fd9\u4e9b\u89c4\u5219\u57fa\u4e8e\u771f\u5b9e\u7684\u5b89\u88c5\u5931\u8d25\u6848\u4f8b\u3001\u6821\u9a8c\u5668\u884c\u4e3a\u4ee5\u53ca\u4e0e\u5df2\u77e5\u53ef\u7528\u63d2\u4ef6\u7684\u5bf9\u6bd4\u3002\n\u8bbe\u7f6e\u8fd9\u4e9b\u89c4\u5219\u662f\u4e3a\u4e86\u9632\u6b62\u9690\u6027\u6545\u969c\u548c\u91cd\u590d\u7684\u56de\u5f52\u95ee\u9898\u3002\n\n\u5982\u679c\u4f60\u7f16\u8f91 `.claude-plugin/plugin.json`\uff0c\u8bf7\u5148\u9605\u8bfb\u672c\u6587\u3002\n\n---\n\n## \u6458\u8981\uff08\u4f18\u5148\u9605\u8bfb\uff09\n\nClaude \u63d2\u4ef6\u6e05\u5355\u6821\u9a8c\u5668**\u6781\u5176\u4e25\u683c\u4e14\u5177\u6709\u4e3b\u89c2\u6027**\u3002\n\u5b83\u6267\u884c\u4e86\u4e00\u4e9b\u5728\u516c\u5f00\u6a21\u5f0f\uff08Schema\uff09\u53c2\u8003\u6587\u6863\u4e2d\u672a\u5b8c\u5168\u8bf4\u660e\u7684\u89c4\u5219\u3002\n\n\u6700\u5e38\u89c1\u7684\u5931\u8d25\u6a21\u5f0f\u662f\uff1a\n\n> \u6e05\u5355\u770b\u8d77\u6765\u5f88\u5408\u7406\uff0c\u4f46\u6821\u9a8c\u5668\u4ee5\u6a21\u7cca\u7684\u9519\u8bef\u62d2\u7edd\u5b83\uff0c\u4f8b\u5982\uff1a\n> `agents: Invalid input`\n\n\u672c\u6587\u6863\u5c06\u89e3\u91ca\u5176\u539f\u56e0\u3002\n\n---\n\n## \u5fc5\u586b\u5b57\u6bb5\n\n### `version`\uff08\u5f3a\u5236\u6027\uff09\n\n\u5373\u4fbf\u5728\u67d0\u4e9b\u793a\u4f8b\u4e2d\u88ab\u7701\u7565\uff0c\u6821\u9a8c\u5668\u4e5f\u8981\u6c42\u5fc5\u987b\u5305\u542b `version` \u5b57\u6bb5\u3002\n\n\u5982\u679c\u7f3a\u5931\uff0c\u5728\u5e94\u7528\u5e02\u573a\u5b89\u88c5\u6216 CLI \u6821\u9a8c\u671f\u95f4\u53ef\u80fd\u4f1a\u5931\u8d25\u3002\n\n\u793a\u4f8b\uff1a\n\n```json\n{\n \"version\": \"1.1.0\"\n}\n```\n\n---\n\n## \u5b57\u6bb5\u5f62\u6001\u89c4\u5219\n\n\u4ee5\u4e0b\u5b57\u6bb5**\u5fc5\u987b\u59cb\u7ec8\u4e3a\u6570\u7ec4\uff08Arrays\uff09**\uff1a\n\n* `agents`\n* `commands`\n* `skills`\n* `hooks`\uff08\u5982\u679c\u5b58\u5728\uff09\n\n\u5373\u4fbf\u53ea\u6709\u4e00\u4e2a\u6761\u76ee\uff0c**\u4e5f\u4e0d\u63a5\u53d7\u5b57\u7b26\u4e32\uff08Strings\uff09**\u3002\n\n### \u9519\u8bef\u5199\u6cd5\uff08Invalid\uff09\n\n```json\n{\n \"agents\": \"./agents\"\n}\n```\n\n### \u6b63\u786e\u5199\u6cd5\uff08Valid\uff09\n\n```json\n{\n \"agents\": [\"./agents/planner.md\"]\n}\n```\n\n\u8fd9\u9002\u7528\u4e8e\u6240\u6709\u7ec4\u4ef6\u8def\u5f84\u5b57\u6bb5\u3002\n\n---\n\n## \u8def\u5f84\u89e3\u6790\u89c4\u5219\uff08\u81f3\u5173\u91cd\u8981\uff09\n\n### Agents \u5fc5\u987b\u4f7f\u7528\u663e\u5f0f\u6587\u4ef6\u8def\u5f84\n\n\u6821\u9a8c\u5668**\u4e0d\u63a5\u53d7 `agents` \u4f7f\u7528\u76ee\u5f55\u8def\u5f84**\u3002\n\n\u5373\u4fbf\u5982\u4e0b\u5199\u6cd5\u4e5f\u4f1a\u5931\u8d25\uff1a\n\n```json\n{\n \"agents\": [\"./agents/\"]\n}\n```\n\n\u76f8\u53cd\uff0c\u4f60\u5fc5\u987b\u663e\u5f0f\u5217\u4e3e\u667a\u80fd\u4f53\uff08Agent\uff09\u6587\u4ef6\uff1a\n\n```json\n{\n \"agents\": [\n \"./agents/planner.md\",\n \"./agents/architect.md\",\n \"./agents/code-reviewer.md\"\n ]\n}\n```\n\n\u8fd9\u662f\u6821\u9a8c\u9519\u8bef\u6700\u5e38\u89c1\u7684\u6765\u6e90\u3002\n\n### Commands \u548c Skills\n\n* `commands` \u548c `skills` \u4ec5\u5728**\u5305\u88f9\u5728\u6570\u7ec4\u4e2d**\u65f6\u624d\u63a5\u53d7\u76ee\u5f55\u8def\u5f84\u3002\n* \u4f7f\u7528\u663e\u5f0f\u6587\u4ef6\u8def\u5f84\u662f\u6700\u5b89\u5168\u4e14\u9762\u5411\u672a\u6765\u7684\u505a\u6cd5\u3002\n\n---\n\n## \u6821\u9a8c\u5668\u884c\u4e3a\u5907\u6ce8\n\n* `claude plugin validate` \u6bd4\u67d0\u4e9b\u5e94\u7528\u5e02\u573a\u9884\u89c8\u66f4\u4e25\u683c\u3002\n* \u6821\u9a8c\u53ef\u80fd\u5728\u672c\u5730\u901a\u8fc7\uff0c\u4f46\u5982\u679c\u8def\u5f84\u542b\u4e49\u6a21\u7cca\uff0c\u5219\u5728\u5b89\u88c5\u65f6\u53ef\u80fd\u4f1a\u5931\u8d25\u3002\n* \u9519\u8bef\u901a\u5e38\u5f88\u7b3c\u7edf\uff08`Invalid input`\uff09\uff0c\u4e14\u4e0d\u6307\u793a\u6839\u672c\u539f\u56e0\u3002\n* \u8de8\u5e73\u53f0\u5b89\u88c5\uff08\u5c24\u5176\u662f Windows\uff09\u5bf9\u8def\u5f84\u5047\u8bbe\u7684\u5bb9\u5fcd\u5ea6\u8f83\u4f4e\u3002\n\n\u8bf7\u5047\u8bbe\u6821\u9a8c\u5668\u662f\u201c\u5e26\u6709\u654c\u610f\u7684\u201d\u4e14\u5b8c\u5168\u5b57\u9762\u5316\u7684\u3002\n\n---\n\n## \u5df2\u77e5\u7684\u53cd\u6a21\u5f0f\uff08Anti-Patterns\uff09\n\n\u8fd9\u4e9b\u770b\u8d77\u6765\u6b63\u786e\u4f46\u4f1a\u88ab\u62d2\u7edd\uff1a\n\n* \u4f7f\u7528\u5b57\u7b26\u4e32\u503c\u800c\u975e\u6570\u7ec4\n* \u4e3a `agents` \u63d0\u4f9b\u76ee\u5f55\u6570\u7ec4\n* \u7f3a\u5931 `version`\n* \u4f9d\u8d56\u63a8\u65ad\u8def\u5f84\n* \u5047\u8bbe\u5e94\u7528\u5e02\u573a\u7684\u884c\u4e3a\u4e0e\u672c\u5730\u6821\u9a8c\u4e00\u81f4\n\n\u4e0d\u8981\u800d\u5c0f\u806a\u660e\u3002\u8bf7\u4fdd\u6301\u663e\u5f0f\u3002\n\n---\n\n## \u6700\u5c0f\u5df2\u77e5\u6709\u6548\u793a\u4f8b\n\n```json\n{\n \"version\": \"1.1.0\",\n \"agents\": [\n \"Line truncated
|
||||
"md5": "a69e0dea61ca5b9d21cdcad00583402c",
|
||||
"content": "# \u63d2\u4ef6\u6e05\u5355\u6a21\u5f0f\uff08Plugin Manifest Schema\uff09\u8bf4\u660e\n\n\u672c\u6587\u6863\u8bb0\u5f55\u4e86 Claude Code \u63d2\u4ef6\u6e05\u5355\u6821\u9a8c\u5668\uff08Validator\uff09\u4e2d**\u672a\u516c\u5f00\u4f46\u5f3a\u5236\u6267\u884c\u7684\u7ea6\u675f\u6761\u4ef6**\u3002\n\n\u8fd9\u4e9b\u89c4\u5219\u57fa\u4e8e\u771f\u5b9e\u7684\u5b89\u88c5\u5931\u8d25\u6848\u4f8b\u3001\u6821\u9a8c\u5668\u884c\u4e3a\u5206\u6790\u4ee5\u53ca\u4e0e\u5df2\u77e5\u53ef\u7528\u63d2\u4ef6\u7684\u5bf9\u6bd4\u3002\n\u5b83\u4eec\u7684\u5b58\u5728\u662f\u4e3a\u4e86\u9632\u6b62\u9690\u6027\u7834\u574f\uff08silent breakage\uff09\u548c\u91cd\u590d\u51fa\u73b0\u7684\u56de\u5f52\uff08regressions\uff09\u95ee\u9898\u3002\n\n\u5982\u679c\u4f60\u9700\u8981\u7f16\u8f91 `.claude-plugin/plugin.json`\uff0c\u8bf7\u52a1\u5fc5\u5148\u9605\u8bfb\u672c\u6587\u3002\n\n---\n\n## \u6458\u8981\uff08\u4f18\u5148\u9605\u8bfb\uff09\n\nClaude \u63d2\u4ef6\u6e05\u5355\u6821\u9a8c\u5668\u975e\u5e38**\u4e25\u683c\u4e14\u5177\u6709\u786e\u5b9a\u6027**\u3002\n\u5b83\u5f3a\u5236\u6267\u884c\u4e86\u4e00\u4e9b\u5728\u516c\u5171\u6a21\u5f0f\uff08Schema\uff09\u5f15\u7528\u4e2d\u672a\u5b8c\u5168\u8bb0\u5f55\u7684\u89c4\u5219\u3002\n\n\u6700\u5e38\u89c1\u7684\u5931\u8d25\u6a21\u5f0f\u662f\uff1a\n\n> \u6e05\u5355\u770b\u8d77\u6765\u5f88\u5408\u7406\uff0c\u4f46\u6821\u9a8c\u5668\u62d2\u7edd\u4e86\u5b83\uff0c\u5e76\u7ed9\u51fa\u6a21\u7cca\u7684\u9519\u8bef\u63d0\u793a\uff0c\u4f8b\u5982\n> `agents: Invalid input`\n\n\u672c\u6587\u6863\u5c06\u89e3\u91ca\u5176\u539f\u56e0\u3002\n\n---\n\n## \u5fc5\u586b\u5b57\u6bb5\n\n### `version`\uff08\u5f3a\u5236\u8981\u6c42\uff09\n\n\u6821\u9a8c\u5668\u8981\u6c42\u5fc5\u987b\u5305\u542b `version` \u5b57\u6bb5\uff0c\u5373\u4f7f\u5728\u67d0\u4e9b\u793a\u4f8b\u4e2d\u7701\u7565\u4e86\u5b83\u3002\n\n\u5982\u679c\u7f3a\u5931\u8be5\u5b57\u6bb5\uff0c\u5728\u5e94\u7528\u5e02\u573a\u5b89\u88c5\u6216 CLI \u6821\u9a8c\u671f\u95f4\u53ef\u80fd\u4f1a\u5931\u8d25\u3002\n\n\u793a\u4f8b\uff1a\n\n```json\n{\n \"version\": \"1.1.0\"\n}\n```\n\n---\n\n## \u5b57\u6bb5\u5f62\u6001\u89c4\u5219\n\n\u4ee5\u4e0b\u5b57\u6bb5**\u5fc5\u987b\u59cb\u7ec8\u4e3a\u6570\u7ec4\uff08Arrays\uff09**\uff1a\n\n* `agents`\n* `commands`\n* `skills`\n* `hooks`\uff08\u5982\u679c\u5b58\u5728\uff09\n\n\u5373\u4f7f\u53ea\u6709\u4e00\u4e2a\u6761\u76ee\uff0c**\u4e5f\u4e0d\u63a5\u53d7\u5b57\u7b26\u4e32\uff08Strings\uff09\u7c7b\u578b**\u3002\n\n### \u9519\u8bef\u793a\u4f8b\uff08Invalid\uff09\n\n```json\n{\n \"agents\": \"./agents\"\n}\n```\n\n### \u6b63\u786e\u793a\u4f8b\uff08Valid\uff09\n\n```json\n{\n \"agents\": [\"./agents/planner.md\"]\n}\n```\n\n\u8fd9\u4e00\u89c4\u5219\u4e00\u81f4\u9002\u7528\u4e8e\u6240\u6709\u7ec4\u4ef6\u8def\u5f84\u5b57\u6bb5\u3002\n\n---\n\n## \u8def\u5f84\u89e3\u6790\u89c4\u5219\uff08\u5173\u952e\uff09\n\n### Agents \u5fc5\u987b\u4f7f\u7528\u663e\u5f0f\u6587\u4ef6\u8def\u5f84\n\n\u6821\u9a8c\u5668**\u4e0d\u63a5\u53d7 `agents` \u5b57\u6bb5\u4f7f\u7528\u76ee\u5f55\u8def\u5f84**\u3002\n\n\u5373\u4f7f\u662f\u4ee5\u4e0b\u5199\u6cd5\u4e5f\u4f1a\u5931\u8d25\uff1a\n\n```json\n{\n \"agents\": [\"./agents/\"]\n}\n```\n\n\u76f8\u53cd\uff0c\u4f60\u5fc5\u987b\u663e\u5f0f\u679a\u4e3e\u667a\u80fd\u4f53\uff08Agent\uff09\u6587\u4ef6\uff1a\n\n```json\n{\n \"agents\": [\n \"./agents/planner.md\",\n \"./agents/architect.md\",\n \"./agents/code-reviewer.md\"\n ]\n}\n```\n\n\u8fd9\u662f\u6821\u9a8c\u9519\u8bef\u6700\u5e38\u89c1\u7684\u6765\u6e90\u3002\n\n### \u547d\u4ee4\uff08Commands\uff09\u4e0e\u6280\u80fd\uff08Skills\uff09\n\n* `commands` \u548c `skills` **\u4ec5\u5728\u5305\u88f9\u5728\u6570\u7ec4\u4e2d\u65f6**\u63a5\u53d7\u76ee\u5f55\u8def\u5f84\u3002\n* \u663e\u5f0f\u6587\u4ef6\u8def\u5f84\u662f\u6700\u5b89\u5168\u4e14\u6700\u80fd\u517c\u5bb9\u672a\u6765\u7684\u505a\u6cd5\u3002\n\n---\n\n## \u6821\u9a8c\u5668\u884c\u4e3a\u6ce8\u610f\u4e8b\u9879\n\n* `claude plugin validate` \u6bd4\u67d0\u4e9b\u5e94\u7528\u5e02\u573a\u9884\u89c8\uff08marketplace previews\uff09\u66f4\u4e25\u683c\u3002\n* \u6821\u9a8c\u53ef\u80fd\u5728\u672c\u5730\u901a\u8fc7\uff0c\u4f46\u5982\u679c\u8def\u5f84\u542b\u4e49\u6a21\u7cca\uff0c\u5728\u5b89\u88c5\u65f6\u53ef\u80fd\u4f1a\u5931\u8d25\u3002\n* \u9519\u8bef\u63d0\u793a\u901a\u5e38\u5f88\u901a\u7528\uff08`Invalid input`\uff09\uff0c\u4e14\u4e0d\u4f1a\u6307\u51fa\u6839\u672c\u539f\u56e0\u3002\n* \u8de8\u5e73\u53f0\u5b89\u88c5\uff08\u5c24\u5176\u662f Windows\uff09\u5bf9\u8def\u5f84\u5047\u8bbe\u7684\u5bb9\u5fcd\u5ea6\u8f83\u4f4e\u3002\n\n\u8bf7\u5047\u8bbe\u6821\u9a8c\u5668\u662f\u4e25\u82db\u4e14\u5b8c\u5168\u6309\u5b57\u9762\u610f\u601d\u7406\u89e3\u7684\u3002\n\n---\n\n## `hooks` \u5b57\u6bb5\uff1a\u8bf7\u52ff\u6dfb\u52a0\n\n> \u26a0\ufe0f **\u5173\u952e\uff08CRITICAL\uff09\uff1a** \u8bf7\u52ff\u5728 `plugin.json` \u4e2d\u6dfb\u52a0 `\"hooks\"` \u5b57\u6bb5\u3002\u8fd9\u662f\u4e00\u4e2a\u56de\u5f52\u6d4b\u8bd5\u5f3a\u5236\u8981\u6c42\u7684\u89c4\u5219\u3002\n\n### \u4e3a\u4ec0\u4e48\u8fd9\u5f88\u91cd\u8981\Line truncated
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/rules/coding-style.md": {
|
||||
"md5": "4b5e30879949693a07774266651d2663",
|
||||
@@ -240,28 +240,28 @@
|
||||
"content": "---\nname: continuous-learning\ndescription: \u81ea\u52a8\u4ece Claude Code \u4f1a\u8bdd\uff08Sessions\uff09\u4e2d\u63d0\u53d6\u53ef\u91cd\u7528\u7684\u6a21\u5f0f\uff0c\u5e76\u5c06\u5176\u4fdd\u5b58\u4e3a\u5b66\u4e60\u5230\u7684\u6280\u80fd\u4ee5\u4f9b\u672a\u6765\u4f7f\u7528\u3002\n---\n\n# \u6301\u7eed\u5b66\u4e60\u6280\u80fd\uff08Continuous Learning Skill\uff09\n\n\u5728\u4f1a\u8bdd\u7ed3\u675f\u65f6\u81ea\u52a8\u8bc4\u4f30 Claude Code \u4f1a\u8bdd\uff08Sessions\uff09\uff0c\u4ee5\u63d0\u53d6\u53ef\u4fdd\u5b58\u4e3a\u5b66\u4e60\u6280\u80fd\uff08Learned Skills\uff09\u7684\u53ef\u91cd\u7528\u6a21\u5f0f\u3002\n\n## \u5de5\u4f5c\u539f\u7406\n\n\u8be5\u6280\u80fd\u4f5c\u4e3a **\u505c\u6b62\u94a9\u5b50\uff08Stop hook\uff09** \u5728\u6bcf\u4e2a\u4f1a\u8bdd\u7ed3\u675f\u65f6\u8fd0\u884c\uff1a\n\n1. **\u4f1a\u8bdd\u8bc4\u4f30\uff08Session Evaluation\uff09**\uff1a\u68c0\u67e5\u4f1a\u8bdd\u662f\u5426\u6709\u8db3\u591f\u7684\u6d88\u606f\uff08\u9ed8\u8ba4\uff1a10 \u6761\u4ee5\u4e0a\uff09\n2. **\u6a21\u5f0f\u68c0\u6d4b\uff08Pattern Detection\uff09**\uff1a\u8bc6\u522b\u4f1a\u8bdd\u4e2d\u53ef\u63d0\u53d6\u7684\u6a21\u5f0f\n3. **\u6280\u80fd\u63d0\u53d6\uff08Skill Extraction\uff09**\uff1a\u5c06\u6709\u7528\u7684\u6a21\u5f0f\u4fdd\u5b58\u5230 `~/.claude/skills/learned/`\n\n## \u914d\u7f6e\n\n\u7f16\u8f91 `config.json` \u8fdb\u884c\u81ea\u5b9a\u4e49\uff1a\n\n```json\n{\n \"min_session_length\": 10,\n \"extraction_threshold\": \"medium\",\n \"auto_approve\": false,\n \"learned_skills_path\": \"~/.claude/skills/learned/\",\n \"patterns_to_detect\": [\n \"error_resolution\",\n \"user_corrections\",\n \"workarounds\",\n \"debugging_techniques\",\n \"project_specific\"\n ],\n \"ignore_patterns\": [\n \"simple_typos\",\n \"one_time_fixes\",\n \"external_api_issues\"\n ]\n}\n```\n\n## \u6a21\u5f0f\u7c7b\u578b\n\n| \u6a21\u5f0f\uff08Pattern\uff09 | \u63cf\u8ff0\uff08Description\uff09 |\n|---------|-------------|\n| `error_resolution` | \u7279\u5b9a\u9519\u8bef\u7684\u89e3\u51b3\u65b9\u5f0f |\n| `user_corrections` | \u6765\u81ea\u7528\u6237\u4fee\u6b63\u7684\u6a21\u5f0f |\n| `workarounds` | \u6846\u67b6/\u5e93\u7279\u6709\u95ee\u9898\u7684\u53d8\u901a\u65b9\u6848 |\n| `debugging_techniques` | \u6709\u6548\u7684\u8c03\u8bd5\u65b9\u6cd5 |\n| `project_specific` | \u9879\u76ee\u7279\u5b9a\u7684\u7ea6\u5b9a |\n\n## \u94a9\u5b50\u8bbe\u7f6e\uff08Hook Setup\uff09\n\n\u6dfb\u52a0\u5230\u4f60\u7684 `~/.claude/settings.json`\uff1a\n\n```json\n{\n \"hooks\": {\n \"Stop\": [{\n \"matcher\": \"*\",\n \"hooks\": [{\n \"type\": \"command\",\n \"command\": \"~/.claude/skills/continuous-learning/evaluate-session.sh\"\n }]\n }]\n }\n}\n```\n\n## \u4e3a\u4ec0\u4e48\u4f7f\u7528\u505c\u6b62\u94a9\u5b50\uff08Stop Hook\uff09\uff1f\n\n- **\u8f7b\u91cf\u7ea7\uff08Lightweight\uff09**\uff1a\u5728\u4f1a\u8bdd\u7ed3\u675f\u65f6\u8fd0\u884c\u4e00\u6b21\n- **\u975e\u963b\u585e\uff08Non-blocking\uff09**\uff1a\u4e0d\u4f1a\u7ed9\u6bcf\u6761\u6d88\u606f\u589e\u52a0\u5ef6\u8fdf\n- **\u5b8c\u6574\u4e0a\u4e0b\u6587\uff08Complete context\uff09**\uff1a\u53ef\u4ee5\u8bbf\u95ee\u5b8c\u6574\u7684\u4f1a\u8bdd\u8bb0\u5f55\n\n## \u76f8\u5173\u5185\u5bb9\n\n- [\u957f\u7bc7\u6307\u5357\uff08The Longform Guide\uff09](https://x.com/affaanmustafa/status/2014040193557471352) - \u5173\u4e8e\u6301\u7eed\u5b66\u4e60\u7684\u90e8\u5206\n- `/learn` \u547d\u4ee4 - \u5728\u4f1a\u8bdd\u4e2d\u624b\u52a8\u63d0\u53d6\u6a21\u5f0f\n\n---\n\n## \u5bf9\u6bd4\u7b14\u8bb0\uff08\u7814\u7a76\uff1a2025\u5e741\u6708\uff09\n\n### vs Homunculus (github.com/humanplane/homunculus)\n\nHomunculus v2 \u91c7\u7528\u4e86\u66f4\u590d\u6742\u7684\u65b9\u6cd5\uff1a\n\n| \u7279\u6027\uff08Feature\uff09 | \u6211\u4eec\u7684\u65b9\u6cd5\uff08Our Approach\uff09 | Homunculus v2 |\n|---------|--------------|---------------|\n| \u89c2\u6d4b\uff08Observation\uff09 | \u505c\u6b62\u94a9\u5b50\uff08Stop hook\uff0c\u4f1a\u8bdd\u7ed3\u675f\u65f6\uff09 | PreToolUse/PostToolUse \u94a9\u5b50\uff08100% \u53ef\u9760\uff09 |\n| \u5206\u6790\uff08Analysis\uff09 | \u4e3b\u4e0a\u4e0b\u6587\uff08Main context\uff09 | \u540e\u53f0\u667a\u80fd\u4f53\uff08Background agent\uff0cHaiku\uff09 |\n| \u7c92\u5ea6\uff08Granularity\uff09 | \u5b8c\u6574\u6280\u80fd\uff08Full skills\uff09 | \u539f\u5b50\u5316\u7684\u201c\u672c\u80fd\uff08instincts\uff09\u201d |\n| \u7f6e\u4fe1\u5ea6\uff08Confidence\uff09 | \u65e0 | 0.3-0.9 \u52a0\u6743 |\n| \u6f14\u8fdb\uff08Evolution\uff09 | \u76f4\u63a5\u8f6c\u5316\u4e3a\u6280\u80fd | \u672c\u80fd\uff08Instincts\uff09\u2192 \u805a\u7c7b\uff08cluster\uff09\u2192 \u6280\u80fd/\u547d\u4ee4/\u667a\u80fd\u4f53 |\n| \u5171\u4eab\uff08Sharing\uff09 | \u65e0 | \u5bfc\u51fa/\u5bfc\u5165\u672c\u80fd |\n\n**\u6765\u81ea homunculus \u7684\u5173\u952e\u6d1e\u5bdf\uff1a**\n> \u201cv1 \u4f9d\u8d56\u6280\u80fd\u8fdb\u884c\u89c2\u6d4b\u3002\u6280\u80fd\u662f\u6982\u7387\u6027\u7684\u2014\u2014\u5b83\u4eec\u7684\u89e6\u53d1\u7387\u7ea6\u4e3a 50-80%\u30Line truncated
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/skills/continuous-learning-v2/SKILL.md": {
|
||||
"md5": "dbec664c39a70f339a8f9457549aed71",
|
||||
"content": "---\nname: continuous-learning-v2\ndescription: \u57fa\u4e8e\u76f4\u89c9\u7684\u5b66\u4e60\u7cfb\u7edf\uff0c\u901a\u8fc7\u94a9\u5b50\uff08hooks\uff09\u89c2\u5bdf\u4f1a\u8bdd\uff0c\u521b\u5efa\u5e26\u6709\u7f6e\u4fe1\u5ea6\u8bc4\u5206\u7684\u539f\u5b50\u76f4\u89c9\uff08atomic instincts\uff09\uff0c\u5e76\u5c06\u5176\u6f14\u5316\u4e3a\u6280\u80fd/\u547d\u4ee4/\u667a\u80fd\u4f53\u3002\nversion: 2.0.0\n---\n\n# \u6301\u7eed\u5b66\u4e60 v2 - \u57fa\u4e8e\u76f4\u89c9\u7684\u67b6\u6784 (Instinct-Based Architecture)\n\n\u4e00\u4e2a\u9ad8\u7ea7\u5b66\u4e60\u7cfb\u7edf\uff0c\u901a\u8fc7\u539f\u5b50\u201c\u76f4\u89c9\uff08instincts\uff09\u201d\u2014\u2014\u5e26\u6709\u7f6e\u4fe1\u5ea6\u8bc4\u5206\u7684\u5c0f\u578b\u4e60\u5f97\u884c\u4e3a\uff0c\u5c06\u4f60\u7684 Claude Code \u4f1a\u8bdd\u8f6c\u5316\u4e3a\u53ef\u590d\u7528\u7684\u77e5\u8bc6\u3002\n\n## v2 \u7248\u672c\u65b0\u7279\u6027\n\n| \u7279\u6027 | v1 | v2 |\n|---------|----|----|\n| \u89c2\u5bdf (Observation) | Stop \u94a9\u5b50\uff08\u4f1a\u8bdd\u7ed3\u675f\uff09 | PreToolUse/PostToolUse (100% \u53ef\u9760) |\n| \u5206\u6790 (Analysis) | \u4e3b\u4e0a\u4e0b\u6587 (Main context) | \u540e\u53f0\u667a\u80fd\u4f53 (Haiku) |\n| \u7c92\u5ea6 (Granularity) | \u5b8c\u6574\u6280\u80fd (Full skills) | \u539f\u5b50\u201c\u76f4\u89c9\uff08instincts\uff09\u201d |\n| \u7f6e\u4fe1\u5ea6 (Confidence) | \u65e0 | 0.3-0.9 \u52a0\u6743 |\n| \u6f14\u5316 (Evolution) | \u76f4\u63a5\u8f6c\u6362\u4e3a\u6280\u80fd | \u76f4\u89c9 \u2192 \u805a\u7c7b \u2192 \u6280\u80fd/\u547d\u4ee4/\u667a\u80fd\u4f53 |\n| \u5171\u4eab (Sharing) | \u65e0 | \u5bfc\u51fa/\u5bfc\u5165\u76f4\u89c9 |\n\n## \u76f4\u89c9\u6a21\u578b (The Instinct Model)\n\n\u201c\u76f4\u89c9\uff08instinct\uff09\u201d\u662f\u4e00\u4e2a\u5c0f\u578b\u7684\u4e60\u5f97\u884c\u4e3a\uff1a\n\n```yaml\n---\nid: prefer-functional-style\ntrigger: \"when writing new functions\"\nconfidence: 0.7\ndomain: \"code-style\"\nsource: \"session-observation\"\n---\n\n# \u504f\u597d\u51fd\u6570\u5f0f\u98ce\u683c (Prefer Functional Style)\n\n## \u64cd\u4f5c (Action)\n\u5728\u5408\u9002\u7684\u65f6\u5019\uff0c\u4f18\u5148\u4f7f\u7528\u51fd\u6570\u5f0f\u6a21\u5f0f\u800c\u975e\u7c7b\uff08class\uff09\u3002\n\n## \u8bc1\u636e (Evidence)\n- \u89c2\u5bdf\u5230 5 \u6b21\u504f\u597d\u51fd\u6570\u5f0f\u6a21\u5f0f\u7684\u5b9e\u4f8b\n- \u7528\u6237\u5728 2025-01-15 \u5c06\u57fa\u4e8e\u7c7b\u7684\u65b9\u6cd5\u4fee\u6b63\u4e3a\u51fd\u6570\u5f0f\n```\n\n**\u5c5e\u6027\uff1a**\n- **\u539f\u5b50\u6027 (Atomic)** \u2014 \u4e00\u4e2a\u89e6\u53d1\u5668\uff0c\u4e00\u4e2a\u52a8\u4f5c\n- **\u7f6e\u4fe1\u5ea6\u52a0\u6743 (Confidence-weighted)** \u2014 0.3 = \u5c1d\u8bd5\u6027\u7684\uff0c0.9 = \u8fd1\u4e4e\u786e\u5b9a\n- **\u9886\u57df\u6807\u7b7e (Domain-tagged)** \u2014 code-style\u3001testing\u3001git\u3001debugging\u3001workflow \u7b49\n- **\u8bc1\u636e\u652f\u6301 (Evidence-backed)** \u2014 \u8ffd\u8e2a\u662f\u54ea\u4e9b\u89c2\u5bdf\u7ed3\u679c\u521b\u5efa\u4e86\u5b83\n\n## \u5de5\u4f5c\u539f\u7406\n\n```\n\u4f1a\u8bdd\u6d3b\u52a8 (Session Activity)\n \u2502\n \u2502 \u94a9\u5b50\u6355\u83b7\u63d0\u793a\u8bcd + \u5de5\u5177\u4f7f\u7528 (100% \u53ef\u9760)\n \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 observations.jsonl \u2502\n\u2502 (\u63d0\u793a\u8bcd, \u5de5\u5177\u8c03\u7528, \u7ed3\u679c) \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502\n \u2502 \u89c2\u5bdf\u8005\u667a\u80fd\u4f53\u8bfb\u53d6 (\u540e\u53f0\u8fd0\u884c, Haiku)\n \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 \u6a21\u5f0f\u68c0\u6d4b (PATTERN DETECTION) \u2502\n\u2502 \u2022 \u7528\u6237\u4fee\u6b63 \u2192 \u76f4\u89c9 \u2502\n\u2502 \u2022 \u9519\u8bef\u4fee\u590d \u2192 \u76f4\u89c9 \u2502\n\u2502 \u2022 \u91cd\u590d\u5de5\u4f5c\u6d41 \u2192 \u76f4\u89c9 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502\n \u2502 \u521b\u5efa/\u66f4\u65b0\n \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\Line truncated
|
||||
"md5": "24ee1c6993e41601ba4950a88d3bbae3",
|
||||
"content": "---\nname: continuous-learning-v2\ndescription: \u57fa\u4e8e\u76f4\u89c9\uff08Instinct\uff09\u7684\u5b66\u4e60\u7cfb\u7edf\uff0c\u901a\u8fc7\u94a9\u5b50\uff08Hooks\uff09\u89c2\u6d4b\u4f1a\u8bdd\uff0c\u521b\u5efa\u5e26\u6709\u7f6e\u4fe1\u5ea6\u8bc4\u5206\uff08Confidence Scoring\uff09\u7684\u539f\u5b50\u76f4\u89c9\uff0c\u5e76\u5c06\u5176\u6f14\u8fdb\u4e3a\u6280\u80fd\uff08Skills\uff09\u3001\u547d\u4ee4\uff08Commands\uff09\u6216\u667a\u80fd\u4f53\uff08Agents\uff09\u3002\nversion: 2.0.0\n---\n\n# \u6301\u7eed\u5b66\u4e60 v2 - \u57fa\u4e8e\u76f4\u89c9\u7684\u67b6\u6784\uff08Instinct-Based Architecture\uff09\n\n\u8fd9\u662f\u4e00\u4e2a\u5148\u8fdb\u7684\u5b66\u4e60\u7cfb\u7edf\uff0c\u901a\u8fc7\u539f\u5b50\u5316\u201c\u76f4\u89c9\uff08Instincts\uff09\u201d\u2014\u2014\u5373\u5e26\u6709\u7f6e\u4fe1\u5ea6\u8bc4\u5206\u7684\u5c0f\u578b\u4e60\u5f97\u884c\u4e3a\uff0c\u5c06\u4f60\u7684 Claude Code \u4f1a\u8bdd\u8f6c\u5316\u4e3a\u53ef\u590d\u7528\u7684\u77e5\u8bc6\u3002\n\n## v2 \u7248\u672c\u65b0\u7279\u6027\n\n| \u7279\u6027 | v1 | v2 |\n|---------|----|----|\n| \u89c2\u6d4b\uff08Observation\uff09 | Stop \u94a9\u5b50\uff08\u4f1a\u8bdd\u7ed3\u675f\u65f6\uff09 | PreToolUse/PostToolUse (100% \u53ef\u9760) |\n| \u5206\u6790\uff08Analysis\uff09 | \u4e3b\u4e0a\u4e0b\u6587\uff08Main context\uff09 | \u540e\u53f0\u667a\u80fd\u4f53 (Haiku) |\n| \u7c92\u5ea6\uff08Granularity\uff09 | \u5b8c\u6574\u6280\u80fd\uff08Full skills\uff09 | \u539f\u5b50\u5316\u201c\u76f4\u89c9\uff08Instincts\uff09\u201d |\n| \u7f6e\u4fe1\u5ea6\uff08Confidence\uff09 | \u65e0 | 0.3-0.9 \u52a0\u6743\u8bc4\u5206 |\n| \u6f14\u8fdb\uff08Evolution\uff09 | \u76f4\u63a5\u8f6c\u5316\u4e3a\u6280\u80fd | \u76f4\u89c9 \u2192 \u805a\u7c7b \u2192 \u6280\u80fd/\u547d\u4ee4/\u667a\u80fd\u4f53 |\n| \u5171\u4eab\uff08Sharing\uff09 | \u65e0 | \u5bfc\u51fa/\u5bfc\u5165\u76f4\u89c9 |\n\n## \u76f4\u89c9\u6a21\u578b\uff08The Instinct Model\uff09\n\n\u76f4\u89c9\uff08Instinct\uff09\u662f\u4e00\u79cd\u5c0f\u578b\u4e60\u5f97\u884c\u4e3a\uff1a\n\n```yaml\n---\nid: prefer-functional-style\ntrigger: \"when writing new functions\"\nconfidence: 0.7\ndomain: \"code-style\"\nsource: \"session-observation\"\n---\n\n# \u504f\u597d\u51fd\u6570\u5f0f\u98ce\u683c\uff08Prefer Functional Style\uff09\n\n## \u52a8\u4f5c\uff08Action\uff09\n\u5728\u5408\u9002\u7684\u60c5\u51b5\u4e0b\uff0c\u4f18\u5148\u4f7f\u7528\u51fd\u6570\u5f0f\u6a21\u5f0f\uff08Functional Patterns\uff09\u800c\u975e\u7c7b\uff08Classes\uff09\u3002\n\n## \u8bc1\u636e\uff08Evidence\uff09\n- \u89c2\u6d4b\u5230 5 \u6b21\u51fd\u6570\u5f0f\u6a21\u5f0f\u504f\u597d\u5b9e\u4f8b\n- \u7528\u6237\u5728 2025-01-15 \u5c06\u57fa\u4e8e\u7c7b\u7684\u65b9\u6cd5\u4fee\u6b63\u4e3a\u51fd\u6570\u5f0f\u65b9\u6cd5\n```\n\n**\u5c5e\u6027\uff1a**\n- **\u539f\u5b50\u5316\uff08Atomic\uff09** \u2014 \u4e00\u4e2a\u89e6\u53d1\u5668\u5bf9\u5e94\u4e00\u4e2a\u52a8\u4f5c\n- **\u7f6e\u4fe1\u5ea6\u52a0\u6743\uff08Confidence-weighted\uff09** \u2014 0.3 = \u5c1d\u8bd5\u6027\u7684\uff0c0.9 = \u8fd1\u4e4e\u786e\u5b9a\n- **\u9886\u57df\u6807\u7b7e\uff08Domain-tagged\uff09** \u2014 \u4ee3\u7801\u98ce\u683c\uff08code-style\uff09\u3001\u6d4b\u8bd5\uff08testing\uff09\u3001git\u3001\u8c03\u8bd5\uff08debugging\uff09\u3001\u5de5\u4f5c\u6d41\uff08workflow\uff09\u7b49\n- **\u8bc1\u636e\u652f\u6301\uff08Evidence-backed\uff09** \u2014 \u8ffd\u8e2a\u662f\u54ea\u4e9b\u89c2\u6d4b\u7ed3\u679c\u521b\u5efa\u4e86\u5b83\n\n## \u5de5\u4f5c\u539f\u7406\n\n```\n\u4f1a\u8bdd\u6d3b\u52a8\uff08Session Activity\uff09\n \u2502\n \u2502 \u94a9\u5b50\uff08Hooks\uff09\u6355\u83b7\u63d0\u793a\u8bcd + \u5de5\u5177\u4f7f\u7528 (100% \u53ef\u9760)\n \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 observations.jsonl \u2502\n\u2502 (\u63d0\u793a\u8bcd\u3001\u5de5\u5177\u8c03\u7528\u3001\u6267\u884c\u7ed3\u679c) \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502\n \u2502 \u89c2\u6d4b\u8005\u667a\u80fd\u4f53\u8bfb\u53d6 (\u540e\u53f0\u8fd0\u884c, Haiku)\n \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 \u6a21\u5f0f\u68c0\u6d4b\uff08PATTERN DETECTION\uff09 \u2502\n\u2502 \u2022 \u7528\u6237\u4fee\u6b63 \u2192 \u76f4\u89c9 \u2502\n\u2502 \u2022 \u9519\u8bef\u89e3\u51b3 \u2192 \u76f4\u89c9 \u2502\n\u2502 \u2022 \u9Line truncated
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/skills/continuous-learning-v2/agents/observer.md": {
|
||||
"md5": "d3f1b2f829b31c7b8925f4d8540ae4b3",
|
||||
"content": "---\nname: observer\ndescription: \u5206\u6790\u4f1a\u8bdd\u89c2\u6d4b\uff08observations\uff09\u4ee5\u68c0\u6d4b\u6a21\u5f0f\uff08patterns\uff09\u5e76\u521b\u5efa\u76f4\u89c9\uff08instincts\uff09\u7684\u540e\u53f0\u667a\u80fd\u4f53\uff08Agent\uff09\u3002\u4f7f\u7528 Haiku \u6a21\u578b\u4ee5\u4fdd\u8bc1\u6210\u672c\u6548\u76ca\u3002\nmodel: haiku\nrun_mode: background\n---\n\n# \u89c2\u6d4b\u8005\u667a\u80fd\u4f53 (Observer Agent)\n\n\u4e00\u4e2a\u540e\u53f0\u667a\u80fd\u4f53\uff08Agent\uff09\uff0c\u7528\u4e8e\u5206\u6790 Claude Code \u4f1a\u8bdd\u4e2d\u7684\u89c2\u6d4b\u6570\u636e\uff0c\u4ece\u800c\u68c0\u6d4b\u6a21\u5f0f\uff08patterns\uff09\u5e76\u521b\u5efa\u76f4\u89c9\uff08instincts\uff09\u3002\n\n## \u8fd0\u884c\u65f6\u673a\n\n- \u5f53\u4f1a\u8bdd\u6d3b\u52a8\u663e\u8457\u65f6\uff08\u8d85\u8fc7 20 \u6b21\u5de5\u5177\u8c03\u7528\uff09\n- \u5f53\u7528\u6237\u8fd0\u884c `/analyze-patterns` \u547d\u4ee4\u65f6\n- \u6309\u9884\u5b9a\u65f6\u95f4\u95f4\u9694\uff08\u53ef\u914d\u7f6e\uff0c\u9ed8\u8ba4\u4e3a 5 \u5206\u949f\uff09\n- \u5f53\u88ab\u89c2\u6d4b\u94a9\u5b50\uff08observation hook\uff09\u89e6\u53d1\u65f6\uff08SIGUSR1\uff09\n\n## \u8f93\u5165\n\n\u4ece `~/.claude/homunculus/observations.jsonl` \u8bfb\u53d6\u89c2\u6d4b\u6570\u636e\uff1a\n\n```jsonl\n{\"timestamp\":\"2025-01-22T10:30:00Z\",\"event\":\"tool_start\",\"session\":\"abc123\",\"tool\":\"Edit\",\"input\":\"...\"}\n{\"timestamp\":\"2025-01-22T10:30:01Z\",\"event\":\"tool_complete\",\"session\":\"abc123\",\"tool\":\"Edit\",\"output\":\"...\"}\n{\"timestamp\":\"2025-01-22T10:30:05Z\",\"event\":\"tool_start\",\"session\":\"abc123\",\"tool\":\"Bash\",\"input\":\"npm test\"}\n{\"timestamp\":\"2025-01-22T10:30:10Z\",\"event\":\"tool_complete\",\"session\":\"abc123\",\"tool\":\"Bash\",\"output\":\"All tests pass\"}\n```\n\n## \u6a21\u5f0f\u68c0\u6d4b\n\n\u5728\u89c2\u6d4b\u6570\u636e\u4e2d\u5bfb\u627e\u4ee5\u4e0b\u6a21\u5f0f\uff1a\n\n### 1. \u7528\u6237\u4fee\u6b63\n\u5f53\u7528\u6237\u7684\u540e\u7eed\u6d88\u606f\u4fee\u6b63\u4e86 Claude \u4e4b\u524d\u7684\u64cd\u4f5c\u65f6\uff1a\n- \"\u4e0d\uff0c\u7528 X \u4ee3\u66ff Y\"\n- \"\u5b9e\u9645\u4e0a\uff0c\u6211\u7684\u610f\u601d\u662f\u2026\u2026\"\n- \u7acb\u5373\u64a4\u9500/\u91cd\u505a\u6a21\u5f0f\n\n\u2192 \u521b\u5efa\u76f4\u89c9\uff08instinct\uff09\uff1a\"\u6267\u884c X \u65f6\uff0c\u4f18\u5148\u4f7f\u7528 Y\"\n\n### 2. \u9519\u8bef\u4fee\u590d\n\u5f53\u9519\u8bef\u53d1\u751f\u540e\u7d27\u63a5\u7740\u4fee\u590d\u64cd\u4f5c\u65f6\uff1a\n- \u5de5\u5177\u8f93\u51fa\u5305\u542b\u9519\u8bef\n- \u63a5\u4e0b\u6765\u7684\u51e0\u6b21\u5de5\u5177\u8c03\u7528\u4fee\u590d\u4e86\u8be5\u9519\u8bef\n- \u540c\u7c7b\u9519\u8bef\u591a\u6b21\u4ee5\u7c7b\u4f3c\u65b9\u5f0f\u89e3\u51b3\n\n\u2192 \u521b\u5efa\u76f4\u89c9\uff08instinct\uff09\uff1a\"\u9047\u5230\u9519\u8bef X \u65f6\uff0c\u5c1d\u8bd5 Y\"\n\n### 3. \u91cd\u590d\u5de5\u4f5c\u6d41\n\u5f53\u591a\u6b21\u4f7f\u7528\u76f8\u540c\u7684\u5de5\u5177\u5e8f\u5217\u65f6\uff1a\n- \u8f93\u5165\u76f8\u4f3c\u7684\u76f8\u540c\u5de5\u5177\u5e8f\u5217\n- \u540c\u6b65\u53d8\u66f4\u7684\u6587\u4ef6\u6a21\u5f0f\n- \u65f6\u95f4\u4e0a\u805a\u96c6\u7684\u64cd\u4f5c\n\n\u2192 \u521b\u5efa\u5de5\u4f5c\u6d41\u76f4\u89c9\uff08workflow instinct\uff09\uff1a\"\u6267\u884c X \u65f6\uff0c\u9075\u5faa\u6b65\u9aa4 Y\u3001Z\u3001W\"\n\n### 4. \u5de5\u5177\u504f\u597d\n\u5f53\u67d0\u4e9b\u5de5\u5177\u88ab\u6301\u7eed\u504f\u597d\u4f7f\u7528\u65f6\uff1a\n- \u603b\u662f\u5728 Edit \u4e4b\u524d\u4f7f\u7528 Grep\n- \u76f8\u6bd4 Bash cat \u66f4\u503e\u5411\u4e8e\u4f7f\u7528 Read\n- \u9488\u5bf9\u7279\u5b9a\u4efb\u52a1\u4f7f\u7528\u7279\u5b9a\u7684 Bash \u547d\u4ee4\n\n\u2192 \u521b\u5efa\u76f4\u89c9\uff08instinct\uff09\uff1a\"\u5f53\u9700\u8981 X \u65f6\uff0c\u4f7f\u7528\u5de5\u5177 Y\"\n\n## \u8f93\u51fa\n\n\u5728 `~/.claude/homunculus/instincts/personal/` \u4e2d\u521b\u5efa/\u66f4\u65b0\u76f4\u89c9\uff08instincts\uff09\uff1a\n\n```yaml\n---\nid: prefer-grep-before-edit\ntrigger: \"when searching for code to modify\"\nconfidence: 0.65\ndomain: \"workflow\"\nsource: \"session-observation\"\n---\n\n# \u4f18\u5148\u5728 Edit \u524d\u4f7f\u7528 Grep\n\n## \u52a8\u4f5c\n\u5728\u4f7f\u7528 Edit \u4e4b\u524d\uff0c\u59cb\u7ec8\u4f7f\u7528 Grep \u67e5\u627e\u786e\u5207\u4f4d\u7f6e\u3002\n\n## \u8bc1\u636e\n- \u5728\u4f1a\u8bdd abc123 \u4e2d\u89c2\u6d4b\u5230 8 \u6b21\n- \u6a21\u5f0f\uff1aGrep \u2192 Read \u2192 Edit \u5e8f\u5217\n- \u6700\u8fd1\u89c2\u6d4b\u65f6\u95f4\uff1a2025-01-22\n```\n\n## \u7f6e\u4fe1\u5ea6\u8ba1\u7b97\n\n\u57fa\u4e8e\u89c2\u6d4b\u9891\u7387\u7684\u521d\u59cb\u7f6e\u4fe1\u5ea6\uff1a\n- 1-2 \u6b21\u89c2\u6d4b\uff1a0.3\uff08\u521d\u6b65\uff09\n- 3-5 \u6b21\u89c2\u6d4b\uff1a0.5\uff08\u4e2d\u7b49\uff09\n- 6-10 \u6b21\u89c2\u6d4b\uff1a0.7\uff08\u5f3a\uff09\n- 11+ \u6b21\u89c2\u6d4b\uff1a0.85\uff08\u6781\u5f3a\uff09\n\n\u7f6e\u4fe1\u5ea6\u968f\u65f6\u95f4\u8c03\u6574\uff1a\n- \u6bcf\u6b21\u8bc1\u5b9e\u6027\u89c2\u6d4b +0.05\n- \u6bcf\u6b21\u77db\u76fe\u6027\u89c2\u6d4b -0.1\n- \uLine truncated
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/skills/continuous-learning-v2/commands/instinct-export.md": {
|
||||
"md5": "17b1afc48ce7380005509993a87c7309",
|
||||
"md5": "8679fea63be82c9e6b47333a49089b4d",
|
||||
"content": "---\nname: instinct-export\ndescription: \u5bfc\u51fa\u76f4\u89c9\uff08Instincts\uff09\u4ee5\u4fbf\u4e0e\u56e2\u961f\u6210\u5458\u6216\u5176\u4ed6\u9879\u76ee\u5171\u4eab\ncommand: /instinct-export\n---\n\n# \u76f4\u89c9\u5bfc\u51fa\u547d\u4ee4\uff08Instinct Export Command\uff09\n\n\u5c06\u76f4\u89c9\uff08Instincts\uff09\u5bfc\u51fa\u4e3a\u53ef\u5171\u4eab\u7684\u683c\u5f0f\u3002\u975e\u5e38\u9002\u7528\u4e8e\uff1a\n- \u4e0e\u56e2\u961f\u6210\u5458\u5171\u4eab\n- \u8fc1\u79fb\u5230\u65b0\u673a\u5668\n- \u8d21\u732e\u5230\u9879\u76ee\u89c4\u8303\uff08Conventions\uff09\u4e2d\n\n## \u4f7f\u7528\u65b9\u6cd5\n\n```\n/instinct-export # \u5bfc\u51fa\u6240\u6709\u4e2a\u4eba\u76f4\u89c9\n/instinct-export --domain testing # \u4ec5\u5bfc\u51fa\u6d4b\u8bd5\uff08Testing\uff09\u9886\u57df\u7684\u76f4\u89c9\n/instinct-export --min-confidence 0.7 # \u4ec5\u5bfc\u51fa\u9ad8\u7f6e\u4fe1\u5ea6\u7684\u76f4\u89c9\n/instinct-export --output team-instincts.yaml\n```\n\n## \u6267\u884c\u903b\u8f91\n\n1. \u4ece `~/.claude/homunculus/instincts/personal/` \u8bfb\u53d6\u76f4\u89c9\u6570\u636e\n2. \u6839\u636e\u53c2\u6570\uff08Flags\uff09\u8fdb\u884c\u8fc7\u6ee4\n3. \u8131\u654f\u654f\u611f\u4fe1\u606f\uff1a\n - \u79fb\u9664\u4f1a\u8bdd ID\uff08Session IDs\uff09\n - \u79fb\u9664\u6587\u4ef6\u8def\u5f84\uff08\u4ec5\u4fdd\u7559\u6a21\u5f0f\u4e32/Patterns\uff09\n - \u79fb\u9664\u65e9\u4e8e\u201c\u4e0a\u5468\u201d\u7684\u65f6\u95f4\u6233\n4. \u751f\u6210\u5bfc\u51fa\u6587\u4ef6\n\n## \u8f93\u51fa\u683c\u5f0f\n\n\u521b\u5efa\u4e00\u4e2a YAML \u6587\u4ef6\uff1a\n\n```yaml\n# Instincts Export\n# Generated: 2025-01-22\n# Source: personal\n# Count: 12 instincts\n\nversion: \"2.0\"\nexported_by: \"continuous-learning-v2\"\nexport_date: \"2025-01-22T10:30:00Z\"\n\ninstincts:\n - id: prefer-functional-style\n trigger: \"when writing new functions\"\n action: \"Use functional patterns over classes\"\n confidence: 0.8\n domain: code-style\n observations: 8\n\n - id: test-first-workflow\n trigger: \"when adding new functionality\"\n action: \"Write test first, then implementation\"\n confidence: 0.9\n domain: testing\n observations: 12\n\n - id: grep-before-edit\n trigger: \"when modifying code\"\n action: \"Search with Grep, confirm with Read, then Edit\"\n confidence: 0.7\n domain: workflow\n observations: 6\n```\n\n## \u9690\u79c1\u8bf4\u660e\n\n\u5bfc\u51fa\u5185\u5bb9**\u5305\u542b**\uff1a\n- \u2705 \u89e6\u53d1\u6a21\u5f0f\uff08Trigger patterns\uff09\n- \u2705 \u52a8\u4f5c\uff08Actions\uff09\n- \u2705 \u7f6e\u4fe1\u5ea6\u8bc4\u5206\uff08Confidence scores\uff09\n- \u2705 \u9886\u57df\uff08Domains\uff09\n- \u2705 \u89c2\u6d4b\u8ba1\u6570\uff08Observation counts\uff09\n\n\u5bfc\u51fa\u5185\u5bb9**\u4e0d\u5305\u542b**\uff1a\n- \u274c \u5b9e\u9645\u4ee3\u7801\u7247\u6bb5\n- \u274c \u6587\u4ef6\u8def\u5f84\n- \u274c \u4f1a\u8bdd\u8f6c\u5f55\uff08Session transcripts\uff09\n- \u274c \u4e2a\u4eba\u8eab\u4efd\u6807\u8bc6\u7b26\n\n## \u53c2\u6570\uff08Flags\uff09\n\n- `--domain <name>`: \u4ec5\u5bfc\u51fa\u6307\u5b9a\u9886\u57df\uff08Domain\uff09\n- `--min-confidence <n>`: \u6700\u4f4e\u7f6e\u4fe1\u5ea6\u9608\u503c\uff08\u9ed8\u8ba4\u503c\uff1a0.3\uff09\n- `--output <file>`: \u8f93\u51fa\u6587\u4ef6\u8def\u5f84\uff08\u9ed8\u8ba4\u503c\uff1ainstincts-export-YYYYMMDD.yaml\uff09\n- `--format <yaml|json|md>`: \u8f93\u51fa\u683c\u5f0f\uff08\u9ed8\u8ba4\u503c\uff1ayaml\uff09\n- `--include-evidence`: \u5305\u542b\u8bc1\u636e\uff08Evidence\uff09\u6587\u672c\uff08\u9ed8\u8ba4\uff1a\u6392\u9664\uff09\n"
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/skills/continuous-learning-v2/commands/instinct-import.md": {
|
||||
"md5": "253f6c240c33461521a5860d27f229e4",
|
||||
"content": "---\nname: instinct-import\ndescription: \u4ece\u961f\u53cb\u3001\u6280\u80fd\u751f\u6210\u5668\uff08Skill Creator\uff09\u6216\u5176\u4ed6\u6765\u6e90\u5bfc\u5165\u76f4\u89c9\uff08Instincts\uff09\ncommand: /instinct-import\nimplementation: python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py import <file>\n---\n\n# \u76f4\u89c9\u5bfc\u5165\u547d\u4ee4\uff08Instinct Import Command\uff09\n\n## \u5b9e\u73b0\n\n```bash\npython3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py import <file-or-url> [--dry-run] [--force] [--min-confidence 0.7]\n```\n\n\u4ece\u4ee5\u4e0b\u6765\u6e90\u5bfc\u5165\u76f4\u89c9\uff08Instincts\uff09\uff1a\n- \u961f\u53cb\u5bfc\u51fa\u7684\u6587\u4ef6\n- \u6280\u80fd\u751f\u6210\u5668\uff08Skill Creator\uff09\uff08\u4ed3\u5e93\u5206\u6790\uff09\n- \u793e\u533a\u96c6\u5408\n- \u4e4b\u524d\u7684\u673a\u5668\u5907\u4efd\n\n## \u7528\u6cd5\n\n```\n/instinct-import team-instincts.yaml\n/instinct-import https://github.com/org/repo/instincts.yaml\n/instinct-import --from-skill-creator acme/webapp\n```\n\n## \u6267\u884c\u6d41\u7a0b\n\n1. \u83b7\u53d6\u76f4\u89c9\u6587\u4ef6\uff08\u672c\u5730\u8def\u5f84\u6216 URL\uff09\n2. \u89e3\u6790\u5e76\u9a8c\u8bc1\u683c\u5f0f\n3. \u68c0\u67e5\u662f\u5426\u4e0e\u73b0\u6709\u76f4\u89c9\u91cd\u590d\n4. \u5408\u5e76\u6216\u6dfb\u52a0\u65b0\u76f4\u89c9\n5. \u4fdd\u5b58\u81f3 `~/.claude/homunculus/instincts/inherited/`\n\n## \u5bfc\u5165\u8fc7\u7a0b\u793a\u4f8b\n\n```\n\ud83d\udce5 \u6b63\u5728\u4ece team-instincts.yaml \u5bfc\u5165\u76f4\u89c9\uff1a\n================================================\n\n\u53d1\u73b0 12 \u6761\u5f85\u5bfc\u5165\u7684\u76f4\u89c9\u3002\n\n\u6b63\u5728\u5206\u6790\u51b2\u7a81...\n\n## \u65b0\u76f4\u89c9 (8)\n\u8fd9\u4e9b\u5c06\u88ab\u6dfb\u52a0\uff1a\n \u2713 use-zod-validation (\u7f6e\u4fe1\u5ea6: 0.7)\n \u2713 prefer-named-exports (\u7f6e\u4fe1\u5ea6: 0.65)\n \u2713 test-async-functions (\u7f6e\u4fe1\u5ea6: 0.8)\n ...\n\n## \u91cd\u590d\u76f4\u89c9 (3)\n\u5df2\u5b58\u5728\u7c7b\u4f3c\u7684\u76f4\u89c9\uff1a\n \u26a0\ufe0f prefer-functional-style\n \u672c\u5730\uff1a0.8 \u7f6e\u4fe1\u5ea6\uff0c12 \u4e2a\u89c2\u6d4b\u9879\n \u5bfc\u5165\uff1a0.7 \u7f6e\u4fe1\u5ea6\n \u2192 \u4fdd\u7559\u672c\u5730\uff08\u7f6e\u4fe1\u5ea6\u66f4\u9ad8\uff09\n\n \u26a0\ufe0f test-first-workflow\n \u672c\u5730\uff1a0.75 \u7f6e\u4fe1\u5ea6\n \u5bfc\u5165\uff1a0.9 \u7f6e\u4fe1\u5ea6\n \u2192 \u66f4\u65b0\u4e3a\u5bfc\u5165\u7684\u5185\u5bb9\uff08\u7f6e\u4fe1\u5ea6\u66f4\u9ad8\uff09\n\n## \u51b2\u7a81\u76f4\u89c9 (1)\n\u8fd9\u4e9b\u4e0e\u672c\u5730\u76f4\u89c9\u76f8\u77db\u76fe\uff1a\n \u274c use-classes-for-services\n \u4e0e avoid-classes \u51b2\u7a81\n \u2192 \u8df3\u8fc7\uff08\u9700\u8981\u624b\u52a8\u89e3\u51b3\uff09\n\n---\n\u5bfc\u5165 8 \u4e2a\u65b0\u9879\uff0c\u66f4\u65b0 1 \u4e2a\uff0c\u8df3\u8fc7 3 \u4e2a\uff1f\n```\n\n## \u5408\u5e76\u7b56\u7565\uff08Merge Strategies\uff09\n\n### \u5904\u7406\u91cd\u590d\u9879\n\u5f53\u5bfc\u5165\u7684\u76f4\u89c9\u4e0e\u73b0\u6709\u76f4\u89c9\u5339\u914d\u65f6\uff1a\n- **\u9ad8\u7f6e\u4fe1\u5ea6\u80dc\u51fa**\uff1a\u4fdd\u7559\u7f6e\u4fe1\u5ea6\uff08Confidence\uff09\u8f83\u9ad8\u7684\u4e00\u65b9\n- **\u5408\u5e76\u8bc1\u636e**\uff1a\u7d2f\u8ba1\u89c2\u6d4b\u9879\uff08Observation\uff09\u8ba1\u6570\n- **\u66f4\u65b0\u65f6\u95f4\u6233**\uff1a\u6807\u8bb0\u4e3a\u6700\u8fd1\u5df2\u9a8c\u8bc1\n\n### \u5904\u7406\u51b2\u7a81\n\u5f53\u5bfc\u5165\u7684\u76f4\u89c9\u4e0e\u73b0\u6709\u76f4\u89c9\u51b2\u7a81\u65f6\uff1a\n- **\u9ed8\u8ba4\u8df3\u8fc7**\uff1a\u4e0d\u5bfc\u5165\u4ea7\u751f\u51b2\u7a81\u7684\u76f4\u89c9\n- **\u6807\u8bb0\u5f85\u5ba1\u67e5**\uff1a\u5c06\u4e24\u8005\u90fd\u6807\u8bb0\u4e3a\u9700\u8981\u5173\u6ce8\n- **\u624b\u52a8\u89e3\u51b3**\uff1a\u7531\u7528\u6237\u51b3\u5b9a\u4fdd\u7559\u54ea\u4e00\u4e2a\n\n## \u6765\u6e90\u8ffd\u8e2a\n\n\u5bfc\u5165\u7684\u76f4\u89c9\u4f1a\u88ab\u6807\u8bb0\u4ee5\u4e0b\u5b57\u6bb5\uff1a\n```yaml\nsource: \"inherited\"\nimported_from: \"team-instincts.yaml\"\nimported_at: \"2025-01-22T10:30:00Z\"\noriginal_source: \"session-observation\" # \u6216 \"repo-analysis\"\n```\n\n## \u6280\u80fd\u751f\u6210\u5668\uff08Skill Creator\uff09\u96c6\u6210\n\n\u4ece\u6280\u80fd\u751f\u6210\u5668\uff08Skill Creator\uff09\u5bfc\u5165\u65f6\uff1a\n\n```\n/instinct-import --from-skill-creator acme/webapp\n```\n\n\u8fd9\u5c06\u83b7\u53d6\u901a\u8fc7\u4ed3\u5e93\u5206\u6790\u751f\u6210\u7684\u76f4\u89c9\uff1a\n- \u6765\u6e90\uff1a`repo-analysis`\n- \u8f83\u9ad8\u7684\u521d\u59cb\u7f6e\u4fe1\u5ea6\uff080.7+\uff09\n- \u5df2\u94fe\u63a5\u5230\u6e90\u4ed3\u5e93\n\n## \u53c2\u6570\u6807\u5fd7\uff08Flags\uff09\n\n- `--dry-run`\uff1a\u9884\u89c8\u800c\u4e0d\u6267\u884c\u5bfc\u5165\n- `--force`\uff1a\u5373\u4f7f\u5b58\u5728\u51b2\u7a81\u4e5f\u5f3a\u5236\u5bfc\u5165\n- `--merge-strategy <higher|local|import>`\uff1a\u5982\u4f55\u5904\u7406\u91cd\u590d\u9879\n- `--from-skill-creator <owner/repo>`\uff1a\u4ece\u6280\u8Line truncated
|
||||
"md5": "faf806d226f555c0eb60929daec25584",
|
||||
"content": "---\nname: instinct-import\ndescription: \u4ece\u961f\u53cb\u3001\u6280\u80fd\u751f\u6210\u5668\uff08Skill Creator\uff09\u6216\u5176\u4ed6\u6765\u6e90\u5bfc\u5165\u76f4\u89c9\uff08Instincts\uff09\ncommand: /instinct-import\nimplementation: python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py import <file>\n---\n\n# \u76f4\u89c9\u5bfc\u5165\u547d\u4ee4\uff08Instinct Import Command\uff09\n\n## \u5b9e\u73b0\n\n```bash\npython3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py import <file-or-url> [--dry-run] [--force] [--min-confidence 0.7]\n```\n\n\u4ece\u4ee5\u4e0b\u6765\u6e90\u5bfc\u5165\u76f4\u89c9\uff08Instincts\uff09\uff1a\n- \u961f\u53cb\u5bfc\u51fa\u7684\u6587\u4ef6\n- \u6280\u80fd\u751f\u6210\u5668\uff08Skill Creator\uff09\uff08\u4ed3\u5e93\u5206\u6790\uff09\n- \u793e\u533a\u96c6\u5408\n- \u4e4b\u524d\u7684\u673a\u5668\u5907\u4efd\n\n## \u7528\u6cd5\n\n```\n/instinct-import team-instincts.yaml\n/instinct-import https://github.com/org/repo/instincts.yaml\n/instinct-import --from-skill-creator acme/webapp\n```\n\n## \u6267\u884c\u6d41\u7a0b\n\n1. \u83b7\u53d6\u76f4\u89c9\u6587\u4ef6\uff08\u672c\u5730\u8def\u5f84\u6216 URL\uff09\n2. \u89e3\u6790\u5e76\u9a8c\u8bc1\u683c\u5f0f\n3. \u68c0\u67e5\u662f\u5426\u4e0e\u73b0\u6709\u76f4\u89c9\u91cd\u590d\n4. \u5408\u5e76\u6216\u6dfb\u52a0\u65b0\u76f4\u89c9\n5. \u4fdd\u5b58\u81f3 `~/.claude/homunculus/instincts/inherited/`\n\n## \u5bfc\u5165\u8fc7\u7a0b\u793a\u4f8b\n\n```\n\ud83d\udce5 \u6b63\u5728\u4ece team-instincts.yaml \u5bfc\u5165\u76f4\u89c9\uff1a\n================================================\n\n\u53d1\u73b0 12 \u6761\u5f85\u5bfc\u5165\u7684\u76f4\u89c9\u3002\n\n\u6b63\u5728\u5206\u6790\u51b2\u7a81...\n\n## \u65b0\u76f4\u89c9 (8)\n\u8fd9\u4e9b\u5c06\u88ab\u6dfb\u52a0\uff1a\n \u2713 use-zod-validation (\u7f6e\u4fe1\u5ea6: 0.7)\n \u2713 prefer-named-exports (\u7f6e\u4fe1\u5ea6: 0.65)\n \u2713 test-async-functions (\u7f6e\u4fe1\u5ea6: 0.8)\n ...\n\n## \u91cd\u590d\u76f4\u89c9 (3)\n\u5df2\u5b58\u5728\u7c7b\u4f3c\u7684\u76f4\u89c9\uff1a\n \u26a0\ufe0f prefer-functional-style\n \u672c\u5730\uff1a0.8 \u7f6e\u4fe1\u5ea6\uff0c12 \u4e2a\u89c2\u6d4b\u9879\n \u5bfc\u5165\uff1a0.7 \u7f6e\u4fe1\u5ea6\n \u2192 \u4fdd\u7559\u672c\u5730\uff08\u7f6e\u4fe1\u5ea6\u66f4\u9ad8\uff09\n\n \u26a0\ufe0f test-first-workflow\n \u672c\u5730\uff1a0.75 \u7f6e\u4fe1\u5ea6\n \u5bfc\u5165\uff1a0.9 \u7f6e\u4fe1\u5ea6\n \u2192 \u66f4\u65b0\u4e3a\u5bfc\u5165\u7684\u5185\u5bb9\uff08\u7f6e\u4fe1\u5ea6\u66f4\u9ad8\uff09\n\n## \u51b2\u7a81\u76f4\u89c9 (1)\n\u8fd9\u4e9b\u4e0e\u672c\u5730\u76f4\u89c9\u76f8\u77db\u76fe\uff1a\n \u274c use-classes-for-services\n \u4e0e avoid-classes \u51b2\u7a81\n \u2192 \u8df3\u8fc7\uff08\u9700\u8981\u624b\u52a8\u89e3\u51b3\uff09\n\n---\n\u5bfc\u5165 8 \u4e2a\u65b0\u9879\uff0c\u66f4\u65b0 1 \u4e2a\uff0c\u8df3\u8fc7 3 \u4e2a\uff1f\n```\n\n## \u5408\u5e76\u7b56\u7565\uff08Merge Strategies\uff09\n\n### \u5904\u7406\u91cd\u590d\u9879\n\u5f53\u5bfc\u5165\u7684\u76f4\u89c9\u4e0e\u73b0\u6709\u76f4\u89c9\u5339\u914d\u65f6\uff1a\n- **\u9ad8\u7f6e\u4fe1\u5ea6\u80dc\u51fa**\uff1a\u4fdd\u7559\u7f6e\u4fe1\u5ea6\uff08Confidence\uff09\u8f83\u9ad8\u7684\u4e00\u65b9\n- **\u5408\u5e76\u8bc1\u636e**\uff1a\u7d2f\u8ba1\u89c2\u6d4b\u9879\uff08Observation\uff09\u8ba1\u6570\n- **\u66f4\u65b0\u65f6\u95f4\u6233**\uff1a\u6807\u8bb0\u4e3a\u6700\u8fd1\u5df2\u9a8c\u8bc1\n\n### \u5904\u7406\u51b2\u7a81\n\u5f53\u5bfc\u5165\u7684\u76f4\u89c9\u4e0e\u73b0\u6709\u76f4\u89c9\u51b2\u7a81\u65f6\uff1a\n- **\u9ed8\u8ba4\u8df3\u8fc7**\uff1a\u4e0d\u5bfc\u5165\u4ea7\u751f\u51b2\u7a81\u7684\u76f4\u89c9\n- **\u6807\u8bb0\u5f85\u5ba1\u67e5**\uff1a\u5c06\u4e24\u8005\u90fd\u6807\u8bb0\u4e3a\u9700\u8981\u5173\u6ce8\n- **\u624b\u52a8\u89e3\u51b3**\uff1a\u7531\u7528\u6237\u51b3\u5b9a\u4fdd\u7559\u54ea\u4e00\u4e2a\n\n## \u6765\u6e90\u8ffd\u8e2a\n\n\u5bfc\u5165\u7684\u76f4\u89c9\u4f1a\u88ab\u6807\u8bb0\u4ee5\u4e0b\u5b57\u6bb5\uff1a\n```yaml\nsource: \"inherited\"\nimported_from: \"team-instincts.yaml\"\nimported_at: \"2025-01-22T10:30:00Z\"\noriginal_source: \"session-observation\" # \u6216 \"repo-analysis\"\n```\n\n## \u6280\u80fd\u751f\u6210\u5668\uff08Skill Creator\uff09\u96c6\u6210\n\n\u4ece\u6280\u80fd\u751f\u6210\u5668\uff08Skill Creator\uff09\u5bfc\u5165\u65f6\uff1a\n\n```\n/instinct-import --from-skill-creator acme/webapp\n```\n\n\u8fd9\u5c06\u83b7\u53d6\u901a\u8fc7\u4ed3\u5e93\u5206\u6790\u751f\u6210\u7684\u76f4\u89c9\uff1a\n- \u6765\u6e90\uff1a`repo-analysis`\n- \u8f83\u9ad8\u7684\u521d\u59cb\u7f6e\u4fe1\u5ea6\uff080.7+\uff09\n- \u5df2\u94fe\u63a5\u5230\u6e90\u4ed3\u5e93\n\n## \u53c2\u6570\u6807\u5fd7\uff08Flags\uff09\n\n- `--dry-run`\uff1a\u9884\u89c8\u800c\u4e0d\u6267\u884c\u5bfc\u5165\n- `--force`\uff1a\u5373\u4f7f\u5b58\u5728\u51b2\u7a81\u4e5f\u5f3a\u5236\u5bfc\u5165\n- `--merge-strategy <higher|local|import>`\uff1a\u5982\u4f55\u5904\u7406\u91cd\u590d\u9879\n- `--from-skill-creator <owner/repo>`\uff1a\u4ece\u6280\u8Line truncated
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/skills/continuous-learning-v2/commands/instinct-status.md": {
|
||||
"md5": "6e51fc9802148657184875fb624d5953",
|
||||
"md5": "3606345a74a78bcff12732b12d83ca7f",
|
||||
"content": "---\nname: instinct-status\ndescription: \u663e\u793a\u6240\u6709\u5df2\u5b66\u4e60\u7684\u76f4\u89c9\uff08Instincts\uff09\u53ca\u5176\u7f6e\u4fe1\u5ea6\u6c34\u5e73\ncommand: /instinct-status\nimplementation: python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py status\n---\n\n# Instinct Status \u547d\u4ee4\n\n\u6309\u9886\u57df\uff08Domain\uff09\u5206\u7ec4\u663e\u793a\u6240\u6709\u5df2\u5b66\u4e60\u7684\u76f4\u89c9\uff08Instincts\uff09\u53ca\u5176\u7f6e\u4fe1\u5ea6\u5f97\u5206\u3002\n\n## \u5b9e\u73b0\n\n```bash\npython3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py status\n```\n\n## \u7528\u6cd5\n\n```\n/instinct-status\n/instinct-status --domain code-style\n/instinct-status --low-confidence\n```\n\n## \u6267\u884c\u903b\u8f91\n\n1. \u4ece `~/.claude/homunculus/instincts/personal/` \u8bfb\u53d6\u6240\u6709\u4e2a\u4eba\u76f4\u89c9\u6587\u4ef6\n2. \u4ece `~/.claude/homunculus/instincts/inherited/` \u8bfb\u53d6\u7ee7\u627f\u7684\u76f4\u89c9\n3. \u6309\u9886\u57df\u5206\u7ec4\u663e\u793a\uff0c\u5e76\u9644\u5e26\u7f6e\u4fe1\u5ea6\u8fdb\u5ea6\u6761\n\n## \u8f93\u51fa\u683c\u5f0f\n\n```\n\ud83d\udcca \u76f4\u89c9\u72b6\u6001 (Instinct Status)\n==================\n\n## \u4ee3\u7801\u98ce\u683c (4 \u4e2a\u76f4\u89c9)\n\n### prefer-functional-style\n\u89e6\u53d1\u6761\u4ef6 (Trigger)\uff1a\u7f16\u5199\u65b0\u51fd\u6570\u65f6\n\u52a8\u4f5c (Action)\uff1a\u4f18\u5148\u4f7f\u7528\u51fd\u6570\u5f0f\u6a21\u5f0f\u800c\u975e\u7c7b\n\u7f6e\u4fe1\u5ea6 (Confidence)\uff1a\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591 80%\n\u6765\u6e90 (Source)\uff1asession-observation | \u6700\u540e\u66f4\u65b0\uff1a2025-01-22\n\n### use-path-aliases\n\u89e6\u53d1\u6761\u4ef6 (Trigger)\uff1a\u5bfc\u5165\u6a21\u5757\u65f6\n\u52a8\u4f5c (Action)\uff1a\u4f7f\u7528 @/ \u8def\u5f84\u522b\u540d\u800c\u975e\u76f8\u5bf9\u5bfc\u5165\n\u7f6e\u4fe1\u5ea6 (Confidence)\uff1a\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591 60%\n\u6765\u6e90 (Source)\uff1arepo-analysis (github.com/acme/webapp)\n\n## \u6d4b\u8bd5 (2 \u4e2a\u76f4\u89c9)\n\n### test-first-workflow\n\u89e6\u53d1\u6761\u4ef6 (Trigger)\uff1a\u6dfb\u52a0\u65b0\u529f\u80fd\u65f6\n\u52a8\u4f5c (Action)\uff1a\u5148\u5199\u6d4b\u8bd5\uff0c\u518d\u5199\u5b9e\u73b0\n\u7f6e\u4fe1\u5ea6 (Confidence)\uff1a\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 90%\n\u6765\u6e90 (Source)\uff1asession-observation\n\n## \u5de5\u4f5c\u6d41 (3 \u4e2a\u76f4\u89c9)\n\n### grep-before-edit\n\u89e6\u53d1\u6761\u4ef6 (Trigger)\uff1a\u4fee\u6539\u4ee3\u7801\u65f6\n\u52a8\u4f5c (Action)\uff1a\u5148\u7528 Grep \u641c\u7d22\uff0c\u7528 Read \u786e\u8ba4\uff0c\u518d\u8fdb\u884c\u7f16\u8f91 (Edit)\n\u7f6e\u4fe1\u5ea6 (Confidence)\uff1a\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591 70%\n\u6765\u6e90 (Source)\uff1asession-observation\n\n---\n\u603b\u8ba1\uff1a9 \u4e2a\u76f4\u89c9\uff084 \u4e2a\u4e2a\u4eba\uff0c5 \u4e2a\u7ee7\u627f\uff09\n\u89c2\u5bdf\u5668 (Observer)\uff1a\u8fd0\u884c\u4e2d\uff08\u4e0a\u6b21\u5206\u6790\uff1a5 \u5206\u949f\u524d\uff09\n```\n\n## \u53c2\u6570 (Flags)\n\n- `--domain <name>`\uff1a\u6309\u9886\u57df\u8fc7\u6ee4\uff08code-style\u3001testing\u3001git \u7b49\uff09\n- `--low-confidence`\uff1a\u4ec5\u663e\u793a\u7f6e\u4fe1\u5ea6 < 0.5 \u7684\u76f4\u89c9\n- `--high-confidence`\uff1a\u4ec5\u663e\u793a\u7f6e\u4fe1\u5ea6 >= 0.7 \u7684\u76f4\u89c9\n- `--source <type>`\uff1a\u6309\u6765\u6e90\u8fc7\u6ee4\uff08session-observation\u3001repo-analysis\u3001inherited\uff09\n- `--json`\uff1a\u4ee5 JSON \u683c\u5f0f\u8f93\u51fa\uff0c\u4f9b\u7a0b\u5e8f\u5316\u4f7f\u7528\n"
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/skills/continuous-learning-v2/commands/evolve.md": {
|
||||
"md5": "38788e8e8e5ee69c2f6236ff70bfa55a",
|
||||
"content": "---\nname: evolve\ndescription: \u5c06\u76f8\u5173\u672c\u80fd\uff08Instincts\uff09\u805a\u7c7b\u4e3a\u6280\u80fd\u3001\u547d\u4ee4\u6216\u667a\u80fd\u4f53\ncommand: /evolve\nimplementation: python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve\n---\n\n# \u6f14\u8fdb\uff08Evolve\uff09\u547d\u4ee4\n\n## \u5b9e\u73b0\n\n```bash\npython3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve [--generate]\n```\n\n\u5206\u6790\u672c\u80fd\uff08Instincts\uff09\u5e76\u5c06\u76f8\u5173\u7684\u672c\u80fd\u805a\u7c7b\u4e3a\u66f4\u9ad8\u7ea7\u522b\u7684\u7ed3\u6784\uff1a\n- **\u547d\u4ee4\uff08Commands\uff09**\uff1a\u5f53\u672c\u80fd\u63cf\u8ff0\u7684\u662f\u7528\u6237\u8c03\u7528\u7684\u64cd\u4f5c\u65f6\n- **\u6280\u80fd\uff08Skills\uff09**\uff1a\u5f53\u672c\u80fd\u63cf\u8ff0\u7684\u662f\u81ea\u52a8\u89e6\u53d1\u7684\u884c\u4e3a\u65f6\n- **\u667a\u80fd\u4f53\uff08Agents\uff09**\uff1a\u5f53\u672c\u80fd\u63cf\u8ff0\u7684\u662f\u590d\u6742\u7684\u3001\u591a\u6b65\u9aa4\u7684\u8fc7\u7a0b\u65f6\n\n## \u7528\u6cd5\n\n```\n/evolve # \u5206\u6790\u6240\u6709\u672c\u80fd\u5e76\u5efa\u8bae\u6f14\u8fdb\u65b9\u6848\n/evolve --domain testing # \u4ec5\u6f14\u8fdb\u6d4b\u8bd5\u9886\u57df\uff08testing domain\uff09\u4e2d\u7684\u672c\u80fd\n/evolve --dry-run # \u663e\u793a\u5c06\u8981\u521b\u5efa\u7684\u5185\u5bb9\u800c\u4e0d\u5b9e\u9645\u6267\u884c\n/evolve --threshold 5 # \u8981\u6c42 5 \u4e2a\u6216\u66f4\u591a\u76f8\u5173\u672c\u80fd\u624d\u8fdb\u884c\u805a\u7c7b\n```\n\n## \u6f14\u8fdb\u89c4\u5219\n\n### \u2192 \u547d\u4ee4\uff08Command\uff0c\u7528\u6237\u8c03\u7528\uff09\n\u5f53\u672c\u80fd\u63cf\u8ff0\u7528\u6237\u4f1a\u663e\u5f0f\u8bf7\u6c42\u7684\u64cd\u4f5c\u65f6\uff1a\n- \u591a\u4e2a\u5173\u4e8e\u201c\u5f53\u7528\u6237\u8981\u6c42...\u201d\u7684\u672c\u80fd\n- \u5e26\u6709\u201c\u5728\u521b\u5efa\u65b0\u7684 X \u65f6\u201d\u7b49\u89e6\u53d1\u5668\u7684\u672c\u80fd\n- \u9075\u5faa\u53ef\u91cd\u590d\u5e8f\u5217\u7684\u672c\u80fd\n\n\u793a\u4f8b\uff1a\n- `new-table-step1`\uff1a\u201c\u5728\u6dfb\u52a0\u6570\u636e\u5e93\u8868\u65f6\uff0c\u521b\u5efa\u8fc1\u79fb\u6587\u4ef6\u201d\n- `new-table-step2`\uff1a\u201c\u5728\u6dfb\u52a0\u6570\u636e\u5e93\u8868\u65f6\uff0c\u66f4\u65b0 schema\u201d\n- `new-table-step3`\uff1a\u201c\u5728\u6dfb\u52a0\u6570\u636e\u5e93\u8868\u65f6\uff0c\u91cd\u65b0\u751f\u6210\u7c7b\u578b\u201d\n\n\u2192 \u521b\u5efa\uff1a`/new-table` \u547d\u4ee4\n\n### \u2192 \u6280\u80fd\uff08Skill\uff0c\u81ea\u52a8\u89e6\u53d1\uff09\n\u5f53\u672c\u80fd\u63cf\u8ff0\u5e94\u8be5\u81ea\u52a8\u53d1\u751f\u7684\u884c\u4e3a\u65f6\uff1a\n- \u6a21\u5f0f\u5339\u914d\u89e6\u53d1\u5668\n- \u9519\u8bef\u5904\u7406\u54cd\u5e94\n- \u4ee3\u7801\u98ce\u683c\u5f3a\u5236\u6267\u884c\n\n\u793a\u4f8b\uff1a\n- `prefer-functional`\uff1a\u201c\u5728\u7f16\u5199\u51fd\u6570\u65f6\uff0c\u4f18\u5148\u4f7f\u7528\u51fd\u6570\u5f0f\u98ce\u683c\u201d\n- `use-immutable`\uff1a\u201c\u5728\u4fee\u6539\u72b6\u6001\u65f6\uff0c\u4f7f\u7528\u4e0d\u53ef\u53d8\u6a21\u5f0f\u201d\n- `avoid-classes`\uff1a\u201c\u5728\u8bbe\u8ba1\u6a21\u5757\u65f6\uff0c\u907f\u514d\u57fa\u4e8e\u7c7b\u7684\u8bbe\u8ba1\u201d\n\n\u2192 \u521b\u5efa\uff1a`functional-patterns` \u6280\u80fd\n\n### \u2192 \u667a\u80fd\u4f53\uff08Agent\uff0c\u9700\u8981\u6df1\u5ea6/\u9694\u79bb\uff09\n\u5f53\u672c\u80fd\u63cf\u8ff0\u53d7\u76ca\u4e8e\u9694\u79bb\u7684\u590d\u6742\u3001\u591a\u6b65\u9aa4\u8fc7\u7a0b\u65f6\uff1a\n- \u8c03\u8bd5\u5de5\u4f5c\u6d41\uff08Workflow\uff09\n- \u91cd\u6784\u5e8f\u5217\n- \u7814\u7a76\u4efb\u52a1\n\n\u793a\u4f8b\uff1a\n- `debug-step1`\uff1a\u201c\u8c03\u8bd5\u65f6\uff0c\u5148\u68c0\u67e5\u65e5\u5fd7\u201d\n- `debug-step2`\uff1a\u201c\u8c03\u8bd5\u65f6\uff0c\u9694\u79bb\u6545\u969c\u7ec4\u4ef6\u201d\n- `debug-step3`\uff1a\u201c\u8c03\u8bd5\u65f6\uff0c\u521b\u5efa\u6700\u5c0f\u590d\u73b0\u201d\n- `debug-step4`\uff1a\u201c\u8c03\u8bd5\u65f6\uff0c\u901a\u8fc7\u6d4b\u8bd5\u9a8c\u8bc1\u4fee\u590d\u201d\n\n\u2192 \u521b\u5efa\uff1a`debugger` \u667a\u80fd\u4f53\n\n## \u6267\u884c\u6b65\u9aa4\n\n1. \u4ece `~/.claude/homunculus/instincts/` \u8bfb\u53d6\u6240\u6709\u672c\u80fd\n2. \u6309\u4ee5\u4e0b\u7ef4\u5ea6\u5bf9\u672c\u80fd\u8fdb\u884c\u5206\u7ec4\uff1a\n - \u9886\u57df\u76f8\u4f3c\u6027\n - \u89e6\u53d1\u6a21\u5f0f\u91cd\u53e0\n - \u52a8\u4f5c\u5e8f\u5217\u5173\u7cfb\n3. \u5bf9\u4e8e\u6bcf\u4e2a\u5305\u542b 3 \u4e2a\u6216\u66f4\u591a\u76f8\u5173\u672c\u80fd\u7684\u805a\u7c7b\uff1a\n - \u786e\u5b9a\u6f14\u8fdb\u7c7b\u578b\uff08\u547d\u4ee4/\u6280\u80fd/\u667a\u80fd\u4f53\uff09\n - \u751f\u6210\u76f8\u5e94\u7684\u6587\u4ef6\n - \u4fdd\u5b58\u5230 `~/.claude/homunculus/evolved/{commands,skills,agents}/`\n4. \u5c06\u6f14\u8fdb\u540e\u7684\u7ed3\u6784\u94fe\u63a5\u56de\u6e90\u672c\u80fd\n\n## \u8f93\u51fa\u683c\u5f0f\n\n```\n\ud83e\uddec \u6f14\u8fdb\u5206\u6790\uff08Evolve Analysis\uff09\n==================\n\n\u53d1\u73b0 3 \u4e2a\u5df2\u51c6\u5907\u597d\u6f14\u8fdb\u7684\Line truncated
|
||||
"md5": "cfe5918aa83686faa00eaa3efd77f697",
|
||||
"content": "---\nname: evolve\ndescription: \u5c06\u76f8\u5173\u672c\u80fd (Instincts) \u805a\u7c7b\u4e3a\u6280\u80fd (Skills)\u3001\u547d\u4ee4 (Commands) \u6216\u667a\u80fd\u4f53 (Agents)\ncommand: /evolve\nimplementation: python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve\n---\n\n# \u6f14\u8fdb (Evolve) \u547d\u4ee4\n\n## \u5b9e\u73b0\n\n```bash\npython3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve [--generate]\n```\n\n\u5206\u6790\u672c\u80fd (Instincts) \u5e76\u5c06\u76f8\u5173\u7684\u672c\u80fd\u805a\u7c7b\u4e3a\u66f4\u9ad8\u7ea7\u522b\u7684\u7ed3\u6784\uff1a\n- **\u547d\u4ee4 (Commands)**\uff1a\u5f53\u672c\u80fd\u63cf\u8ff0\u7684\u662f\u7528\u6237\u8c03\u7528\u7684\u64cd\u4f5c\u65f6\n- **\u6280\u80fd (Skills)**\uff1a\u5f53\u672c\u80fd\u63cf\u8ff0\u7684\u662f\u81ea\u52a8\u89e6\u53d1\u7684\u884c\u4e3a\u65f6\n- **\u667a\u80fd\u4f53 (Agents)**\uff1a\u5f53\u672c\u80fd\u63cf\u8ff0\u7684\u662f\u590d\u6742\u7684\u3001\u591a\u6b65\u9aa4\u7684\u8fc7\u7a0b\u65f6\n\n## \u7528\u6cd5\n\n```\n/evolve # \u5206\u6790\u6240\u6709\u672c\u80fd\u5e76\u5efa\u8bae\u6f14\u8fdb\u65b9\u6848\n/evolve --domain testing # \u4ec5\u6f14\u8fdb\u6d4b\u8bd5\u9886\u57df (testing domain) \u4e2d\u7684\u672c\u80fd\n/evolve --dry-run # \u663e\u793a\u5c06\u8981\u521b\u5efa\u7684\u5185\u5bb9\u800c\u4e0d\u5b9e\u9645\u6267\u884c\n/evolve --threshold 5 # \u8981\u6c42 5 \u4e2a\u6216\u66f4\u591a\u76f8\u5173\u672c\u80fd\u624d\u8fdb\u884c\u805a\u7c7b\n```\n\n## \u6f14\u8fdb\u89c4\u5219\n\n### \u2192 \u547d\u4ee4 (Command\uff0c\u7528\u6237\u8c03\u7528)\n\u5f53\u672c\u80fd\u63cf\u8ff0\u7528\u6237\u4f1a\u663e\u5f0f\u8bf7\u6c42\u7684\u64cd\u4f5c\u65f6\uff1a\n- \u591a\u4e2a\u5173\u4e8e\u201c\u5f53\u7528\u6237\u8981\u6c42...\u201d\u7684\u672c\u80fd\n- \u5e26\u6709\u201c\u5728\u521b\u5efa\u65b0\u7684 X \u65f6\u201d\u7b49\u89e6\u53d1\u5668\u7684\u672c\u80fd\n- \u9075\u5faa\u53ef\u91cd\u590d\u5e8f\u5217\u7684\u672c\u80fd\n\n\u793a\u4f8b\uff1a\n- `new-table-step1`\uff1a\u201c\u5728\u6dfb\u52a0\u6570\u636e\u5e93\u8868\u65f6\uff0c\u521b\u5efa\u8fc1\u79fb\u6587\u4ef6\u201d\n- `new-table-step2`\uff1a\u201c\u5728\u6dfb\u52a0\u6570\u636e\u5e93\u8868\u65f6\uff0c\u66f4\u65b0 schema\u201d\n- `new-table-step3`\uff1a\u201c\u5728\u6dfb\u52a0\u6570\u636e\u5e93\u8868\u65f6\uff0c\u91cd\u65b0\u751f\u6210\u7c7b\u578b\u201d\n\n\u2192 \u521b\u5efa\uff1a`/new-table` \u547d\u4ee4\n\n### \u2192 \u6280\u80fd (Skill\uff0c\u81ea\u52a8\u89e6\u53d1)\n\u5f53\u672c\u80fd\u63cf\u8ff0\u5e94\u8be5\u81ea\u52a8\u53d1\u751f\u7684\u884c\u4e3a\u65f6\uff1a\n- \u6a21\u5f0f\u5339\u914d\u89e6\u53d1\u5668\n- \u9519\u8bef\u5904\u7406\u54cd\u5e94\n- \u4ee3\u7801\u98ce\u683c\u5f3a\u5236\u6267\u884c\n\n\u793a\u4f8b\uff1a\n- `prefer-functional`\uff1a\u201c\u5728\u7f16\u5199\u51fd\u6570\u65f6\uff0c\u4f18\u5148\u4f7f\u7528\u51fd\u6570\u5f0f\u98ce\u683c\u201d\n- `use-immutable`\uff1a\u201c\u5728\u4fee\u6539\u72b6\u6001\u65f6\uff0c\u4f7f\u7528\u4e0d\u53ef\u53d8\u6a21\u5f0f\u201d\n- `avoid-classes`\uff1a\u201c\u5728\u8bbe\u8ba1\u6a21\u5757\u65f6\uff0c\u907f\u514d\u57fa\u4e8e\u7c7b\u7684\u8bbe\u8ba1\u201d\n\n\u2192 \u521b\u5efa\uff1a`functional-patterns` \u6280\u80fd\n\n### \u2192 \u667a\u80fd\u4f53 (Agent\uff0c\u9700\u8981\u6df1\u5ea6/\u9694\u79bb)\n\u5f53\u672c\u80fd\u63cf\u8ff0\u53d7\u76ca\u4e8e\u9694\u79bb\u7684\u590d\u6742\u3001\u591a\u6b65\u9aa4\u8fc7\u7a0b\u65f6\uff1a\n- \u8c03\u8bd5\u5de5\u4f5c\u6d41 (Workflow)\n- \u91cd\u6784\u5e8f\u5217\n- \u7814\u7a76\u4efb\u52a1\n\n\u793a\u4f8b\uff1a\n- `debug-step1`\uff1a\u201c\u8c03\u8bd5\u65f6\uff0c\u5148\u68c0\u67e5\u65e5\u5fd7\u201d\n- `debug-step2`\uff1a\u201c\u8c03\u8bd5\u65f6\uff0c\u9694\u79bb\u6545\u969c\u7ec4\u4ef6\u201d\n- `debug-step3`\uff1a\u201c\u8c03\u8bd5\u65f6\uff0c\u521b\u5efa\u6700\u5c0f\u590d\u73b0\u201d\n- `debug-step4`\uff1a\u201c\u8c03\u8bd5\u65f6\uff0c\u901a\u8fc7\u6d4b\u8bd5\u9a8c\u8bc1\u4fee\u590d\u201d\n\n\u2192 \u521b\u5efa\uff1a`debugger` \u667a\u80fd\u4f53\n\n## \u6267\u884c\u6b65\u9aa4\n\n1. \u4ece `~/.claude/homunculus/instincts/` \u8bfb\u53d6\u6240\u6709\u672c\u80fd\n2. \u6309\u4ee5\u4e0b\u7ef4\u5ea6\u5bf9\u672c\u80fd\u8fdb\u884c\u5206\u7ec4\uff1a\n - \u9886\u57df\u76f8\u4f3c\u6027\n - \u89e6\u53d1\u6a21\u5f0f\u91cd\u53e0\n - \u52a8\u4f5c\u5e8f\u5217\u5173\u7cfb\n3. \u5bf9\u4e8e\u6bcf\u4e2a\u5305\u542b 3 \u4e2a\u6216\u66f4\u591a\u76f8\u5173\u672c\u80fd\u7684\u805a\u7c7b\uff1a\n - \u786e\u5b9a\u6f14\u8fdb\u7c7b\u578b\uff08\u547d\u4ee4/\u6280\u80fd/\u667a\u80fd\u4f53\uff09\n - \u751f\u6210\u76f8\u5e94\u7684\u6587\u4ef6\n - \u4fdd\u5b58\u5230 `~/.claude/homunculus/evolved/{commands,skills,agents}/`\n4. \u5c06\u6f14\u8fdb\u540e\u7684\u7ed3\u6784\u94fe\u63a5\u56de\u6e90\u672c\u80fd\n\n## \u8f93\u51fa\u683c\u5f0f\n\n```\n\ud83e\uddec \u6f14\u8fdb\u5206\u6790 (Evolve Analysis)\n==================\n\n\u53d1\u73b0 3 \u4e2a\u5df2\u51c6\u5907\u597d\u6f14\u8fdb\u7684\u805a\u7c7b\uff1a\n\n## \u805a\u7c7b 1: \u6570\u636e\u5e93\u8fc1\u79fb\u5dLine truncated
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/skills/verification-loop/SKILL.md": {
|
||||
"md5": "98d63dbc797baf9171b30b7da1080a0c",
|
||||
@@ -294,5 +294,13 @@
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/commands/go-test.md": {
|
||||
"md5": "ea0812790d72de0251a961ad3a5a1534",
|
||||
"content": "---\ndescription: \u5f3a\u5236\u6267\u884c Go \u7684\u6d4b\u8bd5\u9a71\u52a8\u5f00\u53d1\uff08TDD\uff09\u5de5\u4f5c\u6d41\u3002\u5148\u7f16\u5199\u8868\u9a71\u52a8\u6d4b\u8bd5\uff08Table-Driven Tests\uff09\uff0c\u7136\u540e\u8fdb\u884c\u5b9e\u73b0\u3002\u4f7f\u7528 go test -cover \u9a8c\u8bc1 80% \u4ee5\u4e0a\u7684\u8986\u76d6\u7387\u3002\n---\n\n# Go TDD \u547d\u4ee4\n\n\u6b64\u547d\u4ee4\u4f7f\u7528\u5730\u9053\u7684 Go \u6d4b\u8bd5\u6a21\u5f0f\u4e3a Go \u4ee3\u7801\u5f3a\u5236\u6267\u884c\u6d4b\u8bd5\u9a71\u52a8\u5f00\u53d1\uff08Test-Driven Development\uff0cTDD\uff09\u65b9\u6cd5\u8bba\u3002\n\n## \u6b64\u547d\u4ee4\u7684\u4f5c\u7528\n\n1. **\u5b9a\u4e49\u7c7b\u578b/\u63a5\u53e3**\uff1a\u9996\u5148\u642d\u5efa\u51fd\u6570\u7b7e\u540d\u7684\u652f\u67b6\n2. **\u7f16\u5199\u8868\u9a71\u52a8\u6d4b\u8bd5\uff08Table-Driven Tests\uff09**\uff1a\u521b\u5efa\u5168\u9762\u7684\u6d4b\u8bd5\u7528\u4f8b\uff08RED/\u7ea2\u706f\uff09\n3. **\u8fd0\u884c\u6d4b\u8bd5**\uff1a\u9a8c\u8bc1\u6d4b\u8bd5\u56e0\u9884\u671f\u7684\u539f\u56e0\u5931\u8d25\n4. **\u5b9e\u73b0\u4ee3\u7801**\uff1a\u7f16\u5199\u901a\u8fc7\u6d4b\u8bd5\u6240\u9700\u7684\u6700\u5c11\u4ee3\u7801\uff08GREEN/\u7eff\u706f\uff09\n5. **\u91cd\u6784\uff08Refactor\uff09**\uff1a\u5728\u4fdd\u6301\u6d4b\u8bd5\u901a\u8fc7\u7684\u540c\u65f6\u4f18\u5316\u4ee3\u7801\n6. **\u68c0\u67e5\u8986\u76d6\u7387**\uff1a\u786e\u4fdd 80% \u4ee5\u4e0a\u7684\u8986\u76d6\u7387\n\n## \u4f55\u65f6\u4f7f\u7528\n\n\u5728\u4ee5\u4e0b\u573a\u666f\u4f7f\u7528 `/go-test`\uff1a\n- \u5b9e\u73b0\u65b0\u7684 Go \u51fd\u6570\n- \u4e3a\u73b0\u6709\u4ee3\u7801\u589e\u52a0\u6d4b\u8bd5\u8986\u76d6\u7387\n- \u4fee\u590d Bug\uff08\u5148\u7f16\u5199\u5931\u8d25\u7684\u6d4b\u8bd5\uff09\n- \u6784\u5efa\u6838\u5fc3\u4e1a\u52a1\u903b\u8f91\n- \u5728 Go \u4e2d\u5b66\u4e60 TDD \u5de5\u4f5c\u6d41\uff08Workflow\uff09\n\n## TDD \u5468\u671f\n\n```\nRED\uff08\u7ea2\u706f\uff09 \u2192 \u7f16\u5199\u5931\u8d25\u7684\u8868\u9a71\u52a8\u6d4b\u8bd5\nGREEN\uff08\u7eff\u706f\uff09 \u2192 \u5b9e\u73b0\u901a\u8fc7\u6d4b\u8bd5\u6240\u9700\u7684\u6700\u5c11\u4ee3\u7801\nREFACTOR\uff08\u91cd\u6784\uff09 \u2192 \u4f18\u5316\u4ee3\u7801\uff0c\u4fdd\u6301\u6d4b\u8bd5\u901a\u8fc7\nREPEAT\uff08\u5faa\u73af\uff09 \u2192 \u4e0b\u4e00\u4e2a\u6d4b\u8bd5\u7528\u4f8b\n```\n\n## \u4f1a\u8bdd\u793a\u4f8b\n\n```text\nUser: /go-test \u6211\u9700\u8981\u4e00\u4e2a\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u7684\u51fd\u6570\n\nAgent:\n# TDD \u4f1a\u8bdd\uff1a\u7535\u5b50\u90ae\u4ef6\u9a8c\u8bc1\u5668\n\n## \u7b2c 1 \u6b65\uff1a\u5b9a\u4e49\u63a5\u53e3\n\n```go\n// validator/email.go\npackage validator\n\n// ValidateEmail \u68c0\u67e5\u7ed9\u5b9a\u7684\u5b57\u7b26\u4e32\u662f\u5426\u4e3a\u6709\u6548\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u3002\n// \u5982\u679c\u6709\u6548\u8fd4\u56de nil\uff0c\u5426\u5219\u8fd4\u56de\u63cf\u8ff0\u95ee\u9898\u7684\u9519\u8bef\u3002\nfunc ValidateEmail(email string) error {\n panic(\"not implemented\")\n}\n```\n\n## \u7b2c 2 \u6b65\uff1a\u7f16\u5199\u8868\u9a71\u52a8\u6d4b\u8bd5 (RED)\n\n```go\n// validator/email_test.go\npackage validator\n\nimport (\n \"testing\"\n)\n\nfunc TestValidateEmail(t *testing.T) {\n tests := []struct {\n name string\n email string\n wantErr bool\n }{\n // \u6709\u6548\u90ae\u7bb1\n {\"simple email\", \"user@example.com\", false},\n {\"with subdomain\", \"user@mail.example.com\", false},\n {\"with plus\", \"user+tag@example.com\", false},\n {\"with dots\", \"first.last@example.com\", false},\n\n // \u65e0\u6548\u90ae\u7bb1\n {\"empty string\", \"\", true},\n {\"no at sign\", \"userexample.com\", true},\n {\"no domain\", \"user@\", true},\n {\"no local part\", \"@example.com\", true},\n {\"double at\", \"user@@example.com\", true},\n {\"spaces\", \"user @example.com\", true},\n {\"no tld\", \"user@example\", true},\n }\n\n for _, tt := range tests {\n t.Run(tt.name, func(t *testing.T) {\n err := ValidateEmail(tt.email)\n if tt.wantErr && err == nil {\n t.Errorf(\"ValidateEmail(%q) = nil; want error\", tt.email)\n }\n if !tt.wantErr && err != nil {\n t.Errorf(\"ValidateEmail(%q) = %v; want nil\", tt.email, err)\n }\n })\n }\n}\n```\n\n## \u7b2c 3 \u6b65\uff1a\u8fd0\u884c\u6d4b\u8bd5 - \u9a8c\u8bc1\u5931\u8d25\n\n```bash\n$ go test ./validator/...\n\n--- FAIL: TestValidateEmail (0.00s)\n --- FAIL: TestValidateEmail/simple_email (0.00s)\n panic: not implemented\n\nFAIL\n```\n\n\u2713 \u6d4b\u8bd5\u5982\u9884\u671f\u822c\u5931\u8d25 (panic)\u3002\n\n## \u7b2c 4 \u6b65\uff1a\u5b9e\u73b0\u6700\u5c11\u4ee3\u7801 (GREEN)\n\n```go\n// validator/email.go\npackage validator\n\nimport (\n \"errors\"\n \"regexp\"\n)\n\nvar emailRegex = regexp.MustCompile(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$`)\n\nvar (\n Line truncated
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/docs/zh-TW/README.md": {
|
||||
"md5": "fdb36f50f829447225f5dd8efa7e5aa2",
|
||||
"content": "# Everything Claude Code\n\n[](https://github.com/affaan-m/everything-claude-code/stargazers)\n[](LICENSE)\n\n\n\n\n\n**\u6765\u81ea Anthropic \u9ed1\u5ba2\u677e\u51a0\u519b\u7684\u5b8c\u6574 Claude Code \u914d\u7f6e\u96c6\u3002**\n\n\u7ecf\u8fc7 10 \u4e2a\u6708\u4ee5\u4e0a\u5bc6\u96c6\u65e5\u5e38\u4f7f\u7528\u3001\u6253\u9020\u771f\u5b9e\u4ea7\u54c1\u6240\u6dec\u70bc\u51fa\u7684\u751f\u4ea7\u5c31\u7eea\u667a\u80fd\u4f53\uff08Agents\uff09\u3001\u6280\u80fd\uff08Skills\uff09\u3001\u94a9\u5b50\uff08Hooks\uff09\u3001\u6307\u4ee4\uff08Commands\uff09\u3001\u89c4\u5219\uff08Rules\uff09\u548c MCP \u914d\u7f6e\u3002\n\n---\n\n## \u6307\u5357\n\n\u672c\u4ed3\u5e93\u4ec5\u5305\u542b\u539f\u59cb\u4ee3\u7801\u3002\u6307\u5357\u4f1a\u89e3\u91ca\u6240\u6709\u5185\u5bb9\u3002\n\n<table>\n<tr>\n<td width=\"50%\">\n<a href=\"https://x.com/affaanmustafa/status/2012378465664745795\">\n<img src=\"https://github.com/user-attachments/assets/1a471488-59cc-425b-8345-5245c7efbcef\" alt=\"Everything Claude Code \u7b80\u660e\u6307\u5357\" />\n</a>\n</td>\n<td width=\"50%\">\n<a href=\"https://x.com/affaanmustafa/status/2014040193557471352\">\n<img src=\"https://github.com/user-attachments/assets/c9ca43bc-b149-427f-b551-af6840c368f0\" alt=\"Everything Claude Code \u5b8c\u6574\u6307\u5357\" />\n</a>\n</td>\n</tr>\n<tr>\n<td align=\"center\"><b>\u7b80\u660e\u6307\u5357</b><br/>\u914d\u7f6e\u3001\u57fa\u7840\u3001\u7406\u5ff5\u3002<b>\u8bf7\u5148\u9605\u8bfb\u6b64\u6307\u5357\u3002</b></td>\n<td align=\"center\"><b>\u5b8c\u6574\u6307\u5357</b><br/>Token \u4f18\u5316\u3001\u8bb0\u5fc6\u6301\u4e45\u5316\u3001\u8bc4\u4f30\u3001\u5e76\u884c\u5904\u7406\u3002</td>\n</tr>\n</table>\n\n| \u4e3b\u9898 | \u5b66\u4e60\u5185\u5bb9 |\n|------|----------|\n| Token \u4f18\u5316 | \u6a21\u578b\u9009\u62e9\u3001\u7cfb\u7edf\u63d0\u793a\u7cbe\u7b80\u3001\u540e\u53f0\u8fdb\u7a0b |\n| \u8bb0\u5fc6\u6301\u4e45\u5316 | \u81ea\u52a8\u8de8\u4f1a\u8bdd\uff08Session\uff09\u4fdd\u5b58/\u52a0\u8f7d\u4e0a\u4e0b\u6587\u7684\u94a9\u5b50\uff08Hooks\uff09 |\n| \u6301\u7eed\u5b66\u4e60 | \u4ece\u4f1a\u8bdd\u4e2d\u81ea\u52a8\u63d0\u53d6\u6a21\u5f0f\u5e76\u8f6c\u5316\u4e3a\u53ef\u91cd\u7528\u6280\u80fd\uff08Skills\uff09 |\n| \u9a8c\u8bc1\u5faa\u73af | \u68c0\u67e5\u70b9 vs \u6301\u7eed\u8bc4\u4f30\u3001\u8bc4\u5206\u5668\u7c7b\u578b\u3001pass@k \u6307\u6807 |\n| \u5e76\u884c\u5904\u7406 | Git worktrees\u3001\u4e32\u8054\u65b9\u6cd5\u3001\u4f55\u65f6\u6269\u5c55\u5b9e\u4f8b |\n| \u5b50\u667a\u80fd\u4f53\u534f\u8c03 | \u4e0a\u4e0b\u6587\u95ee\u9898\u3001\u6e10\u8fdb\u5f0f\u68c0\u7d22\u6a21\u5f0f |\n\n---\n\n## \u8de8\u5e73\u53f0\u652f\u6301\n\n\u6b64\u63d2\u4ef6\u73b0\u5df2\u5b8c\u6574\u652f\u6301 **Windows\u3001macOS \u548c Linux**\u3002\u6240\u6709\u94a9\u5b50\u548c\u811a\u672c\u5df2\u4f7f\u7528 Node.js \u91cd\u5199\u4ee5\u83b7\u5f97\u6700\u4f73\u517c\u5bb9\u6027\u3002\n\n### \u5305\u7ba1\u7406\u5668\u68c0\u6d4b\n\n\u63d2\u4ef6\u4f1a\u81ea\u52a8\u68c0\u6d4b\u60a8\u504f\u597d\u7684\u5305\u7ba1\u7406\u5668\uff08npm\u3001pnpm\u3001yarn \u6216 bun\uff09\uff0c\u4f18\u5148\u7ea7\u5982\u4e0b\uff1a\n\n1. **\u73af\u5883\u53d8\u91cf**\uff1a`CLAUDE_PACKAGE_MANAGER`\n2. **\u9879\u76ee\u914d\u7f6e**\uff1a`.claude/package-manager.json`\n3. **package.json**\uff1a`packageManager` \u5b57\u6bb5\n4. **\u9501\u6587\u4ef6**\uff1a\u4ece package-lock.json\u3001yarn.lock\u3001pnpm-lock.yaml \u6216 bun.lockb \u68c0\u6d4b\n5. **\u5168\u5c40\u914d\u7f6e**\uff1a`~/.claude/package-manager.json`\n6. **\u5907\u9009\u65b9\u6848**\uff1a\u7b2c\u4e00\u4e2a\u53ef\u7528\u7684\u5305\u7ba1\u7406\u5668\n\n\u8bbe\u7f6e\u60a8\u504f\u597d\u7684\u5305\u7ba1\u7406\u5668\uff1a\n\n```bash\n# \u901a\u8fc7\u73af\u5883\u53d8\u91cf\nexport CLAUDE_PACKAGE_MANAGER=pnpm\n\n# \u901a\u8fc7\u5168\u5c40\u914d\u7f6e\nnode scripts/setup-package-manager.js --global pnpm\n\n# \u901a\u8fc7\u9879\u76ee\u914d\u7f6e\nnode scripts/setup-package-manager.js --project bun\n\n# \u68c0\u6d4b\u5f53\u524d\u914d\u7f6e\nnode scripts/setup-package-manager.js --detect\n```\n\n\u6216\u5728 Claude Code \u4e2d\u4f7f\u7528 `/setup-pm` \u6307\u4ee4\u3002\n\n---\n\n## \u5185\u5bb9\u6982\u89c8\n\n\u672c\u4ed3\u5e93\u662f\u4e00\u4e2a **Claude Code \u63d2\u4ef6** - \u53ef\u76f4\u63a5\u5b89\u88c5\u6216\u624b\u52a8\u590d\u5236\u7ec4\u4ef6\u3002\n\n```\neverything-claude-code/\n|-- .claude-plugin/ # \u63d2\u4ef6\u548c\u5e02\u573a\u6e05\u5355\n| |-- plugin.json # \u63d2\u4ef6\u5143\u6570\u636e\u548c\u7ec4\u4ef6\u8def\u5f84\n| |-- marketplace.json # \u752Line truncated
|
||||
},
|
||||
"/Users/Library/Applications/xx/code/github/everything-claude-code-zh/.claude-plugin/README.md": {
|
||||
"md5": "8b6aa77ad9181456133d28e477db962e",
|
||||
"content": "### \u63d2\u4ef6\u6e05\u5355\u6ce8\u610f\u4e8b\u9879\uff08Plugin Manifest Gotchas\uff09\n\n\u5982\u679c\u4f60\u8ba1\u5212\u7f16\u8f91 `.claude-plugin/plugin.json`\uff0c\u8bf7\u6ce8\u610f Claude \u63d2\u4ef6\u9a8c\u8bc1\u5668\uff08plugin validator\uff09\u5f3a\u5236\u6267\u884c\u4e86\u4e00\u4e9b**\u672a\u516c\u5f00\u4f46\u4e25\u683c\u7684\u7ea6\u675f**\uff0c\u8fd9\u4e9b\u7ea6\u675f\u53ef\u80fd\u5bfc\u81f4\u5b89\u88c5\u5931\u8d25\u5e76\u663e\u793a\u6a21\u7cca\u7684\u9519\u8bef\uff08\u4f8b\u5982\uff0c`agents: Invalid input`\uff09\u3002\u7279\u522b\u662f\uff0c\u7ec4\u4ef6\u5b57\u6bb5\u5fc5\u987b\u662f\u6570\u7ec4\uff08arrays\uff09\uff0c`agents` \u5fc5\u987b\u4f7f\u7528\u660e\u786e\u7684\u6587\u4ef6\u8def\u5f84\u800c\u975e\u76ee\u5f55\uff0c\u4e14\u4e3a\u4e86\u5b9e\u73b0\u53ef\u9760\u7684\u9a8c\u8bc1\u548c\u5b89\u88c5\uff0c\u5fc5\u987b\u5305\u542b `version` \u5b57\u6bb5\u3002\n\n\u8fd9\u4e9b\u7ea6\u675f\u5728\u516c\u5f00\u793a\u4f8b\u4e2d\u5e76\u4e0d\u660e\u663e\uff0c\u4e14\u5728\u8fc7\u53bb\u66fe\u591a\u6b21\u5bfc\u81f4\u5b89\u88c5\u5931\u8d25\u3002\u5b83\u4eec\u5728 `.claude-plugin/PLUGIN_SCHEMA_NOTES.md` \u4e2d\u6709\u8be6\u7ec6\u8bb0\u5f55\uff0c\u5728\u5bf9\u63d2\u4ef6\u6e05\u5355\uff08plugin manifest\uff09\u8fdb\u884c\u4efb\u4f55\u66f4\u6539\u4e4b\u524d\uff0c\u5e94\u4ed4\u7ec6\u9605\u8bfb\u8be5\u6587\u6863\u3002\n"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user