{"slug": "automating-bug-bounty-triage-usually-ends-in-a-disaster-of", "title": "Automating bug bounty triage usually ends in a disaster of", "summary": "A new system called BountyDesk uses an LLM agent to automate bug bounty triage while requiring human approval before any verdict is published, built on the TrueForge agent harness and Daytona sandbox. The pipeline routes GitHub issues through signed intake, a durable Postgres-backed job queue, sandbox investigation, and an approval-gated verdict draft, ensuring AI hallucinations cannot close critical vulnerability reports. The architecture separates control plane, agent runtime, and target runtime to keep web interfaces from accessing sensitive tokens.", "body_md": "# Automating bug bounty triage usually ends in a disaster of\n\nI've been analyzing a setup called BountyDesk, which attempts to solve this by using an LLM agent to do the heavy lifting while keeping a human strictly in the loop for the final verdict. It’s built on the TrueForge agent harness, and the core philosophy is that the agent can draft the response, but it physically cannot publish it without a manual sign-off.\n\n## The Workflow Logic\n\nThe system doesn't just \"chat\" with a bug report. It follows a very specific, hardened data path to ensure that an AI hallucination doesn't accidentally close a critical vulnerability report. Here is how the pipeline actually moves:\n\n``` php\nGitHub issue\n -> signed intake\n -> durable worker\n -> TrueForge agent session\n -> sandbox investigation\n -> approval-gated verdict draft\n -> reviewer approval\n -> idempotent GitHub comment\n```\n\nThe \"approval-gated\" part is the most important bit for anyone running a production security program. The agent performs the investigation inside an isolated sandbox (using Daytona) to see if the bug is actually reproducible. It then drafts a verdict. That verdict sits in a queue until a human reviews the exact wording. Only after that approval does the system post the comment back to GitHub.\n\n## Architecture and Deployment\n\nThe design philosophy here is about separation of concerns. You have three distinct layers: the control plane (BountyDesk), the agent runtime (TrueForge), and the target runtime (Daytona). By splitting these, the system ensures that the web interface never has direct access to sensitive GitHub installation tokens or the sandbox environment.\n\nIf you are looking at the technical implementation, the stack is surprisingly lean, which is great for a reliable deployment:\n\n**Application Layer:** Next.js App Router, React, and TypeScript.**Database & State:** Postgres on Supabase using Drizzle ORM.**Job Queue:** Instead of using a heavy external broker, it uses Postgres with`SELECT ... FOR UPDATE SKIP LOCKED`\n\nfor durable job management.**Agent Intelligence:** TrueForge handles the sessions, sub-agents, and tool calling.**Sandbox Environment:** Daytona provides the runtime where the actual \"investigation\" happens.**Integration:** GitHub App webhooks for intake and short-lived installation tokens for delivery.\n\nOne thing that stood out to me during my deep dive is the use of Postgres as the queue. In a high-volume triage environment, you need real row locks to prevent multiple workers from grabbing the same bug report. Using a durable Postgres job table with worker leases is a much more robust way to handle webhooks than a simple in-memory queue.\n\nIt's a practical tutorial in how to build an AI workflow that actually works in a professional setting. You aren't just letting an LLM loose on your GitHub issues; you are giving it a specialized sandbox, a set of [MCP](/en/tags/mcp/) tools, and a very short leash.\n\n[Next QuEra is using Claude to fix their quantum lasers in seconds →](/en/threads/8387/)\n\n[a guide to making money with AI](https://tanyan888.com/), with plenty of directly applicable cases.", "url": "https://wpnews.pro/news/automating-bug-bounty-triage-usually-ends-in-a-disaster-of", "canonical_source": "https://promptcube3.com/en/threads/8411/", "published_at": "2026-08-31 23:40:06+00:00", "updated_at": "2026-08-31 23:51:54.019936+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "ai-safety"], "entities": ["BountyDesk", "TrueForge", "Daytona", "GitHub", "Postgres", "Supabase", "Drizzle ORM", "Next.js"], "alternates": {"html": "https://wpnews.pro/news/automating-bug-bounty-triage-usually-ends-in-a-disaster-of", "markdown": "https://wpnews.pro/news/automating-bug-bounty-triage-usually-ends-in-a-disaster-of.md", "text": "https://wpnews.pro/news/automating-bug-bounty-triage-usually-ends-in-a-disaster-of.txt", "jsonld": "https://wpnews.pro/news/automating-bug-bounty-triage-usually-ends-in-a-disaster-of.jsonld"}}