【工具技巧】通过ClaudeCode的Skills实现周报自动发送

博客文章#编程工具阅读 3,441
【工具技巧】通过ClaudeCode的Skills实现周报自动发送

引言

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"

特殊场景处理

无提交的情况

  1. 明确告知用户当天没有提交记录
  2. 建议检查日期范围是否正确
  3. 提供替代方案(如查看其他日期)

大量提交的情况

  1. 优先选择重要和有代表性的提交
  2. 按重要性排序工作内容
  3. 合并相似类型的提交
  4. 突出显示关键成果

企微机器人发送失败

  1. 网络问题:检查网络连接,重试发送
  2. URL错误:验证Webhook URL格式和有效性
  3. 消息过长:简化日报内容,控制在企微机器人限制内
  4. 权限问题:检查机器人是否被禁用或权限不足
  5. 备用方案:如果发送失败,提供本地保存选项

输出质量标准

准确性

  • ✅ 提交数据准确无误
  • ✅ 工作描述真实反映提交内容
  • ✅ 日期范围正确
  • ✅ 统计信息精确

简洁性

  • ✅ 控制在3-4行描述
  • ✅ 每行聚焦一个主要工作项
  • ✅ 语言简洁专业
  • ✅ 避免技术术语堆砌

实用性

  • ✅ 附带量化数据指标
  • ✅ 突出重要工作成果
  • ✅ 便于快速阅读和理解
  • ✅ 提供有价值的工作摘要

完整性

  • ✅ 覆盖主要工作类型
  • ✅ 包含代码统计和问题修复数据
  • ✅ 反映整体工作进展
  • ✅ 提供足够的数据支撑

关键要点

  • 双模式支持:同时支持日报和周报两种模式
  • 智能时间计算:自动处理周末和节假日情况
  • 环境变量依赖:企微机器人发送功能依赖于 `WECHAT_WEBHOOK_URL` 环境变量
  • Bash工具使用:必须使用Bash工具来获取环境变量,因为Claude Code在命令行模式下无法直接访问shell环境变量
  • 简洁实用:目标是提供准确、简洁、实用的工作报告,帮助用户快速了解开发进展和关键工作成果

2. 测试结果

技能实现后,运行效果如下:

说明: 企微机器人WEBHOOK_URL获取方法:

  1. 打开企业微信,进入目标群聊
  2. 点击右上角群聊设置
  3. 选择"群机器人"
  4. 点击"添加机器人"
  5. 设置机器人名称(如:"日报机器人")
  6. 复制生成的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最新版本编写,具体功能可能随版本更新而变化,请以官方文档为准。