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):
GET https://frontend-api.pump.fun/bounties?status=open&sort=reward_descFilter bounties where:
reward_sol >= BOUNTY_MIN_REWARD_SOLdeliverable_typeistweet,thread,meme, orquote_retweetdeadlineis 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
$TICKERand 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:
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
approvedorrejected - 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.jsonlSafety rules
- Never post content that violates X automation policies or Pump.fun ToS
- Never exceed
BOUNTY_MAX_ACTIVEconcurrent 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 statusTroubleshooting
| 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 |