Skip to content

3.3 实战三:项目仪表盘技能包

引言

小王每天早上都要手动查看:项目有几个未提交的变更?当前在哪个分支?最近做了什么?有没有开放的 PR?

这些都是只读查询,不会产生副作用——适合让 AI 自动触发。


通用需求(所有工具适用)

  • 展示项目当前状态的一站式仪表盘
  • 只读操作,可以自动触发
  • 用户只需说"项目状态"就能触发

Claude Code 实现(详细示例)

创建 .claude/skills/project-status/SKILL.md

markdown
---
name: project-status
description: 报告项目当前状态。当说"项目怎么样"、"当前状态"、"项目概览"、"今天做了什么"时使用
---

## Git 状态

!`git status --short`

## 当前分支

!`git branch --show-current`

## 最近提交

!`git log --oneline -10`

## 开放 PR

!`gh pr list --state open --limit 5 2>/dev/null || echo "未配置 GitHub CLI"`

## 指令

按 [template.md](template.md) 的格式输出项目状态报告。重点突出:
1. 有多少文件被修改(未提交的变更)
2. 最近的开发方向
3. 是否有需要关注的开放 PR

创建 .claude/skills/project-status/template.md

markdown
# 📊 项目状态报告

## 概览
- 当前分支:{branch}
- 未提交变更:{count} 个文件
- 开放 PR:{count} 个

## 最近活动
{最近 5 条提交的简要说明}

## 注意事项
{需要关注的问题,如长期未合并的 PR、大量未提交变更等}

设计决策解析

为什么不设 disable-model-invocation: true

这个技能包是纯只读的——查看状态不会产生任何副作用。而且这是一个高频操作——小王每天早上都要看项目状态。让 Claude 自动触发,小王只需说"项目怎么样"就能得到报告。

💡 与变更总结技能包的对比

  • /summarize-changes:低频只读 → 建议手动触发
  • /project-status:高频只读 → 可以自动触发

判断标准:如果一个只读技能包你每天都要用多次,可以自动触发;如果只是偶尔用,建议手动控制。

为什么用辅助文件存模板?

模板可能随项目变化。把它放在独立的 template.md 中:

  • 修改模板不需要动 SKILL.md
  • 团队可以各自定制模板格式
  • 符合渐进式披露——模板只在技能包被调用时才加载

为什么用 2>/dev/null 处理 gh 命令?

不是所有项目都配置了 GitHub CLI。如果没配置,gh pr list 会报错。2>/dev/null || echo "未配置" 让技能包在没有 gh 的环境也能正常运行。


其他工具等效做法

Cursor 用户

在设置中创建 Custom Command,Prompt 内容:

markdown
报告项目当前状态。请执行以下操作:

1. 运行 git status --short 查看文件状态
2. 运行 git branch --show-current 查看当前分支
3. 运行 git log --oneline -10 查看最近提交
4. 如果有 gh CLI,运行 gh pr list --state open --limit 5 查看开放 PR

输出格式化的项目状态报告,重点突出:
- 有多少文件被修改
- 最近的开发方向
- 是否有需要关注的开放 PR

Windsurf 用户

yaml
project-status:
  globs: "**/*"
  instructions: |
    当用户询问项目状态时:
    - 执行 git status 查看文件变更
    - 执行 git branch 查看当前分支
    - 执行 git log --oneline -10 查看最近提交
    - 输出格式化的项目状态报告

📋 工具差异说明

  • 辅助文件(template.md):Claude Code 独有独立目录结构,其他工具的模板需内嵌在配置中
  • 自动触发:Claude Code 通过 description 判断,Windsurf 通过 globs 匹配,Cursor 无自动触发

测试(Claude Code)

  1. 确保项目有未提交的变更和几个 commit
  2. 说"项目怎么样"或输入 /project-status
  3. 检查输出是否包含:分支、变更数、最近提交、PR 信息

练习

🎯 练习题

(Claude Code 用户)为 project-status 技能包增加一个"待办事项"功能:从项目中的 TODO.md 文件读取待办列表并显示。

提示:

  • !cat TODO.md 2>/dev/null || echo "没有 TODO.md"`` 注入
  • 或者在指令中让 Claude 按需读取 TODO.md

(其他工具用户)为你的工具创建项目状态查询能力。


三个实战的对比

维度变更总结Issue 修复项目仪表盘
自动触发❌ 手动❌ 手动✅ 自动
有副作用
参数Issue 编号(CC特有)
动态注入2 个(CC特有)1 个(CC特有)4 个(CC特有)
辅助文件可选模板文件(CC特有)
allowed-tools5 个(CC特有)

本节小结

📌 本节核心要点

  • 只读技能包可以自动触发(通用):项目状态查询没有副作用,让 AI 自动调用
  • 辅助文件存模板(Claude Code):修改格式不影响 SKILL.md,团队可定制
  • 容错处理(通用)2>/dev/null || echo 让技能包在缺少工具时也能运行
  • 三个实战三种模式:手动只读、手动有副作用、自动只读——设计决策的核心差异

思考题

  1. 如果你有一个部署技能包和一个状态技能包,你会怎么设置自动触发策略?为什么不同?
  2. (Claude Code 用户)项目仪表盘用了 4 个动态注入。如果其中某个命令执行很慢,怎么优化?
  3. 你会把这个技能包放在项目级还是个人级?如果团队中有人不用 GitHub 怎么办?
  4. (其他工具用户)你使用的工具如何实现"高频只读自动触发"?

下一节预告

三个实战完成了!接下来进入进阶能力——如何处理长任务的上下文污染?如何精确控制技能包的激活范围?下一节学习任务隔离执行和精细控制。

下一节:任务隔离执行——避免上下文污染