Files

3.4 KiB

Lobster Workflows

This directory contains Lobster workflow definitions for the finance-news skill.

Available Workflows

briefing.yaml - Market Briefing with Approval

Generates a market briefing and sends to WhatsApp with an approval gate.

Usage:

# Run via Lobster CLI
lobster "workflows.run --file ~/projects/finance-news-openclaw-skill/workflows/briefing.yaml"

# With custom args
lobster "workflows.run --file workflows/briefing.yaml --args-json '{\"time\":\"evening\",\"lang\":\"en\"}'"

Arguments:

Arg Default Description
time morning Briefing type: morning or evening
lang de Language: en or de
channel whatsapp Delivery channel: whatsapp or telegram
target env var Group name, JID, phone number, or Telegram chat ID
fast false Use fast mode (shorter timeouts)

Environment Variables:

Variable Description
FINANCE_NEWS_CHANNEL Default channel: whatsapp or telegram
FINANCE_NEWS_TARGET Default target (group name, phone, chat ID)

Examples:

# WhatsApp group (default)
lobster "workflows.run --file workflows/briefing.yaml"

# Telegram group
lobster "workflows.run --file workflows/briefing.yaml --args-json '{\"channel\":\"telegram\",\"target\":\"-1001234567890\"}'"

# WhatsApp DM to phone number
lobster "workflows.run --file workflows/briefing.yaml --args-json '{\"target\":\"+15551234567\"}'"

# Telegram DM to user
lobster "workflows.run --file workflows/briefing.yaml --args-json '{\"channel\":\"telegram\",\"target\":\"@username\"}'"

Flow:

  1. Generate - Runs Docker container to produce briefing JSON
  2. Approve - Halts for human review (shows briefing preview)
  3. Send - Delivers to channel (WhatsApp/Telegram) after approval

Requirements:

  • Docker with finance-news-briefing image built
  • jq for JSON parsing
  • openclaw CLI for message delivery

Adding to Lobster Registry

To make these workflows available as named workflows in Lobster:

// In lobster/src/workflows/registry.ts
export const workflowRegistry = {
  // ... existing workflows
  'finance.briefing': {
    name: 'finance.briefing',
    description: 'Generate market briefing with approval gate for WhatsApp/Telegram',
    argsSchema: {
      type: 'object',
      properties: {
        time: { type: 'string', enum: ['morning', 'evening'], default: 'morning' },
        lang: { type: 'string', enum: ['en', 'de'], default: 'de' },
        channel: { type: 'string', enum: ['whatsapp', 'telegram'], default: 'whatsapp' },
        target: { type: 'string', description: 'Group name, JID, phone, or chat ID' },
        fast: { type: 'boolean', default: false },
      },
    },
    examples: [
      { args: { time: 'morning', lang: 'de' }, description: 'German morning briefing to WhatsApp' },
      { args: { channel: 'telegram', target: '-1001234567890' }, description: 'Send to Telegram group' },
    ],
    sideEffects: ['message.send'],
  },
};

Why Lobster?

Using Lobster instead of direct cron execution provides:

  • Approval gates - Review briefing before it's sent
  • Resumability - If interrupted, continue from last step
  • Token efficiency - One workflow call vs. multiple LLM tool calls
  • Determinism - Same inputs = same outputs