<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vaibhav Tomar</title>
    <description>The latest articles on DEV Community by Vaibhav Tomar (@vaibhav_tomar_b2fc1fcbe38).</description>
    <link>https://dev.to/vaibhav_tomar_b2fc1fcbe38</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3048690%2Fd1e34ab3-0fd8-4dfb-b1bd-4994324ba55b.jpeg</url>
      <title>DEV Community: Vaibhav Tomar</title>
      <link>https://dev.to/vaibhav_tomar_b2fc1fcbe38</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vaibhav_tomar_b2fc1fcbe38"/>
    <language>en</language>
    <item>
      <title>BountyDesk: agent-led bug bounty triage with a human-approved verdict</title>
      <dc:creator>Vaibhav Tomar</dc:creator>
      <pubDate>Sun, 30 Aug 2026 17:54:15 +0000</pubDate>
      <link>https://dev.to/vaibhav_tomar_b2fc1fcbe38/bountydesk-agent-led-bug-bounty-triage-with-a-human-approved-verdict-43lm</link>
      <guid>https://dev.to/vaibhav_tomar_b2fc1fcbe38/bountydesk-agent-led-bug-bounty-triage-with-a-human-approved-verdict-43lm</guid>
      <description>&lt;p&gt;Bug bounty triage has an automation trap.&lt;/p&gt;

&lt;p&gt;It is tempting to take an incoming report, run a few scripted checks, and post a&lt;br&gt;
canned answer. That is fast, but it is not a triage desk. Real triage needs&lt;br&gt;
judgment. The system has to know which target is authorized, whether the report&lt;br&gt;
is in scope, what actually happened during reproduction, and when a human needs&lt;br&gt;
to stop the machine before it speaks for the program.&lt;/p&gt;

&lt;p&gt;BountyDesk is my answer to that problem: an agent-assisted bug-bounty triage desk&lt;br&gt;
built on the TrueForge agent harness.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FVaibhav91one%2Fbountydesk%2F5a9e2fdac63b954146f64ae775e078e6aa5d8fa4%2Fdocs%2Fscreenshots%2Fapproval-gate.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FVaibhav91one%2Fbountydesk%2F5a9e2fdac63b954146f64ae775e078e6aa5d8fa4%2Fdocs%2Fscreenshots%2Fapproval-gate.png" alt="BountyDesk approval gate showing an agent-drafted verdict waiting for a reviewer to approve or deny" width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The product promise is visible at the gate: the agent can draft, but a human&lt;br&gt;
has to approve or deny the exact words.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The platform takes a GitHub issue, authenticates it through a GitHub App webhook,&lt;br&gt;
binds it to a server-owned target profile, and sends it to a TrueForge agent.&lt;br&gt;
The agent investigates the report against an isolated target sandbox, drafts a&lt;br&gt;
verdict, and calls an approval-gated tool. The reporter receives nothing until a&lt;br&gt;
human approves the exact comment.&lt;/p&gt;

&lt;p&gt;The shortest version is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub issue
  -&amp;gt; signed intake
  -&amp;gt; durable worker
  -&amp;gt; TrueForge agent session
  -&amp;gt; sandbox investigation
  -&amp;gt; approval-gated verdict draft
  -&amp;gt; reviewer approval
  -&amp;gt; idempotent GitHub comment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last line matters. The system does not auto-close reports, and it does not&lt;br&gt;
let the model publish directly. The agent does the work. The human signs the&lt;br&gt;
output.&lt;/p&gt;
&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;The system is split into a control plane, an agent runtime, and a target runtime.&lt;br&gt;
That split is the main design decision. The browser never talks directly to&lt;br&gt;
TrueForge, Daytona, GitHub installation tokens, or the database. BountyDesk owns&lt;br&gt;
identity, target binding, queue leases, immutable verdict rows, approvals, and&lt;br&gt;
delivery.&lt;/p&gt;

&lt;p&gt;TrueForge owns the investigation. The agent receives the report, uses scoped&lt;br&gt;
tools, probes the bound target, and drafts a verdict. Daytona owns the target&lt;br&gt;
runtime. For the demo, Juice Shop starts from a pinned snapshot so the live run&lt;br&gt;
does not depend on cloning or installing packages at demo time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FVaibhav91one%2Fbountydesk%2F917a883d15eaa8454bb213c5b76d2a426284150b%2Fdocs%2Fscreenshots%2Fbountydesk-architecture-primary.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FVaibhav91one%2Fbountydesk%2F917a883d15eaa8454bb213c5b76d2a426284150b%2Fdocs%2Fscreenshots%2Fbountydesk-architecture-primary.png" alt="Modern BountyDesk architecture diagram showing GitHub issue intake, Next.js control plane, Postgres queue, TrueForge agent, Daytona sandbox, and human approval gate" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The useful boundary is simple: GitHub identity is not repository authority, the&lt;br&gt;
agent investigates inside a sandbox, and only an approved verdict can leave the&lt;br&gt;
platform.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The board is a planning reference. The text here is the current MVP claim:&lt;br&gt;
GitHub issue intake is wired, email and file upload stay on the roadmap.&lt;/p&gt;

&lt;p&gt;The data path is intentionally boring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub App webhook
  -&amp;gt; Next.js API route
  -&amp;gt; Postgres durable job
  -&amp;gt; worker lease
  -&amp;gt; TrueForge session
  -&amp;gt; BountyDesk MCP tools
  -&amp;gt; Daytona target sandbox
  -&amp;gt; immutable verdict row
  -&amp;gt; approval decision
  -&amp;gt; delivery worker
  -&amp;gt; GitHub issue comment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Idempotency is based on the inbound delivery. Delivery safety is based on the&lt;br&gt;
approved content hash. Repository authority is based on the GitHub App&lt;br&gt;
installation and the server-held target profile.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;p&gt;The stack is small on purpose.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FVaibhav91one%2Fbountydesk%2F5d536a9ad2618b5f3b6a28d639a1b097794b075c%2Fdocs%2Fscreenshots%2Fbountydesk-tech-stack-strip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FVaibhav91one%2Fbountydesk%2F5d536a9ad2618b5f3b6a28d639a1b097794b075c%2Fdocs%2Fscreenshots%2Fbountydesk-tech-stack-strip.png" alt="BountyDesk tech stack with Next.js, React, TypeScript, Tailwind CSS, Postgres, Supabase, GitHub, Docker, TrueForge, MCP tools, and Daytona sandbox" width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The stack stays intentionally small: TypeScript for the app, Postgres for durable state, TrueForge for the agent runtime, and Daytona for the target sandbox.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;What BountyDesk uses&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;App&lt;/td&gt;
&lt;td&gt;Next.js App Router, React, TypeScript, npm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI&lt;/td&gt;
&lt;td&gt;Tailwind CSS, Base UI primitives, lucide/react icons, developer-icons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;Postgres on Supabase, Drizzle ORM, &lt;code&gt;drizzle-kit&lt;/code&gt; migrations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queue&lt;/td&gt;
&lt;td&gt;Durable Postgres jobs table with leases and worker ticks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent runtime&lt;/td&gt;
&lt;td&gt;TrueForge sessions, tools, skills, subagents, approvals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tools&lt;/td&gt;
&lt;td&gt;MCP endpoints for &lt;code&gt;publish_verdict&lt;/code&gt; and scope-guard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sandbox&lt;/td&gt;
&lt;td&gt;Daytona for the hackathon target runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;GitHub App webhooks, installation lifecycle, short-lived installation tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review&lt;/td&gt;
&lt;td&gt;Qodo-reviewed pull requests, protected &lt;code&gt;main&lt;/code&gt;, required build checks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The important choice is Postgres as the queue. BountyDesk needs real row locks&lt;br&gt;
and &lt;code&gt;SELECT ... FOR UPDATE SKIP LOCKED&lt;/code&gt;, because a webhook handler should return&lt;br&gt;
quickly while a worker owns the long-running investigation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The break this exists for
&lt;/h2&gt;

&lt;p&gt;Security teams get a lot of reports that need the same first pass:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this actually for a repository we own?&lt;/li&gt;
&lt;li&gt;Is the report in scope?&lt;/li&gt;
&lt;li&gt;Can the behavior be reproduced?&lt;/li&gt;
&lt;li&gt;Is there enough evidence for a useful response?&lt;/li&gt;
&lt;li&gt;Has a similar report already arrived?&lt;/li&gt;
&lt;li&gt;What should we say back to the reporter?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most automation helps with one slice. It deduplicates reports, runs a scanner,&lt;br&gt;
or sends a template. BountyDesk tries to make the whole loop coherent.&lt;/p&gt;

&lt;p&gt;The core idea is that intake and reproduction are separate.&lt;/p&gt;

&lt;p&gt;Today, a report arrives through GitHub issue intake. The domain model leaves&lt;br&gt;
room for email and file upload later, but those channels are not wired for live&lt;br&gt;
delivery yet. Intake can authenticate and store a report without needing to run&lt;br&gt;
code. Reproduction is different. Reproduction requires a server-authorized&lt;br&gt;
target profile. If a report has no bound target, the system refuses to claim&lt;br&gt;
&lt;code&gt;REPRODUCED&lt;/code&gt; or &lt;code&gt;NOT_REPRODUCED&lt;/code&gt;, even if the agent tries to assert it.&lt;/p&gt;

&lt;p&gt;That boundary is deliberate. The model is allowed to investigate. It is not&lt;br&gt;
allowed to grant itself access.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FVaibhav91one%2Fbountydesk%2F5a9e2fdac63b954146f64ae775e078e6aa5d8fa4%2Fdocs%2Fscreenshots%2Freview-board.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FVaibhav91one%2Fbountydesk%2F5a9e2fdac63b954146f64ae775e078e6aa5d8fa4%2Fdocs%2Fscreenshots%2Freview-board.png" alt="BountyDesk review board with triaging, reproducing, and awaiting approval columns" width="800" height="685"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The board shows the work by state: triaging, reproducing, and waiting on a&lt;br&gt;
reviewer.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What TrueForge does in BountyDesk
&lt;/h2&gt;

&lt;p&gt;TrueForge is the runtime that turns this from a prompt into an actual agent&lt;br&gt;
workflow.&lt;/p&gt;

&lt;p&gt;In BountyDesk, TrueForge gives the agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A persisted session for the report.&lt;/li&gt;
&lt;li&gt;MCP tools for scope checks, target probes, and verdict drafting.&lt;/li&gt;
&lt;li&gt;A sandbox where the agent can run investigation steps.&lt;/li&gt;
&lt;li&gt;Skills that describe how to work with demo targets.&lt;/li&gt;
&lt;li&gt;Subagents for splitting up analysis.&lt;/li&gt;
&lt;li&gt;A native approval pause before irreversible output.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The approval gate is central to the design. The agent calls &lt;code&gt;publish_verdict&lt;/code&gt;&lt;br&gt;
with its drafted outcome, summary, and findings. The platform freezes that exact&lt;br&gt;
payload and waits. If the reviewer approves, the same payload is delivered to&lt;br&gt;
GitHub. If the reviewer denies, the verdict stays inside BountyDesk and nothing&lt;br&gt;
is posted.&lt;/p&gt;

&lt;p&gt;There is no mutable second copy of the outbound comment. The approved content&lt;br&gt;
hash has to match the verdict payload at delivery time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The demo target
&lt;/h2&gt;

&lt;p&gt;The current demo target is &lt;code&gt;Vaibhav91one/juice-shop&lt;/code&gt;, pinned to commit&lt;br&gt;
&lt;code&gt;1867b926c5f50e4e692dc9c8f61821413cebe0cd&lt;/code&gt;, the &lt;code&gt;v17.3.0&lt;/code&gt; tag.&lt;/p&gt;

&lt;p&gt;The target is built ahead of time and run from an immutable Daytona snapshot.&lt;br&gt;
That means the reproduction sandbox does not need to clone the repository or&lt;br&gt;
install dependencies during the live run. It starts from a known target image and&lt;br&gt;
the agent investigates the report from there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FVaibhav91one%2Fbountydesk%2F5a9e2fdac63b954146f64ae775e078e6aa5d8fa4%2Fdocs%2Fscreenshots%2Ftarget-binding.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FVaibhav91one%2Fbountydesk%2F5a9e2fdac63b954146f64ae775e078e6aa5d8fa4%2Fdocs%2Fscreenshots%2Ftarget-binding.png" alt="BountyDesk target binding diagram showing the connected repository, trusted controller, and Daytona target runtime" width="800" height="685"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The repository, BountyDesk controller, and target runtime are separate on&lt;br&gt;
purpose. The connected repo is source, not authority.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That decision keeps the demo honest. The target is real, but the demo is not&lt;br&gt;
betting on live dependency installs or network drift.&lt;/p&gt;

&lt;h2&gt;
  
  
  The proof
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;One real GitHub issue. One real Daytona sandbox run. One approved GitHub&lt;br&gt;
comment. Zero duplicate comments on webhook replay.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;BountyDesk has already completed a real end-to-end proof against Juice Shop using&lt;br&gt;
the earlier deterministic canary pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A real GitHub issue was filed.&lt;/li&gt;
&lt;li&gt;The signed webhook was accepted.&lt;/li&gt;
&lt;li&gt;The durable worker created the session.&lt;/li&gt;
&lt;li&gt;The target ran in a real Daytona sandbox.&lt;/li&gt;
&lt;li&gt;The SQL injection scenario was reproduced.&lt;/li&gt;
&lt;li&gt;A human approved the exact outbound comment.&lt;/li&gt;
&lt;li&gt;BountyDesk posted a real GitHub issue comment.&lt;/li&gt;
&lt;li&gt;Replaying the same delivery did not create a duplicate report or duplicate
comment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That proof is important because it exercises the shape of the real system:&lt;br&gt;
intake, queue, sandbox, approval, and delivery.&lt;/p&gt;

&lt;p&gt;The newer agent-authored flow is now merged. In that flow, the TrueForge agent&lt;br&gt;
investigates and drafts its own verdict instead of receiving a precomputed answer&lt;br&gt;
from the server. That path is the right architecture, and it still needs its own&lt;br&gt;
fresh live proof before I would call it fully demo-proven.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FVaibhav91one%2Fbountydesk%2F5a9e2fdac63b954146f64ae775e078e6aa5d8fa4%2Fdocs%2Fscreenshots%2Freports-index.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FVaibhav91one%2Fbountydesk%2F5a9e2fdac63b954146f64ae775e078e6aa5d8fa4%2Fdocs%2Fscreenshots%2Freports-index.png" alt="BountyDesk reports index with search, filters, and report statuses" width="800" height="685"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The reports index is the audit trail. The board can hide closed work, but the&lt;br&gt;
index should hide nothing.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The safety model
&lt;/h2&gt;

&lt;p&gt;BountyDesk is designed around a few hard rules.&lt;/p&gt;

&lt;p&gt;The GitHub App is the source of repository access. OAuth login proves reviewer&lt;br&gt;
identity. It does not grant repository scope. The app installation decides which&lt;br&gt;
repositories the platform can receive reports for and comment on.&lt;/p&gt;

&lt;p&gt;The server owns the target profile. The agent cannot pick a repository by name&lt;br&gt;
from the report and use that as authority. Clone, deploy, probe, and delivery&lt;br&gt;
all resolve through server-held state.&lt;/p&gt;

&lt;p&gt;The sandbox status file only means target readiness. It can say the target&lt;br&gt;
started and answered a health check. It cannot decide severity, reproduction, or&lt;br&gt;
outbound content.&lt;/p&gt;

&lt;p&gt;State-changing target calls are gated. Read probes are available to the agent,&lt;br&gt;
but write probes go through an approval path.&lt;/p&gt;

&lt;p&gt;No bound target means no reproduced verdict. The run can still produce analysis,&lt;br&gt;
but the server will not accept a reproduced or not-reproduced claim without an&lt;br&gt;
authorized target.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Qodo changed
&lt;/h2&gt;

&lt;p&gt;Qodo was not a checkbox on this project. It found real bugs in the parts where&lt;br&gt;
small mistakes would matter.&lt;/p&gt;

&lt;p&gt;In the GitHub App intake path, it found race conditions around installation&lt;br&gt;
lifecycle events and job enqueueing. Those fixes moved access checks and queue&lt;br&gt;
insertion into the same transaction and added row locks and concurrency tests.&lt;/p&gt;

&lt;p&gt;In the TrueForge approval path, it found deadline and cleanup bugs that could&lt;br&gt;
leave harness state wrong after a timeout.&lt;/p&gt;

&lt;p&gt;In the reproduction orchestrator, it found weak spots in the evidence path:&lt;br&gt;
header handling, body hashing, readiness behavior, and cleanup.&lt;/p&gt;

&lt;p&gt;In the verdict path, it found places where the older publish flow could blur the&lt;br&gt;
line between the agent drafting a verdict and a reviewer executing one.&lt;/p&gt;

&lt;p&gt;In the target profile work, it caught a more serious platform bug:&lt;br&gt;
caller-selected target names could bind or rotate the wrong repository profile.&lt;br&gt;
The fix now derives the repository-to-profile mapping server-side before target&lt;br&gt;
state changes.&lt;/p&gt;

&lt;p&gt;That review loop made the platform less impressive on paper and more reliable in&lt;br&gt;
practice, which is the right trade.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is still not claimed
&lt;/h2&gt;

&lt;p&gt;There are a few things I am intentionally not pretending are done.&lt;/p&gt;

&lt;p&gt;Email and file upload intake are designed, but not wired for live delivery.&lt;/p&gt;

&lt;p&gt;The fully automated arbitrary-repository build tier is designed, but not shipped.&lt;br&gt;
Today, target compatibility can be handled with registered target profiles and&lt;br&gt;
reviewed manifests.&lt;/p&gt;

&lt;p&gt;DVWA, WebGoat, and CVE labs are useful practice targets, but they are not the&lt;br&gt;
same thing as a report-shaped BountyDesk run unless they go through target&lt;br&gt;
binding, approval, and delivery.&lt;/p&gt;

&lt;p&gt;Daytona is the hackathon demo sandbox layer. The production version needs&lt;br&gt;
stronger isolation for untrusted code, likely microVMs with host-side egress&lt;br&gt;
denial.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would build next
&lt;/h2&gt;

&lt;p&gt;The next step is a fully dynamic repository path.&lt;/p&gt;

&lt;p&gt;When a program connects a repository, BountyDesk should inspect it, propose a&lt;br&gt;
target manifest, build it in a separate build sandbox with narrow dependency&lt;br&gt;
egress, and move only a verified artifact into the reproduction sandbox. The&lt;br&gt;
reproduction sandbox should have no external egress.&lt;/p&gt;

&lt;p&gt;The important part is that the repository can suggest how it runs, but it cannot&lt;br&gt;
authorize itself. The platform still has to own the target profile, commit pin,&lt;br&gt;
artifact hash, approval gate, and delivery boundary.&lt;/p&gt;

&lt;p&gt;That is the version that gets closest to the product I wanted: connect a repo,&lt;br&gt;
receive a report, watch an agent investigate it live, and approve the exact&lt;br&gt;
answer before the reporter sees it.&lt;/p&gt;

</description>
      <category>trueforge</category>
      <category>aiagents</category>
      <category>security</category>
    </item>
  </channel>
</rss>
