Gateway
Running
LaunchAgent · ws://127.0.0.1:18789
Slack
Connected
Socket mode · 189ms · App A0AGCHZD03Z
Skills
10 / 51
Ready · 4 custom-built
Memory Search
Active
Gemini embeddings · Vector + FTS

Gateway & Machine

Version2026.2.25
OSmacOS 26.3 (Intel) · Node 22.22.0
SSHssh momentatech@100.115.140.26
Dashboardhttp://127.0.0.1:18789
Config~/.openclaw/openclaw.json
Security0 critical · 2 warnings (expected)

Agents

AgentModelChannelHeartbeat
lobster openai-codex/gpt-5.3-codex Default (catch-all) 30m
video-producer anthropic/claude-opus-4-6 #video-production Disabled

Routing: video-producer binds to C0AGT89CSKD first, lobster catches all remaining.

Slack Channels

#lobster-testC0AGU4295HQActive→ lobster
#video-productionC0AGT89CSKDArchived→ video-producer

#video-production needs to be unarchived before video-producer can be tested.

API Keys

ServiceOwnerStatusUsed By
Pexelsours200 OKvideo-producer (stock footage)
ElevenLabsours200 OKvideo-producer (Roger TTS)
Pixabayours200 OKvideo-producer (backup stock)
AnthropicoursActivevideo-producer (Opus 4.6)
OpenAIoursActive (OAuth)lobster (GPT-5.3-Codex)
GeminioursActiveEmbeddings + nano-banana-pro
Runway MLTravis401 ExpiredBROKEN — needs rotation
YouTubeoursOAuth pendingyoutube-upload skill

Key backup: ~/openclaw-backup/keys.json on Mac

Skills (10/51 Ready)

SkillStatusNotes
sagReadyElevenLabs TTS (Roger voice)
slackReadyMessages, reactions, pins (not file uploads)
nano-banana-proReadyGemini 3 Pro image gen for thumbnails
video-framesReadyExtract frames/clips via ffmpeg
coding-agentReadyDelegate coding to sub-agents
skill-creatorReadyCreate/update agent skills
imsgReadyiMessage/SMS CLI
tmuxReadyRemote-control tmux sessions
healthcheckReadyHost security hardening
weatherReadyWeather via wttr.in

Custom-Built Skills (Video Pipeline)

SkillScriptsStatus
pexels-stocksearch_video, search_photo, download, previewBUILT
pillow-video-cardssection_card, intro_slide, outro_slide, thumbnail, text_overlayTESTED
ffmpeg-assemblernormalize, concat_clips, mix_audio, overlay_image, assembleTESTED
pixabay-stocksearch_video, search_photo, downloadTESTED
youtube-uploadupload, set_thumbnail, check_quotaBUILDING

Installed Toolchain

ToolVersionPath
FFmpeg8.0.1/usr/local/bin/ffmpeg
Python3.12.12/usr/local/bin/python3.12
ImageMagick7.1.2-15/usr/local/bin/magick
yt-dlp2026.02.21/usr/local/bin/yt-dlp
sag (TTS)0.2.2/usr/local/bin/sag
Pillow12.1.1pip3.12
requests2.32.5pip3.12
pydub0.25.1pip3.12

Fonts: Arial Bold + Impact at /System/Library/Fonts/Supplemental/

Remaining Tasks

TaskStatus
Build youtube-upload skillIn progress
YouTube OAuth flow (get refresh token)Pending
Unarchive #video-production in SlackUser action needed
Verify Slack routing end-to-endPending
Configure model fallbacks (Opus → Sonnet)Pending
Runway ML key rotationBlocked (Travis)

Task Tracker

#TaskStatus
1Install OpenClawDONE
2Configure model providersDONE
3Connect Slack (socket mode)DONE
4Create Lobster agentDONE
5Create Video-Producer agentDONE
6Configure agent routingDONE
7Pre-flight verificationDONE

Task 1: Install OpenClaw

Machine Details

Hostopenclaw-macbookpro
Usermomentatech
OSmacOS 26.3 (Intel)
Tailscale IP100.115.140.26
Nodev22.22.0 (/usr/local/bin/node)
Homebrew5.0.15 (/usr/local/bin/brew)

Install Steps

1. First attempt — failed (permissions)

curl -fsSL https://openclaw.ai/install.sh | bash

EACCES: permission denied — old install owned directory as root.

2. Fix permissions

sudo chown -R $(whoami) /usr/local/lib/node_modules/

3. Success

curl -fsSL https://openclaw.ai/install.sh | bash

v2026.2.25 installed. Gateway token auth configured, LaunchAgent installed.

Post-Install

Config~/.openclaw/openclaw.json
Gateway token564fbd64b04c5305ed70d6063cb32701ba3331c94db96bf8
Dashboardhttp://127.0.0.1:18789
Skills7 / 51 eligible
Keys backup~/openclaw-backup/keys.json

Task 2: Model Providers

OpenAI Codex (default)

openclaw configure → Model → OpenAI → OpenAI Codex (ChatGPT OAuth)
Default modelopenai-codex/gpt-5.3-codex
AuthOAuth / profile openai-codex:default

Anthropic (added later)

Via env.ANTHROPIC_API_KEY in openclaw.json. Auto-detected.

Available: anthropic/claude-opus-4-6, anthropic/claude-sonnet-4-6

Task 3: Connect Slack

openclaw configure → Channels → Slack (Socket Mode)
  • Bot token: xoxb-748892183093-...
  • App token: xapp-1-A0AGCHZD03Z-...
  • Channel allowlist: C0AGU4295HQ,C0AGT89CSKD
  • DM policy: Pairing — approved sender U0AG3M14UTX
App IDA0AGCHZD03Z
ModeSocket Mode
#lobster-testC0AGU4295HQ
#video-productionC0AGT89CSKD

Task 4: Lobster Agent

Default Slack bot. Handles all channels except #video-production.

Agent IDlobster
Modelopenai-codex/gpt-5.3-codex
Workspace~/.openclaw/workspace-lobster/

SOUL.md + IDENTITY.md (lobster)

Task 5: Video-Producer Agent

AI video production for Punchlist Zero.

Agent IDvideo-producer
Modelanthropic/claude-opus-4-6
Channel#video-production (C0AGT89CSKD)
Workspace~/.openclaw/workspace-video/

SOUL.md + IDENTITY.md + config/{technical_notes, style_guide, demo_context}.md

Task 6: Agent Routing

Gotcha: Agents go in agents.list[] array, NOT top-level keys. First attempt was rejected.

{
  "bindings": [
    {
      "agentId": "video-producer",
      "match": { "channel": "slack", "peer": { "kind": "channel", "id": "C0AGT89CSKD" } }
    },
    {
      "agentId": "lobster",
      "match": { "channel": "slack" }
    }
  ]
}

Order matters: specific peer match first, catch-all second.

Task 7: Pre-flight

Verified 2026-02-26 05:40 UTC

CheckResult
OpenClawv2026.2.25
GatewayActive (LaunchAgent)
ConfigClean (openclaw doctor)
SlackSocket mode, 179ms
Agentslobster + video-producer
Bindingsvideo-producer → C0AGT89CSKD, lobster → catch-all
API keysElevenLabs, Pexels, Pixabay, Anthropic, Gemini
Video toolsffmpeg, Python 3.12, Pillow, ImageMagick, yt-dlp, sag
Skillsslack, sag, video-frames, coding-agent, nano-banana-pro
#lobster-testActive
#video-productionArchived
Memory searchGemini embeddings
Runway MLExpired

Overview

Agent IDvideo-producer
ModelClaude Opus 4.6
Channel#video-production (C0AGT89CSKD)
VoiceElevenLabs "Roger" (CwhRBWXzGAHq8TQ4Fs17)
BrandGold #F5B800 + black/white
Output1920x1080, H.264 MP4, 30fps, AAC
Pacing160-185 WPM narration

Production Pipeline

7-step human-in-the-loop. Every step needs Dustin's approval.

1. Script 2. Storyboard 3. Footage 4. Voiceover 5. Assembly 6. Thumbnail 7. Upload

Green = built skill · Yellow = in progress

Steps 1-2: Script & Storyboard

Agent itself (Opus 4.6). Topic → 3 angles → script → shot-by-shot storyboard in Slack thread.

Step 3: Footage

pexels-stock + pixabay-stock skills. Search, preview, download. 1080p+ filter baked in.

Step 4: Voiceover

sag skill. ElevenLabs TTS, Roger voice. Preview via MEDIA: prefix.

Step 5: Assembly

pillow-video-cards + ffmpeg-assembler. Section cards via Pillow, then assemble.py --manifest → final MP4.

Step 6: Thumbnail

pillow-video-cardsthumbnail.py. 1280x720 PNG, bg-color or bg-image.

Step 7: Upload

youtube-upload skill (building). Resumable upload via YouTube Data API v3.

Scriptsupload.py, set_thumbnail.py, check_quota.py
Depsgoogle-api-python-client, google-auth, google-auth-oauthlib
Env varsYOUTUBE_CLIENT_ID, YOUTUBE_CLIENT_SECRET, YOUTUBE_REFRESH_TOKEN
QuotaUpload=1600, thumbnail=50, list=1 (daily: 10,000)
Category28 (Science & Technology)
Chunk size10MB resumable

Custom Skills

pexels-stock BUILT

scripts/ search_video.py, search_photo.py, download.py, preview.py

Requires PEXELS_API_KEY + requests. API was 503 at test (transient).

pillow-video-cards TESTED

scripts/ section_card.py, intro_slide.py, outro_slide.py, thumbnail.py, text_overlay.py

All 5 tested. Brand: Gold #F5B800, Arial Bold, Impact.

ffmpeg-assembler TESTED

scripts/ assemble.py, normalize.py, concat_clips.py, mix_audio.py, overlay_image.py

normalize.py tested. Full assembly pending real media.

pixabay-stock TESTED

scripts/ search_video.py, search_photo.py, download.py

500 results for "solar energy". stdlib urllib only.

youtube-upload BUILDING

scripts/ upload.py, set_thumbnail.py, check_quota.py
references/ youtube_api.md

Resumable upload (10MB chunks). OAuth refresh token needed in env.

Why Custom Skills Matter

WithoutWith
Tokens/search400-800~30
Tokens/download200-400~20
10-shot video~16,000+ wasted~500
ErrorsHighNear zero
1080p filterMight forgetBaked in
WITHOUT skill (~600 tokens)
import requests, json, os
API_KEY = os.environ.get("PEXELS_API_KEY")
# ... 20+ lines of boilerplate every time
WITH pexels-stock skill (~30 tokens)
python3 {baseDir}/scripts/search_video.py \
  --query "oil rig sunset" --min-height 1080 --count 5

Test Results

SkillScriptResult
pillow-video-cardssection_card.py1920x1080 PNG
intro_slide.py1920x1080 PNG
outro_slide.py1920x1080 PNG
thumbnail.py1280x720 PNG
text_overlay.py1920x1080 transparent PNG
ffmpeg-assemblernormalize.pyPNG → 1080p MP4
pixabay-stocksearch_video.py500 results
pexels-stocksearch_video.pyAPI 503 (transient)

Technical Constraints

  • No ffmpeg drawtext — no freetype. ALL text via Pillow.
  • Full binary paths/usr/local/bin/{ffmpeg,python3.12,sag}
  • File uploadsMEDIA:/path/to/file in agent replies
  • Normalize clips — 1920x1080@30fps before assembly
  • Roger voice onlyCwhRBWXzGAHq8TQ4Fs17
  • Runway ML broken — expired. Pexels + Pixabay only.

Workspace Map

~/.openclaw/workspace-video/
├── SOUL.md, IDENTITY.md
├── config/{technical_notes,style_guide,demo_context}.md
├── pexels-stock/          # Stock footage
├── pillow-video-cards/    # Text graphics
├── ffmpeg-assembler/      # Video assembly
├── pixabay-stock/         # Backup stock
├── youtube-upload/        # YouTube API (building)
├── assets/{stock_video,stock_images,music,voiceover}/
└── output/{videos,thumbnails,metadata}/
DateChange
2026-02-25Full wipe and fresh OpenClaw install (v2026.2.25)
2026-02-25Configured lobster + video-producer agents with Slack routing
2026-02-25API keys migrated from backup (Pexels, Pixabay, ElevenLabs, Anthropic)
2026-02-25Custom skills: pexels-stock, pillow-video-cards, ffmpeg-assembler, pixabay-stock
2026-02-26Added GEMINI_API_KEY — fixed memory search + unlocked nano-banana-pro
2026-02-26Skills 10/51 ready. Full sanity check passed.
2026-02-26Docs redesigned: sidebar nav, dashboard landing, separate pages
2026-02-26youtube-upload skill build started (upload, set_thumbnail, check_quota)