掌握了 Skills 基础后,三个高级特性可以让 Skills 真正发挥威力:用 Shell 命令在 Claude 看到内容前注入实时数据、用路径 glob 让 Skills 只在相关文件上自动激活、用 context: fork 在独立 Subagent 里运行复杂任务。本文是这三个高级模式的深度指南。
高级模式一:动态上下文注入(Shell 命令预处理)
工作原理
Skills 里的 !`命令` 语法在内容发送给 Claude 之前在本地执行,命令输出替换占位符。Claude 看到的是真实数据,而不是命令本身。
Skill 内容:
"当前 git 状态:!`git status --short`"
Claude 实际看到的:
"当前 git 状态:
M src/api/auth.ts
?? src/api/payments.ts"
这不是 Claude 执行的命令,而是预处理,在 Claude 介入前已完成。
内联命令
---
name: pr-context
description: 加载当前 PR 的上下文,帮助 Claude 理解工作背景
---
## Pull Request 信息
- PR 差异:!`gh pr diff --stat`
- 最新评论:!`gh pr view --comments | head -50`
- CI 状态:!`gh pr checks`
- 分支信息:!`git log main..HEAD --oneline`多行命令块
使用 ```! 块执行多行命令:
---
name: env-check
description: 检查开发环境配置状态
---
## 当前环境
```!
echo "=== Node.js ==="
node --version
echo "=== npm 版本 ==="
npm --version
echo "=== 环境变量 ==="
echo "DATABASE_URL: ${DATABASE_URL:+已设置}"
echo "API_KEY: ${API_KEY:+已设置}"
echo "=== 数据库连接 ==="
node -e "require('./src/db').ping().then(() => console.log('✅')).catch(e => console.log('❌', e.message))" 2>/dev/null || echo "无法测试"
### 安全注意事项
项目级 Skills(`.claude/skills/`)的 Shell 执行在接受工作区信任后生效,与 `.claude/settings.json` 的权限规则相同。**Review 你克隆的项目的 Skills,因为 Skill 可以授予自己宽泛的工具访问权限。**
禁用特定来源的 Shell 执行:
```json
// .claude/settings.json
{
"disableSkillShellExecution": true
}
(这个设置不影响 Bundled Skills 和 Managed Skills。)
实战示例:代码库健康检查
---
name: health-check
description: 全面的代码库健康检查,包含测试/覆盖率/技术债/依赖状态
disable-model-invocation: true
allowed-tools: Bash(npm *) Bash(git *)
effort: high
---
## 代码库健康状况报告
### 测试
```!
npm test -- --reporter=min 2>&1 | tail -10覆盖率
npm run test:coverage 2>&1 | grep "All files" | head -3
TypeScript 错误
npx tsc --noEmit 2>&1 | head -20
技术债标记
grep -rn "TODO\|FIXME\|HACK\|XXX" src/ --include="*.ts" | wc -l | xargs echo "技术债标记数:"
依赖安全
npm audit --json 2>/dev/null | python3 -c "
import json,sys
try:
d=json.load(sys.stdin)
v=d['metadata']['vulnerabilities']
print(f'Critical: {v[\"critical\"]}, High: {v[\"high\"]}, Moderate: {v[\"moderate\"]}')
except: print('audit 数据不可用')
"
最近 7 天的提交活跃度
!git log --since="7 days ago" --oneline | wc -l | xargs echo "本周提交数:"
分析以上数据,给出:
- 整体健康评分(A/B/C/D)
- 最需要关注的 3 个问题
- 各项指标的趋势判断(良好/警告/危险)
---
## 高级模式二:路径限定自动激活
### 工作原理
`paths` 字段定义 glob 模式,只有在处理匹配文件时,Claude 才自动激活这个 Skill。
```yaml
paths: "src/components/**/*.tsx" # 单个 glob
paths: "src/**/*.ts,tests/**/*.ts" # 逗号分隔多个
paths: # YAML 列表
- "src/api/**"
- "src/types/**"
激活时机:Claude 正在查看、编辑或讨论匹配路径的文件时。
注意:路径限定的 Skill 仍然可以通过 /skill-name 手动调用,不受路径限制。
实战示例
TypeScript 严格模式规范(TS 文件专用)
---
name: ts-strict
description: TypeScript 严格类型的编码规范,在编辑 TS 文件时自动激活
paths: "**/*.ts,**/*.tsx"
user-invocable: false
---
编写 TypeScript 代码时,严格遵守以下规范:
**类型安全**
- 禁止使用 `any`,改用 `unknown` 配合类型守卫
- 禁止无目的的类型断言(`as SomeType`),必须有注释说明
- 所有公共 API 函数必须有显式返回类型注解
- 优先使用联合类型(`A | B`)而非 `Optional<A>`(TypeScript 5+)
**Null 安全**
- 开启 `strictNullChecks`(已在 tsconfig 里配置)
- 可选链(`?.`)和空值合并(`??`)优于显式 null 检查
**错误处理**
- `try/catch` 的 catch 参数用 `unknown`,不用 `any`
- 类型收窄:`if (error instanceof Error) { ... }`SQL 文件安全规范
---
name: sql-safety
description: SQL 文件的安全约束,防止注入
paths: "**/*.sql,src/**/*query*.ts,src/**/*repository*.ts"
user-invocable: false
---
处理数据库查询时:
**强制要求**
- 所有参数化查询,禁止字符串拼接
- 使用 `$1, $2` 占位符(PostgreSQL)或 `?` 占位符(MySQL)
- 用户输入必须通过参数传递,不能直接插入 SQL 字符串
**禁止模式**
```typescript
// ❌ 禁止
const query = `SELECT * FROM users WHERE id = ${userId}`;
// ✅ 正确
const query = 'SELECT * FROM users WHERE id = $1';
const result = await db.query(query, [userId]);如果发现字符串拼接的 SQL,立即提醒并重写。
#### React 组件规范(组件目录专用)
```markdown
---
name: react-standards
description: React 组件编写规范,在组件目录自动激活
paths: "src/components/**,src/pages/**,src/views/**"
user-invocable: false
---
编写 React 组件时:
**组件结构**
1. Props interface 声明(`interface ComponentProps { ... }`)
2. 函数式组件(`const Component: React.FC<Props> = ({ ... }) => {`)
3. Hooks 调用(useState、useEffect 等在函数体顶部)
4. 事件处理函数
5. 渲染逻辑
**性能**
- 纯展示组件用 `React.memo` 包裹
- 回调函数用 `useCallback`(传递给子组件时)
- 昂贵计算用 `useMemo`
**禁止**
- Class 组件(除非有特殊理由)
- `any` 类型的 Props
- 直接修改 state(`state.push()` 等)
高级模式三:context: fork(在 Subagent 里运行)
适用场景
| 用途 | 是否适合 context: fork |
|---|---|
| 需要访问对话历史作为上下文 | ❌ 不适合(fork 不访问历史) |
| 大量探索性工作(日志、搜索结果) | ✅ 适合(不污染主会话) |
| 需要独立的模型/努力等级配置 | ✅ 适合 |
| 并行执行的调研任务 | ✅ 适合 |
| 需要只读访问 | ✅ 适合(指定 agent: Explore) |
可选的 agent 类型
context: fork
agent: Explore # 只读工具,Haiku 模型,适合代码探索
agent: Plan # 只读工具,适合规划阶段研究
agent: general-purpose # 全部工具(默认)
agent: my-custom-agent # 任何 .claude/agents/ 里的自定义 agent实战示例:依赖分析器
---
name: dep-analysis
description: 深入分析项目依赖关系和潜在问题,在独立上下文里运行
context: fork
agent: Explore
---
对当前项目进行依赖分析:
1. 读取 package.json(或 requirements.txt/go.mod)
2. 识别以下问题:
- 重复功能的依赖(两个做同一件事的库)
- 主版本升级可用的过时依赖
- 已知有安全问题的依赖
- 只在开发中使用但放在 dependencies 里的包
3. 分析依赖图的深度(间接依赖数量)
4. 输出报告:
- 关键发现(Top 5)
- 建议移除的依赖
- 建议升级的依赖(优先级排序)
- 估计的 bundle size 影响实战示例:代码库架构调研
---
name: arch-research
description: 深入调研代码库架构,用于理解大型系统的结构
context: fork
agent: Explore
---
对 $ARGUMENTS 进行深入架构调研:
## 调研范围
1. **入口点识别**:找到所有主要入口点(main.ts、index.ts、app.ts 等)
2. **模块边界**:识别主要的功能模块和它们的边界
3. **数据流**:追踪数据从输入到存储的完整路径
4. **依赖关系**:模块间的依赖图(哪些模块依赖哪些模块)
5. **关键决策点**:找到代码里体现重要架构决策的地方
## 输出格式
用 Mermaid 图表展示模块关系:
```mermaid
graph TD
...然后用文字描述每个主要模块的职责和它与其他模块的交互。
---
## 组合使用:动态注入 + 路径限定 + Fork
最强大的 Skill 通常结合三个特性:
```markdown
---
name: pr-review-full
description: 完整的 PR 审查:拉取实时数据,在独立上下文里进行深度分析
context: fork
agent: Explore
paths: "**/*.ts,**/*.tsx,**/*.py,**/*.go"
allowed-tools: Bash(gh *) Read Glob Grep
effort: xhigh
---
## PR 实时数据
- PR 差异:!`gh pr diff`
- PR 信息:!`gh pr view`
- CI 状态:!`gh pr checks 2>/dev/null | head -20`
- 变更文件:!`gh pr diff --name-only`
## 审查任务
对这个 PR 进行全面审查:
**代码质量**
- 是否有明显的 Bug?
- 是否有更好的实现方式?
- 是否遵循项目的代码规范?
**测试覆盖**
- 新功能是否有对应测试?
- 边界情况是否被覆盖?
**安全性**
- 是否有输入验证缺失?
- 是否有敏感数据暴露风险?
**性能**
- 是否有明显的性能问题(N+1 查询、不必要的循环等)?
输出格式:按严重性排序(🔴 必须修改 / 🟡 建议修改 / 🟢 小建议),每项含具体位置和修复方案。
来源:Claude Code 官方文档 - Skills 高级特性 | 整理:ClaudeEagle