---
name: pumpfun-bounties-hermes
description: >-
  Automate Pump.fun social bounties with HermesAgent. Discovers open bounties,
  drafts tweets and threads from briefs, posts via connected X account, and
  submits proof URLs. Use when running scheduled bounty hunts or when the user
  asks to complete a Pump.fun social bounty.
---

# Pump.fun Bounties for HermesAgent

HermesAgent skill for automating **social deliverables** on Pump.fun bounty
boards: tweet tasks, quote-retweets, meme captions, and thread submissions.

## When to use this skill

- User asks to "run bounties", "check pump.fun bounties", or "complete a tweet bounty"
- A scheduled cron triggers `pumpfun-bounties-hermes`
- A bounty brief mentions X/Twitter deliverables (tweet, thread, QT, meme)

Do **not** use for on-chain proofs, wallet signing, or holder snapshots.
Use the OpenClaw skill instead.

## Prerequisites

| Variable | Required | Description |
|----------|----------|-------------|
| `PUMPFUN_API_KEY` | Yes | Pump.fun API key for bounty feed access |
| `X_BEARER_TOKEN` | Yes | X API v2 bearer token for posting |
| `X_ACCOUNT_ID` | Yes | Connected account ID |
| `BOUNTY_MIN_REWARD_SOL` | No | Minimum reward filter (default: `0.05`) |
| `BOUNTY_MAX_ACTIVE` | No | Max concurrent submissions (default: `3`) |

## Bounty lifecycle

### 1. Discover

Poll the bounty feed every 6 hours (or on manual invoke):

```bash
GET https://frontend-api.pump.fun/bounties?status=open&sort=reward_desc
```

Filter bounties where:

- `reward_sol >= BOUNTY_MIN_REWARD_SOL`
- `deliverable_type` is `tweet`, `thread`, `meme`, or `quote_retweet`
- `deadline` is more than 2 hours away
- Bounty ID is not in `~/.bountyos/completed.json`

### 2. Parse brief

Extract structured fields from each bounty `description`:

- **Token**: `$TICKER`, contract address, pump.fun link
- **Deliverable**: tweet text constraints, hashtag requirements, media rules
- **Proof**: URL format expected by submit endpoint
- **Restrictions**: "no bots", "original content only", min follower count

If the brief is ambiguous, skip and log to `~/.bountyos/skipped.json`.

### 3. Draft content

Generate deliverables matching the brief:

- **Tweet**: ≤280 chars unless thread specified. Include required `$TICKER` and hashtags verbatim.
- **Thread**: 3 to 7 tweets. First tweet hooks; last tweet includes pump.fun link.
- **Meme**: Draft caption only; attach image from `assets/` if brief allows templates.
- **Quote retweet**: Draft commentary (≥50 chars) referencing the linked tweet.

Tone: concise, CT-native, no financial advice disclaimers unless brief requires.

### 4. Post and submit proof

1. Post via X API v2 (`POST /2/tweets`)
2. Capture `tweet_id` and construct proof URL: `https://x.com/i/status/{tweet_id}`
3. Submit to Pump.fun:

```bash
POST https://frontend-api.pump.fun/bounties/{bounty_id}/submit
Content-Type: application/json

{
  "proof_url": "https://x.com/i/status/...",
  "agent": "hermesagent",
  "metadata": { "tweet_id": "..." }
}
```

### 5. Track and claim

- Append bounty ID + tx pending status to `~/.bountyos/active.json`
- Poll submission status until `approved` or `rejected`
- On approval, record payout signature in `~/.bountyos/completed.json`
- On rejection, log reason and do not retry the same bounty

## File layout

```
~/.bountyos/
├── completed.json    # { bounty_id, payout_sig, completed_at }
├── active.json       # in-flight submissions
├── skipped.json      # skipped with reason
└── logs/
    └── YYYY-MM-DD.jsonl
```

## Safety rules

- Never post content that violates X automation policies or Pump.fun ToS
- Never exceed `BOUNTY_MAX_ACTIVE` concurrent submissions
- Never reuse tweet text across different token bounties
- Confirm with user before posting if `reward_sol > 1.0`
- Rate-limit X API calls: max 50 posts per 24h

## Example invocation

```
User: Run the pump.fun bounty scanner and complete any tweet bounties over 0.1 SOL

Agent:
1. Load pumpfun-bounties-hermes skill
2. Fetch open bounties, filter social deliverables ≥ 0.1 SOL
3. Draft and post highest-reward eligible bounty
4. Submit proof URL
5. Report bounty ID, tweet link, and pending approval status
```

## Troubleshooting

| Error | Action |
|-------|--------|
| `403` on bounty feed | Rotate `PUMPFUN_API_KEY` |
| `429` on X API | Back off 15 min, reduce batch size |
| `submission_rejected` | Read `rejection_reason`, do not auto-retry |
| Duplicate content flag | Regenerate with different hook angle |
