Token导航 LogoToken导航

Agent Skill · 开发

ai-workflow(AI 工作流程)

ai-workflow 用于补充开发相关能力,适合在 OpenClaw 中需要让 Agent 承接开发相关任务时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

ai-workflow 是开发类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为执行命令;许可证为 MIT-0,第三方扫描有提醒项,按安装量在开发类的 21,746 个 Skill 里排第 7,843。

总安装 3,501周安装 143GitHub Stars 公开资料未说明下载 1,121核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
2.0.0

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:ai-workflow(AI 工作流程)
来源仓库:https://github.com/yofoan/ai-workflow
安装命令:
openclaw skills install ai-workflow
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install ai-workflow

这个 Skill 是做什么的

开发类 Skill 面向写代码、改代码和排查问题,一般会读写仓库文件,部分还会执行构建或测试命令。

自动化工作流引擎 - 将重复性任务自动化。支持:文件处理、数据转换、定时任务、API 调用、多步骤工作流。触发词:"自动化"、"工作流"、"批量处理"、"定时任务"、"workflow"、"automate"。自动执行:预设工作流或自定义流程。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install ai-workflow;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要执行命令,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

ai-workflow 怎么安装?

在终端执行 openclaw skills install ai-workflow。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

ai-workflow 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

ai-workflow 需要什么权限?

权限级别是执行命令。安装流程涉及命令执行,可能通过 openclaw skills install ai-workflow 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

ai-workflow 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

ai-workflow 用的人多吗?

公开数据是累计安装 3,501 次,近一周安装 143 次,下载 1,121 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

ai-workflow 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。

先想清楚的地方

  • 需要执行命令,装到常用环境前要先评估影响面。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理开发类任务、又不想每次都手写提示词的人。

不太适合

  • 不能接受 Skill 在你机器上执行命令的人。
  • 需要厂商级技术支持和 SLA 的生产系统。

开发类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
skill-vetter

技能审查员 · OpenClaw

8,779,018986操作浏览器MIT-0通过
ontology

本体论 · OpenClaw

6,636,960576只读MIT-0通过
entra-app-registration

内部应用程序注册 · Codex、Claude

6,631,872764接触敏感数据未明确通过
entra-app-registration

内部应用程序注册 · Codex、Claude

3,757,680201接触敏感数据未明确通过
nano-banana-pro

纳米香蕉专业版 · OpenClaw

3,526,898364接触敏感数据MIT-0有提醒
ai-workflow

AI 工作流程 · 本页

3,501—执行命令MIT-0有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

name
auto-workflow
description
|
author
anyafu
license
MIT
copyright
Copyright © 2026 anyafu. All rights reserved.

Auto Workflow - 自动化工作流引擎

将重复性工作自动化,让你专注于更有价值的事情。

支持的工作流类型

类型功能示例
文件处理批量重命名、格式转换、压缩解压批量转换图片格式
数据处理CSV/JSON/XML 转换、数据清洗导出 Excel 为 JSON
定时任务定时执行、周期任务每日自动备份
API 调用HTTP 请求、数据同步自动获取天气并通知
多步骤组合多个操作下载→处理→上传

使用方法

基础用法

# 运行预设工作流
auto-workflow run preset_name

# 运行自定义工作流
auto-workflow run custom_workflow.json

# 创建工作流
auto-workflow create workflow_name

预设工作流

1. 文件批量重命名
# 批量重命名文件(添加前缀/后缀、替换字符)
auto-workflow run rename --dir ./photos --pattern "IMG_{date}_{num}"
2. 图片批量转换
# 批量转换图片格式
auto-workflow run convert-images --dir ./images --from png --to jpg --quality 85
3. 数据格式转换
# CSV 转 JSON
auto-workflow run convert-data --input data.csv --output data.json

# JSON 转 Excel
auto-workflow run json-to-excel --input data.json --output data.xlsx
4. 自动备份
# 每日自动备份指定目录
auto-workflow run backup --source ~/documents --dest ~/backups --schedule "0 2 * * *"
5. API 数据获取
# 定时获取天气并保存
auto-workflow run fetch-weather --city beijing --output weather.json --schedule "0 8 * * *"

工作流定义示例

简单工作流

{
  "name": "图片处理工作流",
  "description": "下载图片→压缩→添加水印→上传",
  "steps": [
    {
      "name": "下载图片",
      "action": "http.get",
      "params": {
        "url": "https://example.com/image.png",
        "save": "/tmp/image.png"
      }
    },
    {
      "name": "压缩图片",
      "action": "image.compress",
      "params": {
        "input": "/tmp/image.png",
        "output": "/tmp/image_compressed.jpg",
        "quality": 80
      }
    },
    {
      "name": "添加水印",
      "action": "image.watermark",
      "params": {
        "input": "/tmp/image_compressed.jpg",
        "output": "/tmp/image_watermarked.jpg",
        "text": "© MyBrand"
      }
    },
    {
      "name": "上传到 CDN",
      "action": "upload.cdn",
      "params": {
        "file": "/tmp/image_watermarked.jpg",
        "path": "/images/"
      }
    }
  ]
}

定时工作流

{
  "name": "每日数据备份",
  "description": "每天凌晨 2 点自动备份重要文件",
  "schedule": "0 2 * * *",
  "steps": [
    {
      "name": "压缩文档目录",
      "action": "archive.create",
      "params": {
        "source": "~/documents",
        "output": "~/backups/documents_{date}.tar.gz"
      }
    },
    {
      "name": "上传到云存储",
      "action": "upload.cos",
      "params": {
        "file": "~/backups/documents_{date}.tar.gz",
        "bucket": "my-backups"
      }
    },
    {
      "name": "清理旧备份",
      "action": "cleanup.old",
      "params": {
        "dir": "~/backups",
        "pattern": "*.tar.gz",
        "keep_days": 30
      }
    }
  ]
}

脚本示例

workflow-engine.py - 工作流引擎

#!/usr/bin/env python3
"""
简易工作流引擎
支持:文件操作、HTTP 请求、数据转换、定时任务
"""

import json
import os
import sys
import shutil
import subprocess
import urllib.request
from datetime import datetime
from pathlib import Path

class WorkflowEngine:
    def __init__(self):
        self.context = {}
    
    def execute_step(self, step):
        """执行单个工作流步骤"""
        action = step.get('action', '')
        params = step.get('params', {})
        
        print(f"  执行:{step.get('name', action)}")
        
        # 文件操作
        if action == 'file.copy':
            return self.file_copy(params)
        elif action == 'file.move':
            return self.file_move(params)
        elif action == 'file.delete':
            return self.file_delete(params)
        elif action == 'archive.create':
            return self.archive_create(params)
        
        # HTTP 请求
        elif action == 'http.get':
            return self.http_get(params)
        elif action == 'http.post':
            return self.http_post(params)
        
        # 数据处理
        elif action == 'data.convert':
            return self.data_convert(params)
        
        # 其他
        elif action == 'shell.exec':
            return self.shell_exec(params)
        else:
            print(f"    ⚠️  未知动作:{action}")
            return None
    
    def file_copy(self, params):
        """复制文件"""
        src = self.expand_vars(params.get('source'))
        dst = self.expand_vars(params.get('dest'))
        shutil.copy2(src, dst)
        print(f"    ✅ {src} → {dst}")
        return {'success': True, 'dest': dst}
    
    def file_move(self, params):
        """移动文件"""
        src = self.expand_vars(params.get('source'))
        dst = self.expand_vars(params.get('dest'))
        shutil.move(src, dst)
        print(f"    ✅ {src} → {dst}")
        return {'success': True, 'dest': dst}
    
    def file_delete(self, params):
        """删除文件"""
        path = self.expand_vars(params.get('path'))
        if os.path.isfile(path):
            os.remove(path)
            print(f"    ✅ 删除:{path}")
        elif os.path.isdir(path):
            shutil.rmtree(path)
            print(f"    ✅ 删除目录:{path}")
        return {'success': True}
    
    def archive_create(self, params):
        """创建压缩包"""
        source = self.expand_vars(params.get('source'))
        output = self.expand_vars(params.get('output'))
        
        # 确保输出目录存在
        os.makedirs(os.path.dirname(output), exist_ok=True)
        
        # 创建 tar.gz
        shutil.make_archive(output.replace('.tar.gz', ''), 'gztar', source)
        print(f"    ✅ 创建压缩包:{output}")
        return {'success': True, 'output': output}
    
    def http_get(self, params):
        """HTTP GET 请求"""
        url = params.get('url')
        save = params.get('save')
        
        print(f"    🌐 GET {url}")
        
        try:
            with urllib.request.urlopen(url, timeout=30) as response:
                data = response.read()
                
                if save:
                    save_path = self.expand_vars(save)
                    with open(save_path, 'wb') as f:
                        f.write(data)
                    print(f"    ✅ 保存到:{save_path}")
                    return {'success': True, 'file': save_path}
                else:
                    return {'success': True, 'data': data.decode()}
        except Exception as e:
            print(f"    ❌ 请求失败:{e}")
            return {'success': False, 'error': str(e)}
    
    def http_post(self, params):
        """HTTP POST 请求"""
        url = params.get('url')
        data = params.get('data', {})
        headers = params.get('headers', {})
        
        print(f"    🌐 POST {url}")
        
        try:
            req = urllib.request.Request(
                url,
                data=json.dumps(data).encode(),
                headers={'Content-Type': 'application/json', **headers}
            )
            with urllib.request.urlopen(req, timeout=30) as response:
                return {'success': True, 'data': response.read().decode()}
        except Exception as e:
            print(f"    ❌ 请求失败:{e}")
            return {'success': False, 'error': str(e)}
    
    def data_convert(self, params):
        """数据格式转换"""
        input_file = self.expand_vars(params.get('input'))
        output_file = self.expand_vars(params.get('output'))
        
        print(f"    🔄 转换:{input_file} → {output_file}")
        
        # 简单实现:JSON ↔ CSV
        if input_file.endswith('.json') and output_file.endswith('.csv'):
            self.json_to_csv(input_file, output_file)
        elif input_file.endswith('.csv') and output_file.endswith('.json'):
            self.csv_to_json(input_file, output_file)
        else:
            print(f"    ⚠️  不支持的转换")
            return {'success': False}
        
        return {'success': True, 'output': output_file}
    
    def json_to_csv(self, input_file, output_file):
        """JSON 转 CSV"""
        import csv
        with open(input_file) as f:
            data = json.load(f)
        
        if not data:
            return
        
        with open(output_file, 'w', newline='') as f:
            writer = csv.DictWriter(f, fieldnames=data[0].keys())
            writer.writeheader()
            writer.writerows(data)
        
        print(f"    ✅ 转换完成")
    
    def csv_to_json(self, input_file, output_file):
        """CSV 转 JSON"""
        import csv
        with open(input_file, newline='') as f:
            reader = csv.DictReader(f)
            data = list(reader)
        
        with open(output_file, 'w') as f:
            json.dump(data, f, indent=2)
        
        print(f"    ✅ 转换完成")
    
    def shell_exec(self, params):
        """执行 Shell 命令"""
        cmd = self.expand_vars(params.get('command'))
        print(f"    💻 执行:{cmd}")
        
        try:
            result = subprocess.run(
                cmd, shell=True, capture_output=True, text=True, timeout=60
            )
            print(f"    ✅ 完成")
            return {
                'success': True,
                'stdout': result.stdout,
                'stderr': result.stderr,
                'returncode': result.returncode
            }
        except Exception as e:
            print(f"    ❌ 执行失败:{e}")
            return {'success': False, 'error': str(e)}
    
    def expand_vars(self, text):
        """展开变量"""
        if not text:
            return text
        
        # 替换日期变量
        now = datetime.now()
        text = text.replace('{date}', now.strftime('%Y%m%d'))
        text = text.replace('{datetime}', now.strftime('%Y%m%d_%H%M%S'))
        text = text.replace('{year}', now.strftime('%Y'))
        text = text.replace('{month}', now.strftime('%m'))
        text = text.replace('{day}', now.strftime('%d'))
        
        # 替换环境变量
        for key, value in os.environ.items():
            text = text.replace(f'{{{key}}}', value)
        
        # 替换上下文变量
        for key, value in self.context.items():
            text = text.replace(f'{{{key}}}', str(value))
        
        return text
    
    def run_workflow(self, workflow_def):
        """运行工作流"""
        print(f"\
🚀 开始执行工作流:{workflow_def.get('name', 'Unnamed')}")
        print(f"📝 描述:{workflow_def.get('description', 'No description')}")
        print("=" * 60)
        
        steps = workflow_def.get('steps', [])
        results = []
        
        for i, step in enumerate(steps, 1):
            print(f"\
步骤 {i}/{len(steps)}:")
            result = self.execute_step(step)
            results.append(result)
            
            # 如果步骤失败且是关键的,停止执行
            if result and not result.get('success', True):
                if step.get('critical', True):
                    print(f"\
❌ 关键步骤失败,停止执行")
                    break
            
            # 将结果存入上下文
            if result:
                for key, value in result.items():
                    self.context[f'step_{i}_{key}'] = value
        
        print("\
" + "=" * 60)
        print("✅ 工作流执行完成")
        print(f"📊 执行了 {len(results)}/{len(steps)} 个步骤")
        
        return results

def load_workflow(path):
    """加载工作流定义"""
    with open(path) as f:
        return json.load(f)

def main():
    if len(sys.argv) < 3:
        print("用法:python3 workflow-engine.py <command> <workflow_file>")
        print("\
命令:")
        print("  run     - 运行工作流")
        print("  create  - 创建工作流模板")
        print("\
示例:")
        print("  python3 workflow-engine.py run backup.json")
        print("  python3 workflow-engine.py create my_workflow")
        sys.exit(1)
    
    command = sys.argv[1]
    arg = sys.argv[2]
    
    engine = WorkflowEngine()
    
    if command == 'run':
        if not os.path.exists(arg):
            print(f"❌ 文件不存在:{arg}")
            sys.exit(1)
        
        workflow = load_workflow(arg)
        engine.run_workflow(workflow)
    
    elif command == 'create':
        template = {
            "name": arg,
            "description": "工作流描述",
            "steps": [
                {
                    "name": "第一步",
                    "action": "file.copy",
                    "params": {
                        "source": "/path/to/source",
                        "dest": "/path/to/dest"
                    }
                }
            ]
        }
        
        output_file = f"{arg}.json"
        with open(output_file, 'w') as f:
            json.dump(template, f, indent=2)
        
        print(f"✅ 工作流模板已创建:{output_file}")
        print("编辑此文件定义你的工作流,然后用 'run' 命令执行")

if __name__ == '__main__':
    main()

变现模式

免费层

  • 基础文件操作
  • 每日 10 次执行
  • 预设工作流

付费层(¥79/月)

  • 所有操作类型
  • 无限次执行
  • 自定义工作流
  • 定时任务

企业层(¥599/月)

  • 团队协作
  • API 访问
  • 私有化部署
  • 专属支持

下一步

  1. [ ] 完成脚本开发
  2. [ ] 添加更多预设工作流
  3. [ ] 开发 Web UI
  4. [ ] 发布到 ClawHub

📜 License

Copyright © 2026 anyafu. All rights reserved.

Licensed under the MIT License.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

商业使用

  • ✅ 允许个人和商业使用
  • ✅ 允许修改和分发
  • ✅ 允许私有化部署
  • ⚠️ 如需闭源商业授权,请联系作者 anyafu

平台分布

OpenClaw

95.36%
按下载量换算1,069

安全审计

VirusTotal

未展示

ClawScan

可疑

Static analysis

通过

权限和风险

执行命令

安装流程涉及命令执行,可能通过 openclaw skills install ai-workflow 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills