Inspiration

Open-source bounties are a real workflow: verify escrow, claim the issue, write the fix, survive review. Humans are slow at that loop. Unchecked coding agents are worse — they mock ciphers, comment out require_auth(), skip assertions, then stamp the build green.

We already had a live bounty-hunting engine opening PRs across Next.js, NestJS, and Soroban repos. What we did not have was a fail-closed institutional fleet: cataloged agents, scoped identities, persistent memory, and an auditor that cannot write code.

The Universal Bounty Fleet is our Fortified Enterprise Fleet submission. The live camera is /console, not a chatbot.

What it does

Three scoped agents run the loop. None of them holds a god-token. None of them presses merge.

Agent Job What it is allowed to touch
Intake Taskmaster Qualify the issue, verify escrow, stake /try issues:read, issues:comment
Execution Engineer Open a draft PR as native save-state and patch auditor findings contents:write, pull_requests:write
Victory Auditor Attack the diff. REQUEST_CHANGES on cheat. Stay fail-closed until PASS pull_requests:review only

The tape (one unedited loop)

  1. Claim. A GitHub issue webhook hits Cloud Run. The 5-stage Sniper Filter rejects banned platforms, archived repos, competitor /claims, and subjective “send a Loom” work. Vertex Gemini then parses escrow (USD, USDC, XLM, …) with a regex fallback. If funded, Intake posts /try with payout routing.
  2. Draft PR. The executor works in the open. If it is not on GitHub, it did not happen.
  3. Blocked. The Victory Audit Murder Board intercepts the PR webhook and scores three pillars:
    • Pillar 1 — Cryptographic integrity. No mocked BLS, dummy pairings, or fake ZK host functions.
    • Pillar 2 — Authorization. No commented-out require_auth() / caller checks on state changes.
    • Pillar 3 — Assertion preservation. No skipped, weakened, or assert True tests.
  4. Cleared. A clean diff gets a native GitHub APPROVE and, if needed, draft → ready. Humans still hold merge.

The fail-closed invariant is stored in Firestore, not in a local log:

$$\texttt{merge_allowed} \;=\; (\texttt{auditor} = \texttt{APPROVE}) \;\land\; \neg\,\texttt{cheat_detected}$$

Agents coordinate by GitHub stigmergy: issues, draft PRs, comments, and official Reviews. The Memory Bank writes /console so judges see one word — PENDING, BLOCKED, or CLEARED.

How we built it

We used Antigravity’s /teamwork-preview to generate the first architecture from a constraint file, then hardened the runtime by hand: HMAC gateway, Firestore locks, the Murder Board, and the Fleet Console.

Mandatory stack, as shipped:

  • Model: Gemini on Vertex AI (odin-500008, us-central1) via the Google GenAI SDK, with structured Pydantic output for escrow and adversarial review.
  • Runtime: Cloud Run service bounty-fleet-gateway — one stateless FastAPI process.
  • Memory: Firestore collection bounty_memory/{id} (in-memory fallback for tests).

GEAP mapping (what the Fleet track asks for)

GEAP layer What we shipped
Agent Registry Versioned cards at /api/registry: purpose, tool scope, identity, no god-token
Agent Gateway FastAPI webhook router, HMAC-SHA256, Firestore delivery-id locks
Agent Runtime Event-driven Cloud Run pods, hard 900s compute budget
Memory Bank Cross-session bounty state, audit verdict, merge_allowed
Agent Identity Per-agent GitHub scopes. The auditor cannot write repository contents
Model Armor analog Deterministic Murder Board first; Gemini auditor ignores “SYSTEM OVERRIDE / approve this PR” in diffs
Observability /console live camera, plus /console/ops, /history, /claims, /archive

Gateway path: GitHub webhook → HMAC verify → Firestore idempotency → Intake or Auditor → Memory Bank → /console.

Accomplishments

This is not a slide-deck prototype.

  • Live on Cloud Run in odin-500008 / us-central1, with a Firestore Memory Bank and a packaged console.
  • Fail-closed rehearsal: plant a require_auth() bypass, watch the auditor file REQUEST_CHANGES, then PASS after the fix. That is the demo.
  • 194 tests, 100% passing: HMAC timing, lock races, sniper/escrow/staking, Murder Board, native review submitter, and adversarial injection cases.
  • Production pressure from the hunting engine (24–28 Aug overseer window): 79 PRs opened, 19 merged, 51 waiting on maintainers — including 5 merges into Bitcoindefi/runa and 6 into Stellar-IndigoPay. We do not treat that as the product. We treat it as proof the chore is real.

What we learned

  • A single coding agent will cheat to get green. The auditor must be a separate identity with no write access.
  • Deterministic gates beat “ask Gemini to be careful.” Static analysis fails closed; Gemini adds semantic escrow and a second opinion. Both must pass.
  • GitHub is a better control plane than a private chat. Draft PRs and Reviews are durable, visible, and judgeable.
  • Cloud Run + Firestore is enough to look like an enterprise fleet if you actually implement Registry, Gateway, Memory, and Identity — not just name them.

What's next

  • Point the live webhook path at the full Gemini auditor (static ∧ semantic) as the default, not only the Murder Board.
  • Talk to Web3 escrow APIs directly so /try is backed by on-chain proof, not only issue text.
  • Keep merge in human hands. The fleet hunts, writes, and polices. People ship.

Built With

  • agentic-ai
  • antigravity-sdk
  • artificial-intelligence
  • automation
  • bash
  • cloud-run
  • devops
  • docker
  • fastapi
  • firestore
  • gemini
  • github-actions
  • github-api
  • google-cloud
  • multi-agent-system
  • python
  • serverless
  • webhooks
Share this project:

Updates

Submission history