From 84890f1e16b88b7f77a73c1f2f36215613f3fbcf Mon Sep 17 00:00:00 2001 From: Kieran Klaassen Date: Mon, 5 Jan 2026 11:07:02 -0800 Subject: [PATCH] [2.22.0] Add rclone skill and enhance feature-video command MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add rclone skill for uploading to S3, Cloudflare R2, Backblaze B2 - Update /feature-video with better ffmpeg commands (proper scaling) - Add rclone integration for cloud uploads in feature-video - 27 agents, 20 commands, 13 skills, 2 MCP servers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../.claude-plugin/plugin.json | 4 +- plugins/compound-engineering/CHANGELOG.md | 20 +++ plugins/compound-engineering/README.md | 8 +- .../commands/feature-video.md | 67 ++++---- .../skills/rclone/SKILL.md | 150 ++++++++++++++++++ .../skills/rclone/scripts/check_setup.sh | 60 +++++++ 6 files changed, 270 insertions(+), 39 deletions(-) create mode 100644 plugins/compound-engineering/skills/rclone/SKILL.md create mode 100755 plugins/compound-engineering/skills/rclone/scripts/check_setup.sh diff --git a/plugins/compound-engineering/.claude-plugin/plugin.json b/plugins/compound-engineering/.claude-plugin/plugin.json index 3ec91dc..0924252 100644 --- a/plugins/compound-engineering/.claude-plugin/plugin.json +++ b/plugins/compound-engineering/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "compound-engineering", - "version": "2.21.0", - "description": "AI-powered development tools. 27 agents, 20 commands, 12 skills, 2 MCP servers for code review, research, design, and workflow automation.", + "version": "2.22.0", + "description": "AI-powered development tools. 27 agents, 20 commands, 13 skills, 2 MCP servers for code review, research, design, and workflow automation.", "author": { "name": "Kieran Klaassen", "email": "kieran@every.to", diff --git a/plugins/compound-engineering/CHANGELOG.md b/plugins/compound-engineering/CHANGELOG.md index a90aa5a..843a916 100644 --- a/plugins/compound-engineering/CHANGELOG.md +++ b/plugins/compound-engineering/CHANGELOG.md @@ -5,6 +5,26 @@ All notable changes to the compound-engineering plugin will be documented in thi The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.22.0] - 2026-01-05 + +### Added + +- **`rclone` skill** - Upload files to S3, Cloudflare R2, Backblaze B2, and other cloud storage providers + +### Changed + +- **`/feature-video` command** - Enhanced with: + - Better ffmpeg commands for video/GIF creation (proper scaling, framerate control) + - rclone integration for cloud uploads + - Screenshot copying to project folder + - Improved upload options workflow + +### Summary + +- 27 agents, 20 commands, 13 skills, 2 MCP servers + +--- + ## [2.21.0] - 2026-01-05 ### Fixed diff --git a/plugins/compound-engineering/README.md b/plugins/compound-engineering/README.md index 6c3ed36..1328545 100644 --- a/plugins/compound-engineering/README.md +++ b/plugins/compound-engineering/README.md @@ -8,7 +8,7 @@ AI-powered development tools that get smarter with every use. Make each unit of |-----------|-------| | Agents | 27 | | Commands | 20 | -| Skills | 12 | +| Skills | 13 | | MCP Servers | 2 | ## Agents @@ -128,6 +128,12 @@ Core workflow commands use `workflows:` prefix to avoid collisions with built-in | `file-todos` | File-based todo tracking system | | `git-worktree` | Manage Git worktrees for parallel development | +### File Transfer + +| Skill | Description | +|-------|-------------| +| `rclone` | Upload files to S3, Cloudflare R2, Backblaze B2, and cloud storage | + ### Image Generation | Skill | Description | diff --git a/plugins/compound-engineering/commands/feature-video.md b/plugins/compound-engineering/commands/feature-video.md index c1dfcf7..0e28a5a 100644 --- a/plugins/compound-engineering/commands/feature-video.md +++ b/plugins/compound-engineering/commands/feature-video.md @@ -24,7 +24,8 @@ This command creates professional video walkthroughs of features for PR document - Local development server running (e.g., `bin/dev`, `rails server`) - Playwright MCP server connected - Git repository with a PR to document -- `ffmpeg` installed (for video conversion if needed) +- `ffmpeg` installed (for video conversion) +- `rclone` configured (optional, for cloud upload - see rclone skill) ## Main Tasks @@ -180,58 +181,52 @@ mcp__plugin_compound-engineering_pw__browser_take_screenshot({ filename: "tmp/sc ``` **Create video/GIF from screenshots:** + ```bash -# Create GIF from screenshots -ffmpeg -framerate 1 -pattern_type glob -i 'tmp/screenshots/*.png' \ +# Create directories +mkdir -p tmp/videos tmp/screenshots + +# Create MP4 video (RECOMMENDED - better quality, smaller size) +# -framerate 0.5 = 2 seconds per frame (slower playback) +# -framerate 1 = 1 second per frame +ffmpeg -y -framerate 0.5 -pattern_type glob -i '.playwright-mcp/tmp/screenshots/*.png' \ + -c:v libx264 -pix_fmt yuv420p -vf "scale=1280:-2" \ + tmp/videos/feature-demo.mp4 + +# Create GIF (larger file, but works everywhere) +ffmpeg -y -framerate 0.7 -pattern_type glob -i '.playwright-mcp/tmp/screenshots/*.png' \ -vf "scale=1280:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \ -loop 0 tmp/videos/feature-demo.gif -# Or create MP4 for better quality -ffmpeg -framerate 1 -pattern_type glob -i 'tmp/screenshots/*.png' \ - -c:v libx264 -pix_fmt yuv420p -vf "scale=1280:-1" \ - tmp/videos/feature-demo.mp4 +# Copy screenshots to project folder for easy access +cp -r .playwright-mcp/tmp/screenshots tmp/ ``` +**Note:** The `-2` in scale ensures height is divisible by 2 (required for H.264). + ### 6. Upload the Video -**Option A: Upload to GitHub (via PR comment with attachment)** +**Upload with rclone:** -GitHub doesn't support direct video uploads via API, but you can: -1. Drag-drop in browser, or -2. Use a hosting service - -**Option B: Upload to transfer.sh (temporary, 14 days)** ```bash -curl --upload-file tmp/videos/feature-demo.gif https://transfer.sh/feature-demo.gif +# Check rclone is configured +rclone listremotes + +# Upload video and screenshots to cloud storage +rclone copy tmp/videos/feature-demo.mp4 r2:your-bucket/pr-videos/ --progress +rclone copy tmp/screenshots/ r2:your-bucket/pr-videos/screenshots/ --progress + +# List uploaded files +rclone ls r2:your-bucket/pr-videos/ ``` -**Option C: Upload to Cloudflare R2/S3 (if configured)** -```bash -# If AWS CLI is configured -aws s3 cp tmp/videos/feature-demo.gif s3://your-bucket/pr-videos/pr-[number]-demo.gif --acl public-read +The public URL depends on your bucket configuration. For R2 with public access: ``` - -**Option D: Keep local and provide path** -```bash -# Just provide the local path for manual upload -echo "Video saved to: $(pwd)/tmp/videos/feature-demo.gif" -``` - -Ask user for upload preference: -```markdown -**Video Ready** - -Video saved to: `tmp/videos/feature-demo.gif` -Size: [size] - -How would you like to share it? -1. Upload to transfer.sh (temporary link, 14 days) -2. Keep local - I'll upload manually -3. Upload to S3/R2 (requires config) +https://pub-XXXXX.r2.dev/pr-videos/feature-demo.mp4 ``` diff --git a/plugins/compound-engineering/skills/rclone/SKILL.md b/plugins/compound-engineering/skills/rclone/SKILL.md new file mode 100644 index 0000000..62c91a3 --- /dev/null +++ b/plugins/compound-engineering/skills/rclone/SKILL.md @@ -0,0 +1,150 @@ +--- +name: rclone +description: Upload, sync, and manage files across cloud storage providers using rclone. Use when uploading files (images, videos, documents) to S3, Cloudflare R2, Backblaze B2, Google Drive, Dropbox, or any S3-compatible storage. Triggers on "upload to S3", "sync to cloud", "rclone", "backup files", "upload video/image to bucket", or requests to transfer files to remote storage. +--- + +# rclone File Transfer Skill + +## Setup Check (Always Run First) + +Before any rclone operation, verify installation and configuration: + +```bash +# Check if rclone is installed +command -v rclone >/dev/null 2>&1 && echo "rclone installed: $(rclone version | head -1)" || echo "NOT INSTALLED" + +# List configured remotes +rclone listremotes 2>/dev/null || echo "NO REMOTES CONFIGURED" +``` + +### If rclone is NOT installed + +Guide the user to install: + +```bash +# macOS +brew install rclone + +# Linux (script install) +curl https://rclone.org/install.sh | sudo bash + +# Or via package manager +sudo apt install rclone # Debian/Ubuntu +sudo dnf install rclone # Fedora +``` + +### If NO remotes are configured + +Walk the user through interactive configuration: + +```bash +rclone config +``` + +**Common provider setup quick reference:** + +| Provider | Type | Key Settings | +|----------|------|--------------| +| AWS S3 | `s3` | access_key_id, secret_access_key, region | +| Cloudflare R2 | `s3` | access_key_id, secret_access_key, endpoint (account_id.r2.cloudflarestorage.com) | +| Backblaze B2 | `b2` | account (keyID), key (applicationKey) | +| DigitalOcean Spaces | `s3` | access_key_id, secret_access_key, endpoint (region.digitaloceanspaces.com) | +| Google Drive | `drive` | OAuth flow (opens browser) | +| Dropbox | `dropbox` | OAuth flow (opens browser) | + +**Example: Configure Cloudflare R2** +```bash +rclone config create r2 s3 \ + provider=Cloudflare \ + access_key_id=YOUR_ACCESS_KEY \ + secret_access_key=YOUR_SECRET_KEY \ + endpoint=ACCOUNT_ID.r2.cloudflarestorage.com \ + acl=private +``` + +**Example: Configure AWS S3** +```bash +rclone config create aws s3 \ + provider=AWS \ + access_key_id=YOUR_ACCESS_KEY \ + secret_access_key=YOUR_SECRET_KEY \ + region=us-east-1 +``` + +## Common Operations + +### Upload single file +```bash +rclone copy /path/to/file.mp4 remote:bucket/path/ --progress +``` + +### Upload directory +```bash +rclone copy /path/to/folder remote:bucket/folder/ --progress +``` + +### Sync directory (mirror, deletes removed files) +```bash +rclone sync /local/path remote:bucket/path/ --progress +``` + +### List remote contents +```bash +rclone ls remote:bucket/ +rclone lsd remote:bucket/ # directories only +``` + +### Check what would be transferred (dry run) +```bash +rclone copy /path remote:bucket/ --dry-run +``` + +## Useful Flags + +| Flag | Purpose | +|------|---------| +| `--progress` | Show transfer progress | +| `--dry-run` | Preview without transferring | +| `-v` | Verbose output | +| `--transfers=N` | Parallel transfers (default 4) | +| `--bwlimit=RATE` | Bandwidth limit (e.g., `10M`) | +| `--checksum` | Compare by checksum, not size/time | +| `--exclude="*.tmp"` | Exclude patterns | +| `--include="*.mp4"` | Include only matching | +| `--min-size=SIZE` | Skip files smaller than SIZE | +| `--max-size=SIZE` | Skip files larger than SIZE | + +## Large File Uploads + +For videos and large files, use chunked uploads: + +```bash +# S3 multipart upload (automatic for >200MB) +rclone copy large_video.mp4 remote:bucket/ --s3-chunk-size=64M --progress + +# Resume interrupted transfers +rclone copy /path remote:bucket/ --progress --retries=5 +``` + +## Verify Upload + +```bash +# Check file exists and matches +rclone check /local/file remote:bucket/file + +# Get file info +rclone lsl remote:bucket/path/to/file +``` + +## Troubleshooting + +```bash +# Test connection +rclone lsd remote: + +# Debug connection issues +rclone lsd remote: -vv + +# Check config +rclone config show remote +``` diff --git a/plugins/compound-engineering/skills/rclone/scripts/check_setup.sh b/plugins/compound-engineering/skills/rclone/scripts/check_setup.sh new file mode 100755 index 0000000..99b6bd8 --- /dev/null +++ b/plugins/compound-engineering/skills/rclone/scripts/check_setup.sh @@ -0,0 +1,60 @@ +#!/bin/bash +# rclone setup checker - verifies installation and configuration + +set -e + +echo "=== rclone Setup Check ===" +echo + +# Check if rclone is installed +if command -v rclone >/dev/null 2>&1; then + echo "✓ rclone installed" + rclone version | head -1 + echo +else + echo "✗ rclone NOT INSTALLED" + echo + echo "Install with:" + echo " macOS: brew install rclone" + echo " Linux: curl https://rclone.org/install.sh | sudo bash" + echo " or: sudo apt install rclone" + exit 1 +fi + +# Check for configured remotes +REMOTES=$(rclone listremotes 2>/dev/null || true) + +if [ -z "$REMOTES" ]; then + echo "✗ No remotes configured" + echo + echo "Run 'rclone config' to set up a remote, or use:" + echo + echo " # Cloudflare R2" + echo " rclone config create r2 s3 provider=Cloudflare \\" + echo " access_key_id=KEY secret_access_key=SECRET \\" + echo " endpoint=ACCOUNT_ID.r2.cloudflarestorage.com" + echo + echo " # AWS S3" + echo " rclone config create aws s3 provider=AWS \\" + echo " access_key_id=KEY secret_access_key=SECRET region=us-east-1" + echo + exit 1 +else + echo "✓ Configured remotes:" + echo "$REMOTES" | sed 's/^/ /' + echo +fi + +# Test connectivity for each remote +echo "Testing remote connectivity..." +for remote in $REMOTES; do + remote_name="${remote%:}" + if rclone lsd "$remote" >/dev/null 2>&1; then + echo " ✓ $remote_name - connected" + else + echo " ✗ $remote_name - connection failed (check credentials)" + fi +done + +echo +echo "=== Setup Complete ==="