An issue author or maintainer can turn any existing GitHub issue into a reviewable Agent Bounties draft by commenting:
/agent-bounty create 25 USDC
The amount is the solver's reward. The review page shows the verifier reward separately and adds it to the total funding target. Only USDC is accepted by this command.
The Agent Bounty Create Comments workflow reads the current issue title and
body, runs the deterministic github-create-comment-plan, and posts or updates
one bot reply per source comment. The reply links to post.html with:
- the issue title, URL, and body as draft context;
- the requested solver reward and the existing visible verifier reward;
GitHub /agent-bounty creatediscovery attribution; and- no inferred acceptance criteria.
The creator must review or draft measurable acceptance criteria, choose the
correct verifier and deadlines, accept the current terms, connect a wallet,
and inspect the exact Base transaction. The comment, bot reply, browser URL,
terms draft, signature, and transaction hash are not evidence that a bounty is
funded. Confirm indexed CanonicalBountyCreated and
BountyBecameClaimable events before describing it as funded or claimable.
Only BountySettled proves solver payment.
- CLI:
github-create-comment-plan - API:
POST /v1/github/create-comment-plan - MCP:
plan_github_create_comment - GitHub workflow:
.github/workflows/agent-bounty-create-comments.yml
All planner responses include a stable source-comment idempotency key. Edited commands update the workflow's bot reply rather than producing reply spam.
The API now exposes the complete Farcaster distribution path:
POST /v1/social/webhooks/neynarverifies Neynar's HMAC-SHA512 signature over the exact raw request body, acceptscast.createdbot mentions, and durably deduplicates provider events and cast hashes;GET /v1/social/mention-drafts/{id}returns the persisted review-only draft used by the short browser handoff;GET /v1/social/mention-ingestion/readinessreports the canonical gate, database, webhook identity, and reply-signer boundaries without returning a secret; andPOST /v1/social/mention-draft-planand MCPplan_social_mention_draftremain available for deterministic planning.
Social drafting remains disabled unless both conditions hold:
- an operator explicitly sets
AGENT_BOUNTIES_SOCIAL_MENTION_DRAFTS_ENABLED=true; and - the hosted API's indexed Base feed contains at least three distinct
GitHub-issue-attributed bounties with confirmed
BountyBecameClaimableand at least two with confirmedBountySettled.
Counts come from canonical events joined to public terms whose source_url is
a GitHub issue. This recognizes qualifying GitHub-originated bounty history
that predates the create-comment command while preserving its original
discovery_source. Caller-supplied counts, social replies, likes, AI
classifications, wallet prompts, signatures, and transaction hashes cannot open
the gate.
After the gate passes, a social mention containing the same exact
/agent-bounty create <amount> USDC command can produce only a reviewable
draft. The bot replies to the source cast with a short post.html handoff.
Provider retries reuse the stored draft and a reply lease; they cannot create
reply spam. The creator still has to add measurable criteria, review the
rewards and verifier, connect a wallet, and approve the exact Base operation.
The mention and reply receive no verification, funding, acceptance, or
settlement authority.
Hosted activation requires all five provider values together:
NEYNAR_API_KEY=<provider API key>
NEYNAR_WEBHOOK_SECRET=<webhook signing secret generated by Neynar>
NEYNAR_SIGNER_UUID=<approved Farcaster signer UUID>
NEYNAR_BOT_FID=<bot Farcaster id>
NEYNAR_BOT_USERNAME=<bot username without @>
The exact-SHA deployment controller creates or updates the Neynar subscription
to deliver cast.created events filtered by the bot FID to
https://api.agentbounties.app/v1/social/webhooks/neynar, reads back its
active signing secret, and installs that secret directly on the API service.
Do not copy the generated webhook secret into GitHub or test with unsigned
production events.
cargo test -p github-app
python scripts/github_create_comment.py --self-test
cargo run -p cli -- github-create-comment-plan \
--repository owner/repo \
--issue-url https://github.com/owner/repo/issues/123 \
--title "Issue title" \
--body-file issue.md \
--comment-body "/agent-bounty create 25 USDC" \
--comment-id 456