PR Babysitter
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
A skill your agent uses when user asks to leverage claude or claude code to do something (e.g.
$ npx skills add LeoYeAI/openclaw-master-skills --skill claude-skill -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills claude-skill --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/claude-skill .claude/skills/claude-skill && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "claude-skill" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/claude-skill into .claude/skills/claude-skill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "claude-skill", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/claude-skillType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add LeoYeAI/openclaw-master-skills --skill claude-skill -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills claude-skill --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/claude-skill .agents/skills/claude-skill && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "claude-skill" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/claude-skill into .agents/skills/claude-skill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "claude-skill", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill claude-skill -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills claude-skill --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/claude-skill .cursor/skills/claude-skill && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "claude-skill" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/claude-skill into .cursor/skills/claude-skill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "claude-skill", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/LeoYeAI/openclaw-master-skills.git --path skills/claude-skill--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add LeoYeAI/openclaw-master-skills --skill claude-skill -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills claude-skill --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/claude-skill .gemini/skills/claude-skill && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "claude-skill" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/claude-skill into .gemini/skills/claude-skill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "claude-skill", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LeoYeAI/openclaw-master-skills claude-skillInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LeoYeAI/openclaw-master-skills --skill claude-skill -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/claude-skill .github/skills/claude-skill && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "claude-skill" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/claude-skill into .github/skills/claude-skill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "claude-skill", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill claude-skill -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills claude-skill --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/claude-skill .opencode/skills/claude-skill && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "claude-skill" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/claude-skill into .opencode/skills/claude-skill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "claude-skill", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
claude-skillA skill your agent uses when user asks to leverage claude or claude code to do something (e.g.
Claude Skill is an agent skill from LeoYeAI/openclaw-master-skills. Use when user asks to leverage claude or claude code to do something (e.g. implement a feature design or review codes, etc). Provides non-interactive automation mode for hands-off task execution without approval prompts.
Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `_meta.json` and `references/examples.md`).
It sits in Development, covering Code review. The repository describes itself as: 🧠 Curated collection of 1209+ best OpenClaw skills — weekly updated by MyClaw.ai. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e5199b5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
claudejqgitghpnpmcodexFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, gh and pnpm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Claude Skill loads about 5.2k tokens when it runs, and up to ~6k if it reads all its reference files. Until then it costs about 58 tokens; SKILL.md has 968 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from LeoYeAI/openclaw-master-skills at commit e5199b5, republished under its MIT licence (© LeoYeAI). 968 words, ~5,193 tokens.
.claude/skills/claude-skill/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Operate Claude Code as a managed coding agent — from worktree setup through PR merge.
claude --version # Verify installed
# Install: npm install -g @anthropic-ai/claude-code
tmux -V # tmux required for full workflow| Flag | Effect |
|---|---|
-p "prompt" | Non-interactive one-shot, exits when done |
--dangerously-skip-permissions | Skip all permission prompts (safe in containers/VMs) |
--permission-mode acceptEdits | Auto-accept file edits, still prompt for shell commands |
--permission-mode plan | Read-only analysis, no modifications |
--model <model> | Model selection (e.g. claude-sonnet-4-6) |
--allowedTools "Bash,Read,Write,Edit" | Restrict available tools |
--disallowedTools "Bash,Write" | Block specific tools |
--append-system-prompt "..." | Add custom instructions to system prompt |
--output-format json | Structured JSON output with cost/duration metadata |
--output-format stream-json | Streaming JSON (each message as it arrives) |
--continue / -c | Continue most recent conversation |
--resume <id> / -r <id> | Resume specific session by ID |
--mcp-config <file> | Load MCP server configuration |
--verbose | Enable verbose debug logging |
For trivial fixes, one-file changes, or analysis. Use -p (non-interactive).
Output capture: Always redirect output to a log file so it's readable regardless
of PTY availability. Use --output-format stream-json for structured, parseable
progress events (each message arrives as a separate JSON line).
LOG_FILE="/tmp/claude-quick-${TASK_ID:-$$}.log"
# Via OpenClaw exec — use background=true + pty=true, NO hard timeout
# pty=true ensures claude CLI flushes output properly (no buffering issues)
# (hard timeout kills the process; instead we poll and extend)
# Redirect both stdout and stderr to log file via tee so output is always captured.
# In -p mode (non-interactive), | tee is safe — no TTY detection issues.
exec(command="claude -p 'fix the typo in README.md' --dangerously-skip-permissions --output-format stream-json 2>&1 | tee -a $LOG_FILE",
workdir="/path/to/project", background=true, pty=true)PTY fallback: If pty=true is unavailable (some containers, CI runners), the
command still works because -p mode is non-interactive — it doesn't rely on
isatty(stdout). The 2>&1 | tee ensures both stdout and stderr are captured
to the log file regardless of PTY status. Without PTY, you lose color output
but all content is preserved.
Do NOT use timeout= for claude tasks. Instead, use background execution
with periodic polling. This prevents premature kills on long-running tasks:
background=true (no timeout)process(action="poll", sessionId=<id>, timeout=300000)Persistent polling state: Store polling metadata in the task registry so a restarted orchestrator agent can resume monitoring without losing state:
Registry fields for Quick Mode tasks:
"lastOutputHash": "<sha256 of last 20 lines>",
"lastCheckedAt": <unix timestamp>,
"silentRounds": <int>,
"repeatingRounds": <int>Poll loop (agent behavior, not a script):
poll_interval = 5 min (300000 ms)
max_silent_rounds = 144 (= 12 hours with no new output → ask user)
max_repeating_rounds = 12 (= 1 hour of identical output → likely stuck)
# Restore state from registry if resuming after agent restart
silent_rounds = registry[task_id].silentRounds ?? 0
repeating_rounds = registry[task_id].repeatingRounds ?? 0
last_output_hash = registry[task_id].lastOutputHash ?? ""
repeat:
result = process(action="poll", sessionId=<id>, timeout=300000)
if result.completed:
→ check exit code, read $LOG_FILE, report result
→ break
else:
# Read latest output directly from the log file
new_output = tail -20 "$LOG_FILE"
new_hash = sha256(new_output)
if new_hash != last_output_hash and new_output != "":
if last_output_hash != "" and output_looks_similar(new_output, last_output):
repeating_rounds += 1 # output changing but repetitive (loop)
silent_rounds = 0
else:
silent_rounds = 0 # genuinely new output, keep going
repeating_rounds = 0
last_output_hash = new_hash
else:
silent_rounds += 1
# Persist state to registry (survives agent restart)
update_registry(task_id, {
lastOutputHash: new_hash,
lastCheckedAt: now(),
silentRounds: silent_rounds,
repeatingRounds: repeating_rounds
})
if silent_rounds >= max_silent_rounds:
→ notify user: "Claude has been silent for 12 hours, kill or keep waiting?"
→ wait for user decision
if repeating_rounds >= max_repeating_rounds:
→ notify user: "Claude appears stuck in a loop (1h of repeated output), kill or keep waiting?"
→ wait for user decisionThis way tasks that need 5 min or several hours both work without premature kills.
For non-trivial tasks, use the full workflow below. This gives you:
Isolate each task in its own worktree and branch:
TASK_ID="feat-custom-templates"
BRANCH="feat/$TASK_ID"
REPO_ROOT=$(git rev-parse --show-toplevel)
WORKTREE="/tmp/worktrees/$TASK_ID"
git worktree add -b "$BRANCH" "$WORKTREE" origin/main
cd "$WORKTREE"
# Install dependencies (adapt to your stack)
pnpm install # or: npm install / go mod tidy / pip install -r requirements.txtStart Claude Code in interactive mode (no -p) so you can steer mid-task.
Important: Use tmux pipe-pane to log output — do NOT use | tee because it
turns stdout into a pipe, which breaks interactive mode (claude detects !isatty(stdout)
and may disable interactive features, breaking send-keys steering).
Critical: Set up pipe-pane BEFORE sending the command. Otherwise early output
(startup messages, fast crashes) is lost.
LOG_FILE="/tmp/worktrees/$TASK_ID/claude-output.log"
MAX_LOG_SIZE=$((100 * 1024 * 1024)) # 100 MB safety cap
# 1. Create session with an idle shell first
tmux new-session -d -s "$TASK_ID" -c "$WORKTREE"
# 2. Start pipe-pane BEFORE the command runs — captures ALL output from the start
# Strip ANSI escape codes so log files are clean and grep-parseable
tmux pipe-pane -t "$TASK_ID" -o "sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' >> $LOG_FILE"
# 3. NOW send the command — all output is captured
tmux send-keys -t "$TASK_ID" "claude --dangerously-skip-permissions \
'Your detailed prompt here.
When completely finished:
1. Commit all changes with descriptive messages
2. Push the branch: git push -u origin $BRANCH
3. Create PR: gh pr create --fill
4. Notify: openclaw system event --text \"Done: $TASK_ID\" --mode now'" EnterLog file management: For very long-running tasks, the log file can grow large. Monitor its size and rotate if needed:
LOG_SIZE=$(stat -c%s "$LOG_FILE" 2>/dev/null || echo 0)
if [ "$LOG_SIZE" -gt "$MAX_LOG_SIZE" ]; then
mv "$LOG_FILE" "${LOG_FILE}.old"
# pipe-pane will create a new file on next write
fiWhy interactive mode (no -p)?
tmux send-keys--dangerously-skip-permissions is safe in container/sandbox environmentsNote on stdout/stderr: In tmux, both stdout and stderr from the process flow
through the PTY and are captured by pipe-pane. They are mixed together — you
cannot separate them after capture. For error diagnosis, grep for keywords like
error, fail, panic in the clean (ANSI-stripped) log file.
Track all active tasks in a JSON registry. Use flock for atomic updates to
prevent race conditions when multiple agents run in parallel.
mkdir -p "$REPO_ROOT/.clawd"
TASKS_FILE="$REPO_ROOT/.clawd/active-tasks.json"
# Initialize if not exists
[ -f "$TASKS_FILE" ] || echo '{"tasks":[]}' > "$TASKS_FILE"
# Get the PID of the claude process inside tmux for reliable status checks
PANE_PID=$(tmux display-message -t "$TASK_ID" -p '#{pane_pid}')
# Register — use flock to prevent concurrent write races
(
flock -x 200
jq --arg id "$TASK_ID" --arg branch "$BRANCH" --arg wt "$WORKTREE" \
--arg pane_pid "$PANE_PID" \
'.tasks += [{
"id": $id,
"agent": "claude",
"branch": $branch,
"worktree": $wt,
"tmuxSession": $id,
"panePid": ($pane_pid | tonumber),
"status": "running",
"startedAt": (now|floor),
"pr": null,
"retries": 0,
"checks": {},
"lastOutputHash": "",
"lastCheckedAt": (now|floor),
"silentRounds": 0,
"repeatingRounds": 0
}]' "$TASKS_FILE" > /tmp/tasks.$$.json && mv /tmp/tasks.$$.json "$TASKS_FILE"
) 200>"$TASKS_FILE.lock"# --- Process status check (reliable — checks actual process, not just tmux session) ---
# Method 1: Check if the claude process inside the pane is alive
PANE_PID=$(tmux display-message -t "$TASK_ID" -p '#{pane_pid}' 2>/dev/null)
if [ -z "$PANE_PID" ]; then
echo "tmux session gone"
elif pgrep -P "$PANE_PID" > /dev/null 2>&1; then
echo "running"
else
echo "process exited (tmux session still open)"
# Get exit code from the shell inside tmux
tmux send-keys -t "$TASK_ID" 'echo "EXIT_CODE=$?"' Enter
fi
# Method 2: Use tmux's pane_dead flag (if remain-on-exit is set)
# tmux display-message -t "$TASK_ID" -p '#{pane_dead}' # 1 = process exited
# --- View output ---
# Full output history from log file (ANSI-stripped, grep-friendly)
tail -100 "/tmp/worktrees/$TASK_ID/claude-output.log"
# Search for errors in clean log
grep -i "error\|fail\|panic" "/tmp/worktrees/$TASK_ID/claude-output.log"
# Live view (raw tmux pane, may contain ANSI codes — use for quick glance only)
tmux capture-pane -t "$TASK_ID" -p -S -50
# --- Mid-task steering (DON'T kill — redirect!) ---
# Agent going the wrong direction?
tmux send-keys -t "$TASK_ID" "Stop. Focus on the API layer first, not the UI." Enter
# Agent missing context?
tmux send-keys -t "$TASK_ID" "The schema is in src/types/template.ts. Use that." Enter
# Agent's context window filling up?
tmux send-keys -t "$TASK_ID" "Focus only on these 3 files: api.ts, handler.ts, types.ts" Enter
# Agent needs test guidance?
tmux send-keys -t "$TASK_ID" "Run 'npm test -- --grep auth' to verify your changes." EnterMonitoring cadence: Check every 5-10 minutes, not every 30 seconds. Agents need time to work.
A PR is NOT ready for review until all checks pass:
✅ PR created → gh pr list --head "$BRANCH"
✅ No merge conflicts → gh pr view $PR_NUM --json mergeable -q '.mergeable'
✅ CI passing → gh pr checks $PR_NUM
✅ AI code review passed → at least one cross-model review (see Step 6)
✅ UI screenshots included → (if applicable) screenshot in PR descriptionQuick inline check:
PR_NUM=$(gh pr list --head "$BRANCH" --json number -q '.[0].number')
echo "PR: #$PR_NUM"
gh pr checks "$PR_NUM"
gh pr view "$PR_NUM" --json mergeable -q '.mergeable'Review with a different model than the one that wrote the code. Different models catch different issues:
DIFF=$(gh pr diff "$PR_NUM")
# Option A: Codex reviews Claude's code (best for edge cases & logic errors)
echo "$DIFF" | codex exec -s read-only \
"Review this PR diff. Focus on: bugs, edge cases, missing error handling,
race conditions, security issues. Be specific — cite file and line numbers.
Output format: list of issues with severity (critical/warning/info)."
# Option B: Claude reviews with security focus
echo "$DIFF" | claude -p \
--append-system-prompt "You are a security-focused code reviewer. Flag only critical issues." \
"Review this diff for security vulnerabilities, injection risks, and logic errors."Post review results to PR:
gh pr comment "$PR_NUM" --body "## AI Code Review
$REVIEW_OUTPUT"Update task registry:
(
flock -x 200
jq --arg id "$TASK_ID" \
'(.tasks[] | select(.id == $id)).checks.codeReviewPassed = true' \
"$TASKS_FILE" > /tmp/tasks.$$.json && mv /tmp/tasks.$$.json "$TASKS_FILE"
) 200>"$TASKS_FILE.lock"If you included the notify command in the agent prompt (Step 2), the agent self-notifies on completion.
Otherwise, notify after DoD passes:
openclaw system event --text "✅ PR #$PR_NUM ready for review: $TASK_ID — all checks passed" --mode nowUpdate task status:
(
flock -x 200
jq --arg id "$TASK_ID" --argjson pr "$PR_NUM" \
'(.tasks[] | select(.id == $id)) |= (.status = "done" | .pr = $pr | .completedAt = (now|floor))' \
"$TASKS_FILE" > /tmp/tasks.$$.json && mv /tmp/tasks.$$.json "$TASKS_FILE"
) 200>"$TASKS_FILE.lock"After PR is merged:
git worktree remove "$WORKTREE" 2>/dev/null
git branch -d "$BRANCH" 2>/dev/null
# Remove from registry
(
flock -x 200
jq --arg id "$TASK_ID" '.tasks = [.tasks[] | select(.id != $id)]' \
"$TASKS_FILE" > /tmp/tasks.$$.json && mv /tmp/tasks.$$.json "$TASKS_FILE"
) 200>"$TASKS_FILE.lock"When an agent fails, analyze the failure and adapt the prompt — don't just re-run blindly.
| Failure Type | Symptom | Retry Strategy |
|---|---|---|
| Context overflow | Agent loops, produces garbage, or stops mid-task | Narrow scope: "Focus only on files X, Y, Z" |
| Wrong direction | Agent implements something unrelated to intent | Correct intent: "Stop. Customer wanted X, not Y. Spec: ..." |
| Missing info | Agent makes wrong assumptions about architecture | Add context: "Auth uses JWT, see src/auth/jwt.ts" |
| CI failure | Tests, lint, or typecheck fail after PR | Attach CI log: "Fix these test failures: ..." |
| Build failure | Dependencies missing or incompatible | Pre-install deps before retry |
Max 3 retries. After that, escalate to human.
RETRY=$((RETRY + 1))
if [ "$RETRY" -gt 3 ]; then
openclaw system event --text "BLOCKED: $TASK_ID failed after 3 retries — needs human help" --mode now
(
flock -x 200
jq --arg id "$TASK_ID" '(.tasks[] | select(.id == $id)).status = "blocked"' \
"$TASKS_FILE" > /tmp/tasks.$$.json && mv /tmp/tasks.$$.json "$TASKS_FILE"
) 200>"$TASKS_FILE.lock"
exit 1
fi
# Capture what went wrong — prefer log file over tmux scrollback
LOG_FILE="/tmp/worktrees/$TASK_ID/claude-output.log"
if [ -f "$LOG_FILE" ]; then
# Log file is ANSI-stripped (clean text) — extract error-relevant lines
# Take last 500 lines, but also grep for error context
FAILURE_LOG=$(tail -500 "$LOG_FILE")
ERROR_LINES=$(grep -n -i "error\|fail\|panic\|exception\|traceback" "$LOG_FILE" | tail -50)
if [ -n "$ERROR_LINES" ]; then
FAILURE_LOG="=== Error lines ===
$ERROR_LINES
=== Last 500 lines ===
$FAILURE_LOG"
fi
else
FAILURE_LOG=$(tmux capture-pane -t "$TASK_ID" -p -S -200)
fi
CI_LOG=$(gh pr checks "$PR_NUM" 2>/dev/null || echo "no PR yet")
tmux kill-session -t "$TASK_ID" 2>/dev/null
# Archive old log, start fresh for retry
[ -f "$LOG_FILE" ] && mv "$LOG_FILE" "${LOG_FILE}.retry$((RETRY - 1))"
# Respawn — set up pipe-pane BEFORE sending command (captures all output)
tmux new-session -d -s "$TASK_ID" -c "$WORKTREE"
tmux pipe-pane -t "$TASK_ID" -o "sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' >> $LOG_FILE"
tmux send-keys -t "$TASK_ID" "claude --dangerously-skip-permissions \
'Previous attempt failed. Error output:
$FAILURE_LOG
CI status: $CI_LOG
Fix the issues above and complete the original task.
[...your enriched instructions here...]
When done: commit, push, gh pr create --fill, then run:
openclaw system event --text \"Done: $TASK_ID (retry $RETRY)\" --mode now'" Enter
# Update registry with flock
PANE_PID=$(tmux display-message -t "$TASK_ID" -p '#{pane_pid}')
(
flock -x 200
jq --arg id "$TASK_ID" --argjson r "$RETRY" --arg pane_pid "$PANE_PID" \
'(.tasks[] | select(.id == $id)) |= (.retries = $r | .status = "running" | .panePid = ($pane_pid | tonumber) | .silentRounds = 0 | .repeatingRounds = 0 | .lastOutputHash = "")' \
"$TASKS_FILE" > /tmp/tasks.$$.json && mv /tmp/tasks.$$.json "$TASKS_FILE"
) 200>"$TASKS_FILE.lock"Run multiple agents simultaneously on different tasks.
Important: Always set up pipe-pane before sending the command to avoid losing
early output. Use ANSI stripping for clean logs.
# Helper: launch an agent in tmux with proper output capture
launch_agent() {
local TASK_ID="$1" WORKTREE="$2" PROMPT="$3"
local LOG_FILE="$WORKTREE/claude-output.log"
# 1. Create session with idle shell
tmux new-session -d -s "$TASK_ID" -c "$WORKTREE"
# 2. Start pipe-pane BEFORE command (captures everything, ANSI-stripped)
tmux pipe-pane -t "$TASK_ID" -o "sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' >> $LOG_FILE"
# 3. Send command
tmux send-keys -t "$TASK_ID" "$PROMPT" Enter
}
# Task 1: Feature
git worktree add -b feat/auth /tmp/worktrees/feat-auth origin/main
launch_agent "feat-auth" "/tmp/worktrees/feat-auth" \
"cd /tmp/worktrees/feat-auth && pnpm install && claude --dangerously-skip-permissions 'Implement JWT auth...'"
# Task 2: Bugfix
git worktree add -b fix/payments /tmp/worktrees/fix-payments origin/main
launch_agent "fix-payments" "/tmp/worktrees/fix-payments" \
"cd /tmp/worktrees/fix-payments && pnpm install && claude --dangerously-skip-permissions 'Fix payment webhook...'"
# Dashboard: check all agents (uses process check, not just has-session)
echo "=== Agent Status ==="
for s in $(tmux ls -F '#{session_name}' 2>/dev/null); do
PANE_PID=$(tmux display-message -t "$s" -p '#{pane_pid}' 2>/dev/null)
if [ -z "$PANE_PID" ]; then
STATUS="(session gone)"
elif pgrep -P "$PANE_PID" > /dev/null 2>&1; then
STATUS="running"
else
STATUS="process exited"
fi
LOG="/tmp/worktrees/$s/claude-output.log"
LAST_LINE=$(tail -1 "$LOG" 2>/dev/null || echo "(no log)")
echo " $s: $STATUS | last: $LAST_LINE"
doneFor complex tasks that need iterative refinement:
# Start session, capture ID
session_id=$(claude -p "analyze the codebase architecture" \
--output-format json | jq -r '.session_id')
# Continue with context from previous turn
claude -r "$session_id" -p "now implement the changes we discussed" \
--dangerously-skip-permissions
# Resume in non-interactive mode
claude -r "$session_id" -p "fix the remaining test failures" \
--dangerously-skip-permissionsSee references/examples.md for additional usage scenarios.
© LeoYeAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (references) in skills/claude-skill of LeoYeAI/openclaw-master-skills.
Open the folder on GitHubat commit e5199b5
Claude Skill next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Claude Skill this skillLeoYeAI/openclaw-master-skills | 2.2k | — | ~5.2k | Automated safety check: Pass | MIT | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Code Review ChecklistshareAI-lab/learn-claude-code | 78k | 5 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Backend Code Reviewlangflow-ai/langflow | 155k | — | ~3.5k | Automated safety check: Notes | MIT | |
| Mole Bug Patternstw93/Mole | 70k | — | ~2k | Automated safety check: Pass | GPL-3.0 | |
| Backend Code Reviewlanggenius/dify | 158k | — | ~676 | Automated safety check: Pass | Custom licence |
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
shareAI-lab/learn-claude-code
Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.
langflow-ai/langflow
Review backend code for quality, security, maintainability, and best practices based on established checklist rules.
tw93/Mole
A catalog of recurring bug shapes in the Mole Mac cleaner, used to review safety-sensitive diffs for deletion safety, unbounded commands, shell traps and weak tests.
langgenius/dify
Reviews backend code under api/ for concrete, reproducible defects, routes to rule packs for architecture, schema, repositories and SQLAlchemy, and ranks findings from P0 to P3.
woocommerce/woocommerce
Reviews WooCommerce code changes against the project's standards, flagging backend PHP architecture, naming, documentation, data integrity and testing violations.
LeoYeAI/openclaw-master-skills
Manages pipelines on a DevOps quality and efficiency platform through its OpenAPI: list workspaces and templates, create, update, run and cancel pipelines, and read run records.
LeoYeAI/openclaw-master-skills
Patches OpenClaw's Feishu extension so an edited document triggers an isolated agent session that reads the doc and replies inline, turning it into a live chat space.
LeoYeAI/openclaw-master-skills
Multi-context memory management system for OpenClaw agents with group-isolated storage, global shared memory, workspace organization, and group-specific skills isolation.
LeoYeAI/openclaw-master-skills
Runs a brand's AI-search visibility work end to end: diagnosing how AI platforms represent it, repositioning it, producing AI-optimized content and monitoring ongoing mentions.
LeoYeAI/openclaw-master-skills
Installs and authenticates the gws CLI, then automates Gmail, Drive, Sheets, Calendar, Docs, Chat and Tasks with ready-made recipes, persona bundles and security audits.
LeoYeAI/openclaw-master-skills
Runs four advisor roles, a fitness coach, nutritionist, data analyst and TCM practitioner, to build a health profile and track workouts, diet and wellness over time.
Categories
A skill your agent uses when user asks to leverage claude or claude code to do something (e.g. Claude Skill is an agent skill from LeoYeAI/openclaw-master-skills.g.
Claude Skill fits situations like: user asks to leverage claude; Claude code to do something (e.g.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill claude-skill -a claude-code`. Or copy the skill folder (skills/claude-skill in LeoYeAI/openclaw-master-skills) into .claude/skills/claude-skill in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill claude-skill -a codex`. Or copy the skill folder (skills/claude-skill in LeoYeAI/openclaw-master-skills) into .agents/skills/claude-skill in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LeoYeAI/openclaw-master-skills --skill claude-skill -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/claude-skill, .gemini/skills/claude-skill, .github/skills/claude-skill and .opencode/skills/claude-skill in your project.
Going by SKILL.md and its folder, Claude Skill needs the command-line tools its instructions call (claude, jq, git, gh, pnpm and codex). Our summary lists: Python 3; Node.js.
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Claude Skill is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 807 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Claude Skill: PR Babysitter (openinterpreter/openinterpreter, 69k stars), Code Review Checklist (shareAI-lab/learn-claude-code, 78k stars), Backend Code Review (langflow-ai/langflow, 155k stars) and Mole Bug Patterns (tw93/Mole, 70k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LeoYeAI (a GitHub user) maintains it in LeoYeAI/openclaw-master-skills, which has 2,160 GitHub stars. The repository holds 1,235 skills in this directory. The repository was last updated on July 20, 2026.
Source: LeoYeAI/openclaw-master-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.