Skill: dagangtj/auto-bounty-hunter (version 1.0.0)

--- name: github-bounty-hunter description: Automatically scan GitHub repositories for open issues with 0 comments, evaluate their value, claim them, and submit PRs. Automates the entire GitHub bounty hunting workflow for passive income generation. Use when the user wants to find and complete GitHub issues for money, automate bounty hunting, or set up passive income from open source contributions. --- # GitHub Bounty Hunter Automate the entire GitHub bounty hunting workflow: scan for opportunities, evaluate value, claim issues, and submit PRs. ## What This Skill Does 1. **Scans** GitHub for 0-comment issues (first-mover advantage) 2. **Evaluates** issue value and complexity 3. **Claims** viable issues automatically 4. **Submits** PRs with quality implementations 5. **Tracks** submissions and monitors merge status ## Usage ### Quick Start ```bash # Scan and process issues automatically bash scripts/bounty_hunter.sh ``` ### Configuration Edit `scripts/config.sh` to customize: ```bash MIN_VALUE=10 # Minimum estimated value ($) MAX_COMPLEXITY=5 # Max complexity (1-10 scale) AUTO_CLAIM=true # Auto-claim issues AUTO_SUBMIT=true # Auto-submit PRs ``` ### Automated Operation Set up cron for continuous scanning: ```bash # Every 30 minutes */30 * * * * bash ~/.openclaw/workspace/skills/github-bounty-hunter/scripts/bounty_hunter.sh ``` ## How It Works 1. **Discovery**: Searches GitHub for `is:issue is:open comments:0` 2. **Filtering**: Removes spam, duplicates, and low-value issues 3. **Evaluation**: Scores based on: - Repository stars/activity - Issue clarity and scope - Estimated time to complete - Potential payout 4. **Claiming**: Comments on issue to claim it 5. **Implementation**: Generates solution and submits PR 6. **Tracking**: Monitors PR status and merge events ## Scripts - `bounty_hunter.sh` - Main automation script - `config.sh` - Configuration settings - `evaluator.sh` - Issue value evaluation - `tracker.sh` - PR status tracking ## Best Practices - Start with `AUTO_CLAIM=false` to review opportunities first - Focus on repositories with clear contribution guidelines - Maintain high PR quality to build reputation - Track merge rate and adjust strategy ## Revenue Potential - **Conservative**: $50-200/month (5-10 merged PRs) - **Moderate**: $200-500/month (10-25 merged PRs) - **Aggressive**: $500-1000/month (25-50 merged PRs) Success depends on: - PR quality and merge rate - Time invested - Repository selection - Market conditions

path: scripts/bounty_hunter.sh
content: #!/bin/bash
# GitHub Bounty Hunter - Main Script

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SKILL_DIR="$(dirname "$SCRIPT_DIR")"

# Load config
source "${SCRIPT_DIR}/config.sh"

# Create data directory
mkdir -p "${SKILL_DIR}/data"

log() {
    echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] $*" | tee -a "$LOG_FILE"
}

# Scan for 0-comment issues
scan_issues() {
    log "Scanning for 0-comment issues..."
    
    gh search issues \
        --limit "$MAX_ISSUES_PER_SCAN" \
        --json url,title,repository,createdAt \
        "is:issue is:open comments:0 language:${LANGUAGES// /,}" \
        2>/dev/null || echo "[]"
}

# Evaluate issue value
evaluate_issue() {
    local issue_url="$1"
    local repo="${issue_url#https://github.com/}"
    repo="${repo%/issues/*}"
    
    # Get repo info
    local stars=$(gh repo view "$repo" --json stargazersCount -q .stargazersCount 2>/dev/null || echo 0)
    
    # Skip low-star repos
    if [ "$stars" -lt "$MIN_REPO_STARS" ]; then
        echo "SKIP: Low stars ($stars)"
        return 1
    fi
    
    # Skip blacklisted orgs
    local org="${repo%%/*}"
    if [[ ",$SKIP_ORGS," == *",$org,"* ]]; then
        echo "SKIP: Blacklisted org ($org)"
        return 1
    fi
    
    echo "PROCESS: Stars=$stars"
    return 0
}

# Add to queue
add_to_queue() {
    local issue_url="$1"
    local title="$2"
    
    # Initialize queue if needed
    [ ! -f "$QUEUE_FILE" ] && echo "[]" > "$QUEUE_FILE"
    
    # Check if already in queue
    if jq -e --arg url "$issue_url" '.[] | select(.url == $url)' "$QUEUE_FILE" >/dev/null 2>&1; then
        log "Already in queue: $issue_url"
        return 0
    fi
    
    # Add to queue
    local entry=$(jq -n \
        --arg url "$issue_url" \
        --arg title "$title" \
        --arg added "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
        '{url: $url, title: $title, added: $added, status: "pending"}')
    
    jq --argjson entry "$entry" '. += [$entry]' "$QUEUE_FILE" > "${QUEUE_FILE}.tmp"
    mv "${QUEUE_FILE}.tmp" "$QUEUE_FILE"
    
    log "Added to queue: $title"
}

# Main
main() {
    log "=== GitHub Bounty Hunter v1.0 ==="
    
    if [ "$DRY_RUN" = true ]; then
        log "DRY RUN MODE - No actions will be taken"
    fi
    
    # Scan for issues
    local issues=$(scan_issues)
    local count=$(echo "$issues" | jq 'length')
    
    log "Found $count issues"
    
    if [ "$count" -eq 0 ]; then
        log "No issues found"
        return 0
    fi
    
    # Process each issue
    echo "$issues" | jq -c '.[]' | while read -r issue; do
        local url=$(echo "$issue" | jq -r '.url')
        local title=$(echo "$issue" | jq -r '.title')
        
        log "Evaluating: $title"
        
        if evaluate_issue "$url"; then
            add_to_queue "$url" "$title"
        fi
    done
    
    log "=== Scan complete ==="
}

main "$@"


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)