定时任务与自动化

定时任务系统架构

在实际开发工作中,许多任务需要定期执行或按特定事件触发。Hermes Agent 内置了强大的定时任务与自动化系统,支持从简单的定时执行到复杂的事件驱动工作流。

系统架构

定时任务系统采用分层架构设计,从上到下分为三个层级:

层级组件职责
调度层Scheduler Engine管理任务生命周期、触发策略、并发控制
执行层Task Executor创建隔离的执行环境、管理 Agent 实例
监控层Monitor & Notifier采集执行状态、发送通知、记录日志

调度引擎是整个系统的核心,负责维护任务注册表、计算触发时间、执行冲突解决等关键功能:

// 定时任务系统核心接口
interface SchedulerConfig {
  tasks: ScheduledTask[];
  executor: {
    maxConcurrent: number;
    timeout: number;
    retryOnFailure: boolean;
    maxRetries: number;
  };
  monitoring: {
    logLevel: string;
    metricsEnabled: boolean;
    alertChannels: string[];
  };
}

interface ScheduledTask {
  id: string;
  name: string;
  description: string;
  trigger: CronTrigger | EventTrigger | IntervalTrigger;
  agentConfig: {
    model: string;
    tools: string[];
    maxSteps: number;
  };
  prompt: string;
  notifications: {
    onStart: boolean;
    onComplete: boolean;
    onFailure: boolean;
  };
}

Cron 表达式配置

定时任务是自动化系统中最基础也最常用的功能。通过标准 Cron 表达式,可以精确控制任务的执行时间。

基本配置示例

# .hermes/schedules.yaml
tasks:
  - id: daily-code-review
    name: "每日代码审查"
    description: "每天早上 9 点审查昨日提交的代码"
    trigger:
      type: cron
      expression: "0 9 * * 1-5"  # 工作日 9:00
      timezone: "Asia/Shanghai"
    agentConfig:
      model: claude-sonnet-4-20250514
      tools: ["git", "filesystem", "terminal"]
      maxSteps: 50
    prompt: |
      请执行以下任务:
      1. 获取昨日所有提交的代码变更
      2. 逐文件审查代码质量
      3. 检查是否有安全漏洞或性能问题
      4. 生成审查报告并提交到 Code Review 系统
    notifications:
      onComplete: true
      onFailure: true

  - id: weekly-dependency-update
    name: "每周依赖更新检查"
    description: "每周一检查项目依赖更新"
    trigger:
      type: cron
      expression: "0 10 * * 1"
      timezone: "UTC"
    agentConfig:
      model: claude-sonnet-4-20250514
      tools: ["terminal", "filesystem"]
      maxSteps: 30
    prompt: |
      检查项目依赖是否有安全更新:
      1. 运行 npm audit / pip audit
      2. 分析漏洞严重程度
      3. 生成依赖更新建议报告

复杂 Cron 表达式示例

# 每 30 分钟执行一次
expression: "*/30 * * * *"

# 每小时的第 15 分钟执行
expression: "15 * * * *"

# 每天凌晨 2:30 执行
expression: "30 2 * * *"

# 每月 1 号和 15 号执行
expression: "0 8 1,15 * *"

# 每季度第一天执行
expression: "0 9 1 1,4,7,10 *"

事件触发式任务

除了定时触发,Hermes Agent 的自动化系统还支持事件驱动模式,当特定事件发生时自动触发任务。

支持的事件类型

tasks:
  - id: auto-merge-check
    name: "PR 合并前检查"
    trigger:
      type: event
      eventSource: github
      eventType: pull_request.opened
      filters:
        - field: pull_request.base.ref
          pattern: "main"
        - field: pull_request.changed_files
          max: 50
    agentConfig:
      model: claude-sonnet-4-20250514
      tools: ["git", "terminal", "filesystem"]
      maxSteps: 40
    prompt: |
      审查 PR #{{payload.pull_request.number}}:
      1. 获取 PR 变更内容
      2. 检查代码风格和最佳实践
      3. 运行测试并验证
      4. 自动添加审查评论

  - id: deploy-on-tag
    name: "发布部署"
    trigger:
      type: event
      eventSource: git
      eventType: tag.created
      filters:
        - field: tag
          pattern: "v*"
    agentConfig:
      model: claude-sonnet-4-20250514
      tools: ["terminal", "filesystem"]
      maxSteps: 60
    prompt: |
      检测到新版本标签 {{payload.tag}},执行部署:
      1. 运行测试套件
      2. 构建生产版本
      3. 更新版本号
      4. 部署到生产服务器

无人值守运行模式

无人值守模式是 Hermes Agent 自动化能力的核心特性,允许任务在完全不需要人工干预的情况下执行。配置无人值守任务需要特别注意安全性和错误处理。

# .hermes/agent-config.yaml
unattended:
  enabled: true
  safety:
    requireApproval: false
    allowedTools: ["git", "terminal", "filesystem", "network"]
    blockedCommands: ["rm -rf /", "sudo", "chmod 777"]
    maxConsecutiveFailures: 3
    actionOnFailure: "pause_and_notify"
  fallback:
    onAmbiguousInput: "pause"
    onMissingPermission: "pause"
    onToolError: "retry_once"

无人值守模式下,Agent 会自主决策、自主执行,仅在遇到无法处理的异常时才会暂停并寻求人工介入。

任务状态监控与通知

任务状态管理

Hermes Agent 为每个任务维护完整的状态机:

enum TaskState {
  PENDING = "pending",     // 等待执行
  RUNNING = "running",     // 执行中
  PAUSED = "paused",       // 暂停(等待人工介入)
  COMPLETED = "completed", // 执行完成
  FAILED = "failed",       // 执行失败
  CANCELLED = "cancelled"  // 已取消
}

interface TaskStatus {
  id: string;
  state: TaskState;
  progress: number;
  startedAt: string;
  completedAt?: string;
  currentStep: string;
  logs: LogEntry[];
  metrics: {
    duration: number;
    stepsExecuted: number;
    toolsCalled: number;
    tokensUsed: number;
  };
}

多渠道通知配置

notifications:
  channels:
    email:
      enabled: true
      recipients: ["[email protected]"]
      events: ["onFailure", "onCritical"]
    slack:
      enabled: true
      webhook: "https://hooks.slack.com/services/xxx"
      channel: "#dev-monitor"
      events: ["onComplete", "onFailure"]
    webhook:
      enabled: true
      url: "https://api.company.com/agent-events"
      events: ["onStart", "onComplete", "onFailure", "onCritical"]
  templates:
    onComplete: "✅ 任务 {{task.name}} 已完成,耗时 {{metrics.duration}}"
    onFailure: "❌ 任务 {{task.name}} 执行失败: {{error.message}}"

实战:每日自动代码审查任务

下面我们配置一个完整的每日自动代码审查系统。

完整配置

# .hermes/auto-review.yaml
tasks:
  - id: daily-code-review
    name: "每日代码自动审查"
    description: "每天自动审查前一天的代码提交"
    trigger:
      type: cron
      expression: "0 8 * * 1-5"
      timezone: "Asia/Shanghai"
      description: "工作日每天早上 8 点执行"

    agentConfig:
      model: claude-sonnet-4-20250514
      tools: ["git", "filesystem", "terminal", "mcp-github"]
      maxSteps: 80
      temperature: 0.1

    prompt: |
      执行每日代码审查任务:

      第一阶段 - 获取变更:
      1. git log --since="24 hours ago" --stat
      2. 获取每个提交的详细 diff
      3. 统计变更文件数量和类型

      第二阶段 - 深度分析:
      1. 检查潜在的安全漏洞(SQL 注入、XSS、CSRF)
      2. 检查性能问题(N+1 查询、内存泄漏)
      3. 检查代码质量(重复代码、过长函数、命名规范)
      4. 检查测试覆盖率影响

      第三阶段 - 生成报告:
      1. 按严重程度分类问题
      2. 为每个问题提供修复建议
      3. 计算总体代码健康评分
      4. 将报告上传到团队 Wiki

    notifications:
      onStart: true
      onComplete: true
      onFailure: true

    errorHandling:
      retryCount: 3
      retryDelay: 300
      fallbackAction: notify_team

配置完成后,运行以下命令激活定时任务:

# 启动任务调度器
hermes-agent scheduler start

# 查看所有已注册任务
hermes-agent scheduler list

# 查看特定任务状态
hermes-agent scheduler status daily-code-review

# 手动触发一次执行(用于测试)
hermes-agent scheduler trigger daily-code-review

# 暂停任务
hermes-agent scheduler pause daily-code-review

# 恢复任务
hermes-agent scheduler resume daily-code-review

通过 Hermes Agent 的定时任务与自动化系统,团队可以将大量重复性的开发运维工作交给 Agent 自动完成,让开发者将精力集中在更有创造性的工作上,显著提升整体研发效能。