Skip to content

Roadmap

Last updated: 2026-04-15

“The Uber for security audits. Connect your agent, let it work autonomously, and watch it earn.”

Fixed constraint: “Vulnerability information is destroyed after verification.” This is the vision. It does not change.


Companion documents:

  • VISION.md — target architecture and performer agent model
  • MARKET_PRINCIPLES.md — incentives, participant roles, and market design
  • decisions/ — Decision Records (DR-001 through DR-007)
  • Internal: docs/internal/ — ENCRYPTED_DELIVERY_ARCHITECTURE, SIMULATION_TEST_PLAN, CLI_DESIGN, ROFL blockers

Performers connect their own agents (Claude Code, opencode, Hermes, OpenClaw, etc.) to the market. The agents autonomously find bounties, audit code, and collect payment. Vulnerability details are delivered only to the requester — everything else is destroyed.

“When the finder forgets but the fixer remembers, the attack surface shrinks to zero.”

This is not information destruction. It is information sovereignty recovery — vulnerability details belong to the code owner, not to the auditor.


ComponentAddress / Status
LetheMarket v30x2B057b903850858A00aCeFFdE12bdb604e781573 — P0-P2 security fixes applied, 40/30/20/10 payout split, ReputationRegistry integrated, strict mode
ReputationRegistry0x2E0f7b7D3DB49d0A8E0Fd9ab3f02A20ec9cF5706 — asymmetric reputation system
ROFL AuditorIntel TDX TEE — Semgrep-based static analysis, bundled rules (Python/JS/TS/Go/Rust/Solidity)
pora CLI (Rust)pora — bounty creation/lookup, audit result decryption, key management, built-in MCP server
GitHub Applethe-testnet (ID 3334976) — contents:write, pull_requests:write
Encrypted DeliveryX25519+HKDF+AES-256-GCM, HTTP blob storage, on-chain hash anchoring
NotificationsWebhook + Telegram + Discord adapters
  • Bounty created → ROFL performs audit → PoE submitted on-chain (vuln-test-repo#9)
  • pora-market itself registered as a standing audit target (bounty #2, 58 findings)
  • Encrypted report delivery + decryption verified
  • 40/30/20/10 payout split live
  • pora CLI used to query market + create bounties (pora status, pora bounty create)
  • 122 contract tests + 9 delivery tests passing
  • Audit quality is absent. Semgrep is a pattern matcher — all 58 findings are false positives/noise. A code-understanding agent is needed.
  • Only one performer. Just the protocol operator’s ROFL worker. External performers cannot participate.
  • Market interface is incomplete. No MCP server → agents cannot connect to the market.Resolved. pora CLI includes 15 MCP tools + 2 resources. AI agents can now connect to the market.

Optimal evolution sequence, derived from 6-specialist debate (tech lead, security researcher, mechanism designer, legal analyst, red team, ethics challenger) with unanimous agreement on ordering:

IMMEDIATE (no dependencies, parallel execution):
■ Semgrep multi-language ruleset expansion .............. [1 week]
■ Terms of Service + liability disclaimers .............. [legal counsel]
■ Remove findingCount from events (DR-002) .............. [1-2 weeks]
■ Bundle Semgrep rules in container image ............... [2-3 days]
■ Remove sensitive fields from delivery manifest ........ [2-3 days]
SHORT-TERM (1-3 months):
■ Repo ownership verification in TEE worker ............. [2-3 weeks]
■ Payout calculation moved to contract .................. [4-6 weeks]
■ Dispute resolution decentralization — DESIGN .......... [4-6 weeks]
↓ unlocks
MID-TERM (3-6 months):
■ Dispute resolution — IMPLEMENTATION (P7) .............. [6-8 weeks]
↓ makes findingBonus meaningful
↓ unlocks multi-performer
■ Multi-performer foundation (P2) ....................... [8-12 weeks]
↓ requires P7
↓ unlocks feedback loops
■ ROFL resource expansion (P1) .......................... [mainnet provider change]
↓ 4GB = testnet playground_short limit, NOT platform hard limit
↓ mainnet provider/offer can configure 16GB+
↓ unlocks full LLM in TEE (tmux+ralph mode)
LONG-TERM (6-12 months):
■ LLM 3-Tier pipeline in TEE (P3) ...................... [12-16 weeks]
↓ requires P1 (16GB+ RAM — mainnet provider config, not external blocker)
■ Utility token — staking + slashing ONLY (P9) ......... [8-12 weeks]
↓ requires P2 + P7 operational
↓ NO value capture / governance initially
■ Feedback loop — metadata only (P10) .................. [6-8 weeks]
↓ requires P2 + P7
DEFERRED (12+ months):
■ Token value capture / governance ...................... [after market self-sustains]
■ Multi-token / stablecoin payments ..................... [after user base]
■ Cross-chain payment layer ............................. [after PMF on Sapphire]

P7 (dispute) before P2 (multi-performer): Without decentralized dispute resolution, the owner key is a single point of failure for the entire market. findingBonus activation is meaningless if disputes can’t be resolved — bonuses get permanently frozen, and performers rationally optimize for executionFee only. (Mechanism designer + security researcher, independently)

P2 before P9 (token): Without multi-performer, there’s nothing to stake against. Token without market = speculation without utility. P2+P9 simultaneous introduction is “critical risk” — Sybil + token manipulation compound attack. (Red team)

P3-lite before P3-full: Multi-language Semgrep ruleset expansion costs 1 week with zero dependencies. Full LLM pipeline (tmux+ralph) requires 16GB+ RAM, achievable via mainnet provider selection (not an external Oasis blocker). Lightweight LLM integration (claude -p subprocess or Anthropic SDK) is feasible at 4GB on testnet now. Do the cheap win now. (Tech lead, updated 2026-04-15)

CombinationRiskSource
P2 + P9 simultaneousCRITICALSybil + token manipulation
P1 + P2 simultaneousCRITICALLLM non-determinism + multi-performer = dispute explosion
P2 + P9 + P7 simultaneousCRITICALGovernance attack monopolizes disputes

Rule: Validate each premise change before starting the next.


Phase 1: Agents perform real audits ← Now

Section titled “Phase 1: Agents perform real audits ← Now”

Transition from Semgrep pattern matching to LLM agent-based security analysis.

TaskDescriptionStatus
Deploy agent harness into TEEInstall Node.js + Claude Code (or opencode) in Dockerfile. Inject performer API key as ROFL secret. Agent reads code and performs real security analysis.Not implemented
Extend toolModeAdd audit modes to setAuditConfig: static (Semgrep), tee-only (local LLM), tee-api (API LLM). Requester selects allowed modes.Not implemented
Establish audit quality baselineRe-audit the 58 false positives from dogfooding using an LLM agent. Compare Semgrep vs. LLM results.Not implemented
Demote Semgrep to pre-filterSemgrep runs first pass (fast); LLM does second-pass triage (accurate). Semgrep-only results are not submitted.Not implemented

Completion criteria: LLM agent produces meaningful findings when auditing pora-market itself.

LLM Agent Execution Strategy (updated 2026-04-15)

Section titled “LLM Agent Execution Strategy (updated 2026-04-15)”

Design principle: performers choose their own tools. The protocol controls the TEE image (erasure, PoE, delivery) but does NOT dictate which agent or model a performer uses. The ideal end-state is that a performer’s local audit setup — their CLI, model, plugins, prompts — runs identically inside the TEE. The TEE is a secure sandbox, not an opinionated toolchain.

Phase 1 (now): subprocess -p mode. The existing llm_agent.py harness runs claude -p "{prompt}" --output-format json --max-turns 30 as a blocking subprocess. Simple, predictable, works within testnet 4GB. Performer chooses agent (claude-code, opencode, aider) and model via PERFORMER_CONFIG.

Future: interactive session with performer-defined setup. On mainnet (16GB+), the TEE launches the performer’s chosen CLI agent in an interactive tmux session, injecting their preferred mode (ralph, autopilot, custom workflow). The performer’s PERFORMER_CONFIG defines not just which agent to run, but how to run it — including custom prompts, plugins, and execution modes.

Phase 1 (testnet, 4GB):
subprocess: claude -p "{prompt}" --output-format json --max-turns 30
├─ Performer chooses: agent (claude-code/opencode/aider), provider, model
├─ Protocol controls: prompt template, timeout, output schema
└─ Limitation: single pass, no iterative exploration, no plugins/skills
Phase 2 (mainnet, 16GB+):
tmux session: performer's full interactive environment
├─ Performer chooses: agent, mode (ralph/autopilot/custom), plugins, prompts
├─ Protocol controls: result file schema, timeout, erasure
└─ Advantage: autonomous retry, self-verification, deep multi-turn analysis
Target state:
Performer brings their entire audit setup → TEE runs it unchanged
├─ Custom CLAUDE.md / AGENTS.md / OMC skills
├─ Performer-specific Semgrep rules, custom static analysis
├─ Any MCP-compatible agent (Hermes, OpenClaw, custom)
└─ Protocol only enforces: output schema + erasure + delivery

Key insight (2026-04-15): The 4GB RAM limit is the testnet playground_short machine offer, NOT a platform hard limit. Mainnet providers support memory: 16384 or higher via rofl.yaml configuration.

External agents (Hermes, OpenClaw) connect to the market autonomously via the pora MCP.

TaskDescriptionStatus
pora MCP serverpora mcp — stdio JSON-RPC MCP server. 15 tools + 2 resources. All request/performer/system commands exposed via MCP.Done
Performer registration flowpora performer init — wallet + API key setup. --use-claude-login auto-detects Claude Code Max OAuth tokens.Done
pora request resultsRequester runs pora request results AUDIT_ID to download + decrypt encrypted report. X25519+HKDF+AES-256-GCM.Done
MCP live testingAll 15 tools validated (11 success, 4 expected errors with proper error messages). Write round-trip: submit bounty → cancel → verify state.Done
Dogfooding simulationAct as requester commissioning a pora-market audit, and as performer connecting Hermes/OpenClaw. Experience both roles.In progress

Completion criteria: A Hermes agent connects to the market via MCP and autonomously claims and audits a bounty.

Single ROFL worker → multi-performer open market. Requires P7 (dispute resolution) first.

TaskDescriptionStatus
Dispute resolution (P7)Owner-mediated Phase A → independent arbitrator agents in fresh TEE. Gating dependency for multi-performer. See DR-007.Design decided, implementation not started
Multi-performer contractsubmitAuditResult accepts TEE attestations from multiple performers. Bounty claim/lock mechanism. Multiple performers compete on the same bounty.Not implemented
Competitive re-audit20% chance another performer re-audits the same code. Result mismatch triggers automatic dispute.Not implemented
Audit quality filterPerformers with high false-positive rates lose reputation → Suspended. Competition between performers enforces quality.ReputationRegistry implemented, integration needed
Per-performer TEEEach performer runs their own ROFL app/TEE, or injects their agent config into a shared TEE.Design needed

Completion criteria: 2+ independent performers compete on the same bounty.

Invite external testers → observe real participant behavior → remove friction → mainnet.

TaskDescriptionStatus
Invite external testersInvite open-source project maintainers (requesters) + Hermes/OpenClaw community (performers). Target: 3+ independent successful onboardings.Not started
Landing page refreshheliopora.github.io — pora branding + heliopora mascot. “Audit. Earn. Forget.” One-click onboarding guide.In progress — Astro + Starlight site built, brand rename done
Run red team scenariosActually simulate NoFinding spam, dispute flooding, Sybil reputation laundering, and pool drain attacks.Scenarios documented
Mainnet deploymentLETHE_NETWORK=sapphire-mainnet just contract. Strict confidential reads enabled. Real ROSE.Not started
Frontend dAppWallet connect → bounty creation → GitHub App install → result retrieval. Non-developers can participate.Not started

Completion criteria: External participants commission audits with real ROSE on mainnet, and independent performer agents work autonomously.

Business model activation and progressive decentralization of TEE infrastructure.

PhaseModelHow
TestnetFreeNo fees. Focus on market bootstrap and participant onboarding.
Mainnet v1Protocol fee (3%)protocolFeeBps = 300 in contract. Every settlement: 3% → protocol treasury, 97% → performer. Works regardless of who runs the TEE.
Mainnet v2Protocol fee + managed ROFLPerformers who don’t want to self-host TEE pay a convenience markup (e.g., TEE cost + 30% margin). Self-hosters only pay the 3% protocol fee.

Why 3%: Uniswap charges 0.3% (high-frequency), OpenSea 2.5% (NFTs), Code4rena ~10-20% (audits). Security audits are high-value/low-frequency → 3-5% is appropriate.

StageWho runs TEESecret managementTrust model
NowProtocol operator onlyOperator injects via oasis rofl secret setTrust the operator
Mainnet v1Protocol operator, but self-service registrationPerformer encrypts config to TEE public key (RAK) → on-chain storage → TEE decrypts at bootTrust the TEE attestation
Mainnet v2Performers run their own ROFL instancesPerformer manages their own ROFL secretsTrust the approved image hash

Key constraint for per-performer ROFL: the Docker image must be protocol-approved. ROFL attestation includes the image hash. The contract only accepts submissions from TEEs running the approved image. This prevents performers from modifying the image to skip code erasure or exfiltrate code.

Protocol controls: Docker image (analysis pipeline + erasure logic + PoE)
Performer controls: API keys, agent config, model selection, custom prompts
Contract verifies: TEE attestation matches approved image hash
TaskDescription
Performer-defined TEE setupPerformers bring their full audit environment (CLI agent, plugins, custom rules, CLAUDE.md, MCP tools) into the TEE. Protocol only enforces output schema + erasure + delivery. TEE becomes a secure sandbox, not an opinionated toolchain.
Decentralized dispute resolutionOwner-mediated → independent arbitrator agents (re-verification in a fresh TEE)
Domain expansionSmart contract audits → general code review → data integrity verification
Alternative TEE backendsSupport Phala, Marlin, self-hosted SGX/SEV in addition to Oasis ROFL
Token economyStaking + slashing (only after multi-performer operation is stable)
Feedback loopIndividual vulnerabilities are destroyed; detection patterns are fed back as rule sets
PayoutPolicy redesign40/30/20/10 → 15/45/25/15 (base fee reduced, finding bonus increased). NoFindings gets coverage stipend only.

Requester → createBounty(ROSE) → ROFL TEE audits →
findings + patch encrypted to requester → source code erased → PoE on-chain
Requester → createBounty(ROSE/stablecoin) →
Multiple performers sealed-bid → Winner audits in TEE →
Result submitted (contract computes payout) →
Random 20% get second-opinion verification →
Dispute? → Fresh TEE re-verification (not onlyOwner) →
Reputation updated → Findings + patch encrypted to requester → Erasure → PoE
executionFee: 40% — paid for verified execution regardless of result
findingBonus: 30% — released after challenge window
patchBonus: 20% — for safe, applicable patches
regressionBonus: 10% — for regression evidence

Competitive verification with probabilistic sampling (20% random second opinion). Reputation is supplementary signal, not primary mechanism. slashAmount > 5 × (C_audit - C_submit) ensures honest auditing is dominant strategy.


Two active upstream blockers (oasisprotocol/cli#694, oasis-sdk#2223). Current ROFL resource config is 4GB/2vCPU.

Resource limit clarification (2026-04-15): The 4GB limit is NOT a platform hard limit. It is a consequence of the testnet playground_short machine offer (rofl.yaml: offer: playground_short). On mainnet with a different provider/offer, memory: 16384 or higher is configurable. P1 (ROFL resource expansion) resolves naturally at mainnet deployment.

Mitigation: extract AppdClient to Protocol interface, evaluate alternative TEE platforms (Phala, Marlin, self-hosted TDX) within 8-12 weeks if Oasis doesn’t provide adequate mainnet provider offers.

Security Risk: Owner Key Single Point of Failure

Section titled “Security Risk: Owner Key Single Point of Failure”

resolveAuditDispute is onlyOwner. Owner key compromise = total market fund theft. Mitigation: P7 (dispute decentralization) is the highest-priority structural change. Interim: multisig for owner, timelock on critical functions.

Semgrep-only analysis limits market credibility. Known patterns only. Mitigation: LLM integration via subprocess -p mode on testnet (no resource expansion needed), upgrade to tmux+ralph on mainnet.

No frontend. Manual cast send for bounty creation. Mitigation: Terms of Service preparation (immediate), pora CLI (done), web dashboard (mid-term).

Not tested in any jurisdiction. Mitigation: Switzerland/Singapore/ADGM regulatory sandbox entry. GDPR alignment as positive framing. Legal counsel before first paying customer.


TierJurisdictionsConfidenceStrategy
1Switzerland, Singapore, ADGMHighImmediate operation. Regulatory sandbox.
2UK, South KoreaMediumFCA/KISA sandbox. Conditional on legal review.
3US, EULow (initially)Serve customers, but entity + escrow outside.
  1. Lethe destroys the auditor’s copy, not the requester’s. The requester retains findings + patches and can fulfill any reporting obligations (NIS2, CRA).
  2. PoE aligns with GDPR data minimization (Article 5(1)(c)). Unnecessary retention of vulnerability information is itself a security risk.
  3. “Audit” terminology creates implied warranty risk. Terms of Service must define scope as “automated security analysis,” not professional assurance.
  • Propose TEE-based erasure standard to NIST (extending SP 800-88)
  • Join Confidential Computing Consortium (Linux Foundation)
  • Submit NIS2 implementation guidance: “auditor vulnerability retention minimization”
  • Publish legal scholarship: “Information Erasure as Security”

QuarterMilestoneRisk
Q1P0 security fixes + retrieval CLI + multi-language Semgrep + ToS + challenge window live validationLow — most code exists
Q2Dispute resolution design + implementation + payout contract migration + first 5 users (white-glove)Medium — contract restructure
Q3Multi-performer foundation (2+ independent auditors) + mainnet deployment + external contract auditMedium — mainnet provider selection resolves P1
Q4LLM 3-Tier pipeline + competitive verification live + monthly 50+ auditsHigh — market bootstrap

ItemWhyRevisit When
Own tokenExistential regulatory risk. No network effects to tokenize yet.Multi-performer market operational
Token governanceGovernance capture risk with small token supplyMarket self-sustaining at $50K+ MRR
Multi-chainSapphire confidentiality is non-negotiable for TEE attestationAfter PMF on Sapphire
Full feedback loopConflicts with PoE — requires “erasure-retention boundary” designAfter P7 + P2 operational
Domain expansionCore audit market not yet provenAfter $1M+ ARR

  • Event metadata removed — sensitive fields stripped from AuditSubmitted, AuditResultSubmitted, AuditDeliveryRecorded
  • Manifest sensitive fields removed — manifest v2, resultType/findingCount moved inside encrypted envelope
  • Semgrep rules bundled — 42 local rules (Python/JS/TS/Go/Rust/Solidity), --metrics=off
  • Repo ownership verification — verify_repo_access() via GitHub API, verified before clone
  • Payout logic moved to contract — PayoutPolicy + _computePayout(), worker self-reporting ignored
  • ReputationRegistry integrated — recordSuccess on audit success, recordFailure on dispute loss
  • findingBonus activated — 40% exec / 30% finding / 20% patch / 10% regression
  • 2-step claim flow — requestClaim() (local CLI) → claimBounty() (TEE, onlyTEE)
  • Trust-tier policy — TrustMode.Confidential (no API) vs TrustMode.Mediated (pinned endpoint)
  • Config hash verification — confused-deputy defense via keccak256(app_id, cli, model, image_hash)
  • Reject reason codes — CONFIG_MISMATCH, BOUNTY_UNAVAILABLE, TRUST_POLICY_MISMATCH
  • Strict confidential reads — strictConfidentialReads flag, rejectInStrictMode modifier, 8 view functions protected
  • Confidentiality leak prevention — getBountyConfidential, discovery functions under strict mode
  • Notification adapters — Webhook + Telegram + Discord, 3 channels
  • Retrieval CLI — tools/lethe-retrieve.py (retrieve + list subcommands)
  • pora CLI (Rust rewrite) — pora request submit/cancel/top-up/list/watch/results/dispute, pora performer init/start/status/claim-payout/release-claim/claim, pora system doctor/whoami/keygen
  • pora MCP server — 15 tools + 2 resources (pora://config, pora://market/overview), stdio JSON-RPC, AI agent integration
  • pora performer init --use-claude-login — Claude Code Max OAuth token auto-detection
  • pora request submit — atomic 4-transaction flow (create bounty + set repo + set audit config + set delivery key)
  • X25519 delivery keypair — pora system keygen + automatic backup on force regeneration
  • GitHub repo — heliopora/pora-cli
  • GitHub org rename — lethe-protocolheliopora
  • Repo rename — lethe-marketpora-market, porapora-cli
  • Documentation site — Astro + Starlight, bilingual (EN/KO), seafoam design system
  • 122 contract tests passing
  • 9 delivery tests passing
  • E2E live verification: vuln-test-repo audit + pora-market self-audit (bounty #1, #2)
  • Encrypted report decryption verified

Requester (human) Performer (human + agent)
│ │
├─ pora system keygen ├─ pora performer init
├─ pora request submit owner/repo ├─ pora mcp (MCP server)
├─ Install GitHub App ├─ Connect Hermes/OpenClaw to MCP
├─ pora request watch BOUNTY_ID └─ Agent operates autonomously:
└─ pora request results AUDIT_ID │
├─ Find bounties
├─ Audit code inside TEE
Oasis Sapphire (confidential EVM) ├─ Deliver report
├─ LetheMarket.sol ├─ Destroy code (PoE)
├─ ReputationRegistry.sol └─ Collect ROSE
└─ On-chain settlement + dispute resolution
ROFL TEE (Intel TDX)
├─ Performer's agent (Claude Code / opencode / custom)
├─ Performer's API key (ROFL secret)
├─ Clone code → analyze → destroy
└─ Generate PoE + submit on-chain

DRTitleStatus
DR-001PoE is the core identity. Containment does not replace erasure.Decided
DR-002findingCount removed from on-chain events.Decided
DR-003Competitive verification is the primary quality mechanism, above reputation alone.Decided
DR-004Exponential decay → fixed per-audit cost model.Decided
DR-005P0/P1 production blockers must be resolved before deployment.Decided
DR-006Order matters. Dispute → multi-performer → token economy.Decided
DR-007Phase A disputes are owner-mediated.Decided

Brand: pora — πόρος (passage). Code goes in, findings come out, everything else disappears. Mascot: heliopora (blue coral).


This roadmap incorporates findings from three rounds of structured 6-specialist debate:

Round 1 (v1): Assumption mapping → blind spot forcing → counterfactual scenarios. Produced DR-002 through DR-004.

Round 2 (v2): Vision-fixed exploration. “What can this vision achieve?” Produced DR-001, DR-005, manifesto strengthening. Key reframe: Lethe’s innovation is not “destruction” but “information sovereignty recovery.”

Round 3 (v3): Premise change exploration. “What becomes possible when constraints change?” Produced DR-006 (dependency graph). Key finding: P7 (dispute resolution) is the hidden highest-leverage premise — it gates P2 (multi-performer), which gates P9 (token), which gates the full market.


“Audit. Earn. Forget.”