Skill: jpaulgrayson/quack-workflow (version 1.0.0)

--- description: Execute multi-step workflows via Orchestrate. Use when running complex workflows, parallel tasks, multi-model orchestration, or automating multi-step processes. triggers: - run workflow - orchestrate - multi-step - parallel tasks - workflow yaml --- # Workflow Engine Execute multi-step workflows with parallel tasks and multi-model orchestration via the Orchestrate platform. ## Setup Register at [orchestrate.us.com](https://orchestrate.us.com) for API access. ## Scripts ### Run a Workflow ```bash node skills/workflow-engine/scripts/run-workflow.mjs --file workflow.yaml ``` ### Example Workflow Templates See `skills/workflow-engine/templates/` for ready-to-use workflow definitions. ## Workflow YAML Format ```yaml name: example-workflow steps: - id: research action: web_search params: query: "latest AI news" - id: summarize action: llm params: model: claude prompt: "Summarize: {{research.output}}" depends_on: [research] - id: post action: social_post params: text: "{{summarize.output}}" depends_on: [summarize] ``` ## API Reference - **Base URL:** `https://orchestrate.us.com` - Multi-step workflow execution - Parallel task support - Multi-model orchestration

path: scripts/run-workflow.mjs
content: #!/usr/bin/env node

/**
 * Workflow Engine — Run multi-step workflows via Orchestrate
 * Usage: node run-workflow.mjs --file workflow.yaml
 */

import { readFile } from 'node:fs/promises';
import { resolve } from 'node:path';
import { parseArgs } from 'node:util';

const { values: args } = parseArgs({
  options: {
    file: { type: 'string', short: 'f' },
    dry:  { type: 'boolean', default: false },
  },
  strict: false,
});

if (!args.file) {
  console.error('Usage: node run-workflow.mjs --file workflow.yaml');
  process.exit(1);
}

const workflowPath = resolve(args.file);
const content = await readFile(workflowPath, 'utf8');

// Simple YAML-like parser for workflow files
const lines = content.split('\n');
console.log(`Loaded workflow from ${args.file}`);
console.log(`Content length: ${content.length} bytes`);

if (args.dry) {
  console.log('Dry run — workflow parsed but not executed.');
  console.log(content);
  process.exit(0);
}

const BASE_URL = 'https://orchestrate.us.com';

const res = await fetch(`${BASE_URL}/api/v1/workflows/run`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/yaml' },
  body: content,
});

if (!res.ok) {
  console.error(`Error ${res.status}: ${await res.text()}`);
  process.exit(1);
}

const data = await res.json();
console.log(JSON.stringify(data, null, 2));


path: templates/parallel-analysis.yaml
content: name: parallel-analysis
description: Analyze a topic from multiple angles in parallel

steps:
  - id: technical
    action: llm
    params:
      model: claude
      prompt: "Provide a technical analysis of: {{input.topic}}"

  - id: business
    action: llm
    params:
      model: gpt-4
      prompt: "Provide a business impact analysis of: {{input.topic}}"

  - id: social
    action: llm
    params:
      model: claude
      prompt: "Provide a social impact analysis of: {{input.topic}}"

  - id: synthesis
    action: llm
    params:
      model: claude
      prompt: "Synthesize these three perspectives into a unified report:\n\nTechnical: {{technical.output}}\nBusiness: {{business.output}}\nSocial: {{social.output}}"
    depends_on: [technical, business, social]


path: templates/research-and-post.yaml
content: name: research-and-post
description: Search the web, summarize findings, and post to social media

steps:
  - id: research
    action: web_search
    params:
      query: "latest AI agent news"
      count: 5

  - id: summarize
    action: llm
    params:
      model: claude
      prompt: "Summarize these search results into a concise social media post: {{research.output}}"
    depends_on: [research]

  - id: post
    action: social_post
    params:
      text: "{{summarize.output}}"
      platform: twitter
    depends_on: [summarize]


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: suspicious | SkillSpector: suspicious (HIGH)