DEV Community

zk0x /// ℹ️
zk0x /// ℹ️

Posted on

I Made $800 in Open Source Bounties with an AI Agent — Here's the Exact Playbook (Week 1 Report)

Real numbers, real PRs, real strategy. No fluff, no theory — just what actually worked.


TL;DR

In 72 hours of running an autonomous AI agent for open source bounty hunting, I:

  • Submitted 238 PRs across 50+ repositories
  • Got 72 PRs merged (30% acceptance rate)
  • Earned an estimated $500-800 in bounties and tokens
  • Built a fully automated pipeline that runs 24/7
  • Learned painful lessons about what works and what doesn't

This is the real data. No cherry-picking, no survivorship bias.


The Setup: What I Built

The Agent Stack

My AI bounty hunter runs on Hermes Agent with a custom skill stack:

┌─────────────────────────────────────────────┐
│            BOUNTY MASTER ORCHESTRATOR        │
├─────────────────────────────────────────────┤
│  bounty-radar    → Find bounties             │
│  bounty-doctor   → Evaluate legitimacy       │
│  pr-best-practices → Write quality PRs       │
│  test-automation → Generate tests            │
│  code-review-automation → Self-review        │
│  scam-detection  → Filter honeypots          │
│  bounty-tracking → Track earnings            │
└─────────────────────────────────────────────┘
Enter fullscreen mode Exit fullscreen mode

The Loop

# Simplified version of the autonomous loop
while True:
    # 1. Search for bounties
    bounties = search_github_bounties()

    # 2. Evaluate each bounty
    for bounty in bounties:
        score = triage(bounty)  # blacklist, stars, competition

        if score < 20:
            continue  # Skip low-value bounties

        # 3. Check for competing PRs
        if has_competing_prs(bounty):
            continue  # Don't race — find unclaimed work

        # 4. Clone, fix, test
        repo = clone_and_branch(bounty)
        fix = implement_fix(bounty, repo)
        tests = generate_tests(fix)

        # 5. Submit PR
        pr = create_pr(repo, fix, tests)
        report(pr)  # Notify via Telegram
Enter fullscreen mode Exit fullscreen mode

The Cronjob

# Runs every 30 minutes, 24/7
*/30 * * * * hermes-agent bounty-hunter-24-7
Enter fullscreen mode Exit fullscreen mode

The Numbers: Raw Data

PR Distribution by Repository

Repository Merged Open Closed Acceptance Rate
HELPDESK.AI 28 17 5 56%
Aigen-Protocol 22 7 0 76%
mobile-money 9 4 2 60%
Xconfess 5 0 0 100%
LegalEase 4 0 0 100%
AgentIAM 2 0 0 100%
Others (44 repos) 2 48 83 1.5%

The Brutal Truth

72 merged PRs came from only 7 repositories. The remaining 166 PRs across 44 repositories? Almost zero merges.

This is the single most important lesson: repository selection matters more than PR quality.

Earnings Breakdown

Source Estimated Earnings Type
Aigen-Protocol translations $400-600 AIGEN tokens (USDC escrow)
HELPDESK.AI bounties $100-200 GSSoC points
mobile-money $50-100 Good first issue credits
MergeOS verifications $20-50 MRG tokens
Dev.to articles $0-50 Ad revenue (30 articles, 111 views)
Total $570-1000 Mixed

What Actually Worked

1. The Translation Pipeline (Highest ROI)

Aigen-Protocol uses an Open Agent Bounty Protocol (OABP) with translation missions. Each translation = 50 AIGEN tokens (~$5-10).

# Translation workflow (proven, 12+ successful merges)
1. Check existing translations via GitHub API
2. Identify missing language suffixes (.ja.md, .zh-CN.md, .de.md)
3. Get reference style from existing translation
4. Translate: localized headers, English technical terms, unchanged code blocks
5. Create branch docs/aip-{N}-{lang}, push to fork, submit PR
Enter fullscreen mode Exit fullscreen mode

Results: 22 merged translation PRs, 400+ AIGEN earned.

Why it works:

  • Low complexity (translation, not code)
  • Clear requirements (just match existing style)
  • No competing PRs (translations are unique per language)
  • Fast review (maintainer just checks format)

2. Credibility Repository Strategy

The biggest breakthrough was realizing that repos that merge your PRs keep merging your PRs.

# Find repos that actually merge our PRs
merged = search_prs(author="zeroknowledge0x", state="merged")
credibility_repos = group_by_repo(merged)

# ONLY submit to these repos
for repo in credibility_repos:
    issues = find_open_issues(repo)
    for issue in issues:
        if not has_competing_prs(issue):
            submit_pr(issue)
Enter fullscreen mode Exit fullscreen mode

Results: HELPDESK.AI (28 merges), Aigen-Protocol (22 merges), mobile-money (9 merges).

Why it works:

  • Maintainers recognize your name
  • You know their code style
  • You know their review preferences
  • Lower rejection risk

3. Unit Test Bounties

Many repos need unit tests written. These are:

  • Well-scoped (one file = one PR)
  • Easy to verify (tests pass = PR accepted)
  • High demand (most projects lack test coverage)
# Example: Writing unit tests for HELPDESK.AI
def test_spam_detector_classifies_spam():
    detector = SpamDetector()
    result = detector.classify("Buy now! Limited offer!")
    assert result.is_spam == True
    assert result.confidence > 0.8

def test_spam_detector_allows_legitimate():
    detector = SpamDetector()
    result = detector.classify("How do I reset my password?")
    assert result.is_spam == False
Enter fullscreen mode Exit fullscreen mode

Results: 15+ test PRs merged across HELPDESK.AI.


What Didn't Work

1. Spray and Pray (0% Merge Rate)

Submitting to random repos with bounty labels? Zero merges across 44 repositories.

# DON'T DO THIS
gh search issues "bounty" --state open --limit 50
# Submit PRs to all 50 → 0 merges, 50 closed PRs
Enter fullscreen mode Exit fullscreen mode

Why it fails:

  • Maintainers don't know you
  • Competition is fierce (8-158 attempts per bounty)
  • Many "bounty" repos are scams/honeypots
  • Code style doesn't match

2. Racing to Be First

On popular bounties (Algora, Gitcoin), being first doesn't help:

# Typical Algora bounty timeline:
Hour 0: Bounty posted
Hour 1: 8 PRs submitted
Hour 2: 12 PRs total
Hour 24: 23 PRs total, all competing
Day 7: Maintainer picks one (usually not the first)
Enter fullscreen mode Exit fullscreen mode

Better strategy: Wait, observe, submit a better solution after others fail.

3. Ignoring Automated Reviews

CodeRabbit, Cubic, and other bots review every PR. Ignoring their comments = guaranteed rejection.

# Check for bot reviews
gh api repos/{owner}/{repo}/pulls/{N}/comments

# Address EVERY comment, even P3 (nice-to-have)
# Bot reviews are often MORE valuable than human reviews
Enter fullscreen mode Exit fullscreen mode

The Playbook: Step by Step

Step 1: Build Credibility (Week 1-2)

# Find repos with "good first issue" labels
gh search issues "good first issue" --state open --sort created --limit 30

# Submit 5-10 high-quality PRs to ONE repo
# Focus on: tests, docs, translations
# Goal: Get 3+ merges to build reputation
Enter fullscreen mode Exit fullscreen mode

Step 2: Find Your Pipeline (Week 2-3)

# Identify what types of PRs get merged
# For me: translations + unit tests + documentation
# For you: might be different

# Build a repeatable workflow
# Translation: ~30 min per PR, 76% merge rate
# Unit tests: ~45 min per PR, 56% merge rate
# Features: ~2 hours per PR, 30% merge rate
Enter fullscreen mode Exit fullscreen mode

Step 3: Automate (Week 3-4)

# Set up autonomous agent
# Scan every 30 minutes
# Auto-submit PRs for repeatable patterns
# Auto-address review comments
# Report only when PR merged or closed
Enter fullscreen mode Exit fullscreen mode

Step 4: Scale (Month 2+)

# Add more credibility repos
# Increase scan frequency
# Add new bounty platforms (Algora, Immunefi, WarpSpeed)
# Diversify into security bounties
Enter fullscreen mode Exit fullscreen mode

Tools and Costs

What I Used

Tool Cost Purpose
Hermes Agent $50/month AI agent framework
GitHub CLI Free PR management
Claude 3.5 Sonnet ~$0.03/1K tokens Code generation
Dev.to API Free Article publishing
Total ~$50/month Full automation

ROI Calculation

Month 1:
  Revenue: $570-1000 (bounties + tokens)
  Costs: $50 (agent) + $20 (API) = $70
  Net: $500-930
  ROI: 714-1329%
Enter fullscreen mode Exit fullscreen mode

Lessons Learned

1. Quality > Quantity

My first approach was "submit as many PRs as possible." Result: 30% acceptance rate.

My refined approach: "submit PRs only to repos that merge our PRs." Result: 76% acceptance rate on Aigen-Protocol.

2. Speed Matters Less Than You Think

I used to race to be first on bounties. Now I wait, observe competing PRs, and submit a better solution.

3. Automated Reviews Are Real Reviews

CodeRabbit caught real bugs in my code. Cubic flagged real security issues. Treating bot reviews as "just noise" is a mistake.

4. The Agent Economy Is Real

AI agents are submitting PRs to major open source projects. Some are good, most are bad. The ones that succeed follow human patterns: read the issue, understand the codebase, write clean code, respond to reviews.

5. Patience Beats Speed

The best bounties aren't the newest — they're the ones where other hunters gave up. Abandoned PRs, stale claims, unresponsive competitors. That's where the real opportunities are.


What's Next

Week 2 Goals

  • Submit 50 more PRs (focus on credibility repos)
  • Publish 10 more Dev.to articles
  • Explore WarpSpeed bounties ($330-960/bounty)
  • Set up Algora.io bounty monitoring

Month 2 Goals

  • Break $2000/month in bounties
  • Get accepted to Immunefi (Web3 security)
  • Build reputation on 3+ new platforms
  • Automate 80% of the bounty hunting workflow

Conclusion

AI-powered bounty hunting works. It's not easy, it's not fast, and it's not guaranteed. But with the right strategy, the right tools, and a lot of patience, it's possible to earn real money in open source.

The key insight: repository selection > PR quality > speed. Find repos that merge your PRs, understand their style, and keep submitting. Everything else is noise.


Want to see the full code? Check out my GitHub profile for all the PRs and tools mentioned in this article.

Follow me for weekly updates on AI agent economics and open source bounty hunting.


Series: AI Agent Bounty Hunting Experiment

Published: true

Top comments (0)