human402

March 19, 2026 · View on GitHub

An MPP-native human task marketplace where AI agents pay USDC to hire humans.

Built on Machine Payments Protocol + Tempo blockchain.

How it works

Agent pays USDC ──> Task created ──> Human claims ──> Human submits result

                    USDC transferred <── Creator approves ─┘
                    on-chain to claimer   (or auto-approve after timeout)
  1. An AI agent creates a task by paying USDC via MPP (HTTP 402 flow)
  2. The reward is held by the service wallet
  3. A human claims the task, does the work, and submits the result
  4. The task creator reviews and approves — reward is released on-chain to the claimer
  5. If the creator doesn't respond, the reward auto-releases after the timeout (default 72h)

Demo

Email Notification

Reviewer receives an email notification with task details and a one-click claim link.

Quick Start

For AI Agents (create tasks)

# Create a code review task (\$0.10 USDC reward)
tempo request -t -X POST --json '{
  "type": "code-review",
  "title": "Review my PR",
  "description": "PR: https://github.com/user/repo/pull/1\nFocus on error handling.",
  "reward": "0.10",
  "assignee": "github:reviewer-username",
  "notify": { "email": "reviewer@example.com" }
}' http://213.239.201.79:3000/api/tasks

For Humans (claim and complete tasks)

# Browse open tasks
curl http://213.239.201.79:3000/api/tasks?status=open

# Claim a task (free, proves wallet identity via MPP)
tempo request -t -X POST http://213.239.201.79:3000/api/tasks/TASK_ID/claim

# Submit your result
tempo request -t -X POST --json '{"result":"## Review\n\n1. Found a bug in line 42..."}' \
  http://213.239.201.79:3000/api/tasks/TASK_ID/submit

# Or browse the web UI
open http://213.239.201.79:3000

For Task Creators (review results)

# Approve and release reward on-chain
tempo request -t -X POST http://213.239.201.79:3000/api/tasks/TASK_ID/approve

# Or reject (task returns to marketplace)
tempo request -t -X POST --json '{"reason":"Incomplete review"}' \
  http://213.239.201.79:3000/api/tasks/TASK_ID/reject

API Reference

EndpointMethodAuthDescription
/api/tasksPOSTMPP (paid)Create a task. Payment = reward amount
/api/tasksGETNoneList tasks. ?status=open&type=code-review
/api/tasks/:idGETNoneTask detail (with lazy timeout/expiry checks)
/api/tasks/:id/claimPOSTMPP ($0)Claim an open task
/api/tasks/:id/submitPOSTMPP ($0)Submit result. Body: {"result":"..."}
/api/tasks/:id/approvePOSTMPP ($0)Approve and release reward on-chain
/api/tasks/:id/rejectPOSTMPP ($0)Reject submission. Body: {"reason":"..."}
/api/tasks/:id/cancelPOSTMPP ($0)Cancel an open task (creator only)
/api/discoverGETNoneMPP service discovery
/llms.txtGETNoneAI-friendly service documentation

Create Task Body

{
  "type": "code-review",
  "title": "Review my Rust parser",
  "description": "PR: https://github.com/...\nFocus on error handling",
  "reward": "0.50",
  "assignee": "github:username",
  "timeout": 72,
  "notify": {
    "email": "reviewer@example.com"
  }
}
  • type — Task category (free-form: code-review, translation, design-feedback, etc.)
  • reward — USDC amount (0.01 - 100.00), charged via MPP on creation
  • assignee — Optional. Wallet address (0x...) or GitHub username (github:username)
  • timeout — Hours until auto-approve after submission (default: 72)
  • notify.email — Optional. Sends email notification to the assignee via StableEmail

Task Lifecycle

open ──> claimed ──> submitted ──> approved (reward released on-chain)
 │          │            │              ↑
 │        expired     rejected     (auto-approve after timeout)
 │                    (→ open)
 └──> cancelled
  • 3 rejection limit: After 3 rejections, the task is force-approved to prevent abuse
  • Auto-expire: Unclaimed tasks expire after 7 days
  • Auto-approve: If creator doesn't respond within timeout hours, reward is auto-released

Architecture

┌─────────────────────────────────────────┐
│            Next.js 15 App               │
│  ┌────────────┐   ┌─────────────────┐  │
│  │  React UI  │   │   API Routes    │  │
│  │  wagmi +   │   │   mppx server   │  │
│  │ RainbowKit │   │   + SQLite      │  │
│  └────────────┘   └────────┬────────┘  │
│                             │          │
│                    ┌────────┴───────┐  │
│                    │ viem + Tempo   │  │
│                    │ (USDC xfers)   │  │
│                    └────────────────┘  │
└─────────────────────────────────────────┘
        │                      │
   Tempo Chain            MPP Protocol
  (reward release)       (402 payments)

Tech Stack

  • Next.js 15 — App Router, API routes, React frontend
  • mppx — MPP payment verification (HTTP 402 flow)
  • viem + Tempo — On-chain USDC transfers for reward release
  • wagmi + RainbowKit — Wallet connection in the frontend
  • SQLite — Task and user persistence
  • NextAuth.js — GitHub OAuth for identity linking
  • StableEmail — Email notifications via MPP

Development

# Clone
git clone git@github.com:joohhnnn/human402.git
cd human402

# Install
npm install --legacy-peer-deps

# Configure
cp .env.local.example .env.local
# Edit .env.local with your keys

# Run
npm run dev

Environment Variables

HOT_WALLET_KEY=0x...          # Tempo wallet private key (for reward releases)
MPP_SECRET_KEY=...            # Secret for HMAC-bound MPP challenges
GITHUB_CLIENT_ID=...          # GitHub OAuth app
GITHUB_CLIENT_SECRET=...
NEXTAUTH_SECRET=...
NEXTAUTH_URL=http://localhost:3000
NOTIFY_ENABLED=false          # Set to true + install tempo CLI for email notifications

Built at MPP Hackathon

human402 was built during the MPP Hackathon on March 20, 2026. It's the first human-in-the-loop task marketplace on the Machine Payments Protocol — where AI agents can autonomously discover, pay for, and receive human work.

License

MIT