文章目录
Toggle引言
Claude Code作为Anthropic推出的官方CLI工具,近期推出了Skills功能,让开发者能够创建自定义的自动化任务。本文将分享如何利用Skills功能实现一个自动生成周报的实用工具,通过分析Git提交记录来总结每周工作内容。
Skill功能简介
Skills是Claude Code的一项核心功能,允许开发者创建自定义的自动化任务。与传统的脚本不同,Skills能够:
- 智能识别:自动匹配用户意图,无需手动调用
- 上下文感知:理解项目结构和开发环境
- 多工具集成:结合
Bash、文件操作等工具完成复杂任务
文件目录
Claude Code的配置文件结构如下:
.claude/
├── skills/ # Skills技能目录
│ └── git-report/ # Git报告生成技能
│ ├── SKILL.md # 技能定义文件
│ └── README.md # 技能说明文档
├── agents/ # 智能代理定义
├── commands/ # 自定义命令
└── hooks/ # 钩子脚本
Skill实现方式
Skills的实现基于Markdown文件,通过详细的指令描述来指导Claude完成特定任务。每个Skill包含:
- 技能名称和描述:定义技能的基本信息
- 核心能力:详细说明技能的功能范围
- 执行流程:分步骤的操作指南
- 特殊场景处理:异常情况的应对策略
具体实现案例
我们实现了一个Git报告生成技能,主要功能包括:
需求背景:
- 开发团队需要定期总结工作进展
- 手动整理
Git提交记录耗时耗力 - 需要将报告自动发送到企业微信
实现功能:
- 智能分析
Git提交日志 - 生成日报和周报
- 支持企微机器人自动发送
- 智能时间计算(自动处理周末)
1. Skill具体实现
技能定义
在SKILL.md中定义技能的基本信息:
---
name: git-report
description: 分析Git提交日志生成简洁的日报和周报,提取核心工作内容并附带提交数据,支持发送到企微机器人
---
智能时间计算
技能能够智能计算日期范围:
# 日报模式:智能计算上一个工作日
case $(date '+%u') in
1) target_date=$(date -v-3d '+%Y-%m-%d') ;; # 周一返回上周五
2|3|4|5) target_date=$(date -v-1d '+%Y-%m-%d') ;; # 工作日返回前一天
6|7) target_date=$(date -v-2d '+%Y-%m-%d') ;; # 周末返回上周五
esac
Git日志分析
通过Git命令获取提交数据:
git log --since="${target_date} 00:00" --until="${target_date} 23:59" \
--pretty=format:"%h %an %ad %s" --date=short
企微机器人集成
支持将报告自动发送到企业微信:
curl -H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "## 日报标题\n\n日报内容..."
}
}' \
"$WECHAT_WEBHOOK_URL"
完整的SKILL内容
---
name: git-report
description: 分析Git提交日志生成简洁的日报和周报,提取核心工作内容并附带提交数据,支持发送到企微机器人
---
# Git报告生成专家
你是一位专业的开发工作分析专家,专门从Git提交日志中提取关键工作内容,生成简洁明了的日报和周报。你能够智能分析提交信息,识别核心工作项,并提供附带相关提交数据的专业报告。
## 核心能力
### 📊 Git日志分析
- **提交分析**:解析Git提交日志,提取有意义的工作内容
- **时间筛选**:支持指定日期范围(默认上一个工作日或上周)的提交分析
- **内容提取**:从提交信息中提取核心工作项和关键数据
- **分类整理**:按功能、修复、优化等类型对工作内容进行分类
### 📝 报告生成
- **简洁输出**:生成3-4行简短的工作内容描述
- **数据量化**:在描述中嵌入代码统计、问题修复等量化指标
- **专业格式**:使用清晰、专业的语言表达
- **重点突出**:突出显示重要的工作成果和进展
### 📅 智能时间计算
- **日报模式**:智能计算上一个工作日,自动处理周末
- **周报模式**:智能计算上周日期范围(周一至周五)
- **提交检查**:智能查找有提交记录的工作日
- **优雅降级**:如果找不到有提交的工作日,使用计算出的时间
### 📤 企微机器人集成
- **自动发送**:支持将报告自动发送到企业微信机器人
- **环境配置**:通过 `WECHAT_WEBHOOK_URL` 环境变量配置
- **格式适配**:自动适配企微机器人的消息格式
## 执行流程
### 1. 请求解析与模式识别
**识别用户意图**:
- 如果请求包含"日报"或"昨天",执行日报模式
- 如果请求包含"周报"或"上周",执行周报模式
- 如果指定具体日期,使用指定日期
- 如果没有指定,默认使用周报模式
### 2. 时间范围计算
**日报模式**:
```bash
# 获取当前星期(1=周一, 7=周日)
current_day=$(date '+%u')
echo "今天是星期 $current_day"
# 智能计算上一个工作日
case $current_day in
1) # 周一,返回上周五
target_date=$(date -v-3d '+%Y-%m-%d')
strategy="周一返回上周五"
date_range="${target_date}"
report_type="日报"
;;
2|3|4|5) # 周二到周五,返回前一天
target_date=$(date -v-1d '+%Y-%m-%d')
strategy="工作日返回前一天"
date_range="${target_date}"
report_type="日报"
;;
6|7) # 周六周日,返回上周五
target_date=$(date -v-2d '+%Y-%m-%d')
strategy="周末返回上周五"
date_range="${target_date}"
report_type="日报"
;;
esac
周报模式:
# 计算上周一和上周五
last_monday=$(date -v-1w -v-monday '+%Y-%m-%d')
last_friday=$(date -v-1w -v-friday '+%Y-%m-%d')
strategy="周报模式返回上周"
date_range="${last_monday} 至 ${last_friday}"
report_type="周报"
智能提交检查:
# 检查目标日期是否有提交
if [ "$report_type" = "日报" ]; then
commit_count=$(git log --since="${target_date} 00:00" --until="${target_date} 23:59" --oneline --no-merges | wc -l | tr -d ' ')
else
commit_count=$(git log --since="${last_monday} 00:00" --until="${last_friday} 23:59" --oneline --no-merges | wc -l | tr -d ' ')
fi
if [ "$commit_count" -gt 0 ]; then
echo "✅ 目标日期有 $commit_count 个提交"
else
echo "⚠️ 目标日期无提交,智能回溯查找..."
# 智能回溯逻辑...
fi
echo "报告类型: $report_type"
echo "日期范围: $date_range"
echo "计算策略: $strategy"
3. Git日志分析与内容提取
获取提交数据:
# 日报模式
if [ "$report_type" = "日报" ]; then
git log --since="${target_date} 00:00" --until="${target_date} 23:59" --pretty=format:"%h %an %ad %s" --date=short
git log --since="${target_date} 00:00" --until="${target_date} 23:59" --stat --oneline
else
# 周报模式
git log --since="${last_monday} 00:00" --until="${last_friday} 23:59" --pretty=format:"%h %an %ad %s" --date=short
git log --since="${last_monday} 00:00" --until="${last_friday} 23:59" --stat --oneline
fi
内容分析策略:
-
工作内容识别:
- 功能开发:新功能、特性添加、模块实现
- 问题修复:bug修复、错误处理、异常解决
- 代码优化:性能优化、重构、代码清理
- 文档更新:文档编写、注释完善、README更新
- 配置调整:配置变更、环境设置、依赖更新
-
重要性评估:
- 高重要性:核心功能、关键修复、架构变更
- 中重要性:功能改进、优化调整、文档完善
- 低重要性:格式调整、小修小改、注释更新
-
数据量化:
- 统计新增代码行数、修改代码行数
- 统计修复的bug数量
- 统计不同类型提交的数量
- 评估整体工作量和复杂度
4. 报告生成与格式化
日报格式:
## 📅 工作日报 - YYYY-MM-DD
- 完成了[功能名称]的核心开发,涉及[提交数量]个提交,新增[代码行数]行代码
- 修复了[问题描述]相关bug,共修复[bug数量]个问题,优化了[影响范围]
- 优化了[模块/组件]的性能和代码结构,修改[代码行数]行代码,提升了[优化指标]
- 更新了[文档/配置]内容,完善了[相关方面]的说明和设置
周报格式:
## 📊 工作周报 - YYYY-MM-DD 至 YYYY-MM-DD
### 本周工作概览
- **总提交数**:[总提交数]个提交
- **功能开发**:[功能提交数]个功能提交
- **问题修复**:[修复提交数]个问题修复
- **代码优化**:[优化提交数]个优化提交
### 主要工作成果
- 完成了[主要功能]的开发,涉及[提交数量]个提交,新增[代码行数]行代码
- 重点修复了[关键问题]相关bug,共修复[bug数量]个问题
- 优化了[重要模块]的性能,修改[代码行数]行代码
- 完善了[文档/配置]体系,提升了项目质量
4. 企微机器人发送(可选)
环境变量检查:
# 检查环境变量
echo "检查环境变量 WECHAT_WEBHOOK_URL..."
WEBHOOK_URL=$(echo $WECHAT_WEBHOOK_URL)
if [ -n "$WEBHOOK_URL" ]; then
echo "找到Webhook URL: ${WEBHOOK_URL:0:50}..."
# 验证Webhook URL格式
if [[ "$WEBHOOK_URL" =~ ^https://qyapi.weixin.qq.com/cgi-bin/webhook/send.* ]]; then
echo "Webhook URL格式正确"
else
echo "❌ Webhook URL格式错误,请检查配置"
echo "URL应该以 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send' 开头"
fi
else
echo "❌ 未设置 WECHAT_WEBHOOK_URL 环境变量"
echo "配置方法:export WECHAT_WEBHOOK_URL=\"your_webhook_url\""
fi
企微消息格式:
在工作日报或者周报的最后加上以下内容:
🤖 由 Claude Code 自动生成
发送消息:
curl -s -w "%{http_code}" -o /tmp/wechat_response.json \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "## 日报标题\n\n日报内容..."
}
}' \
"$WEBHOOK_URL"
特殊场景处理
无提交的情况
- 明确告知用户当天没有提交记录
- 建议检查日期范围是否正确
- 提供替代方案(如查看其他日期)
大量提交的情况
- 优先选择重要和有代表性的提交
- 按重要性排序工作内容
- 合并相似类型的提交
- 突出显示关键成果
企微机器人发送失败
- 网络问题:检查网络连接,重试发送
- URL错误:验证Webhook URL格式和有效性
- 消息过长:简化日报内容,控制在企微机器人限制内
- 权限问题:检查机器人是否被禁用或权限不足
- 备用方案:如果发送失败,提供本地保存选项
输出质量标准
准确性
- ✅ 提交数据准确无误
- ✅ 工作描述真实反映提交内容
- ✅ 日期范围正确
- ✅ 统计信息精确
简洁性
- ✅ 控制在3-4行描述
- ✅ 每行聚焦一个主要工作项
- ✅ 语言简洁专业
- ✅ 避免技术术语堆砌
实用性
- ✅ 附带量化数据指标
- ✅ 突出重要工作成果
- ✅ 便于快速阅读和理解
- ✅ 提供有价值的工作摘要
完整性
- ✅ 覆盖主要工作类型
- ✅ 包含代码统计和问题修复数据
- ✅ 反映整体工作进展
- ✅ 提供足够的数据支撑
关键要点
- 双模式支持:同时支持日报和周报两种模式
- 智能时间计算:自动处理周末和节假日情况
- 环境变量依赖:企微机器人发送功能依赖于 `WECHAT_WEBHOOK_URL` 环境变量
- Bash工具使用:必须使用Bash工具来获取环境变量,因为Claude Code在命令行模式下无法直接访问shell环境变量
- 简洁实用:目标是提供准确、简洁、实用的工作报告,帮助用户快速了解开发进展和关键工作成果
2. 测试结果
说明:
企微机器人WEBHOOK_URL获取方法:
- 打开企业微信,进入目标群聊
- 点击右上角群聊设置
- 选择"群机器人"
- 点击"添加机器人"
- 设置机器人名称(如:"日报机器人")
- 复制生成的Webhook URL
Skill与MCP的区别
为了更好地理解Skills和MCP的区别,我们可以通过一个简单的比喻:
Skills就像你的个人助理,而MCP就像公司的专业部门。
| 特性 | Skill (个人助理) | MCP (专业部门) |
|---|---|---|
| 使用场景 | 日常自动化任务 快速响应需求 轻量级工具 |
复杂系统集成 专业工具连接 企业级应用 |
| 部署方式 | 文件复制即可 无需额外配置 即装即用 |
需要安装服务 配置协议连接 环境依赖 |
| 响应速度 | 秒级响应 直接在当前会话执行 |
需要启动进程 协议通信延迟 相对较慢 |
| 功能范围 | 文本处理、数据分析 文件操作、简单脚本 |
数据库连接、API调用 复杂工具集成 |
| 学习成本 | 低,Markdown文档 易于理解和修改 |
高,需要技术背景 协议理解和配置 |
实际场景对比:
使用Skills的场景:
- 日报生成:一键分析
Git提交,生成工作摘要 - 代码审查:快速检查代码质量,给出改进建议
- 文档整理:批量处理
Markdown文档,生成目录 - 数据转换:
CSV转JSON,YAML转XML等格式转换
使用MCP的场景:
- 数据库操作:连接
MySQL、PostgreSQL执行复杂查询 - 云服务集成:调用
AWS、Azure等云平台API - 专业工具:集成
Docker、Kubernetes等运维工具 - 企业系统:连接
Jira、Confluence等企业应用
选择建议:
- 选择
Skills:当需要快速实现自动化、处理文本数据、执行简单脚本时 - 选择
MCP:当需要连接外部系统、使用专业工具、处理复杂业务逻辑时
简单来说:Skills适合做你的贴身助手,MCP适合连接专业工具。
Skill的进一步应用拓展
基于Git报告生成技能的实践经验,Skills功能在更多场景中具有广阔的应用前景:
命令行环境下的独特优势
处理非结构化数据:
- 日志分析:自动分析系统日志,提取关键错误和性能指标
- 文档处理:批量处理
Markdown、JSON等文档,自动生成摘要 - 数据转换:在不同格式间转换数据,如
CSV转JSON、YAML转XML
复杂任务自动化:
- 项目初始化:根据模板自动创建项目结构,配置开发环境
- 代码质量检查:集成多种代码检查工具,生成质量报告
- 依赖管理:自动分析依赖关系,识别过时或冲突的包
与定时任务的结合应用
自动化工作流:
- 日报自动化:结合
crontab定时生成日报,自动发送到团队群 - 系统监控:定期检查系统状态,生成健康报告
- 数据备份:自动备份重要数据,生成备份报告
智能提醒系统:
- 任务提醒:根据
Git提交记录智能提醒未完成的任务 - 代码审查:自动分析新提交的代码,生成审查建议
- 性能监控:定期检查应用性能,发现潜在问题
Skills功能的强大之处在于其灵活性和可扩展性,让开发者能够根据具体需求定制专属的自动化解决方案。
总结
通过Claude Code的Skills功能,我们成功实现了一个智能的Git报告生成工具:
核心优势:
- 🚀 自动化程度高:一键生成日报/周报
- 🎯 智能分析:自动识别工作类型和重要性
- 📊 数据量化:提供详细的代码统计
- 📤 无缝集成:支持企微机器人自动发送
使用效果:
- 节省了手动整理报告的时间
- 提高了工作汇报的准确性
- 便于团队协作和进度跟踪
Skills功能为开发者提供了强大的自动化能力,让重复性工作变得简单高效。
参考资料
官方文档
- Claude Code 官方文档:https://docs.anthropic.com/en/docs/claude-code
- Skills 功能说明:https://docs.anthropic.com/en/docs/claude-code/skills
- MCP 协议文档:https://docs.anthropic.com/en/docs/mcp
相关资源
- GitHub 仓库:https://github.com/anthropics/claude-code
- 社区讨论:https://community.anthropic.com/
- 示例项目:https://github.com/anthropics/claude-code-examples
本文基于
Claude Code最新版本编写,具体功能可能随版本更新而变化,请以官方文档为准。



