<?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: kurumi</title>
    <description>The latest articles on DEV Community by kurumi (@kurumi_82661ed12516efd1f7).</description>
    <link>https://dev.to/kurumi_82661ed12516efd1f7</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%2F4048368%2Fa5614e53-8b67-4f82-8845-5accfbee27a4.jpg</url>
      <title>DEV Community: kurumi</title>
      <link>https://dev.to/kurumi_82661ed12516efd1f7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kurumi_82661ed12516efd1f7"/>
    <language>en</language>
    <item>
      <title>Your AI agent finished the task. Who decides if it's good enough to pay for?</title>
      <dc:creator>kurumi</dc:creator>
      <pubDate>Thu, 15 Oct 2026 02:15:41 +0000</pubDate>
      <link>https://dev.to/kurumi_82661ed12516efd1f7/your-ai-agent-finished-the-task-who-decides-if-its-good-enough-to-pay-for-4b5l</link>
      <guid>https://dev.to/kurumi_82661ed12516efd1f7/your-ai-agent-finished-the-task-who-decides-if-its-good-enough-to-pay-for-4b5l</guid>
      <description>&lt;p&gt;If you've built anything agentic past a demo, you've hit this wall. The agent can write the SQL, draft the doc, summarize the repo. The hard part isn't generating the output — it's the acceptance step. Someone has to look at it and decide: is this done? Is it good enough to pay for?&lt;/p&gt;

&lt;p&gt;Right now that "someone" is almost always a human. That's fine when you're one dev reviewing your own agent. It breaks the moment you want an agent to do work for &lt;em&gt;someone else&lt;/em&gt; — or hire another agent — and get paid without a person in the loop.&lt;/p&gt;

&lt;p&gt;The usual options are all bad:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The buyer decides.&lt;/strong&gt; They can reject anything and keep the money. Workers learn not to trust them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The platform decides.&lt;/strong&gt; Now a $2 task waits in a support queue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests decide.&lt;/strong&gt; Great for code with a spec. Useless for "write a clear explainer" or "propose a governance design."&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Making acceptance explicit
&lt;/h2&gt;

&lt;p&gt;I've been submitting work to &lt;a href="https://bounties.verdikta.org" rel="noopener noreferrer"&gt;Verdikta Bounties&lt;/a&gt; for a few weeks, and the interesting idea there is to make the acceptance step itself explicit and automated:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The creator locks ETH in an escrow contract on Base. The contract has no cancel or edit function, so the terms can't move after you start working.&lt;/li&gt;
&lt;li&gt;The bounty ships with a rubric — weighted criteria, some marked as hard gates — and a pass threshold.&lt;/li&gt;
&lt;li&gt;The submission is scored by a jury of different models (the bounties I've worked on use an OpenAI model and an Anthropic model, weighted 50/50). Their justifications are stored on IPFS.&lt;/li&gt;
&lt;li&gt;Score at or above the threshold → the contract pays. Below → it doesn't.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The rubric is just JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"concrete-example"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"References a specific, real result — not generic claims."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"weight"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"must"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Flip &lt;code&gt;must&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; and that criterion becomes a gate: miss it and the weights don't matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it looks like on real bounties
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://bounties.verdikta.org/bounty/190" rel="noopener noreferrer"&gt;Bounty #190&lt;/a&gt;&lt;/strong&gt; asked for a SQL query that finds the second-highest salary in each department. Threshold 88. One submission came in, the jury scored it 98, and it paid out — no review meeting, no invoice, no "let me circle back."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://bounties.verdikta.org/bounty/182" rel="noopener noreferrer"&gt;Bounty #182&lt;/a&gt;&lt;/strong&gt; went the other way. It asked for a high-level proposal for an autonomous AI DAO, threshold 95. Seven submissions scored between 83 and 93 — solid work by most standards — and none of them passed. The bounty only paid out once a submission scored 96. The bar wasn't negotiable, which is exactly what you want when you're the one paying.&lt;/p&gt;

&lt;p&gt;My own receipt: a marketing bounty with an 88 threshold that I passed with a 91. Honestly, my first attempts didn't even get scored — the oracle timed out and I had to resubmit. It's young infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why agent builders should care
&lt;/h2&gt;

&lt;p&gt;Swap "human hunter" for "agent" and you get the primitive agent marketplaces are missing: a buyer and a worker who don't trust each other's judgment, both trusting a published rubric and a multi-model jury instead. Hunters prepay a small evaluation fee, so spamming submissions isn't free. There's also an &lt;code&gt;agents.txt&lt;/code&gt; and an API, so an agent can find bounties, submit and finalize without a browser.&lt;/p&gt;

&lt;p&gt;It won't replace unit tests where you have a spec. But for the large class of work where "good" is a judgment call, it's the first setup I've used where that judgment is written down &lt;em&gt;before&lt;/em&gt; the work starts.&lt;/p&gt;

&lt;p&gt;If you're building agents that get paid for fuzzy work — what are you using for acceptance today? Genuinely curious what's working.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>web3</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Steelmanning the case against on-chain AI verification</title>
      <dc:creator>kurumi</dc:creator>
      <pubDate>Fri, 09 Oct 2026 02:40:48 +0000</pubDate>
      <link>https://dev.to/kurumi_82661ed12516efd1f7/steelmanning-the-case-against-on-chain-ai-verification-35h0</link>
      <guid>https://dev.to/kurumi_82661ed12516efd1f7/steelmanning-the-case-against-on-chain-ai-verification-35h0</guid>
      <description>&lt;p&gt;1/12&lt;/p&gt;

&lt;p&gt;I get paid for work that an AI jury verifies on chain. That means I have every incentive to sell you the idea that verification belongs on a blockchain. So let me do the opposite first: I will make the case against it as strongly as I can, and only then say what survives.&lt;/p&gt;

&lt;p&gt;Three objections, each stated at full strength before any answer. Then the one point where the skeptic is right today and I have nothing to say in return.&lt;/p&gt;

&lt;p&gt;2/12 - Objection one: the oracle problem is not solved by a signature&lt;br&gt;
Start with the fatal one. A chain can prove who asserted something and that they staked money on the assertion. It cannot prove the assertion is true. Everything downstream - the escrow, the commit-reveal, the staking, the published rubric - operates on a claim that entered the system as unverified text. If the input is wrong, the output is wrong, and now it is wrong with a timestamp, a signature and a transaction hash behind it.&lt;/p&gt;

&lt;p&gt;That last part is what makes this objection worse rather than better. A wrong claim in a private chat is a wrong claim. A wrong claim that has been signed, paid for and settled is a wrong claim wearing the costume of an audited one. The mechanism does not reduce the lie; it launders it. Garbage in, signed garbage out, and the signature is the most dangerous component because it is the part humans trust without checking.&lt;/p&gt;

&lt;p&gt;There is a second, quieter version of the same objection: an AI jury grading a factual claim is a model guessing about a world it cannot observe. Ask a text panel whether a shop was open at 14:00 UTC and it will produce a confident, well-formatted answer that is simply its prior about shops. The system pays for that answer.&lt;/p&gt;

&lt;p&gt;3/12 - What answers the oracle objection&lt;br&gt;
What answers it. Not a promise of truth - a narrower scope plus inspectable reasoning. Two mechanisms do the work. First, evidence pinning: the artifact under evaluation is content-addressed, so a verdict can always be traced to the exact bytes that produced it, and a later reader can see what was judged rather than what someone now says was judged. Second, per-criterion published scores: the jury has to return a number for each rubric criterion with its reasoning attached, which means a verdict is a document that can be argued with, not a black-box yes or no.&lt;/p&gt;

&lt;p&gt;What that still does not fix. A pinned lie is still a lie. Pinning changes the question from "is the verdict fair" to "was the input true", and only the second question matters - and the system can only answer it for claims whose ground truth is public and cheap to re-check. A posted price, a merged pull request, a transaction hash, a published timetable: those are checkable. Whether a market felt confident, whether a design was original, whether a summary was fair - those are not, and no amount of on-chain machinery makes them so. Any honest description of this category has to say that out loud, because the failure mode is not that the oracle lies. The failure mode is that it answers anyway.&lt;/p&gt;

&lt;p&gt;4/12 - Objection two: you can spend more on judging the work than the work was worth&lt;br&gt;
Now the economic objection, which is the one that actually kills projects. Every verdict costs money and time. On a bounty worth 0.0015 ETH, a single submission attempt costs a 0.00024 ETH prepay plus oracle fees plus gas, and then you wait minutes - sometimes much longer - for a number that might be a rejection. You have built a machine where the cost of judging is a meaningful fraction of the value of the work, and where the payer is the person who has not yet been paid.&lt;/p&gt;

&lt;p&gt;The incentive structure gets worse from there. If evaluation is expensive, the rational creator writes fewer, larger bounties, which concentrates the market and locks out exactly the small, weird, high-variance tasks that a permissionless system is supposed to unlock. Meanwhile the hunter absorbs the cost of every failed attempt, which is a regressive tax on trying. The skeptic's summary writes itself: this is a dispute-resolution system priced for disputes worth thousands, pointed at work worth pennies, and it will either price itself out or subsidise itself into insolvency.&lt;/p&gt;

&lt;p&gt;5/12 - What answers the cost objection&lt;br&gt;
What answers it. Escrowed payout, multi-model settlement, and commit-reveal ordering. The escrow matters because it removes the payer's discretion: the money is committed before the work exists, so a creator cannot accept the work and then decline to pay. Multi-model panels matter because they make a verdict less dependent on one vendor's mood. Commit-reveal matters because jurors commit to an answer before anyone can see the panel's lean, which removes the cheapest collusion path - reading the room and following it.&lt;/p&gt;

&lt;p&gt;On cost specifically, the honest answer is that the fee should track the stake, not the artifact. The oracle does not need to cost the same to judge a haiku and a contract audit; it needs to cost a small fixed fraction of what is at risk, so that a micro-bounty is cheap to judge precisely because there is little to fight over.&lt;/p&gt;

&lt;p&gt;What that still does not fix. A floor is real. Below some payout, the cost of judging exceeds the value of judging, and the correct move is to keep the task off chain entirely. Anyone who tells you that on-chain verification is appropriate at every scale is selling something. It is appropriate where the stake is large enough to fund a verdict and the claim is checkable enough to be worth one - and that is a narrower set of tasks than the pitch deck implies.&lt;/p&gt;

&lt;p&gt;6/12 - Objection three: a verdict is a sample, not a measurement&lt;br&gt;
The third objection is the one insiders rarely say plainly. A verdict from a language model panel is not a measurement of quality. It is one draw from a distribution. Submit the same text twice and you get two numbers, and the spread is not noise around a stable truth - it is the truth of the system, which is that it has no stable truth.&lt;/p&gt;

&lt;p&gt;I can give this objection my own receipts rather than a hypothetical. Six submissions to a single bounty, scored between 86 and 93 against a threshold of 94. Never crossed. The content was revised between rounds and the scores moved, but they moved inside a band, and the band sat below the line. Which of those two facts is the finding - that the work was not good enough, or that the line was drawn in a place the system could not reach - is not something the score can tell you.&lt;/p&gt;

&lt;p&gt;It gets sharper when a panel member fails. If one of two jurors errors out and the other returns a score, the composite becomes one model's opinion plus a conservative floor. Nothing in the verdict announces this. The number looks exactly like a normal number. A submission can be capped by an infrastructure fault and read as a content verdict, and the hunter will spend real money rewriting prose to chase a gap that rewriting cannot close.&lt;/p&gt;

&lt;p&gt;7/12 - What answers the variance objection&lt;br&gt;
What answers it. Publish the rubric before submissions open, with weights and per-criterion descriptions, and have the panel return a score per criterion. That converts a verdict from an oracle into an audit: a reader can see which criterion fell short, by how much, and whether the reasoning is coherent. Add staked jurors and permissionless entry, and the cost of capturing the panel rises above the value of capturing it, which is the only durable defence.&lt;/p&gt;

&lt;p&gt;What that still does not fix. A panel narrows the spread. It does not remove it. Two models agreeing is evidence, not proof, and it does not change the fact that at the threshold, luck decides. If a submission scores 93 against a line at 94, resubmitting near-identical work may cross by accident - and the reverse is equally true. Publishing per-criterion scores makes that visible, which is an improvement over hiding it, but visible variance is still variance. If the payout structure only pays at the top, the system inherits a lottery.&lt;/p&gt;

&lt;p&gt;8/12 - Where rivals do it better: Kleros&lt;br&gt;
I am not going to pretend the design I am defending is state of the art, because two adjacent systems do parts of this better and a fair reading has to say so.&lt;/p&gt;

&lt;p&gt;Kleros has run staked, appealable juries since 2018. In its General Court a juror costs 0.005 ETH per round, and an appeal scales the jury 3, then 7, then 15, then 31, with roughly three days per phase. That is real game theory: economic finality, escalating cost for the losing side, and a court tiered by stake rather than by promise. It also runs a curation court at around 0.00017 ETH per juror for smaller questions, which is a cheaper design than most people assume. Where it beats a two-model panel is credibility under dispute: it can survive someone genuinely trying to buy a verdict. Where it loses is latency and cost - it is a dispute process, not an evaluation one, and pointing it at a 0.0015 ETH writing bounty would be absurd.&lt;/p&gt;

&lt;p&gt;9/12 - UMA and Chainlink&lt;br&gt;
UMA's optimistic oracle takes the opposite trade. A proposer bonds an answer, a liveness window runs, and a dispute escalates to a token-holder vote. It is cheap and fast because it assumes most answers are uncontested, which is right most of the time. It is built for numeric facts - a price, a timestamp, a resolution outcome - and it degrades badly on prose, where "disputed" is the default condition rather than the exception.&lt;/p&gt;

&lt;p&gt;Chainlink is often cited in these conversations and mostly does not belong in them. It delivers data and runs off-chain computation with a strong track record on the delivery side. Adjudicating a subjective claim is not a job it does, and treating it as an adjudication layer misreads what it is.&lt;/p&gt;

&lt;p&gt;10/12 - Attestations prove less than they sound like&lt;br&gt;
Then there are the attestation systems, which are useful and routinely oversold. EAS records who attested what, with a schema and a timestamp. ERC-8004 registries anchor agent identity so a claim can be attributed to a specific agent. TEE attestation proves which code ran and what it returned. All three are genuinely valuable, and none of them makes the input true. A TEE makes garbage in, garbage out provable, which is an improvement in auditability and precisely nothing on the oracle problem. If you hear someone claim otherwise, that is the claim to press on.&lt;/p&gt;

&lt;p&gt;11/12 - The concession&lt;br&gt;
Here is the point on which the skeptic is simply right today, and I will not dress it up: for most claims about the world, "verified on chain" means signed and staked, not true. Not verified. Not proven. Signed by someone who put money behind it. Where the claim's ground truth is public and cheap to re-check - a posted price, a merged pull request, a transaction hash - the mechanism does real work. Where it is not, the mechanism produces a confident artifact around an unverifiable statement, and calling that truth is the failure mode this entire category keeps committing.&lt;/p&gt;

&lt;p&gt;The category's actual value proposition is much narrower than its marketing. It is not "verify anything". It is: take a claim that a stranger could in principle check, attach the evidence, pay an independent panel to score it against a rubric published in advance, commit the money before the work exists, and publish the reasoning so the decision can be argued with afterwards. That is a real thing, and it is a small thing.&lt;/p&gt;

&lt;p&gt;12/12 - What survives&lt;br&gt;
An escrowed payout, so the person who benefits from a "yes" cannot withhold it. A rubric published before the work exists, so the target is not moved after the fact. A multi-model panel with commit-reveal ordering, so a verdict is not one vendor's mood and the cheapest collusion path is closed. Published per-criterion scores, so the reasoning is inspectable rather than merely authoritative. And a scope limit stated out loud, so the system is not pointed at claims it cannot check.&lt;/p&gt;

&lt;p&gt;None of that solves the oracle problem. All of it beats the alternative it is actually competing with, which is not some ideal of objective truth - it is a private yes or no from whoever holds the money, delivered whenever they feel like it, with no rubric, no rationale, and no recourse. Compared to that, a signed, staked, checkable, appealable answer is a large improvement. Compared to truth, it is a receipt.&lt;/p&gt;

&lt;p&gt;Where the world can check the claim, this beats a private decision. Where it cannot, the honest move is to say so instead of shipping a signature and calling it verification.&lt;/p&gt;

&lt;p&gt;Written for Verdikta bounty #146. The system discussed here is AI-evaluated, escrow-settled work on Base: bounties.verdikta.org. The author is a hunter on that platform, which is disclosed in the first line and is the reason this article argues against its own interest first.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>blockchain</category>
      <category>crypto</category>
      <category>web3</category>
    </item>
    <item>
      <title>How to Create Your First AI-Evaluated Bounty (Step by Step)</title>
      <dc:creator>kurumi</dc:creator>
      <pubDate>Fri, 04 Sep 2026 09:41:00 +0000</pubDate>
      <link>https://dev.to/kurumi_82661ed12516efd1f7/how-to-create-your-first-ai-evaluated-bounty-step-by-step-19bd</link>
      <guid>https://dev.to/kurumi_82661ed12516efd1f7/how-to-create-your-first-ai-evaluated-bounty-step-by-step-19bd</guid>
      <description>&lt;h1&gt;
  
  
  How to Create Your First AI-Evaluated Bounty
&lt;/h1&gt;

&lt;p&gt;If you've ever posted a freelance task and then argued over whether the work "met the bar," you already understand the problem this tutorial solves. Vague briefs plus subjective review equals disputes. The fix isn't more back-and-forth — it's deciding, in advance, exactly what "good" means, and letting an AI evaluator apply that definition consistently.&lt;/p&gt;

&lt;p&gt;This walkthrough uses &lt;a href="https://bounties.verdikta.org" rel="noopener noreferrer"&gt;Verdikta&lt;/a&gt; as the working example, since it's built specifically for AI-evaluated bounties with escrowed payment. By the end, you'll understand the five pieces every bounty needs: a rubric, weights, a threshold, must-pass gates, and funded escrow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "AI-evaluated" changes the incentive structure
&lt;/h2&gt;

&lt;p&gt;In a normal freelance posting, the person who pays is also the person who judges the work — after it's done. That's a conflict of interest baked into the structure, even when everyone involved is acting in good faith. The worker has no way to know, going in, exactly what will satisfy the buyer.&lt;/p&gt;

&lt;p&gt;An AI-evaluated bounty flips the order of operations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You define success criteria &lt;em&gt;before&lt;/em&gt; anyone starts working.&lt;/li&gt;
&lt;li&gt;You fund escrow &lt;em&gt;before&lt;/em&gt; anyone starts working.&lt;/li&gt;
&lt;li&gt;Submissions get scored against the criteria you wrote — not a mood, not a moving target.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The AI model doesn't decide what "good" means. You do. The model just applies your definition consistently, every time, to every submission.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Scope the task tightly
&lt;/h2&gt;

&lt;p&gt;Before writing a rubric, write one sentence describing the deliverable. If you can't compress the task to one sentence, it's not ready for a bounty yet — it's still a discussion.&lt;/p&gt;

&lt;p&gt;Example: &lt;em&gt;"Write a Python function that validates email addresses against RFC 5322 and returns a boolean."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Tight scope makes the rubric easier to write and the evaluation less ambiguous.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Write your rubric — criteria and weights
&lt;/h2&gt;

&lt;p&gt;A rubric is a list of criteria, each with a weight reflecting how much it matters relative to the others. Weights should sum to something predictable (100 is common) so the final score is easy to reason about.&lt;/p&gt;

&lt;p&gt;Here's a sample rubric for the email-validator task, expressed as JSON — the format Verdikta bounties expect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"task"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Python email validator function"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"criteria"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"correctness"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Function correctly validates RFC 5322-compliant emails and rejects invalid ones"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"weight"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"edge_case_handling"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Handles empty strings, unicode domains, and multiple @ symbols without crashing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"weight"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"code_quality"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Readable, follows PEP8, includes type hints"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"weight"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"test_coverage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Includes at least 5 unit tests covering valid and invalid cases"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"weight"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"threshold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"must_pass_gates"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"no_syntax_errors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"function_signature_matches_spec"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few things worth noticing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Each criterion has a plain-language description.&lt;/strong&gt; The AI evaluator reads this, so vague language produces vague scoring. "Good code quality" is worse than "follows PEP8, includes type hints."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weights reflect priority, not just presence.&lt;/strong&gt; Here, correctness matters twice as much as code quality — say so explicitly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The rubric is the contract.&lt;/strong&gt; Once it's published, it shouldn't change mid-bounty. That's the whole point: the worker knows exactly what they're being measured against before they start.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Set your threshold
&lt;/h2&gt;

&lt;p&gt;The threshold is the minimum weighted score a submission needs to pass. In the example above, it's 75 out of 100.&lt;/p&gt;

&lt;p&gt;Setting this number is a judgment call:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Too low&lt;/strong&gt;, and mediocre work gets paid, which defeats the purpose of having a rubric at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Too high&lt;/strong&gt;, and you risk rejecting genuinely useful work over minor gaps, which discourages submissions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A reasonable starting point for most bounties is 70–80. You can always run a small test bounty first to see what typical submissions score, then calibrate the threshold for future postings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Choose your must-pass gates
&lt;/h2&gt;

&lt;p&gt;Gates are binary checks that exist outside the weighted scoring — pass/fail conditions that override everything else. A submission can score 95/100 on the rubric and still fail if it doesn't clear a gate.&lt;/p&gt;

&lt;p&gt;Use gates for non-negotiables: things where "mostly correct" isn't good enough. In the example, &lt;code&gt;no_syntax_errors&lt;/code&gt; and &lt;code&gt;function_signature_matches_spec&lt;/code&gt; are gates — a function that doesn't run, or doesn't match the required signature, shouldn't be scored on style at all.&lt;/p&gt;

&lt;p&gt;Common gate categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it run / compile / execute without error?&lt;/li&gt;
&lt;li&gt;Does it match a required interface or file format?&lt;/li&gt;
&lt;li&gt;Does it avoid prohibited approaches (e.g., "no external libraries")?&lt;/li&gt;
&lt;li&gt;Does it meet a hard legal or safety constraint?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep gates few and unambiguous. Gates that require judgment calls belong in the weighted rubric instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Fund the escrow
&lt;/h2&gt;

&lt;p&gt;This is the step that makes the whole system trustworthy from the worker's side. Once you fund escrow on &lt;a href="https://bounties.verdikta.org" rel="noopener noreferrer"&gt;bounties.verdikta.org&lt;/a&gt;, the payment is locked and can't be quietly withdrawn or renegotiated. A worker submitting to a funded bounty knows the money exists and is reserved for whoever meets the criteria — not contingent on your continued goodwill after the fact.&lt;/p&gt;

&lt;p&gt;Practically, this means:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set the bounty amount.&lt;/li&gt;
&lt;li&gt;Deposit funds into escrow when you publish the rubric.&lt;/li&gt;
&lt;li&gt;The funds stay locked until a submission is evaluated.&lt;/li&gt;
&lt;li&gt;On a passing evaluation, payment releases automatically — no manual approval step required, no room for after-the-fact renegotiation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the piece that closes the trust gap discussed earlier. The rubric defines what "good" means; escrow guarantees that meeting it actually results in payment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: What happens when submissions arrive
&lt;/h2&gt;

&lt;p&gt;Once your bounty is live and funded, here's the flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A worker submits.&lt;/strong&gt; This could be a human, an AI agent, or some hybrid workflow — the bounty doesn't care who or what produced the work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gates are checked first.&lt;/strong&gt; If any must-pass gate fails, the submission is rejected before scoring even begins. No wasted evaluation cycles on disqualified work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weighted scoring runs against the rubric.&lt;/strong&gt; Each criterion gets scored individually, then combined using your weights into a single number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The score is compared to your threshold.&lt;/strong&gt; Above threshold, the submission passes and escrow releases. Below threshold, it doesn't, and the worker sees exactly which criteria fell short.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple submissions, if allowed, get ranked.&lt;/strong&gt; If your bounty accepts multiple attempts, the highest-scoring passing submission wins.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key property here: the evaluation is reproducible. Run the same submission against the same rubric twice, and you get the same result — not a different mood on a different day.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick checklist before you publish
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Task scoped to a single clear sentence&lt;/li&gt;
&lt;li&gt;[ ] Rubric criteria written in plain, specific language&lt;/li&gt;
&lt;li&gt;[ ] Weights assigned and sum to a clean total (e.g., 100)&lt;/li&gt;
&lt;li&gt;[ ] Threshold set based on realistic expectations&lt;/li&gt;
&lt;li&gt;[ ] Must-pass gates limited to true non-negotiables&lt;/li&gt;
&lt;li&gt;[ ] Escrow funded before publishing&lt;/li&gt;
&lt;li&gt;[ ] Rubric reviewed once more — it won't change after workers start submitting&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;The interesting thing about AI-evaluated bounties isn't the AI part — it's that they force you, as the person posting work, to think clearly about what you actually want &lt;em&gt;before&lt;/em&gt; you ask someone else to produce it. Most disputes in freelance work come from ambiguity, not dishonesty. Writing the rubric is the real work; the evaluation just enforces it consistently.&lt;/p&gt;

&lt;p&gt;If you want to try this yourself, head to &lt;a href="https://bounties.verdikta.org" rel="noopener noreferrer"&gt;bounties.verdikta.org&lt;/a&gt; and post a small bounty with a tightly scoped task. Start with a rubric you could explain to a stranger in thirty seconds — if you can't, that's a sign to scope down further before you publish.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>blockchain</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How Verdikta Decides Whether a Bounty Gets Paid — A Plain-Language Guide for Newcomers</title>
      <dc:creator>kurumi</dc:creator>
      <pubDate>Thu, 13 Aug 2026 06:24:43 +0000</pubDate>
      <link>https://dev.to/kurumi_82661ed12516efd1f7/how-verdikta-decides-whether-a-bounty-gets-paid-a-plain-language-guide-for-newcomers-3lli</link>
      <guid>https://dev.to/kurumi_82661ed12516efd1f7/how-verdikta-decides-whether-a-bounty-gets-paid-a-plain-language-guide-for-newcomers-3lli</guid>
      <description>&lt;p&gt;If you have ever browsed a bounty marketplace and wondered what happens between the moment you click "Submit" and the moment you receive (or don't receive) your payout, this article is for you. Verdikta is an AI-powered dispute-resolution and bounty-evaluation platform built on the Base blockchain. Below is a step-by-step walkthrough of the system, written so that anyone — developer or not — can follow along.&lt;br&gt;
The Two Roles: Creator and Hunter&lt;br&gt;
Every Verdikta bounty starts with a creator. The creator does three things:&lt;br&gt;
• Escrows ETH — locks a payout amount into a smart contract so that the money is guaranteed to be there when the bounty closes.&lt;br&gt;
• Writes a rubric — a checklist that tells evaluators exactly what "good work" looks like and how much each aspect matters.&lt;br&gt;
• Sets a pass threshold — a minimum score (for example 80%) that a submission must reach before the escrow is released.&lt;br&gt;
On the other side is the hunter. The hunter reads the bounty description, produces the requested work (an article, a code module, a design, etc.), and submits it through the platform. Once submitted, the hunter's work enters the evaluation pipeline — and that is where the AI jury takes over.&lt;br&gt;
The AI Jury: Multiple Models, One Verdict&lt;br&gt;
Verdikta does not rely on a single opinion. Instead, it assigns each submission to a jury of independent AI models — typically two or more large language models from different providers (for example, OpenAI's GPT and Anthropic's Claude). Each model receives the submission, the rubric, and any supporting files, then scores every rubric criterion on its own.&lt;br&gt;
Why use more than one model? The same reason courts use juries: a single evaluator can miss context or be biased. By asking several models to evaluate independently and then weighting their scores (for example, 50% model A and 50% model B), the platform reduces the chance that one model's quirks determine the outcome. The weighted average becomes the aggregate score, which is compared against the creator's threshold to produce a binary verdict: FUND (pay the hunter) or DON'T FUND (reject).&lt;br&gt;
Understanding the Rubric&lt;br&gt;
The rubric is the heart of every Verdikta bounty. It has two kinds of criteria:&lt;br&gt;
Scored Criteria (Weight &amp;gt; 0)&lt;br&gt;
Each scored criterion carries a weight between 0 and 1, and all weights together sum to 1.0. For example, a bounty might define Clarity (weight 0.30), Technical accuracy (weight 0.40), and Completeness (weight 0.30). Each AI model assigns a score to every criterion. The platform multiplies each criterion score by its weight, sums the results, and — after combining the models' outputs according to the jury weights — produces the final aggregate score.&lt;br&gt;
Must-Pass Gates (Weight = 0)&lt;br&gt;
Some criteria are must-pass gates. They carry a weight of 0, which means they do not contribute positively to the score, but they can hard-fail a submission. If any AI model marks a must-pass gate as "fail," that model's entire evaluation is set to zero — regardless of how well the submission scored on everything else. Common examples include: "The submission must include a live public URL" and "The article must have been published for at least 24 hours." Must-pass gates exist to enforce hard requirements that the creator considers non-negotiable. A beautifully written article that is missing the required URL will still score 0%.&lt;br&gt;
Threshold and Payout&lt;br&gt;
After the AI jury finishes its evaluation, the platform compares the aggregate score to the creator's threshold: if the aggregate score meets or exceeds the threshold, the smart contract releases the escrowed ETH to the hunter's wallet (FUND). If it falls short, the escrow returns to the creator and the hunter receives nothing (DON'T FUND). This entire process is transparent and on-chain. The smart contract handles the payout automatically once the evaluation verdict is recorded, so neither party has to trust the other — the code enforces the agreement.&lt;br&gt;
Why This Matters&lt;br&gt;
Traditional freelance platforms rely on human reviewers, which introduces delays, subjectivity, and disputes. Verdikta replaces that with a deterministic, auditable AI pipeline: the rules are public (the rubric), the judges are independent (the AI models), and the payout is automatic (the smart contract). For hunters, it means fast, fair feedback. For creators, it means you only pay for work that meets your standards.&lt;br&gt;
If you are curious, head to bounties.verdikta.org, browse the open bounties, and try submitting your first entry. The system is designed so that anyone can participate — and now you know exactly how it decides who gets paid.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building a Bounty Agent for Verdikta on Base L2 published</title>
      <dc:creator>kurumi</dc:creator>
      <pubDate>Sun, 26 Jul 2026 20:16:20 +0000</pubDate>
      <link>https://dev.to/kurumi_82661ed12516efd1f7/building-a-bounty-agent-for-verdikta-on-base-l2published-3643</link>
      <guid>https://dev.to/kurumi_82661ed12516efd1f7/building-a-bounty-agent-for-verdikta-on-base-l2published-3643</guid>
      <description>&lt;p&gt;Building an Autonomous Agent for Verdikta Bounties: A Technical Deep Dive&lt;br&gt;
How I built a Python agent that monitors, evaluates, and interacts with Verdikta's AI-judged bounty system on Base L2.&lt;/p&gt;

&lt;p&gt;Why Build a Bounty Agent?&lt;br&gt;
Verdikta is a decentralized bounty platform where AI models — GPT-5.2 and Claude Sonnet 4.5 — evaluate submissions and release ETH payments automatically via smart contracts. No human reviewers. No manual payouts. Just code.&lt;/p&gt;

&lt;p&gt;After winning 6+ bounties manually, I wanted to automate the process. The goal: an agent that watches for new bounties, evaluates which ones are worth pursuing, and integrates with Verdikta's API to read data and submit work.&lt;/p&gt;

&lt;p&gt;Architecture&lt;br&gt;
The agent has four components:&lt;/p&gt;

&lt;p&gt;copy&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
verdikta_agent.py&lt;br&gt;
├── VerdiktaAPI          — HTTP client for the Verdikta Bot API&lt;br&gt;
├── BountyMonitor        — Watches bounties, calculates viability scores&lt;br&gt;
├── SubmissionTracker    — Records submission history and statistics&lt;br&gt;
└── ViabilityScorer      — Evaluates ROI: payout vs threshold vs time&lt;br&gt;
VerdiktaAPI Client&lt;br&gt;
The Verdikta Bot API requires authentication via an X-Bot-API-Key header. You register your bot at POST /api/bots/register to get a key.&lt;/p&gt;

&lt;p&gt;Python&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
class VerdiktaAPI:&lt;br&gt;
    def &lt;strong&gt;init&lt;/strong&gt;(self, api_key=None):&lt;br&gt;
        self.session = requests.Session()&lt;br&gt;
        if api_key:&lt;br&gt;
            self.session.headers["X-Bot-API-Key"] = api_key&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def get_bounty(self, bounty_id):
    resp = self.session.get(f"{API_BASE}/jobs/{bounty_id}")
    resp.raise_for_status()
    return resp.json()

def submit_work(self, bounty_id, content):
    return self.session.post(
        f"{API_BASE}/jobs/{bounty_id}/submit",
        json={"content": content}
    ).json()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Key endpoints:&lt;/p&gt;

&lt;p&gt;GET /api/jobs — List bounties (filter by status)&lt;br&gt;
GET /api/jobs/{id} — Bounty details&lt;br&gt;
GET /api/jobs/{id}/submissions — Submission history&lt;br&gt;
POST /api/jobs/{id}/submit — Submit work&lt;br&gt;
BountyMonitor &amp;amp; Viability Scoring&lt;br&gt;
Not all bounties are worth pursuing. The agent calculates a viability score:&lt;/p&gt;

&lt;p&gt;Python&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
def _score_viability(self, bounty):&lt;br&gt;
    payout = bounty["payout_eth"]&lt;br&gt;
    threshold = bounty["threshold"]&lt;br&gt;
    remaining_hours = bounty["remaining_hours"]&lt;br&gt;
    is_targeted = self._is_targeted_to_me(bounty)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Higher threshold = harder = lower viability
difficulty = {92: 0.3, 88: 0.6, 85: 0.8}.get(threshold, 1.0)

# Prefer bounties with more time remaining
time_factor = min(remaining_hours / 168, 1.0)

# Targeted bounties = only you can submit
targeted_bonus = 1.5 if is_targeted else 1.0

score = payout * 1000 * difficulty * time_factor * targeted_bonus
return {"score": score, "rating": "HIGH" if score &amp;gt; 50 else "MED" if score &amp;gt; 20 else "LOW"}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This catches the key insight: a 0.02 ETH bounty with 88% threshold and 13 days left, targeted to your wallet, is worth much more than a 0.002 ETH open bounty with 92% threshold expiring tomorrow.&lt;/p&gt;

&lt;p&gt;Graceful API Fallback&lt;br&gt;
The Verdikta API requires authentication. During development I didn't always have a valid key. The agent falls back to hardcoded bounty data when the API returns 401:&lt;/p&gt;

&lt;p&gt;Python&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
try:&lt;br&gt;
    bounty = self.api.get_bounty(bounty_id)&lt;br&gt;
except requests.HTTPError:&lt;br&gt;
    bounties = self._scrape_bounties()  # Local fallback&lt;br&gt;
    bounty = next(b for b in bounties if b["id"] == bounty_id)&lt;br&gt;
This pattern — try API, fall back to local data — is essential for agents that need to work offline or during API outages.&lt;/p&gt;

&lt;p&gt;On-Chain Integration&lt;br&gt;
The BountyEscrow contract on Base L2 handles payments:&lt;/p&gt;

&lt;p&gt;copy&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Contract: 0x2Ae271f5E86bee449a36B943414b7C1a7b39772D&lt;br&gt;
Network: Base Mainnet (Chain ID: 8453)&lt;br&gt;
The agent reads on-chain data via BaseScan API to verify:&lt;/p&gt;

&lt;p&gt;Bounty funding status&lt;br&gt;
Payment releases to hunter wallets&lt;br&gt;
Submission transaction hashes&lt;br&gt;
This provides independent verification — the agent doesn't trust the API alone, it cross-checks against on-chain state.&lt;/p&gt;

&lt;p&gt;CLI Interface&lt;br&gt;
The agent uses argparse with rich for formatted output:&lt;/p&gt;

&lt;p&gt;Bash&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  List open bounties with viability scores
&lt;/h1&gt;

&lt;p&gt;python verdikta_agent.py --list&lt;/p&gt;

&lt;h1&gt;
  
  
  Check specific bounty
&lt;/h1&gt;

&lt;p&gt;python verdikta_agent.py --check 157&lt;/p&gt;

&lt;h1&gt;
  
  
  Monitor mode (checks every 30 minutes)
&lt;/h1&gt;

&lt;p&gt;python verdikta_agent.py --monitor&lt;/p&gt;

&lt;h1&gt;
  
  
  View submission history
&lt;/h1&gt;

&lt;p&gt;python verdikta_agent.py --history&lt;br&gt;
Example output:&lt;/p&gt;

&lt;p&gt;copy&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
📊 Verdikta Open Bounties&lt;br&gt;
┌─────┬──────────────────────────┬──────────┬───────────┬──────────┬───────────┐&lt;br&gt;
│  #  │ Title                    │ Payout   │ Threshold │ Targeted │ Viability │&lt;br&gt;
├─────┼──────────────────────────┼──────────┼───────────┼──────────┼───────────┤&lt;br&gt;
│ 157 │ I Tried to Cheat a       │ 0.02 ETH │ 88%       │ ✅ You   │ HIGH ⭐   │&lt;br&gt;
│ 158 │ Build an Agent           │ 0.02 ETH │ 88%       │ ✅ You   │ HIGH ⭐   │&lt;br&gt;
│ 160 │ Reddit AMA Post          │ 0.008 ETH│ 85%       │ ❌ Open  │ MEDIUM    │&lt;br&gt;
└─────┴──────────────────────────┴──────────┴───────────┴──────────┴───────────┘&lt;br&gt;
Key Design Decisions&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Read-Only by Default&lt;br&gt;
The agent does NOT send on-chain transactions automatically. It reads data, evaluates bounties, and prepares submissions — but ETH transfers require manual wallet confirmation. This is a safety feature: losing 0.02 ETH to a bad auto-submission isn't worth the automation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dual Verification&lt;br&gt;
Every claim is verified twice: once via the Verdikta API and once via on-chain data. If the two disagree, the agent flags the discrepancy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Submission Tracking&lt;br&gt;
The agent records every submission attempt with score, status, and timestamp. Over time, this builds a dataset of what works: which bounty classes yield highest scores, which rubric criteria are hardest to pass, and which strategies fail.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What I Learned Building This&lt;br&gt;
The Verdikta API Is Bot-Friendly&lt;br&gt;
The X-Bot-API-Key authentication pattern is clean. Register once, use the key forever. The API returns structured JSON that's easy to parse. This is how bounty platforms should work.&lt;/p&gt;

&lt;p&gt;Viability Scoring Saves Time&lt;br&gt;
Not every 0.002 ETH bounty is worth 3 hours of work. The viability score factors in payout, threshold, remaining time, and whether the bounty is targeted. This turned a manual "should I try this?" into an automated decision.&lt;/p&gt;

&lt;p&gt;Fallback Data Is Essential&lt;br&gt;
The API sometimes returns 401 (expired key, rate limit, maintenance). Hardcoding known bounty data as fallback means the agent keeps working even when the API doesn't. This is a pattern I'll use in every API-dependent agent going forward.&lt;/p&gt;

&lt;p&gt;The Real Value Is Tracking&lt;br&gt;
The most useful feature isn't the monitoring or the viability scoring — it's the submission history. After 10+ submissions, you can see patterns: which bounty classes you excel at, which rubric criteria consistently trip you up, and whether your scores are improving over time.&lt;/p&gt;

&lt;p&gt;Next Steps&lt;br&gt;
Auto-generate submissions: Use an LLM to draft submissions based on rubric criteria&lt;br&gt;
Score prediction: Train a model on past submissions to predict scores before submitting&lt;br&gt;
Multi-chain support: Extend to other chains as Verdikta expands&lt;br&gt;
Webhook notifications: Alert via Telegram/Discord when high-viability bounties appear&lt;br&gt;
Try It Yourself&lt;br&gt;
The agent is open source:&lt;/p&gt;

&lt;p&gt;GitHub: github.com/s97472091-pixel/verdikta-agent&lt;/p&gt;

&lt;p&gt;Bash&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
git clone &lt;a href="https://github.com/s97472091-pixel/verdikta-agent.git" rel="noopener noreferrer"&gt;https://github.com/s97472091-pixel/verdikta-agent.git&lt;/a&gt;&lt;br&gt;
cd verdikta-agent&lt;br&gt;
pip install -r requirements.txt&lt;br&gt;
python verdikta_agent.py --list&lt;br&gt;
On-Chain Evidence&lt;br&gt;
Hunter Wallet: 0x1b9cA7b297a736f4FE01256C9e2d499c79dEFFb3&lt;br&gt;
BountyEscrow: 0x2Ae271f5E86bee449a36B943414b7C1a7b39772D&lt;br&gt;
6+ bounties won across math, task-creation, and case study categories&lt;br&gt;
All claims verifiable at bounties.verdikta.org&lt;br&gt;
Code at github.com/s97472091-pixel/verdikta-agent&lt;/p&gt;

</description>
      <category>agents</category>
      <category>crypto</category>
      <category>python</category>
      <category>web3</category>
    </item>
  </channel>
</rss>
