Kleros Development Update May

Kleros Development Update May
TL;DR · May 2026

A month of migrations, milestones & merges

  • Atlas v1.6.0 shipped with per-product signup (Court V1, Court V2, Foresight) and a configurable Court reminder time.
  • Scout migrated to Atlas IPFS, hit 2.6M+ addresses, and the definitive version is live.
  • PoH V2 email notifications now cover every step of the profile flow; Atlas processes them end-to-end and the frontend toggle is the last gate before user-facing rollout.
  • Foresight shipped batched redemption; market-resolution email notifications drafted, with a round 2 for movies in planning.
  • Court V2 contract simplification kicked off; partial-coherence dispute kit merged.
  • Vea shipped the Hashi executor decoupling and published the veashi-sdk to npm.
  • Escrow UI & Dispute Resolver both migrated their IPFS uploads to Atlas.
  • KIP-87 (Curation Court on Gnosis with hidden votes) passed governance, but a parameter issue in the queued multisig transaction blocked execution and a new proposal is being drafted.
  • Kleros Skills launched at skills.kleros.io, giving AI agents the knowledge to interact with the protocol.

Now let's dive into product-by-product updates made in May.

Court V1

Court V1 shipped April staking rewards in the rewards exporter; fixed a Rabby-on-mainnet wallet connection issue by routing the chain switch through the wallet API path Rabby supports; and applied the PoH evidence schema normalization so older PoH cases now render their attachments. See the PoH V2 section for the root cause.

⚖️ Kleros Court →

Court V2

On the contracts side, the AI findings were moved into triage, and the partial-coherence dispute kit was merged. Contract simplification work then began across the dispute kits; the next pieces in line are governance removal, sortition tree simplification, and a reworked reward staking mechanism. Forking court specifications work started in parallel, and the V2 specification update is in progress.

On the frontend, type and lint checks across V2 components were finished and merged after a few rounds of fixes. The file viewer was extracted into the Components Library, a custom radio component was added to the same library, and Court V2 itself is being migrated to the latest Components Library version. The DisputeKit frontend refactor is underway.

For the V2 stable migration, existing V2 beta disputes will be archived to IPFS, and the frontend will stitch the archive together with live data from the new stable contracts. The beta dispute archival bot is under initial review.

🛠️ Try Court V2 Devnet →

Scout

Scout reached its definitive version this month. After years of iteration on submission flow, evidence handling, dispute UX, and database unification, the planned feature set is now in. Focus now moves to growing the unified database (above 2.6 million addresses on the homepage) and maintaining the codebase rather than adding features.

The large feedback PR that had been open at the end of April was merged, bringing in the dedicated new-submission page, the transaction-result page, the file viewer, the last-policy-update display, the CPU usage improvements, and the routing migration. A round of UX cleanup followed: font rearchitecture, grid alignment with header and footer, more spacing in the evidence module, breakpoint fixes, layout fixes (the scroll lock issue), and the policy history fix on the second date. The evidence section was pulled out of the modal so users can browse while submitting.

Next came the Atlas IPFS migration. Scout now uploads through Atlas, so submissions and evidence go through the Atlas SIWE flow. Evidence and file uploads were validated against Atlas role restrictions, and the image size limit was sourced from those role restrictions instead of being hardcoded. Appeal funding is now gated. The item details page got distinct tabs for details and evidence, with formatting cleanup alongside.

The submission flow itself was changed so that uploads are deferred until the user signs in at the time of submission. Submission images are persisted in the browser in the meantime, with storage write errors surfaced when they occur. Submission image size is capped on all registries, and the logo policy for the tokens registry is now enforced at submission (max 1MB, min 128×128).

The last feature PR added ATQ duplicate detection and the JavaScript Court to the disputes view, with the latest disputes ordered by descending dispute number. The file viewer is being extracted into the shared components library.

🔍 Open Scout →

Atlas (Backend Services)

Atlas shipped v1.6.0.

The most significant piece of the release is the signup-per-product refactor. The signup service now distinguishes between Court V1, Court V2, and Foresight as separate products. Each gets its confirmation email template, its own unsubscribe URL, and its own onboarding URL where applicable. Court V1 was added as a signup product reusing the Court V2 template for now.

The PoH V2 notification templates went through another round of refinement after feedback. The voucher template was added with its own logic and tests; wording was standardized across templates ("profile included" replacing "humanity claimed" and "challenge accepted/rejected" replacing "won/lost"); and the template wiring for disputed-revoke was fixed. A fallback for missing voucher names is open.

The court reminder time was switched from a percentage of the voting period to a fixed, configurable value, applied to both Court V1 and Court V2 reminders. The change came out of a notification timing discussion: the percentage-based value showing up in the email template felt random rather than reflecting the actual time left to vote. The Court V1 reminder end time is now derived from the persisted schedule instead of being recalculated, which also fixed a wrong end-time bug in the initial notifications.

Transaction simulation was added before batch sends. A few smaller pieces went in alongside: the SendGrid status checker now handles malformed signature parse errors gracefully, the scheduler properly awaits serializable transactions so error handling works, and integration test suites are force-serialized. An RPC fallback warning is logged for non-primary URLs, and file ingestion logging gained detailed metadata.

The Foresight notifications technical proposal was drafted and merged, setting the contract for the email events that the Foresight frontend is already wiring against.

💡
Note: Atlas remains an internal backend library for Kleros development teams only and is not intended for community use or integration.

Vea (Cross-Chain Bridge)

Vea merged two notable changes. The LayerZero contracts were moved under the adapter layout for consistency with the rest of the codebase, and the Hashi executor decoupling PR was merged after the April review pass.

Two more PRs are open. The relayer error-handling refactor came out of a debugging session on duplicate logs: each network-processing cycle was attaching new error listeners without checking whether one was already attached, so over time a single error fired multiple messages. The listener setup has been moved out of the per-network loop; the lock-file cleanup is now independent of chain and network context; and every error now logs the chain and network for context. An RPC provider wrapper handles errors and fallback URLs in both the validator and the relayer, with unit tests for the new logic.

The second open PR is a new Envio HyperIndex-based indexer for the relayer. The indexer was first run for all Vea networks as a separate project, then added to the monorepo and integrated into the relayer, with the existing subgraph kept as a fallback. The VeaShi scanner (the Vea bridge explorer) is being moved into the same monorepo and deployed via Netlify, with its caching issue patched.

The veashi-sdk was published to npm at v0.0.2, giving integrators a first packaged version of the Vea cross-chain SDK to build against.

🌉 Vea →

Learn more and explore the Vea repository.

Kleros Foresight (Futarchy UI)

Futarchy-UI had a heavy month on the master branch. Batch redeem went in. Following that, the redemption value calculation was corrected, a redemption pre-check was added, an on-chain price fetch was added for markets that do not yet have a subgraph entry, resolved answers are now shown on the slider and on each market card, and the market resolution logic was tightened. The size of the success popup icon and the temporary chart workarounds were cleaned up.

Email notifications for Foresight

Email notification support: The Foresight email notification scope landed: a single notification, triggered when a market resolves, telling traders that their position is now redeemable. Sign-up flows through the same per-product Atlas pipeline that Court V1 and Court V2 use, so the unsubscribe and onboarding URLs are Foresight-specific from day one.

Upcoming experiments

New rounds are in planning, including a round 2 for movies, with a public announcement coming soon.

🔮 Try Kleros Foresight →

Proof of Humanity V2

PoH V2 email notifications now cover every step of the profile flow, processed end-to-end by Atlas. Pending revocation, vouching activity, disputed flows, and challenge outcomes, the full lifecycle is wired up. The only piece left is flipping the feature toggle in the frontend so users can opt in at registration. Once that ships, profile owners are notified at every meaningful state transition without any further backend work.

PoH V2 had been writing evidence files with the wrong key, which meant the court and dispute resolver could not render the attachments. The bug that had been silently hiding submission files since the interface launched. The PoH interface was updated to use the correct key for new cases, and Court (#582) and Dispute Resolver (#281) shipped an evidence-normalization workaround that handles older submissions and non-object payloads. In practical terms, every existing PoH case that previously appeared to be missing attachments will now show them correctly across the court and dispute resolver.

The referral system technical specifications went through review, with an auto-disburse version posted afterwards. The security guidance on the referral flow was that only the contract and backend should be trusted for validation, with alerts for suspicious voucher activity. A NextJS 15 security update was applied, the voucher reward distributor contract progressed, and appeal UI/UX work continued.

👤 Register on Proof of Humanity →

Curate V2 and Escrow UI

Curate V2 removed the unused evidence hook and aligned the evidence query with the kleros-core schema migration. A draft PR is open to pull the file viewer in from the shared UI components library.

Escrow UI completed its Atlas IPFS migration, with UX improvements on the agreement upload step. The package manager version was pinned to fix Netlify deploy issues.

Escrow V2 has the same UI components library migration open as a draft, which will bring in the shared file viewer.

Dispute Resolver

Dispute Resolver completed its Atlas IPFS migration, with the SIWE info message added at the upload step and several pre-existing SonarQube issues cleared. A guard for undefined URLs was added to the URL utility functions, and the PoH evidence normalization fix was applied here as well.

Zodiac Bots

Zodiac-bots shipped two fixes. The first normalizes Reality links to use their actual casing. The second handles Reality questions that have no snapshot proposal attached, previously a silent failure mode. Panther Protocol monitoring was set up using its ENS, Snapshot, and contract addresses, with alerts wired into the existing Slack and Telegram channels.

Kleros Website

Treasury data for the prior month was added to the website. The Kleros landing page is being migrated to a new Framer site, with the old website repository archived and made private.

Kleros Skills (AI Agents)

The team has also been working for the past few months on a set of agent-readable knowledge packs for the Kleros protocol. Each one is a self-contained SKILL.md that an AI agent can fetch on demand to interact with the protocol correctly, with the same one-line prompt working across Claude, ChatGPT, Cursor, Codex, and other agent runtimes.

Two packs are in for the first pass:

Kleros IPFS Upload. Pinning files through the Kleros x402 payment gateway for $0.01 USDC on Base, covering dispute evidence, meta-evidence, court policies, Curate item metadata, and juror justifications.

Kleros Curate. We are operating token-curated registries end-to-end (submissions, challenges, appeal funding, and list deployment) across Light Curate, Stake Curate (PGTCR), and Scout on Ethereum and Gnosis.

The roadmap from here includes a Kleros CLI, ERC-8004 agent verification, Escrow v1 and v2, an Arbitrable App Builder entry point, a Why Kleros overview, a Kleros Protocol crypto-economics primer, and a reference for canonical contract addresses. The set is intentionally small at launch and will continue to expand based on agent feedback.

Security & Infrastructure

The AI findings on the V2 contracts were triaged. Issues from the report that overlap with prior reports were noted, including eligibility tightness and gated tokens being transferable. Cross-chain issues from the report were flagged as out of scope but useful for the gateway analysis. The pause feature was confirmed as a critical security feature and stays in.

Two separate ecosystem-level issues were tracked. The Dirty Frag and Copy Fail 2 Linux kernel vulnerabilities prompted an OS update sweep across machines. The npm supply-chain attack against the official TanStack packages was investigated in relation to the Kleros frontends. Dispute Resolver, Court V1, the older Escrow UI, and Escrow V2 are confirmed not to be using the vulnerable versions, while the newer Escrow UI and Escrow V2 are on safe versions.

KIP-87 (Curation Court on Gnosis with hidden votes) passed governance, but the queued multisig transaction was rejected: the parent parameter appeared to point to the existing curation court rather than to a child of the General Court. A new proposal is being drafted with the parameter corrected before retrying. Once the court is created correctly, Curate and Scout governance workflows receive a dedicated venue on Gnosis with sealed voting instead of transparent voting on mainnet.

What's Next

The Court V2 contract simplification continues, with the sortition tree and reward staking mechanism queued next. The forking court specification is in progress alongside the V2 specification update. The DisputeKit frontend refactor and the V2 migration to the latest components library both stay open.

The beta dispute archival bot moves through initial review. The Foresight Factory PR remains open against master, and the new homepage and the kleros-app 2.3.0 compatibility branch sit alongside it. Foresight notifications shift from spec to implementation now that the Atlas-side proposal is merged, and new Foresight experiments, including a round 2 for movies, are queued next.

Vea closes out the relayer error-handling PR and the Envio indexer PR, with the VeaShi scanner moving into the monorepo.

The Atlas-side roadmap covers the rest of the per-product signup rollout, the PoH V2 voucher-name fallback, and continued work around the PoH V2 keeper.

Join the Kleros Community

Build with us, debate with us, govern with us.

Also find us on Twitter · GitHub · Forum