fix: simplify game plan

This commit is contained in:
Timothy
2026-03-04 19:15:27 -08:00
parent 93e270dafb
commit c7a47c71f0
8 changed files with 247 additions and 867 deletions
@@ -16,14 +16,9 @@ body:
attributes: attributes:
label: Bounty Type label: Bounty Type
options: options:
- "Smoke Test (10 pts)" - "Test a Tool (20 pts)"
- "Agent Test Report (30 pts)" - "Write Docs (20 pts)"
- "Edge Case Report (15 pts)" - "Code Contribution (30 pts)"
- "Write README (20 pts)"
- "Add Health Checker (25 pts)"
- "Add Health Check Endpoint (10 pts)"
- "Bug Fix (40 pts)"
- "Complete Promotion Checklist (50 pts)"
- "New Integration (75 pts)" - "New Integration (75 pts)"
validations: validations:
required: true required: true
+71 -288
View File
@@ -1,314 +1,111 @@
# Integration Bounty Program # Integration Bounty Program
Gamified contribution program for expanding and hardening Aden's integration ecosystem. Community members earn points by testing, documenting, and building integrations — with monetary rewards unlocked at the Core Contributor tier. Earn XP, Discord roles, and money by testing, documenting, and building integrations for the Aden agent framework.
## Why Contribute? ## Why Contribute?
### Visible Status **Your name in the product.** When you promote a tool to verified, your GitHub handle goes in the tool's README under `Contributed by`. Every agent that uses that integration carries your name — permanent credit in a production codebase.
Every Discord message you send shows your tier role and badges. When someone asks a question in `#integrations-help` and you answer it with a **Core Contributor** badge, people listen. Your role is earned, not bought. **Visible status.** Your Discord tier role is earned, not bought. When you answer a question in `#integrations-help` with a Core Contributor badge, people listen.
### Your Name in the Product **Weekly races.** Every Monday the bot posts the leaderboard. Top 3 get medal emojis. The best work gets highlighted in announcements.
When you promote a tool to verified, your GitHub handle goes in the tool's README under `Contributed by`. Every agent that uses that integration carries your name. This is permanent credit in a production codebase — not a profile badge that disappears. **The path to paid.** Core Contributor unlocks real money. It takes sustained quality work across testing, docs, and code — the scarcity makes it matter.
### Weekly Races ## How It Works
Every Monday the bot posts the leaderboard. The top 3 get medal emojis next to their name all week. There's a `#integration-showcase` channel where people demo agents using the tools they tested — the best demos get pinned and highlighted in announcements. 1. Pick a bounty from the [GitHub issues board](https://github.com/adenhq/hive/issues?q=is%3Aissue+is%3Aopen+label%3A%22bounty%3A*%22)
2. Claim it by commenting on the issue
### The Path to Paid 3. Do the work and submit a PR (or test report)
4. A maintainer reviews and merges
Core Contributor unlocks real money. But you can't buy your way in — it takes sustained quality work across testing, docs, and code. The scarcity makes it matter. When you see someone with Core Contributor status, you know they've shipped real integrations. 5. You automatically get XP in Discord via Lurkr
6. At certain levels, you unlock roles. At the top tier, you unlock paid bounties.
### Streaks
Consecutive weeks with at least one bounty completion earns streak multipliers:
| Streak | Multiplier | Example |
|--------|-----------|---------|
| 2 weeks | 1.1x | 20pt README = 22 pts |
| 4 weeks | 1.25x | 30pt agent test = 37 pts |
| 8+ weeks | 1.5x | 75pt new tool = 112 pts |
Missing a week resets the streak. This rewards consistency over bursts.
### Achievement Badges
Unlocked permanently and displayed on your Discord profile via bot roles:
| Badge | Requirement | Role Color |
|-------|-------------|------------|
| **First Blood** | Complete your first bounty | — |
| **Bug Hunter** | Find and fix 3 bugs via testing | Red |
| **Docs Champion** | Write 5 tool READMEs | Yellow |
| **Health Inspector** | Add 5 health checkers | Orange |
| **Promoter** | Promote a tool from unverified to verified | Gold |
| **Full Stack** | Complete at least 1 bounty of every type | Rainbow |
| **Ironman** | 8-week contribution streak | — |
## Tiers ## Tiers
| Tier | How to Reach | What You See | Rewards | | Tier | How to Reach | Rewards |
|------|-------------|--------------|---------| |------|-------------|---------|
| **Agent Builder** | Join Discord + start testing | Bounty board with point values | Discord role, community recognition, achievement badges | | **Agent Builder** | ~500 XP (Lurkr level 5) | Discord role, bounty board access |
| **Open Source Contributor** | First merged PR | Bounty board with point values | Discord role, listed in CONTRIBUTORS.md, name in tool READMEs | | **Open Source Contributor** | ~2,000 XP (Lurkr level 15) | Discord role, name in CONTRIBUTORS.md and tool READMEs |
| **Core Contributor** | Maintainer-approved promotion | Bounty board with **dollar values** | Monetary payout per completed bounty, private dev channel | | **Core Contributor** | Maintainer-approved | Monetary payout per bounty, private `#bounty-payouts` channel |
### Core Contributor Promotion Lurkr auto-assigns the first two roles. Core Contributor requires sustained, quality contributions across multiple bounty types and a maintainer vouching for you.
Core Contributor status is **maintainer-approved** and requires: ## Bounty Types
1. **Sustained contribution** — consistent activity over multiple weeks, not a one-time burst | Type | Label | Points | What You Do |
2. **Breadth** — contributions across multiple activity types (not just 20 READMEs) |------|-------|--------|-------------|
3. **Quality** — history of clean PRs that pass CI without excessive back-and-forth | **Test a tool** | `bounty:test` | 20 | Test with a real API key, submit a report with logs |
4. **Maintainer nomination** — at least one maintainer vouches for the contributor | **Write docs** | `bounty:docs` | 20 | Write a README following the [template](templates/tool-readme-template.md) |
| **Code contribution** | `bounty:code` | 30 | Add health checker, fix a bug, or improve an integration |
| **New integration** | `bounty:new-tool` | 75 | Build a complete integration from scratch |
Core Contributors see dollar values on bounty issues via a private Discord channel. Payouts happen per completed bounty after the PR is merged and approved by a maintainer. Promoting a tool from unverified to verified is the final step — submit a PR moving it from `_register_unverified()` to `_register_verified()` after the [promotion checklist](promotion-checklist.md) is complete.
## Point System
### Testing (Highest Priority)
These are the most valuable contributions — testing integrations with real API keys and real agents is the bottleneck for promoting tools from unverified to verified.
| Activity | Points | Requirements |
|----------|--------|-------------|
| **Smoke Test** | 10 | Run a tool with a real API key, submit a pass/fail report with logs |
| **Agent Test Report** | 30 | Build an agent using an unverified tool, submit a structured test report with session ID |
| **Edge Case Report** | 15 | Document a specific edge case (rate limits, auth expiry, malformed data, etc.) |
| **Live Demo** | 25 | Record a short video/GIF of an integration working in an agent |
### Code Contributions
| Activity | Points | Requirements |
|----------|--------|-------------|
| **Bug Fix PR** | 40 | Fix a bug found during testing, merged PR |
| **Add Health Checker** | 25 | Implement health check class + register in HEALTH_CHECKERS, merged PR |
| **Add health_check_endpoint** | 10 | Research correct endpoint, add to CredentialSpec, merged PR |
| **Write README** | 20 | Add missing README following the [tool README template](templates/tool-readme-template.md), merged PR |
| **Complete Promotion Checklist** | 50 | Finish all items on the [promotion checklist](promotion-checklist.md) for a tool, merged PR |
| **New Integration** | 75 | Full implementation (tool + credential spec + tests + docs), merged PR |
### Community
| Activity | Points | Requirements |
|----------|--------|-------------|
| **PR Review** | 15 | Substantive code review on an integration PR (not just "LGTM") |
| **Help in Discord** | 5 | Answer an integration question (mod-verified) |
| **Propose Integration** | 5 | File a well-structured `[Integration]:` issue per existing template |
## Quality Gates ## Quality Gates
Points are only awarded after quality verification: - **PRs** must be merged by a maintainer (not self-merged)
- **Test reports** must follow the [test report template](templates/agent-test-report-template.md) with logs or session ID
- **READMEs** must follow the [tool README template](templates/tool-readme-template.md)
- **Claim before you start** — comment on the issue, wait for assignment
- No self-review, no splitting one change across multiple PRs, no AI-only submissions without verification
- **PRs**: Must be merged by a maintainer (not self-merged) ## Labels
- **Test reports**: Must follow the [test report template](templates/agent-test-report-template.md) with reproducible evidence (logs, session ID, screenshots)
- **Health checkers**: Must pass CI (`uv run pytest tools/tests/test_credential_registry.py`)
- **READMEs**: Must follow the [tool README template](templates/tool-readme-template.md)
- **Reviews**: Must include actionable feedback, not just approval
- **Bounties are claimed before work starts** — comment on the issue to claim, wait for maintainer assignment
### Anti-Gaming Rules
- No self-review on PRs
- A different maintainer must approve bounty completion than the one who created it
- Duplicate or near-duplicate submissions are rejected
- Low-effort submissions (copy-pasted from AI without verification) are rejected and may result in point deduction
- Splitting a single change across multiple PRs to farm points is not allowed
## Bounty Issues
Integration bounties are tracked as GitHub Issues with specific labels.
### Labels
| Label | Color | Meaning | | Label | Color | Meaning |
|-------|-------|---------| |-------|-------|---------|
| `bounty:smoke-test` | `#0E8A16` (green) | Run tool with real API key, report results | | `bounty:test` | `#1D76DB` (blue) | Test a tool with a real API key |
| `bounty:agent-test` | `#1D76DB` (blue) | Test tool in a real agent workflow |
| `bounty:docs` | `#FBCA04` (yellow) | Write or improve documentation | | `bounty:docs` | `#FBCA04` (yellow) | Write or improve documentation |
| `bounty:health-check` | `#D93F0B` (orange) | Add health check endpoint or checker | | `bounty:code` | `#D93F0B` (orange) | Health checker, bug fix, or improvement |
| `bounty:bug-fix` | `#B60205` (red) | Fix a discovered bug |
| `bounty:new-tool` | `#6F42C1` (purple) | Build a new integration from scratch | | `bounty:new-tool` | `#6F42C1` (purple) | Build a new integration from scratch |
| `bounty:promote` | `#C2A000` (gold) | Complete full promotion checklist |
| `difficulty:easy` | `#BFD4F2` | Good first contribution | | `difficulty:easy` | `#BFD4F2` | Good first contribution |
| `difficulty:medium` | `#D4C5F9` | Requires some familiarity | | `difficulty:medium` | `#D4C5F9` | Requires some familiarity |
| `difficulty:hard` | `#F9D0C4` | Significant effort or expertise needed | | `difficulty:hard` | `#F9D0C4` | Significant effort or expertise needed |
### Bounty Issue Structure ## Discord
Each bounty issue includes:
- **Activity type** (label)
- **Difficulty** (label)
- **Point value** (visible to all in issue body)
- **Dollar value** (visible only to Core Contributors via private Discord channel)
- **Acceptance criteria** (what "done" looks like)
- **Relevant files** (links to the tool directory, credential spec, etc.)
See the [bounty issue template](../.github/ISSUE_TEMPLATE/integration-bounty.yml) for the standard format.
## Discord Structure
``` ```
#integrations-announcements — New bounties, tool promotions, leaderboard updates #integrations-announcements — Bounties, leaderboard, tool promotions (bot + admin only)
#integrations-testingCoordinate who's testing what, share test reports #integrations-help Questions, testing coordination, showcases
#integrations-help — Get help with credential setup, tool development #bounty-payouts — Dollar values and payout tracking (Core Contributors only)
#integration-showcase — Demos of agents using integrations
# Private (Core Contributors only)
#bounty-payouts — Dollar values, payout tracking, claims
``` ```
## Leaderboard ## Leaderboard
Weekly leaderboard posted to `#integrations-announcements`: Weekly leaderboard auto-posts to `#integrations-announcements` every Monday. Top 3 get medal emojis. Check your rank anytime with `/rank` in Discord.
- Top 10 contributors by points (rolling 30 days)
- Top 10 contributors all-time
- Recently promoted tools (unverified -> verified)
- Number of open bounties by type
Tracking is done via GitHub labels on merged PRs and closed issues. Maintainers tag completed work with the appropriate `bounty:*` label and contributor handle. XP comes from two sources: GitHub bounties (auto-pushed on PR merge) and Discord activity in `#integrations-help`.
## Launch Plan: The 55-Tool Blitz ## Launch Plan: The 55-Tool Blitz
A 2-week sprint to get all 55 unverified tools tested, documented, and health-checked. All phases overlap — everything drops at once and runs in parallel. A 2-week sprint to get all 55 unverified tools tested, documented, and health-checked.
### Day 1: Launch Everything ### Day 1: Post Everything
Post all bounties simultaneously: - **41 `bounty:docs` issues** — tools missing READMEs, `difficulty:easy`, 20 pts each
- **40 `bounty:code` issues** — tools missing health checkers, `difficulty:medium`, 30 pts each
- **55 `bounty:test` issues** — one per unverified tool, `difficulty:medium`, 20 pts each
- **41 `bounty:docs` issues** — tools missing READMEs, `difficulty:easy`, 20 pts each. Provide the [tool README template](templates/tool-readme-template.md) ### Week 12
- **40 `bounty:health-check` issues** — tools missing health checkers, `difficulty:medium`, 25 pts each. Include example health checker code
- **55 `bounty:agent-test` issues** — one per unverified tool, `difficulty:medium`, 30 pts each. Provide a template agent to swap tools into
### Week 1: Blitz Week All bounty types open in parallel. Contributors self-select. Daily progress updates in `#integrations-announcements`. Day 14 wrap-up with final leaderboard and shoutouts.
- All bounty types are open — contributors self-select based on skill and interest
- Daily progress updates in `#integrations-announcements` ("12 READMEs done, 38 to go")
- **Mid-week milestone:** if 20+ docs are merged, announce "Health Check Bonus Weekend" — 1.5x points on `bounty:health-check` for Sat/Sun
### Week 2: Promotion Push
- Post `bounty:promote` issues for tools that have completed docs + health checks + testing
- `difficulty:hard`, 50 points each
- The contributor who completes the final checklist item gets the promotion bonus
- Each promoted tool gets an announcement in `#integrations-announcements`
- **Day 14 wrap-up:** final leaderboard, shoutouts for top contributors, recap of tools promoted
## Automation ## Automation
The bounty program runs on **GitHub Actions + Lurkr bot + Discord webhooks**. GitHub Actions calculate points from merged PRs, push XP to Lurkr via its API, and post notifications. Lurkr handles the Discord leveling, leaderboard display, and automatic role assignments.
### How It Works
``` ```
PR merged with bounty:* label PR merged with bounty:* label
→ GitHub Action fires bounty-tracker.ts → GitHub Action runs bounty-tracker.ts
Script calculates points from label Calculates points from label
Script resolves GitHub → Discord ID via contributors.yml Resolves GitHub → Discord ID via contributors.yml
Script calls Lurkr API: PATCH /levels/{guild}/users/{user} (+XP) Pushes XP to Lurkr API
Lurkr auto-assigns role rewards at XP thresholds Posts notification to #integrations-announcements
→ Script posts Discord webhook notification to #integrations-announcements
``` ```
One system, one leaderboard, one set of roles. Discord activity XP and GitHub bounty XP flow into the same Lurkr leveling system. See the [Setup Guide](setup-guide.md) for full configuration (Lurkr, webhooks, secrets, labels).
### GitHub Actions ### Identity Linking
| Workflow | Trigger | What It Does | Contributors link GitHub ↔ Discord by adding themselves to `contributors.yml`:
|----------|---------|-------------|
| `bounty-completed.yml` | PR merged with `bounty:*` label | Calculates points, pushes XP to Lurkr, posts Discord notification |
| `weekly-leaderboard.yml` | Every Monday 9:00 UTC (or manual) | Generates leaderboard from all merged bounty PRs, posts to Discord |
Both use `scripts/bounty-tracker.ts` (Bun/TypeScript) which:
- Reads `bounty:*` labels from merged PRs to calculate points
- Resolves GitHub username → Discord ID via `contributors.yml`
- Calls Lurkr API to atomically increment XP: `PATCH /levels/{guildId}/users/{userId}` with `{"xp": {"increment": N}}`
- Posts formatted messages to Discord via webhook
### Lurkr Bot Setup
[Lurkr](https://lurkr.gg/) is a free, no-paywall leveling bot with a full REST API that accepts external XP pushes — the only major leveling bot that supports this.
#### 1. Invite Lurkr to your Discord server
Go to https://lurkr.gg/ and invite the bot.
#### 2. Enable leveling
```
/levels enable
```
#### 3. Configure XP for Discord activity
Lurkr will also award XP for regular Discord messages. Configure this so Discord engagement and GitHub bounties both feed into the same system:
- Set message XP range (e.g., 15-25 XP per message)
- Set cooldown (e.g., 60 seconds — prevents spam farming)
- Optionally boost XP in `#integrations-help` and `#integrations-testing` channels so helping others earns more
```
/levels set-xp min:15 max:25
/levels set-cooldown seconds:60
/levels multiplier channel:#integrations-help multiplier:2
/levels multiplier channel:#integrations-testing multiplier:1.5
```
#### 4. Configure role rewards
Map Lurkr levels to your existing Discord tiers. The XP thresholds should be calibrated so that a mix of Discord activity and GitHub bounties is needed to level up.
| Lurkr Level | XP Threshold | Discord Role | How to Reach |
|-------------|-------------|-------------|-------------|
| 5 | ~500 XP | **Agent Builder** | A few bounties or active Discord participation |
| 15 | ~2,000 XP | **Open Source Contributor** | Sustained bounty contributions |
| 30 | ~5,000 XP | Core Contributor *eligible* | Significant sustained contribution |
Note: **Core Contributor** role is still manually assigned by maintainers (since it involves money). Lurkr level 30 signals eligibility, not automatic promotion.
Add role rewards in the Lurkr dashboard or via commands:
```
/levels role-reward add level:5 role:@Agent Builder
/levels role-reward add level:15 role:@Open Source Contributor
```
Achievement badge roles (First Blood, Bug Hunter, etc.) are added manually by maintainers when someone qualifies — these are not level-based.
#### 5. Generate a Read/Write API key
- Go to https://lurkr.gg/ and log in
- Navigate to your profile / API settings
- Create a **Read/Write** API key (not read-only — we need PATCH access)
- Copy the key
#### 6. Add secrets to GitHub repository
Add three secrets in **Repo Settings > Secrets and variables > Actions**:
| Secret | Value |
|--------|-------|
| `DISCORD_BOUNTY_WEBHOOK_URL` | Discord webhook URL for `#integrations-announcements` |
| `LURKR_API_KEY` | Your Lurkr Read/Write API key |
| `LURKR_GUILD_ID` | Your Discord server ID |
To find your server ID: Enable Developer Mode in Discord (Settings > Advanced), then right-click the server name > Copy Server ID.
#### 7. Create the labels and start posting bounties
```bash
./scripts/setup-bounty-labels.sh
```
That's it. When a maintainer merges a PR with a `bounty:*` label, the contributor automatically gets:
- XP added to their Lurkr level
- A notification in `#integrations-announcements` with their new level
- Role upgrades when they cross level thresholds
### Identity Linking (GitHub ↔ Discord)
Contributors link their accounts by adding themselves to `contributors.yml` at the repo root:
```yaml ```yaml
contributors: contributors:
@@ -317,53 +114,39 @@ contributors:
name: Jane Doe name: Jane Doe
``` ```
This is intentionally a file-in-repo approach (not a database) because: Without this link, bounties are still tracked but Lurkr can't push XP to your Discord account.
- It's version-controlled and auditable
- Adding yourself is a PR — which is itself a contribution
- No bot infrastructure needed for identity storage
- Maintainers can review and approve linkages
**To find your Discord ID:** Enable Developer Mode in Discord Settings > Advanced, then right-click your name > Copy User ID.
**Important:** Contributors who haven't linked their Discord ID in `contributors.yml` will still get bounty notifications on GitHub, but won't receive Lurkr XP or Discord pings. The notification will remind them to link.
### What Handles What ### What Handles What
| Concern | Handled By | How | | Concern | Handled By | How |
|---------|-----------|-----| |---------|-----------|-----|
| Bounty point calculation | GitHub Actions | `bounty-completed.yml` reads PR labels | | Bounty point calculation | GitHub Actions | `bounty-completed.yml` reads PR labels |
| XP push to Discord | GitHub Actions → Lurkr API | `PATCH /levels/{guild}/users/{user}` with `{"xp": {"increment": N}}` | | XP push to Discord | GitHub Actions → Lurkr API | `PATCH /levels/{guild}/users/{user}` |
| Discord engagement XP | Lurkr bot | Native message XP (configurable per-channel) | | Discord engagement XP | Lurkr bot | Native message XP (configurable per-channel) |
| Leaderboard | Lurkr bot | Built-in `/levels leaderboard` + web leaderboard | | Leaderboard | Lurkr bot + GitHub Actions | `/levels leaderboard` + weekly webhook post |
| Weekly announcement | GitHub Actions | `weekly-leaderboard.yml` posts via webhook | | Agent Builder role | Lurkr bot | Auto-assigned at level 5 |
| Agent Builder role | Lurkr bot | Auto-assigned at level 5 via role reward | | OSS Contributor role | Lurkr bot | Auto-assigned at level 15 |
| OSS Contributor role | Lurkr bot | Auto-assigned at level 15 via role reward | | Core Contributor role | Maintainer | Manual (involves money) |
| Core Contributor role | Maintainer | Manual (involves money, level 30 = eligible) |
| Achievement badges | Maintainer | Manual role assignment when criteria met |
| Streak tracking | GitHub Actions | `bounty-tracker.ts` calculates from PR merge dates |
| Identity linking | contributors.yml | PR-based, reviewed by maintainers | | Identity linking | contributors.yml | PR-based, reviewed by maintainers |
| Discord notifications | GitHub Actions | Webhook post to `#integrations-announcements` |
## Guides ## Guides
- **[Setup Guide](setup-guide.md)** — Complete admin setup from zero to running (30 min) - **[Setup Guide](setup-guide.md)** — Admin setup from zero to running
- **[Game Master Manual](game-master-manual.md)** — Maintainer operations: posting bounties, reviewing work, managing tiers, anti-gaming - **[Game Master Manual](game-master-manual.md)** — Maintainer operations
- **[Contributor Guide](contributor-guide.md)** — Everything a contributor needs to start earning XP and completing bounties - **[Contributor Guide](contributor-guide.md)** — Everything a contributor needs to start
## Reference ## Reference
- [Integration Promotion Checklist](promotion-checklist.md) — Formal criteria for unverified -> verified - [Promotion Checklist](promotion-checklist.md) — Criteria for unverified verified
- [Tool README Template](templates/tool-readme-template.md) — Standard format for tool documentation - [Tool README Template](templates/tool-readme-template.md)
- [Agent Test Report Template](templates/agent-test-report-template.md) — Standard format for test reports - [Agent Test Report Template](templates/agent-test-report-template.md)
- [Building Tools Guide](../tools/BUILDING_TOOLS.md) — How to build integrations - [Building Tools Guide](../tools/BUILDING_TOOLS.md)
- [Parent Issue #2805](https://github.com/adenhq/hive/issues/2805) — Master integration tracking issue - [Lurkr API Docs](https://lurkr.gg/docs/api)
- [Lurkr API Docs](https://lurkr.gg/docs/api) — API reference for XP push
- [Lurkr Leveling Setup](https://lurkr.gg/docs/guides/setting-up-server-leveling) — Bot configuration guide
### Automation Files ### Automation Files
- `.github/workflows/bounty-completed.yml` — PR merge → Lurkr XP push + Discord notification - `.github/workflows/bounty-completed.yml` — PR merge → XP push + Discord notification
- `.github/workflows/weekly-leaderboard.yml` — Monday leaderboard post - `.github/workflows/weekly-leaderboard.yml` — Monday leaderboard post
- `scripts/bounty-tracker.ts` — Point calculation, Lurkr API integration, Discord formatting - `scripts/bounty-tracker.ts` — Point calculation, Lurkr API, Discord formatting
- `scripts/setup-bounty-labels.sh` — One-time label setup - `scripts/setup-bounty-labels.sh` — One-time label setup
- `contributors.yml` — GitHub ↔ Discord identity mapping - `contributors.yml` — GitHub ↔ Discord identity mapping
+53 -192
View File
@@ -1,53 +1,29 @@
# Contributor Guide — Integration Bounty Program # Contributor Guide — Integration Bounty Program
Welcome. This is a program where you earn XP, Discord roles, and eventually real money by testing and building integrations for the Aden agent framework. Earn XP, Discord roles, and eventually real money by testing and building integrations for the Aden agent framework.
## How It Works ## Getting Started
1. You pick a bounty from the [GitHub issues board](https://github.com/adenhq/hive/issues?q=is%3Aissue+is%3Aopen+label%3A%22bounty%3A*%22)
2. You claim it by commenting on the issue
3. You do the work and submit a PR (or test report)
4. A maintainer reviews and merges
5. You automatically get XP in Discord via Lurkr, and your level goes up
6. At certain levels, you unlock roles. At the top tier, you unlock paid bounties.
## Getting Started (10 min)
### 1. Link your GitHub and Discord ### 1. Link your GitHub and Discord
Fork this repo and add yourself to `contributors.yml`: Add yourself to `contributors.yml` at the repo root:
```yaml ```yaml
contributors: contributors:
# ... existing entries
- github: your-github-username - github: your-github-username
discord: "your-discord-id" discord: "your-discord-id"
name: Your Name name: Your Name
``` ```
To find your Discord ID: To find your Discord ID: Discord Settings > Advanced > Enable **Developer Mode**, then right-click your name > **Copy User ID**.
1. Open Discord Settings > Advanced > Enable **Developer Mode**
2. Right-click your name in any channel > **Copy User ID**
Submit this as a PR with title: `docs: link @your-github to Discord` Submit as a PR. Without this link, Lurkr can't push XP to your Discord account.
**Why this matters:** Without this link, you'll still get points tracked, but Lurkr can't push XP to your Discord account and you won't get role upgrades or pings. ### 2. Pick your first bounty
### 2. Join the Discord channels Browse [GitHub Issues with bounty labels](https://github.com/adenhq/hive/issues?q=is%3Aissue+is%3Aopen+label%3A%22bounty%3A*%22). Start with `bounty:docs` or `difficulty:easy`.
- `#integrations-announcements` — Bounty postings, leaderboard, promotions Comment "I'd like to work on this" and wait for a maintainer to assign you.
- `#integrations-testing` — Coordinate with other testers
- `#integrations-help` — Ask questions about tools, credentials, setup
- `#integration-showcase` — Show off what you built
### 3. Pick your first bounty
Filter GitHub issues by label:
- [`bounty:docs`](https://github.com/adenhq/hive/issues?q=is%3Aissue+is%3Aopen+label%3A%22bounty%3Adocs%22) — Write a README for a tool (20 pts, easiest)
- [`bounty:smoke-test`](https://github.com/adenhq/hive/issues?q=is%3Aissue+is%3Aopen+label%3A%22bounty%3Asmoke-test%22) — Test a tool with a real API key (10 pts)
- [`difficulty:easy`](https://github.com/adenhq/hive/issues?q=is%3Aissue+is%3Aopen+label%3A%22difficulty%3Aeasy%22) — All easy bounties
Comment on the issue: "I'd like to work on this" and wait for a maintainer to assign you (usually within 24 hours).
## Tiers ## Tiers
@@ -57,199 +33,84 @@ Comment on the issue: "I'd like to work on this" and wait for a maintainer to as
| **Open Source Contributor** | ~2,000 XP (Lurkr level 15) | Discord role, name in CONTRIBUTORS.md and tool READMEs | | **Open Source Contributor** | ~2,000 XP (Lurkr level 15) | Discord role, name in CONTRIBUTORS.md and tool READMEs |
| **Core Contributor** | Maintainer nomination | Dollar values on bounties, paid per completion | | **Core Contributor** | Maintainer nomination | Dollar values on bounties, paid per completion |
Lurkr auto-assigns the first two roles when you hit the level. Core Contributor requires sustained, high-quality contributions and a maintainer vouching for you. XP comes from GitHub bounties (auto-pushed on PR merge) and Discord activity in `#integrations-help`.
### How XP Adds Up
You earn XP from two sources:
| Source | How |
|--------|-----|
| **GitHub bounties** | Merge a PR with a `bounty:*` label — auto-pushed to Lurkr |
| **Discord activity** | Messages in `#integrations-*` channels, helping others, voice chat |
Both feed into the same Lurkr level. Helping people in Discord AND doing bounties levels you up faster than either alone.
## Bounty Types ## Bounty Types
### Smoke Test (10 pts) ### Test a Tool (20 pts)
**What:** Run an unverified tool with a real API key and report if it works. Test an unverified tool with a real API key and report what happens.
**How:** 1. Get an API key for the service (the bounty issue links to where)
1. Pick a tool from the bounty board 2. Run the tool functions with real data
2. Get an API key for that service (the bounty issue links to the help URL) 3. Fill out the [test report template](templates/agent-test-report-template.md)
3. Set the environment variable: `export TOOL_API_KEY=your-key` 4. Submit as a comment on the issue or a file in a PR
4. Run the tool functions and note what happens
5. Comment on the bounty issue with your results: pass/fail, any errors, logs
**Difficulty:** Easy. You don't need to write code, just test and report. Report both successes and failures. Finding bugs is valuable.
### Agent Test Report (30 pts) ### Write Docs (20 pts)
**What:** Build a real agent that uses an unverified tool and document the experience. Write a README for a tool that's missing one.
**How:** 1. Read the tool's source code in `tools/src/aden_tools/tools/{tool_name}/`
1. Pick a tool from the bounty board 2. Read the credential spec in `tools/src/aden_tools/credentials/`
2. Build a simple agent that uses the tool (see [Building Agents Guide](../tools/BUILDING_TOOLS.md)) 3. Fill in the [tool README template](templates/tool-readme-template.md)
3. Run the agent with a real task 4. Submit a PR adding `README.md` to the tool directory
4. Fill out the [test report template](templates/agent-test-report-template.md)
5. Submit the report as a comment on the bounty issue, or as a file in a PR
**What to include:** Environment, credential setup, which functions you tested, what worked, what broke, edge cases found, and logs or session ID. Function names and API URLs must match reality — no AI hallucinations.
**Difficulty:** Medium. Requires an API key and some familiarity with the framework. ### Code Contribution (30 pts)
### Write README (20 pts) Add a health checker, fix a bug, or improve an integration.
**What:** Write documentation for a tool that's missing its README. **Health checker:**
1. Find a lightweight API endpoint that validates the credential (GET, no writes)
2. Add `health_check_endpoint` to the tool's CredentialSpec
3. Implement a HealthChecker class in `tools/src/aden_tools/credentials/health_check.py`
4. Register in `HEALTH_CHECKERS`, run `uv run pytest tools/tests/test_credential_registry.py`
**How:** **Bug fix:**
1. Pick a tool from the bounty board 1. Find a bug during testing, file an issue
2. Read the tool's source code in `tools/src/aden_tools/tools/{tool_name}/` 2. Fix it in a PR with a test covering the bug
3. Read the credential spec in `tools/src/aden_tools/credentials/`
4. Fill in the [tool README template](templates/tool-readme-template.md)
5. Submit a PR adding `README.md` to the tool directory
**Quality bar:** Function names must match the actual code. Setup instructions must be accurate. API URLs must be real.
**Difficulty:** Easy. Good first bounty — you learn the codebase by reading and documenting it.
### Add Health Checker (25 pts)
**What:** Implement a credential health check so the system can validate API keys at startup.
**How:**
1. Pick a tool from the bounty board
2. Find a lightweight API endpoint that validates the credential (GET, no writes, no charges)
3. Add `health_check_endpoint` to the tool's CredentialSpec
4. Implement a HealthChecker class in `tools/src/aden_tools/credentials/health_check.py`
5. Register it in the `HEALTH_CHECKERS` dict
6. Run `uv run pytest tools/tests/test_credential_registry.py` to verify wiring
7. Submit a PR
**Difficulty:** Medium. Requires reading the service's API docs to find the right endpoint.
### Bug Fix (40 pts)
**What:** Find a bug during testing and fix it.
**How:**
1. Find a bug while doing a smoke test or agent test
2. File an issue describing the bug (or comment on the existing bounty issue)
3. Fix the bug in a PR
4. Add a test that covers the specific bug
5. Reference the bounty issue in your PR
**Difficulty:** Varies. The bug itself tells you the difficulty.
### New Integration (75 pts) ### New Integration (75 pts)
**What:** Build a complete new integration from scratch. Build a complete integration from scratch.
**How:** 1. Follow the [BUILDING_TOOLS.md](../tools/BUILDING_TOOLS.md) guide
1. Check the [Integration Request issues](https://github.com/adenhq/hive/issues?q=is%3Aissue+is%3Aopen+label%3A%22Integration%22) for requested integrations 2. Create: tool + credential spec + health checker + tests + README
2. Follow the [BUILDING_TOOLS.md](../tools/BUILDING_TOOLS.md) guide 3. Register in `_register_unverified()` in `tools/__init__.py`
3. Create: tool implementation + credential spec + health checker + tests + README 4. Run `make check && make test`
4. Register in `_register_unverified()` in `tools/__init__.py`
5. Run `make check && make test`
6. Submit a PR
**Difficulty:** Hard. This is a significant contribution — expect multiple review rounds. Expect multiple review rounds.
### Complete Promotion Checklist (50 pts)
**What:** Take an unverified tool through the full [promotion checklist](promotion-checklist.md) to make it verified.
**How:**
1. Pick a tool that has most checklist items already done (docs, health check, tests)
2. Complete the remaining items
3. Get at least 1 community test report (coordinate in `#integrations-testing`)
4. Submit a PR that moves the tool from `_register_unverified()` to `_register_verified()`
5. Include links to all checklist evidence in the PR description
**Difficulty:** Hard. Requires coordination and thoroughness.
## Achievement Badges
Permanent Discord roles earned through specific accomplishments:
| Badge | How to Earn |
|-------|-------------|
| **First Blood** | Complete your first bounty of any type |
| **Bug Hunter** | Fix 3 bugs found during testing |
| **Docs Champion** | Write 5 tool READMEs |
| **Health Inspector** | Add 5 health checkers |
| **Promoter** | Promote a tool from unverified to verified |
| **Full Stack** | Complete at least 1 bounty of every type |
| **Ironman** | 8 consecutive weeks with at least 1 bounty completion |
Badges are assigned by maintainers when you qualify. If you think you've earned one and it hasn't been assigned, ask in `#integrations-help`.
## Streaks
Consecutive weeks with at least one bounty completion earns XP multipliers:
| Streak | Multiplier |
|--------|-----------|
| 2 weeks | 1.1x |
| 4 weeks | 1.25x |
| 8+ weeks | 1.5x |
Missing a week resets the streak. A 20-point README bounty at an 8-week streak earns 30 XP instead of 20.
## Leaderboard
Posted every Monday at 9:00 UTC in `#integrations-announcements`. Top 3 get medal emojis.
You can also check your rank anytime in Discord:
```
/rank
```
Or view the web leaderboard via Lurkr's dashboard.
## Rules ## Rules
1. **Claim before you start** — comment on the issue, wait to be assigned 1. **Claim before you start** — comment on the issue, wait for assignment
2. **One person per bounty** — first to claim and get assigned gets it 2. **7-day window** — no PR within 7 days = bounty gets re-opened
3. **7-day window** — if you don't submit a PR within 7 days of being assigned, the bounty is unassigned and re-opened 3. **Max 3 active claims** — don't hoard bounties
4. **Maximum 3 active claims** — don't hoard bounties 4. **Quality matters** — PRs must pass CI and follow templates
5. **Quality matters** — PRs must pass CI, follow templates, and address review feedback 5. **No self-review** and no AI-only submissions without verification
6. **No self-review** — you can't review your own PR
7. **Honest testing** — report failures, not just successes. Finding bugs is valuable
8. **No AI-only submissions** — AI tools are fine for assistance, but you must verify that function names, API URLs, and behavior match reality
## FAQ ## FAQ
**Q: Do I need an API key for every tool I test?** **Q: Do I need an API key for every tool I test?**
A: Yes, for smoke tests and agent tests. Most services have free tiers. The bounty issue links to where you get the key. A: Yes. Most services have free tiers. The bounty issue links to where you get the key.
**Q: Can I work on multiple bounties at once?**
A: Yes, up to 3 active claims at a time.
**Q: What if I find a bug but can't fix it?**
A: File an issue! Someone else can pick up the `bounty:bug-fix`. Finding bugs during testing is the whole point.
**Q: How do I become a Core Contributor?** **Q: How do I become a Core Contributor?**
A: Keep contributing consistently across different bounty types for 4+ weeks. Maintainers will notice and nominate you when you're ready. There's no application process — just keep shipping quality work. A: Contribute consistently across different bounty types for 4+ weeks. Maintainers will nominate you.
**Q: What if I haven't linked my Discord yet?** **Q: What if I haven't linked my Discord yet?**
A: You'll still be recognized in the GitHub Action logs and Discord webhook message, but Lurkr can't push XP to your account. Link your Discord ID in `contributors.yml` to start earning XP and roles. A: You'll still get credit in GitHub, but no Lurkr XP or Discord roles. Add yourself to `contributors.yml`.
**Q: Do I earn XP from Discord messages too?**
A: Yes. Lurkr awards XP for messages in `#integrations-*` channels (with a 60-second cooldown). Helping others in `#integrations-help` earns 2x XP. Both Discord XP and GitHub bounty XP feed into the same level.
## Quick Reference ## Quick Reference
| What | Where | | What | Where |
|------|-------| |------|-------|
| Bounty board | [GitHub Issues with bounty label](https://github.com/adenhq/hive/issues?q=is%3Aissue+is%3Aopen+label%3A%22bounty%3A*%22) | | Bounty board | [GitHub Issues](https://github.com/adenhq/hive/issues?q=is%3Aissue+is%3Aopen+label%3A%22bounty%3A*%22) |
| README template | [docs/bounty-program/templates/tool-readme-template.md](templates/tool-readme-template.md) | | README template | [templates/tool-readme-template.md](templates/tool-readme-template.md) |
| Test report template | [docs/bounty-program/templates/agent-test-report-template.md](templates/agent-test-report-template.md) | | Test report template | [templates/agent-test-report-template.md](templates/agent-test-report-template.md) |
| Promotion checklist | [docs/promotion-checklist.md](promotion-checklist.md) | | Promotion checklist | [promotion-checklist.md](promotion-checklist.md) |
| Building tools guide | [tools/BUILDING_TOOLS.md](../tools/BUILDING_TOOLS.md) | | Building tools | [BUILDING_TOOLS.md](../tools/BUILDING_TOOLS.md) |
| Contributing guide | [CONTRIBUTING.md](../CONTRIBUTING.md) |
| Discord | [Join](https://discord.com/invite/MXE49hrKDk) | | Discord | [Join](https://discord.com/invite/MXE49hrKDk) |
| Your rank | Type `/rank` in Discord | | Your rank | `/rank` in Discord |
| Link your accounts | Add yourself to [contributors.yml](../contributors.yml) |
+65 -227
View File
@@ -1,269 +1,107 @@
# Game Master Manual # Game Master Manual
Operations guide for maintainers running the Integration Bounty Program. This covers the day-to-day decisions: posting bounties, approving work, awarding points, managing tiers, and keeping the program healthy. Operations guide for maintainers running the Integration Bounty Program.
## Your Role ## Your Role
As a game master (maintainer), you:
- Post bounty issues and set dollar values for Core Contributors - Post bounty issues and set dollar values for Core Contributors
- Assign claimed bounties to contributors - Assign claimed bounties to contributors
- Review and merge bounty PRs (which auto-triggers point/XP awards) - Review and merge bounty PRs (auto-triggers XP awards)
- Manually assign achievement badges and the Core Contributor role - Manage the Core Contributor role
- Monitor for gaming and low-quality submissions - Monitor for gaming and low-quality submissions
- Keep the bounty board fresh and the community engaged
## Daily Operations ## Handling Bounty Claims
### Handling Bounty Claims When someone comments "I'd like to work on this":
When someone comments "I'd like to work on this" on a bounty issue: 1. For `difficulty:easy`, assign immediately
2. For `difficulty:medium`/`difficulty:hard`, check if they've done easier bounties first
3. Assign via GitHub. If no PR within 7 days, unassign and re-open
1. Check their GitHub profile — do they have relevant experience? ## Reviewing Bounty PRs
2. For `difficulty:easy` bounties, assign immediately (within 24 hours)
3. For `difficulty:medium` and `difficulty:hard`, check if they've completed easier bounties first
4. Assign the issue to them via GitHub
5. If they don't submit a PR within 7 days, unassign and re-open
### Reviewing Bounty PRs 1. Verify the PR matches the bounty issue
2. Check quality gates (below)
3. A **different maintainer** must approve than the one who created the bounty
4. Apply the correct `bounty:*` label to the PR before merging
5. Merge — the GitHub Action auto-awards XP and posts to Discord
6. Close the linked bounty issue
When a bounty PR is submitted: ### Quality Gates
1. **Verify the PR matches the bounty** — does it actually complete what the issue asked for? **`bounty:docs`:**
2. **Check quality gates** (see below)
3. **A different maintainer** must approve than the one who created the bounty issue
4. **Apply the correct `bounty:*` label** to the PR before merging (if not already present)
5. **Merge** — the GitHub Action automatically awards XP and posts to Discord
6. **Close the linked bounty issue**
### Quality Gate Checks
#### For `bounty:docs` (READMEs):
- [ ] Follows the [tool README template](templates/tool-readme-template.md) - [ ] Follows the [tool README template](templates/tool-readme-template.md)
- [ ] Setup instructions are accurate (API key URL works, steps are correct) - [ ] Setup instructions are accurate (API key URL works)
- [ ] Tool table lists all functions with correct names - [ ] Function names match the actual code
- [ ] At least one usage example per tool function - [ ] Not AI-generated without verification
- [ ] API reference link is valid
- [ ] Not obviously AI-generated without verification (check that API URLs and function names match reality)
#### For `bounty:health-check`: **`bounty:test`:**
- [ ] `health_check_endpoint` added to CredentialSpec
- [ ] HealthChecker class implemented with proper 200/401/429 handling
- [ ] Registered in `HEALTH_CHECKERS` dict
- [ ] `uv run pytest tools/tests/test_credential_registry.py` passes
- [ ] Endpoint is actually a lightweight validation call (no writes, no charges)
#### For `bounty:agent-test`:
- [ ] Test report follows the [template](templates/agent-test-report-template.md) - [ ] Test report follows the [template](templates/agent-test-report-template.md)
- [ ] Includes reproducible evidence (logs, session ID, or screenshots) - [ ] Includes logs, session ID, or screenshots
- [ ] Tests were done with a real API key, not mocked - [ ] Done with a real API key, not mocked
- [ ] Reports both successes and failures honestly - [ ] Reports failures honestly
- [ ] Edge cases section is filled out (even if "none found")
#### For `bounty:bug-fix`: **`bounty:code`:**
- [ ] Bug was found during actual integration testing (not invented) - [ ] CI passes (`uv run pytest tools/tests/test_credential_registry.py` for health checks)
- [ ] Fix addresses the root cause, not just the symptom - [ ] Fix addresses root cause, not symptom
- [ ] Existing tests still pass - [ ] New test added for bug fixes
- [ ] New test added for the specific bug
#### For `bounty:new-tool`: **`bounty:new-tool`:**
- [ ] Full implementation: tool + credential spec + tests + README - [ ] Full implementation: tool + credential spec + tests + README
- [ ] Follows [BUILDING_TOOLS.md](../tools/BUILDING_TOOLS.md) patterns
- [ ] `make check && make test` passes - [ ] `make check && make test` passes
- [ ] Registered in `_register_unverified()` (not verified — needs community testing first) - [ ] Registered in `_register_unverified()` (not verified)
#### For `bounty:promote`:
- [ ] Every item on the [promotion checklist](promotion-checklist.md) is checked
- [ ] At least 1 community agent test report exists
- [ ] Move registration from `_register_unverified()` to `_register_verified()`
### Rejecting Submissions ### Rejecting Submissions
When quality is insufficient: 1. Leave specific, constructive feedback
2. Request changes (don't close the PR)
3. 7 days to address. No response → close PR, unassign bounty
1. Leave a specific, constructive review comment — explain exactly what needs to change Never merge low-quality work just to be nice.
2. Request changes on the PR (don't close it)
3. Give them 7 days to address feedback
4. If no response after 7 days, close the PR and unassign the bounty issue
**Never:** ## Core Contributor Promotion
- Reject without explanation
- Deduct points for good-faith attempts that need revision
- Merge low-quality work just to be nice — it degrades the codebase and the program's credibility
## Weekly Operations Core Contributor unlocks monetary rewards. The bar must be high.
### Monday: Leaderboard Day **Promote when:**
- Active for **4+ weeks** with contributions across **3+ bounty types**
- PRs are consistently clean
- At least one maintainer vouches for them
The `weekly-leaderboard.yml` action auto-posts at 9:00 UTC every Monday. After it posts: **How:** Discuss with maintainers → assign role in Discord → announce in `#integrations-announcements` → add to `#bounty-payouts`
1. Check the leaderboard in `#integrations-announcements` **Don't promote** if they only do easy bounties, have been active < 4 weeks, or show signs of gaming.
2. If anyone new entered the top 3, congratulate them in the channel
3. Review the bounty board — are there enough open bounties? Aim for 10+ unclaimed at all times
### Thursday: Bounty Refresh If a Core Contributor is inactive 8+ weeks, reach out privately first, then remove the role if no response.
Mid-week check: ## Dollar Values
1. Are any bounties stale (assigned >7 days, no PR)? Unassign them Post dollar values in `#bounty-payouts` (Core Contributors only):
2. Are any bounty types depleted? Post more
3. Check `#integrations-help` — are people asking questions that suggest missing documentation? That's a signal for new `bounty:docs` issues
## Tier Management | Bounty Type | Dollar Range |
|-------------|-------------|
| `bounty:test` | $1030 |
| `bounty:docs` | $1020 |
| `bounty:code` | $2050 |
| `bounty:new-tool` | $50150 |
### Promoting to Agent Builder (Automatic) **Payout:** PR merged → verify quality → record in `#bounty-payouts` → process payment.
Lurkr handles this via role reward at level 5. No action needed. XP is always awarded regardless of budget. Money is a bonus layer.
### Promoting to Open Source Contributor (Automatic) ## Anti-Gaming
Lurkr handles this via role reward at level 15. No action needed. | Pattern | Response |
|---------|----------|
| Splitting one change across multiple PRs | Reject extras, warn |
| AI-generated without verification | Reject, explain why |
| Claiming many bounties, completing few | Unassign after 7 days |
### Promoting to Core Contributor (Manual) **First offense:** warning. **Second:** 2-week cooldown. **Third:** permanent removal.
This is the most important decision you make. Core Contributor unlocks monetary rewards, so the bar must be high. ## Keeping It Fresh
**When to promote:** - Aim for 10+ unclaimed bounties at all times
- Unassign stale claims (>7 days)
1. The contributor has been active for **4+ weeks** - Shoutout exceptional contributions in announcements
2. They have contributions across **3+ bounty types** (not just one category) - Post milestones ("10th tool promoted to verified!")
3. Their PRs are consistently clean — they don't need multiple rounds of back-and-forth
4. They've demonstrated **technical depth** (not just documentation — they can fix bugs, add health checks, or build tools)
5. At least one maintainer is willing to vouch for them
**How to promote:**
1. Discuss with other maintainers in your private channel
2. If consensus, assign the Core Contributor role in Discord manually
3. Post an announcement in `#integrations-announcements`:
```
Welcome @username as a Core Contributor! They've [brief summary of contributions].
```
4. Add them to the `#bounty-payouts` channel
5. Brief them on how dollar-value bounties work (see below)
**When NOT to promote:**
- They only do easy bounties (all docs, no code)
- They've been active for less than 4 weeks
- Their PRs frequently need significant rework
- They show signs of gaming (splitting work, low-effort submissions)
### Demoting / Pausing Core Contributor
If a Core Contributor becomes inactive or their quality drops:
1. Reach out privately first — "Hey, noticed you've been less active, everything okay?"
2. If quality is the issue, provide specific feedback
3. If they're inactive for 8+ weeks, remove the Core Contributor role (they can earn it back)
4. Never demote publicly — handle it in DMs
## Monetary Bounties
### Setting Dollar Values
For each bounty issue, post the dollar value in `#bounty-payouts` (visible only to Core Contributors):
```
Bounty #1234: Write README for salesforce_tool — $15
Bounty #1235: Add health checker for jira — $25
Bounty #1236: Full promotion of notion_tool — $75
```
**Suggested dollar ranges:**
| Bounty Type | Dollar Range | Notes |
|-------------|-------------|-------|
| `bounty:docs` | $1020 | $10 for simple tools, $20 for complex ones |
| `bounty:health-check` | $1530 | $15 for simple GET, $30 for complex auth |
| `bounty:smoke-test` | $510 | Quick validation |
| `bounty:agent-test` | $2040 | Requires real API key and time |
| `bounty:bug-fix` | $2050 | Depends on complexity |
| `bounty:new-tool` | $50150 | Depends on integration complexity |
| `bounty:promote` | $50100 | Full checklist completion |
### Payout Process
1. Core Contributor completes bounty, PR is merged
2. Verify the work meets quality gates
3. Record the payout in `#bounty-payouts`:
```
PAID: @username — Bounty #1234 — $15 — [payment method/reference]
```
4. Process payment via your payment system (PayPal, Wise, crypto, etc.)
### Budget Management
- Set a monthly budget cap and communicate it
- When budget is tight, reduce dollar values rather than stopping bounties entirely
- Point values (XP) are always awarded regardless of budget — money is a bonus layer
## Achievement Badges
These are manually assigned when someone qualifies. Check periodically.
| Badge | Trigger | How to Verify |
|-------|---------|---------------|
| **First Blood** | First bounty completed | Check their first merged PR with `bounty:*` label |
| **Bug Hunter** | 3 `bounty:bug-fix` PRs merged | Search: `is:pr is:merged author:USERNAME label:bounty:bug-fix` |
| **Docs Champion** | 5 `bounty:docs` PRs merged | Search: `is:pr is:merged author:USERNAME label:bounty:docs` |
| **Health Inspector** | 5 `bounty:health-check` PRs merged | Search: `is:pr is:merged author:USERNAME label:bounty:health-check` |
| **Promoter** | 1 `bounty:promote` PR merged | Search: `is:pr is:merged author:USERNAME label:bounty:promote` |
| **Full Stack** | At least 1 PR with each bounty type | Check all 7 bounty labels |
| **Ironman** | 8 consecutive weeks with a bounty PR | Check merge dates — no gap > 7 days |
When assigning a badge:
1. Assign the role in Discord
2. Post in `#integrations-announcements`:
```
@username just earned the Bug Hunter badge! 3 bugs found and fixed.
```
## Anti-Gaming Playbook
### Signs of Gaming
| Pattern | What It Looks Like | Response |
|---------|-------------------|----------|
| **Splitting** | One README split into 3 PRs | Reject extras, warn contributor |
| **AI spam** | README with wrong function names, hallucinated APIs | Reject, explain why verification matters |
| **Claim hoarding** | Claiming 10 bounties, completing 1 | Unassign after 7 days, limit to 3 active claims |
| **Self-review** | Reviewing their own work under alt account | Ban both accounts |
| **Low-effort agent tests** | Test report with no logs, no session ID | Request revision with specific feedback |
### Responses
**First offense:** Warning via PR comment or DM. Be specific about what was wrong.
**Second offense:** 2-week bounty cooldown (they can still contribute, but no bounty labels are applied to their PRs).
**Third offense:** Permanent removal from the bounty program. Core Contributor role revoked if applicable.
Document all actions in a private maintainer thread for transparency.
## Keeping the Program Alive
### What Makes It Stale
- No new bounties for 2+ weeks
- Same 3 people on the leaderboard every week
- Bounties claimed but never completed
- Announcements channel goes quiet
### What Keeps It Fresh
- **New bounty types** — when the Doc Sprint is done, launch the Health Check Sprint
- **Sprint events** — "This week: double XP on agent tests"
- **Shoutouts** — highlight exceptional contributions in announcements
- **Showcase pins** — pin the best demos in `#integration-showcase`
- **Rising stars** — mention newcomers who are ramping up fast
- **Milestones** — "We just promoted the 10th tool to verified!"
### Metrics to Track
| Metric | Healthy Range | Alarm |
|--------|-------------|-------|
| Open unclaimed bounties | 1030 | < 5 (post more) or > 50 (too many, focus) |
| Active contributors (last 30 days) | 5+ | < 3 |
| Average days claim → PR | 37 | > 14 (bounties too hard or claims going stale) |
| Tools promoted (monthly) | 25 | 0 (investigate blockers) |
| Core Contributor count | 310 | > 15 (bar too low) or 0 (bar too high) |
+4 -4
View File
@@ -67,7 +67,7 @@ Formal criteria for promoting a tool from **unverified** to **verified**. A tool
2. **PR description** includes links to: the tool README, the health checker, the test report(s) 2. **PR description** includes links to: the tool README, the health checker, the test report(s)
3. **Maintainer reviews** the checklist — every required item must be verified 3. **Maintainer reviews** the checklist — every required item must be verified
4. **Maintainer moves** the tool registration from `_register_unverified()` to `_register_verified()` in `tools/__init__.py` 4. **Maintainer moves** the tool registration from `_register_unverified()` to `_register_verified()` in `tools/__init__.py`
5. **Maintainer adds the `bounty:promote` label** to the PR — this triggers the GitHub Action to award 50 XP via Lurkr and post a Discord notification 5. **Maintainer adds the `bounty:code` label** to the PR — this triggers the GitHub Action to award XP via Lurkr and post a Discord notification
6. **Announcement** auto-posted in `#integrations-announcements` on Discord 6. **Announcement** auto-posted in `#integrations-announcements` on Discord
## Current Status ## Current Status
@@ -94,6 +94,6 @@ yahoo_finance, youtube, youtube_transcript, zendesk, zoho_crm, zoom
| Gap | Count | Bounty Type | | Gap | Count | Bounty Type |
|-----|-------|-------------| |-----|-------|-------------|
| Missing README | ~41 | `bounty:docs` | | Missing README | ~41 | `bounty:docs` |
| Missing health_check_endpoint | ~40 | `bounty:health-check` | | Missing health_check_endpoint | ~40 | `bounty:code` |
| Missing HealthChecker class | ~40 | `bounty:health-check` | | Missing HealthChecker class | ~40 | `bounty:code` |
| No community test report | 55 | `bounty:agent-test` | | No community test report | 55 | `bounty:test` |
+39 -127
View File
@@ -14,33 +14,26 @@ Complete setup from zero to running. Estimated time: 30 minutes.
./scripts/setup-bounty-labels.sh ./scripts/setup-bounty-labels.sh
``` ```
This creates 10 labels: 7 bounty types (`bounty:smoke-test`, `bounty:agent-test`, `bounty:docs`, `bounty:health-check`, `bounty:bug-fix`, `bounty:new-tool`, `bounty:promote`) and 3 difficulty levels (`difficulty:easy`, `difficulty:medium`, `difficulty:hard`). This creates 7 labels: 4 bounty types (`bounty:test`, `bounty:docs`, `bounty:code`, `bounty:new-tool`) and 3 difficulty levels (`difficulty:easy`, `difficulty:medium`, `difficulty:hard`).
Verify at: `https://github.com/adenhq/hive/labels` ## Step 2: Create Discord Channels (3 min)
## Step 2: Create Discord Channels (5 min)
Create these channels (or rename existing ones):
``` ```
Category: Integrations Category: Integrations
#integrations-announcements (read-only for non-admins) #integrations-announcements (read-only for non-admins)
#integrations-testing
#integrations-help #integrations-help
#integration-showcase
Category: Private Category: Private
#bounty-payouts (visible only to Core Contributor role) #bounty-payouts (visible only to Core Contributor role)
``` ```
**Channel permissions:** **Permissions:**
- `#integrations-announcements`: Everyone can read, only bots + admins can post - `#integrations-announcements`: Everyone reads, only bots + admins post
- `#bounty-payouts`: Visible only to users with the Core Contributor role - `#bounty-payouts`: Core Contributor role only
- All others: open to everyone
## Step 3: Create Discord Roles (3 min) ## Step 3: Create Discord Roles (2 min)
Create these roles if they don't exist. Order matters — higher = more prestigious: Order matters — higher = more prestigious:
| Role | Color | Hoisted | Mentionable | | Role | Color | Hoisted | Mentionable |
|------|-------|---------|-------------| |------|-------|---------|-------------|
@@ -48,55 +41,24 @@ Create these roles if they don't exist. Order matters — higher = more prestigi
| Open Source Contributor | Purple `#9B59B6` | Yes | No | | Open Source Contributor | Purple `#9B59B6` | Yes | No |
| Agent Builder | Green `#2ECC71` | Yes | No | | Agent Builder | Green `#2ECC71` | Yes | No |
Achievement badge roles (optional, create as needed):
| Role | Color |
|------|-------|
| First Blood | Default |
| Bug Hunter | Red `#E74C3C` |
| Docs Champion | Yellow `#F39C12` |
| Health Inspector | Orange `#E67E22` |
| Promoter | Gold `#F1C40F` |
| Full Stack | Teal `#1ABC9C` |
| Ironman | Default |
## Step 4: Install and Configure Lurkr (10 min) ## Step 4: Install and Configure Lurkr (10 min)
### 4a. Invite Lurkr ### 4a. Invite Lurkr
Go to https://lurkr.gg/ and invite the bot to your server. Grant it the permissions it requests (Manage Roles, Send Messages, etc). Go to https://lurkr.gg/ and invite the bot. Grant requested permissions.
### 4b. Enable Leveling ### 4b. Enable Leveling and Configure XP
In any channel:
``` ```
/levels enable /levels enable
```
### 4c. Configure Message XP
```
/levels set-xp min:15 max:25 /levels set-xp min:15 max:25
/levels set-cooldown seconds:60 /levels set-cooldown seconds:60
```
### 4d. Set Channel XP Multipliers
Boost XP in channels where helping others matters:
```
/levels multiplier channel:#integrations-help multiplier:2 /levels multiplier channel:#integrations-help multiplier:2
/levels multiplier channel:#integrations-testing multiplier:1.5
```
Disable XP in bot-only channels:
```
/levels ignore channel:#integrations-announcements /levels ignore channel:#integrations-announcements
/levels ignore channel:#bounty-payouts /levels ignore channel:#bounty-payouts
``` ```
### 4e. Configure Role Rewards ### 4c. Configure Role Rewards
``` ```
/levels role-reward add level:5 role:@Agent Builder /levels role-reward add level:5 role:@Agent Builder
@@ -105,38 +67,33 @@ Disable XP in bot-only channels:
Do NOT auto-assign Core Contributor — that's maintainer-only. Do NOT auto-assign Core Contributor — that's maintainer-only.
### 4f. Generate Lurkr API Key ### 4d. Generate Lurkr API Key
1. Go to https://lurkr.gg/ and log in with Discord 1. Go to https://lurkr.gg/ and log in
2. Navigate to your profile / API settings 2. Profile > API settings > Create API Key
3. Click "Create API Key" 3. Select **Read/Write** (not read-only)
4. Select **Read/Write** (not read-only) 4. Copy the key
5. Copy the key — you'll need it in the next step
## Step 5: Create Discord Webhook (2 min) ## Step 5: Create Discord Webhook (2 min)
1. Go to **Server Settings > Integrations > Webhooks** 1. Server Settings > Integrations > Webhooks > New Webhook
2. Click **New Webhook** 2. Name: `Bounty Tracker`, channel: `#integrations-announcements`
3. Name it `Bounty Tracker` 3. Copy the webhook URL
4. Set the channel to `#integrations-announcements`
5. Copy the webhook URL
## Step 6: Add GitHub Repository Secrets (3 min) ## Step 6: Add GitHub Secrets (3 min)
Go to **Repo Settings > Secrets and variables > Actions > New repository secret** and add: Repo Settings > Secrets and variables > Actions:
| Secret Name | Value | | Secret | Value |
|-------------|-------| |--------|-------|
| `DISCORD_BOUNTY_WEBHOOK_URL` | The webhook URL from Step 5 | | `DISCORD_BOUNTY_WEBHOOK_URL` | Webhook URL from Step 5 |
| `LURKR_API_KEY` | The Lurkr API key from Step 4f | | `LURKR_API_KEY` | Lurkr API key from Step 4d |
| `LURKR_GUILD_ID` | Your Discord server ID* | | `LURKR_GUILD_ID` | Your Discord server ID* |
*To find server ID: Enable Developer Mode in Discord (Settings > Advanced), then right-click the server name > Copy Server ID. *Enable Developer Mode in Discord, right-click server name > Copy Server ID.
## Step 7: Test the Pipeline (5 min) ## Step 7: Test the Pipeline (5 min)
### Test 1: Verify the script runs locally
```bash ```bash
GITHUB_TOKEN=$(gh auth token) \ GITHUB_TOKEN=$(gh auth token) \
GITHUB_REPOSITORY_OWNER=adenhq \ GITHUB_REPOSITORY_OWNER=adenhq \
@@ -144,40 +101,15 @@ GITHUB_REPOSITORY_NAME=hive \
bun run scripts/bounty-tracker.ts leaderboard bun run scripts/bounty-tracker.ts leaderboard
``` ```
Expected: `Found 0 merged bounty PRs` (or more if you already have bounty PRs). Then create a test PR with `bounty:docs` label, merge it, verify the Discord notification appears.
### Test 2: Test a webhook notification ## Step 8: Seed the 55-Tool Blitz
Create a test PR, add the `bounty:docs` and `difficulty:easy` labels, merge it, and verify: Post all bounties at once on launch day:
- GitHub Action `Bounty completed` runs successfully
- A message appears in `#integrations-announcements`
- If the contributor is in `contributors.yml`, Lurkr XP is awarded
### Test 3: Verify Lurkr role rewards **Documentation (41 issues):** `bounty:docs`, `difficulty:easy`, 20 pts
**Health checks (40 issues):** `bounty:code`, `difficulty:medium`, 30 pts
Check that role rewards are configured: **Testing (55 issues):** `bounty:test`, `difficulty:medium`, 20 pts
```
/levels role-rewards
```
## Step 8: Seed the 55-Tool Blitz (Day 1)
Post all bounties at once on launch day. Use the bounty issue template for each:
**Documentation bounties (41 issues):**
- Title: `[Bounty]: Write README for {tool_name}`
- Bounty type: `Write README (20 pts)`, Difficulty: `Easy`
- Labels: `bounty:docs`, `difficulty:easy`
**Health check bounties (40 issues):**
- Title: `[Bounty]: Add health checker for {tool_name}`
- Bounty type: `Add Health Checker (25 pts)`, Difficulty: `Medium`
- Labels: `bounty:health-check`, `difficulty:medium`
**Agent test bounties (55 issues):**
- Title: `[Bounty]: Agent test for {tool_name}`
- Bounty type: `Agent Test Report (30 pts)`, Difficulty: `Medium`
- Labels: `bounty:agent-test`, `difficulty:medium`
### Tools missing READMEs ### Tools missing READMEs
@@ -193,38 +125,18 @@ powerbi, redis
## Verification Checklist ## Verification Checklist
After setup, verify everything works: - [ ] Labels exist (`bounty:*` and `difficulty:*`)
- [ ] Discord channels and roles created
- [ ] Labels exist on the repo (`bounty:*` and `difficulty:*`) - [ ] Lurkr installed, XP configured, role rewards set
- [ ] Discord channels created and permissions set
- [ ] Discord roles created in correct order
- [ ] Lurkr installed, leveling enabled, XP configured
- [ ] Lurkr role rewards set for levels 5 and 15
- [ ] Lurkr API key is Read/Write
- [ ] All 3 GitHub secrets added - [ ] All 3 GitHub secrets added
- [ ] `bounty-completed.yml` workflow exists and is enabled - [ ] Both workflows enabled (`bounty-completed.yml`, `weekly-leaderboard.yml`)
- [ ] `weekly-leaderboard.yml` workflow exists and is enabled - [ ] Test PR + merge triggers Discord notification
- [ ] Test PR + merge triggers notification in Discord
- [ ] `contributors.yml` exists at repo root - [ ] `contributors.yml` exists at repo root
## Troubleshooting ## Troubleshooting
**Action runs but no Discord message:** **No Discord message:** Check `DISCORD_BOUNTY_WEBHOOK_URL` secret and Action logs.
- Check the `DISCORD_BOUNTY_WEBHOOK_URL` secret is set correctly
- Check the webhook channel still exists and the webhook hasn't been deleted
- Check the Action logs for error messages
**Lurkr XP not awarded:** **Lurkr XP not awarded:** Confirm API key is Read/Write, contributor is in `contributors.yml`, check Action logs for `Lurkr XP push failed`.
- Confirm `LURKR_API_KEY` and `LURKR_GUILD_ID` secrets are set
- Confirm the API key is Read/Write (not read-only)
- Confirm the contributor has linked their Discord ID in `contributors.yml`
- Check Action logs for `Lurkr XP push failed` messages
**Role not assigned after level up:** **Role not assigned:** Verify `/levels role-rewards` config. Lurkr's role must be above the roles it assigns in server hierarchy.
- Verify role rewards are configured: `/levels role-rewards`
- Lurkr assigns roles on level-up, not retroactively. The user may need to send a message or run `/rank` to trigger it
- Verify Lurkr's role is above the roles it needs to assign in the server role hierarchy
**Weekly leaderboard not posting:**
- The cron schedule is Monday 9:00 UTC. Check that the workflow is enabled
- Manually trigger: Actions > Weekly bounty leaderboard > Run workflow
+5 -11
View File
@@ -68,13 +68,10 @@ interface LeaderboardEntry {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
const POINTS: Record<string, number> = { const POINTS: Record<string, number> = {
"bounty:smoke-test": 10, "bounty:test": 20,
"bounty:agent-test": 30,
"bounty:docs": 20, "bounty:docs": 20,
"bounty:health-check": 25, "bounty:code": 30,
"bounty:bug-fix": 40,
"bounty:new-tool": 75, "bounty:new-tool": 75,
"bounty:promote": 50,
}; };
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@@ -275,13 +272,10 @@ function formatBountyNotification(bounty: BountyResult): string {
: `**${bounty.contributor}**`; : `**${bounty.contributor}**`;
const typeEmoji: Record<string, string> = { const typeEmoji: Record<string, string> = {
"smoke-test": "\u{1F9EA}", test: "\u{1F9EA}",
"agent-test": "\u{1F916}",
docs: "\u{1F4DD}", docs: "\u{1F4DD}",
"health-check": "\u{1FA7A}", code: "\u{1F527}",
"bug-fix": "\u{1F41B}", "new-tool": "\u{2B50}",
"new-tool": "\u{1F527}",
promote: "\u{2B50}",
}; };
const emoji = typeEmoji[bounty.bountyType] ?? "\u{1F3AF}"; const emoji = typeEmoji[bounty.bountyType] ?? "\u{1F3AF}";
+7 -10
View File
@@ -10,17 +10,14 @@ REPO="${1:-adenhq/hive}"
echo "Setting up bounty labels for $REPO..." echo "Setting up bounty labels for $REPO..."
# Bounty type labels # Bounty type labels
gh label create "bounty:smoke-test" --repo "$REPO" --color "0E8A16" --description "Bounty: run tool with real API key, report results (10 pts)" --force gh label create "bounty:test" --repo "$REPO" --color "1D76DB" --description "Bounty: test a tool with real API key (20 pts)" --force
gh label create "bounty:agent-test" --repo "$REPO" --color "1D76DB" --description "Bounty: test tool in a real agent workflow (30 pts)" --force gh label create "bounty:docs" --repo "$REPO" --color "FBCA04" --description "Bounty: write or improve documentation (20 pts)" --force
gh label create "bounty:docs" --repo "$REPO" --color "FBCA04" --description "Bounty: write or improve documentation (20 pts)" --force gh label create "bounty:code" --repo "$REPO" --color "D93F0B" --description "Bounty: health checker, bug fix, or improvement (30 pts)" --force
gh label create "bounty:health-check" --repo "$REPO" --color "D93F0B" --description "Bounty: add health check endpoint or checker (25 pts)" --force gh label create "bounty:new-tool" --repo "$REPO" --color "6F42C1" --description "Bounty: build a new integration from scratch (75 pts)" --force
gh label create "bounty:bug-fix" --repo "$REPO" --color "B60205" --description "Bounty: fix a discovered bug (40 pts)" --force
gh label create "bounty:new-tool" --repo "$REPO" --color "6F42C1" --description "Bounty: build a new integration from scratch (75 pts)" --force
gh label create "bounty:promote" --repo "$REPO" --color "C2A000" --description "Bounty: complete full promotion checklist (50 pts)" --force
# Difficulty labels # Difficulty labels
gh label create "difficulty:easy" --repo "$REPO" --color "BFD4F2" --description "Good first contribution" --force gh label create "difficulty:easy" --repo "$REPO" --color "BFD4F2" --description "Good first contribution" --force
gh label create "difficulty:medium" --repo "$REPO" --color "D4C5F9" --description "Requires some familiarity" --force gh label create "difficulty:medium" --repo "$REPO" --color "D4C5F9" --description "Requires some familiarity" --force
gh label create "difficulty:hard" --repo "$REPO" --color "F9D0C4" --description "Significant effort or expertise needed" --force gh label create "difficulty:hard" --repo "$REPO" --color "F9D0C4" --description "Significant effort or expertise needed" --force
echo "Done. Labels created for $REPO." echo "Done. Labels created for $REPO."