Skip to content

Latest commit

 

History

History
109 lines (88 loc) · 4.58 KB

File metadata and controls

109 lines (88 loc) · 4.58 KB

GitHub issue-to-bounty drafts

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 create discovery 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.

Interfaces

  • 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.

Social mention rollout gate

The API now exposes the complete Farcaster distribution path:

  • POST /v1/social/webhooks/neynar verifies Neynar's HMAC-SHA512 signature over the exact raw request body, accepts cast.created bot 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/readiness reports the canonical gate, database, webhook identity, and reply-signer boundaries without returning a secret; and
  • POST /v1/social/mention-draft-plan and MCP plan_social_mention_draft remain available for deterministic planning.

Social drafting remains disabled unless both conditions hold:

  1. an operator explicitly sets AGENT_BOUNTIES_SOCIAL_MENTION_DRAFTS_ENABLED=true; and
  2. the hosted API's indexed Base feed contains at least three distinct GitHub-issue-attributed bounties with confirmed BountyBecameClaimable and at least two with confirmed BountySettled.

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.

Local checks

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