自动化任务调度服务

kickd是一个后台自动化守护进程,提供任务调度、可组合技能、工作流引擎、凭证保险库、事件系统、Webhook触发器和通知等功能,适用于需要自动化任务管理和工作流编排的场景。

  • by anbturki
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 anbturki/kickd

使用说明

踢腿

后台自动化守护进程,具有任务调度、可组合技能、工作流引擎、凭证库、事件系统、webhook触发器、通知、插件生态系统和通过MCP的双向克劳德代码集成。

特性

  • 任务调度器 --间隔时间(1h, 30m),每天定时(at:09:00),或完整的cron(0 9 * * MON-FRI)
  • 技能引擎 --具有Zod验证输入/输出的可组合、可链接的工作单元
  • 工作流引擎 --具有条件、并行执行和延迟的多步骤流水线
  • 凭证保险库 --具有14种以上内置类型(GitHub、Slack、AWS、Stripe等)的加密凭据存储
  • 事件系统 --反应式规则:“当任务X完成时,运行技能Y”
  • Webhook触发器 --通过带有HMAC签名的HTTP webhooks触发任务/技能
  • 通知 --任务成功/失败时的Slack、Discord或通用webhook警报
  • 变量 --具有作用域和模板解析的持久键值存储
  • 任务队列 --具有可配置限制的基于优先级的并发执行
  • 使用回退重试 --具有指数退避和抖动的可配置重试
  • 结构化日志记录 --使用JSON模式和文件输出对日志进行分级
  • 普罗米修斯指标 — /metrics 监控端点
  • 健康检查 --详细的运行状况报告(数据库、内存、队列、任务)
  • 速率限制 --内存滑动窗口速率限制器
  • 优雅关闭 --信号情报/信号处理干净
  • SQLite持久性 --记录并可查询的所有运行、事件、变量和配置
  • MCP服务器 --将所有内容公开为Claude Code可以直接调用的工具
  • 克劳德代码桥 --从自动化中调用Claude Code CLI
  • 插件系统 --从npm安装技能(kickd install <package>)
  • HTTP API -所有操作的完整REST API
  • 命令行界面 --从终端管理所有内容
  • 认证 --可选的承载令牌身份验证
  • 码头工人 --即用型Dockerfile

需求

快速开始

git clone https://github.com/anbturki/kickd.git
cd kickd
bun install
bun run start

验证: curl http://localhost:7400/health

CLI参考

# Tasks
kickd list                              # List all tasks
kickd run <id> [json]                   # Run a task
kickd history <id>                      # Task run history

# Skills
kickd skills                            # List all skills
kickd skill <id> [json]                 # Run a skill

# Workflows
kickd workflow list                     # List workflows
kickd workflow run <id> [json]          # Run a workflow
kickd workflow delete <id>              # Delete a workflow

# Variables
kickd vars list [scope]                 # List variables
kickd vars set <key> <value>            # Set a variable
kickd vars get <key>                    # Get a variable
kickd vars delete <key>                 # Delete a variable

# Credentials
kickd creds list                        # List stored credentials
kickd creds types                       # List available types (github, slack, aws, ...)
kickd creds add <name> <type> <json>    # Store a credential (encrypted)
kickd creds get <name>                  # View credential (sensitive values redacted)
kickd creds test <name>                 # Test connectivity
kickd creds delete <name>              # Delete a credential

# Webhooks
kickd webhook list                      # List webhooks
kickd webhook create <name> task:<id>   # Create a webhook
kickd webhook delete <id>               # Delete a webhook

# Events
kickd events                            # Show recent events
kickd events rules                      # List reactive rules
kickd events add <event> run_task:<id>  # Add a rule

# Notifications
kickd notify add slack <url>            # Add Slack notifications
kickd notify add discord <url>          # Add Discord notifications

# Queue
kickd queue                             # Show queue stats

# Plugins
kickd install <package>                 # Install a plugin from npm
kickd uninstall <package>               # Uninstall a plugin
kickd plugins                           # List installed plugins

# Other
kickd stats                             # Global statistics
kickd health                            # Detailed health report
kickd ask "prompt"                      # Ask Claude Code

HTTP API

方法 端点 描述
GET /health 详细的健康报告
GET /stats 全球统计
GET /metrics Prometheus兼容指标
GET /tasks 列出任务
GET /tasks/:id 获取任务
POST /tasks/:id/run 运行任务
GET /tasks/:id/history 任务运行历史记录
GET /tasks/:id/stats 任务统计
GET /skills 列出技能
POST /skills/:id/run 运行技能
GET /skills/:id/history 技能运行历史
POST /skills/chain 链技能
GET /workflows 列出工作流
GET /workflows/:id 获取工作流
POST /workflows 注册工作流
POST /workflows/:id/run 运行工作流
DELETE /workflows/:id 删除工作流
GET /variables 列出变量
GET /variables/:key 获取变量
PUT /variables/:key 设置变量
DELETE /variables/:key 删除变量
GET /queue/stats 队列统计
POST /queue/clear 清除待处理队列
GET /credentials 列出凭据(已编辑)
POST /credentials 存储凭据
GET /credentials/:id 获取凭证(已编辑)
PUT /credentials/:id 更新凭据
DELETE /credentials/:id 删除凭据
GET /credentials/types 列出凭证类型
POST /credentials/:id/test 测试证书
GET /credentials/:id/audit 凭证审核日志
POST /credentials/oauth2/start 启动OAuth2流
GET /credentials/oauth2/callback OAuth2回调
GET /hooks 列出webhooks
POST /hooks 创建webhook
POST /hooks/:id 触发webhook
DELETE /hooks/:id 删除webhook
GET /events 事件日志
GET /events/rules 列出事件规则
POST /events/rules 创建事件规则
GET /notifications/channels 列出通知渠道
POST /notifications/channels 添加通知通道
GET /plugins 列出已安装的插件
POST /plugins/install 安装插件
POST /claude 向Claude Code发送提示

MCP服务器(克劳德代码)

添加 ~/.claude.json 或项目 .mcp.json:

{
  "mcpServers": {
    "kickd": {
      "command": "bun",
      "args": ["run", "mcp"],
      "cwd": "/path/to/kickd"
    }
  }
}

可用的MCP工具: list_automations, run_automation, run_skill, chain_skills, list_workflows, run_workflow, set_variable, get_variable, list_variables, queue_stats, list_credentials, store_credential, test_credential, list_credential_types, list_webhooks, create_webhook, list_event_rules, create_event_rule, get_task_history, get_stats, run_command, ask_claude.

添加任务

// tasks/my-task.ts
import type { Task, TaskResult } from "../src/types";

export const task: Task = {
  id: "my-task",
  name: "My Task",
  description: "Does something useful",
  handler: "tasks/my-task.ts",
  schedule: "0 9 * * MON-FRI", // weekdays at 9am (full cron)
  retry: { maxAttempts: 3, baseDelayMs: 1000, maxDelayMs: 30000, backoffMultiplier: 2 },
  enabled: true,
  status: "idle",
};

export async function handler(params?: Record<string, unknown>): Promise<TaskResult> {
  return { success: true, output: "Done", duration: 0 };
}

计划格式

格式 示例 说明
Ns 30s 每N秒
Nm 5m 每N分钟
Nh 1h 每N小时
Nd 1d 每N天
at:HH:MM at:09:00 每天特定时间
克朗 0 9 * * MON-FRI 标准5场克戎(最小小时dom mon dow)

添加技能

// skills/my-skill.ts
import { z } from "zod";
import { skills } from "../src/skills/engine";

skills.register({
  id: "my-skill",
  name: "My Skill",
  description: "A composable unit of work",
  input: z.object({ message: z.string() }),
  output: z.object({ result: z.string() }),
  execute: async (input) => {
    return { result: `Processed: ${input.message}` };
  },
});

工作流

定义结合任务、技能、条件、延迟和并行执行的多步骤流程:

curl -X POST http://localhost:7400/workflows \
  -H "Content-Type: application/json" \
  -d '{
    "id": "deploy-pipeline",
    "name": "Deploy Pipeline",
    "description": "Build, test, and deploy",
    "startStep": "build",
    "steps": [
      { "id": "build", "type": "task", "targetId": "build-app", "next": "test" },
      { "id": "test", "type": "task", "targetId": "run-tests", "next": "check" },
      { "id": "check", "type": "condition", "condition": "{{prev.success}} === true", "onTrue": "deploy", "onFalse": "notify-fail" },
      { "id": "deploy", "type": "skill", "targetId": "deploy-prod" },
      { "id": "notify-fail", "type": "skill", "targetId": "send-alert", "input": { "message": "Tests failed" } }
    ]
  }'

步骤类型: task, skill, condition, delay, parallel.

凭证保险库

使用静态AES-256-CBC加密安全地存储凭据。

# Generate an encryption key
openssl rand -base64 32
# Add to .env: KICKD_ENCRYPTION_KEY=<generated-key>

# Store a GitHub token
kickd creds add my-github github '{"token":"ghp_abc123..."}'

# Store Slack credentials
kickd creds add my-slack slack '{"botToken":"xoxb-...", "webhookUrl":"https://hooks.slack.com/..."}'

# Test connectivity
kickd creds test my-github

内置凭据类型: bearer, api_key, basic_auth, oauth2, github, slack, discord, stripe, openai, anthropic, linkedin, sendgrid, aws, custom.

事件系统

制定反应性规则——当有事情发生时,做其他事情:

# When task "hello" completes, run the "disk-usage" task
kickd events add task.completed run_task:disk-usage --source hello

# When any skill fails, run a notification task
kickd events add skill.failed run_task:alert

事件类型: task.completed, task.failed, task.retry, skill.completed, skill.failed, webhook.triggered, workflow.started, workflow.completed, workflow.failed.

Webhook触发器

通过HTTP从外部触发任务:

# Create a webhook for the "hello" task
kickd webhook create deploy-hook task:hello

# Trigger it (e.g., from GitHub Actions, Stripe, etc.)
curl -X POST http://localhost:7400/hooks/<webhook-id> \
  -H "Content-Type: application/json" \
  -d '{}'

通知

任务失败时收到警报:

# Via CLI
kickd notify add slack https://hooks.slack.com/services/...
kickd notify add discord https://discord.com/api/webhooks/...

# Or via environment variables
KICKD_NOTIFY_SLACK_URL=https://hooks.slack.com/services/...
KICKD_NOTIFY_DISCORD_URL=https://discord.com/api/webhooks/...

插件

从npm安装技能:

kickd install kickd-skill-example
kickd plugins

插件包可以导出 register(skills) 功能或a skills 阵列。

配置

cp .env.example .env
变量 默认值 描述
KICKD_PORT 7400 HTTP API端口
KICKD_API_TOKEN - API身份验证的承载令牌(可选)
KICKD_ENCRYPTION_KEY -- 凭证库的AES-256密钥
KICKD_LOG_LEVEL info 日志级别: debug, info, warn, error
KICKD_LOG_FORMAT text 日志格式: text 或 json
KICKD_LOG_FILE -- 日志文件路径(可选)
KICKD_RATE_LIMIT true 设置 false 禁用速率限制
KICKD_QUEUE_CONCURRENCY 5 最大并发排队任务数
KICKD_QUEUE_MAX_SIZE 1000 最大队列大小
KICKD_NOTIFY_SLACK_URL -- 用于通知的Slack webhook
KICKD_NOTIFY_DISCORD_URL -- 对通知的webhook进行Discord
KICKD_NOTIFY_WEBHOOK_URL -- 用于通知的通用webhook

码头工人

docker build -t kickd .
docker run -p 7400:7400 -v kickd-data:/app/data kickd

在后台运行

macOS(launchd)

# Create plist at ~/Library/LaunchAgents/com.kickd.daemon.plist
# then:
launchctl load ~/Library/LaunchAgents/com.kickd.daemon.plist

pm2

pm2 start "bun run start" --name kickd
pm2 save

建筑

┌──────────────┐    MCP (stdio)    ┌───────────────────────────────────────┐
│  Claude Code │ ────────────────► │            kickd daemon               │
│              │ ◄──────────────── │                                       │
└──────────────┘                   │  ┌───────┐ ┌───────┐ ┌────────────┐  │
                                   │  │ Tasks │ │Skills │ │ Workflows  │  │
┌──────────────┐    HTTP :7400     │  └───┬───┘ └───┬───┘ └──────┬─────┘  │
│   You (CLI)  │ ────────────────► │      │         │            │        │
│              │ ◄──────────────── │  ┌───┴─────────┴────────────┴───┐    │
└──────────────┘                   │  │         Event Bus             │    │
                                   │  └───┬─────────┬───────────┬────┘    │
┌──────────────┐    Webhooks       │  ┌───┴───┐ ┌───┴────┐ ┌───┴──────┐  │
│   External   │ ────────────────► │  │Notify │ │SQLite  │ │Cred Vault│  │
│   Services   │                   │  └───────┘ └────────┘ └──────────┘  │
└──────────────┘                   └───────────────────────────────────────┘

许可证

麻省理工学院