用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/Aradotso/hermes-skills --skill openclaw-pr-assets命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
AI second brain system with MCP tools for goals, schedules, notes, decisions, and long-term memory management
Multi-tenant SaaS platform built on OpenClaw with auth, billing, workspace isolation, and AI agent execution gateway
Add Opik LLM observability and tracing to OpenClaw AI agents for monitoring prompts, responses, tool calls, and agent behavior.
基于 SOC 职业分类
正在显示 SKILL.md
| name | openclaw-pr-assets |
| description | Manage screenshot and video proof assets for OpenClaw pull requests using GitHub releases |
| triggers | ["how do I add screenshots to an OpenClaw PR","store proof assets for OpenClaw pull request","attach videos to OpenClaw PR without bloating repo","manage OpenClaw PR screenshots and videos","create release for OpenClaw PR assets","link assets to OpenClaw pull request","upload proof files for OpenClaw PR","organize OpenClaw PR media files"] |
Skill by ara.so — Hermes Skills collection.
This repository provides a pattern for storing screenshot and video proof assets for OpenClaw pull requests without bloating the main product repository. Each GitHub release tag corresponds to one PR, with assets attached to that release.
openclaw-pr-assets demonstrates a best practice for managing large binary proof assets (screenshots, videos, GIFs) that need to be referenced in pull requests:
openclaw-pr-assets/
├── README.md # Documentation
└── (releases) # All assets stored as GitHub Release attachments
When you have a PR with screenshots or videos to attach:
# Tag format: pr-<number> where <number> is the PR number
PR_NUMBER=123
TAG="pr-${PR_NUMBER}"
# Create and push the tag
git tag -a "${TAG}" -m "Assets for OpenClaw PR #${PR_NUMBER}"
git push origin "${TAG}"
Using GitHub CLI (gh):
# Create release and upload assets
gh release create "${TAG}" \
--repo steipete/openclaw-pr-assets \
--title "PR #${PR_NUMBER} - Brief Description" \
--notes "Proof assets for https://github.com/OpenClaw/OpenClaw/pull/${PR_NUMBER}" \
screenshot1.png \
demo-video.mp4 \
comparison.gif
Or manually:
pr-123PR #123 - Feature Description## Screenshots
Before:

After:

## Video Demo
[Demo Video](https://github.com/steipete/openclaw-pr-assets/releases/download/pr-123/demo.mp4)
Create a helper script upload-pr-assets.sh:
#!/bin/bash
set -e
if [ $# -lt 2 ]; then
echo "Usage: $0 <PR_NUMBER> <file1> [file2] [...]"
echo "Example: $0 123 screenshot.png demo.mp4"
exit 1
fi
PR_NUMBER=$1
shift
FILES=("$@")
TAG="pr-${PR_NUMBER}"
REPO="steipete/openclaw-pr-assets"
echo "Creating release ${TAG} for PR #${PR_NUMBER}..."
# Check if tag exists
if git rev-parse "${TAG}" >/dev/null 2>&1; then
echo "Tag ${TAG} already exists"
else
git tag -a "${TAG}" -m "Assets for OpenClaw PR #${PR_NUMBER}"
git push origin "${TAG}"
fi
# Create or update release
gh release create "${TAG}" \
--repo "${REPO}" \
--title "PR #${PR_NUMBER}" \
--notes "Proof assets for OpenClaw PR #${PR_NUMBER}
See: https://github.com/OpenClaw/OpenClaw/pull/${PR_NUMBER}" \
"" || \
gh release upload \
--repo \
file ;
filename=$( )
Make it executable:
chmod +x upload-pr-assets.sh
Use it:
./upload-pr-assets.sh 123 before.png after.png demo.mp4
For Python-based automation:
#!/usr/bin/env python3
import sys
import subprocess
from pathlib import Path
def upload_pr_assets(pr_number: int, files: list[str]):
"""Upload assets for an OpenClaw PR"""
tag = f"pr-{pr_number}"
repo = "steipete/openclaw-pr-assets"
# Create tag if it doesn't exist
try:
subprocess.run(
["git", "rev-parse", tag],
check=True,
capture_output=True
)
print(f"Tag {tag} already exists")
except subprocess.CalledProcessError:
subprocess.run(
["git", "tag", "-a", tag, "-m", f"Assets for OpenClaw PR #{pr_number}"],
check=True
)
subprocess.run(["git", "push", "origin", tag], check=True)
# Create release and upload files
notes = f"Proof assets for OpenClaw PR #{pr_number}\n\nSee: https://github.com/OpenClaw/OpenClaw/pull/{pr_number}"
cmd = [
"gh", "release", "create", tag,
"--repo", repo,
"--title", f"PR #",
, notes
] + files
:
subprocess.run(cmd, check=)
subprocess.CalledProcessError:
cmd = [, , , tag, , repo] + files
subprocess.run(cmd, check=)
()
file files:
filename = Path(file).name
()
__name__ == :
(sys.argv) < :
()
sys.exit()
pr_num = (sys.argv[])
files = sys.argv[:]
upload_pr_assets(pr_num, files)
Naming Convention: Use descriptive filenames
before-main-menu.pngafter-fixed-rendering.pngbug-reproduction.mp4File Formats:
Optimize Before Upload:
# Optimize PNG
optipng screenshot.png
# Convert video to smaller MP4
ffmpeg -i input.mov -vcodec h264 -acodec aac output.mp4
Tag Immediately: Create the tag as soon as you open the PR to avoid confusion
# Delete local tag
git tag -d pr-123
# Delete remote tag
git push origin :refs/tags/pr-123
# Recreate
git tag -a pr-123 -m "Assets for PR #123"
git push origin pr-123
# Upload to existing release
gh release upload pr-123 --repo steipete/openclaw-pr-assets new-file.png
# Delete asset from release
gh release delete-asset pr-123 wrong-file.png --repo steipete/openclaw-pr-assets
Reference this pattern in OpenClaw PR templates:
## Visual Proof
Please upload screenshots/videos to the [openclaw-pr-assets](https://github.com/steipete/openclaw-pr-assets) repo and link them here.
Example:
