Prediction markets where an AI trades against you.
An autonomous market maker, with a name and a public P&L, that proposes prediction markets from live on-chain signals, takes positions on its own questions with real reasoning, and resolves them when the time is up.
Built for the INITIATE Hackathon by Initia β DeFi track (AI-enhanced).
πΊ Demo video: https://www.loom.com/share/f0394aebe403410d8d1b47388ed03fea
Most prediction markets have a bottleneck: humans. Humans propose markets, humans resolve them, humans dispute them. That doesn't scale to the long tail of things people actually want to bet on β like on-chain events that are, by definition, verifiable without a human in the loop.
Omen replaces those humans with an AI agent that has skin in the game.
The agent is named omen-ai.init. It watches Ethereum mainnet, finds resolvable signals (gas prices, whale activity, token momentum), and proposes binary YES/NO markets backed by a Claude-generated thesis. Then β and this is the differentiator β it takes a position on its own market. Real money, on-chain, with public reasoning. Users bet against or alongside it. When the resolution time hits, the agent reads chain state again and settles the market objectively.
Result: the first prediction market where the market maker is a character, not a protocol. Humans vs AI, leaderboard live, P&L public.
- Sovereign rollup
omen-1producing 100ms blocks since the build started β its own MiniEVM appchain on Initia. - Three deployed contracts with 10/10 unit tests passing:
MockUSDC(oUSDC) β collateral with a built-in faucetPredictionMarketβ binary CPMM markets, slippage protected, claim flowMarketFactoryβ agent-only market creation and resolutionTreasuryβ fee vault (2% bet fee, 5% resolution fee)
- AI agent service running against the deployed contracts:
- Fetches live ETH/BTC prices, gas, top tokens via CoinGecko
- Calls Claude Sonnet 4.5 for market proposals + per-position reasoning
- Creates markets and places bets on-chain via viem
- Resolves due markets automatically
- Web app at
http://localhost:5173β connect MetaMask, place bets, see your positions on the leaderboard, view the agent's full book.
This isn't an app that could run anywhere. It needs Initia specifically.
- 100ms blocks make every bet feel instant. Polymarket on Polygon takes seconds. Omen takes one frame.
- Autosigning is essential. The agent posts every few hours, plus users will watch markets and adjust mid-flight. Signing prompts every time would kill the UX. Initia's session keys mean "follow the agent" becomes a one-tap action.
- Interwoven Bridge lets a user holding USDC anywhere β Ethereum, Noble, Base β start betting in a single click. No bridge tutorial. No slippage roulette.
.initusernames turn0x500bβ¦d049intoomen-ai.init. The leaderboard reads like a sports board, not hex soup. This makes the "Humans vs AI" framing visceral.- We keep the revenue. The 2% bet fee and 5% resolution fee accrue to our Treasury β not to a sequencer or shared L2. This is the whole pitch of the Initia Stack: launch your app, keep your value.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FRONTEND (single HTML file, viem from CDN) β
β - Live market feed (4s polling) β
β - MetaMask connect + auto-add omen-1 β
β - Bet flow with optimistic updates β
β - "My Positions" + "Meet Omen-AI" profile pages β
β - Leaderboard with .init username resolution β
β - InterwovenKit integration documented in β
β /frontend/src/providers.tsx β
ββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββ
β OMEN-1 ROLLUP (MiniEVM, deployed via weave) β
β - chain_id: omen-1 / EVM chain id: 3165038479798559 β
β - 100ms blocks, INIT L1 for DA β
β - Solidity contracts: β
β MockUSDC.sol - oUSDC collateral β
β PredictionMarket.sol - CPMM market β
β MarketFactory.sol - agent-only spawn/resolve β
β Treasury.sol - protocol fee vault β
ββββββββββββββββββββ²ββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββ
β AGENT (TypeScript daemon) β
β - signals.ts β live Ethereum/CoinGecko data β
β - brain.ts β Claude Sonnet 4.5 proposes markets β
β - chain.ts β creates markets, takes positions β
β - resolver.ts β reads chain state, calls resolve β
β - cron: propose every 3h, resolve every 5min β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Requirement | Where |
|---|---|
| Own appchain / rollup | Local omen-1 MiniEVM deployed via weave rollup launch. Chain ID + bridge txn hash + system keys all logged in .weave/data/minitia.config.json. |
| InterwovenKit integration | frontend/src/providers.tsx (full React+Vite scaffold) uses InterwovenKitProvider, useInterwovenKit, useUsernameQuery, autosign config. The static demo HTML uses MetaMask for the live demo flow because of local-rollup constraints documented at https://docs.initia.xyz/hackathon/examples/evm-bank β when omen-1 is registered for public access, all writes flow through InterwovenKit's requestTxSync. |
| Autosign / Session UX | Configured in providers.tsx via enableAutoSign={{ "omen-1": ["/minievm.evm.v1.MsgCall"] }}. Demonstrated in UI as a one-tap banner on the homepage. |
| Interwoven Bridge | BridgeButton.tsx invokes openBridge() from useInterwovenKit(). Per Initia's hackathon docs the bridge UI doesn't list local rollups; the full integration code is shipped and the intended flow is shown in the demo video. |
.init usernames |
Leaderboard, agent profile, market detail pages all resolve usernames via useUsernameQuery (frontend) or direct REST to /initia/usernames/v1/name_by_address/{addr} (static demo). Agent owns omen-ai.init. |
.initia/submission.json |
Filled in with chain ID, contract addresses, and txn hashes. |
README.md |
This file. |
| Demo video | See top of repo. |
omen/
βββ README.md β you are here
βββ .initia/submission.json β required submission manifest
βββ public/index.html β static demo (works guaranteed)
βββ frontend/ β React + Vite app with full InterwovenKit
β βββ src/providers.tsx β InterwovenKit wiring
β βββ src/lib/ β chain client, ABIs, MsgCall builder
β βββ src/components/ β Header, BetPanel, AgentCard, etc.
β βββ src/pages/ β Home, Market, Agent
βββ contracts/ β Foundry project
β βββ src/ β MockUSDC, PredictionMarket, MarketFactory, Treasury
β βββ test/Omen.t.sol β 10/10 tests passing
β βββ script/Deploy.s.sol β one-shot deploy script
βββ agent/ β TypeScript daemon
βββ src/ β signals, brain, chain, resolver, index
This repo expects you to run all four pieces locally.
brew install initia-labs/tap/weave
weave init # generate gas station, fund with testnet INIT
weave rollup launch # interactive: choose EVM, chain_id=omen-1The rollup runs at http://localhost:8545 (JSON-RPC). Chain remains live as a background minitiad process.
cd contracts
forge install
forge test # expect 10 passed
set -a && source ../.env && set +a # load env
forge script script/Deploy.s.sol:Deploy --rpc-url $OMEN_RPC_URL --broadcastUpdate .env with the printed MockUSDC, Treasury, MarketFactory addresses.
cd agent
pnpm install
pnpm run propose # one-shot: spawn 3 markets with positions
pnpm start # daemon: propose every 3h, resolve every 5minAgent uses your ANTHROPIC_API_KEY (set in .env).
cd public
python3 -m http.server 5173Open http://localhost:5173. Connect MetaMask. Add the omen-1 network if prompted.
A real propose round, captured live during the build:
=== PROPOSE ROUND ===
[propose] signals: ETH $2315.29, gas 1.1 gwei
[propose] Claude proposed 3 markets
[crypto_price] Will XRP outperform ETH (higher % gain) over the next 36 hours?
β³ agent bets 95 on YES: XRP showing strongest momentum in top 10 at +1.22%
vs ETH's anemic +0.05%. XRP/USD has better trend structure and relative
strength. ETH facing resistance with low gas = low usage narrative
weakening fundamental case short-term.
β deployed at 0xf52705d827f115da5d198494f1172ee8813cada0
That's a real, directional, thesis-driven trade β not random output.
Two fee streams, both flowing to the protocol Treasury:
- 2% bet fee charged on every position taken
- 5% resolution fee taken from the total market pool when a market resolves
At hackathon scale this is meaningless. At 10k DAU placing average $50 positions across 100 markets per day, this is roughly $2k/day gross, scaling linearly with volume. Polymarket β which has none of the AI generative angle β does ~$3M/week in volume; the addressable space is real.
The agent itself becomes a product moat. Every position it takes generates a unique "thought feed" entry; over time this becomes a content asset (people will follow omen-ai.init to copy trades). The first prediction market with a personality wins distribution that protocols can't.
- Polymarket β biggest player; CLOB-based; manual market creation; no native chain. Omen differs on every axis: AMM-based (long-tail liquidity), AI-generated markets (long-tail markets), own appchain (revenue capture).
- Kalshi β regulated US prediction markets; centralized; only specific event categories. Omen is permissionless.
- Augur / Gnosis Conditional Tokens β original on-chain prediction infra; failed on UX. Omen is a UX play built on Initia's stack.
- Truth Markets, Drift BET, Helix Forecast β small Solana-native experiments. None have AI agent participation.
The category-defining insight: prediction markets need market makers with views. Liquidity providers without opinions are passive losers (LVR). An AI with a public thesis is a market maker with character β and characters get followed.
The hackathon ships the v0 agent. The full vision:
- Multi-outcome markets (currently binary)
- Per-market thought feed β users follow specific market threads
- Copy-trading β one tap to mirror Omen-AI's next position
- Dispute window β economic finality replacing AI-only resolution
- Mobile app with push notifications when the agent opens new positions
- Tournament mode β weekly humans-vs-AI leaderboards with prize pools
We are not pretending the v0 is perfect. Specifically:
- Local rollup means the bridge is documented, not live in the testnet bridge UI. This is exactly the case Initia's hackathon docs anticipate at
docs.initia.xyz/hackathon/examples/evm-bankβ full bridge code shipped, demo explains the limitation. - Static demo uses MetaMask for writes because of pnpm/cosmjs-types resolution issues with InterwovenKit + Vite + React 19. The complete InterwovenKit integration ships in
/frontend/src/providers.tsxand is invoked at the React-app level β judges can read the integration even though the static demo uses a more reliable wallet path. - Agent resolution is currently AI-only. Production needs an oracle feed and a dispute window. We document this as future work; it's a known weakness in v0 and the right v1 priority.
perpetualEX β Founder, Full-stack
- GitHub: @perpetualEX
- Twitter/X: @perpz_apt
MIT