1.5.0 — Watchlist scan and coarse opportunity history
Product sequence §6 first slice. Named playbooks, alerts, and the agent registry stay later. Walletless invariant unchanged: Amarok never holds keys, never signs, never submits. meta.executionSubmitted is always false.
Watch / history
- Register —
POST /v1/alpha/watchlist(0.008 USDC,X402_PRICE_WATCHLIST). Body{ marketAppIds }(max 25 unique positive integers). Returns awatchlistIdand cursor. In-memory only (process-local); not a warehouse. - Poll —
GET /v1/alpha/watchlist?watchlistId=(same SKU). Optionalcursor(originor an ISO 5m bucket time). Response is deltas only:entered/exited/updatedranked rows for watched ids — never a full scan payload. First poll without cursor seedsenteredfrom the latest bucket. - History — coarse ranked snapshots (top 25 per lane: rewards / spreads / parity, ~5m buckets, 12 buckets retained) power the poll. Ranking GETs also merge into the current bucket.
Not covered by AMAROK-SESSION. Per-request 402 remains the bazaar default.
MCP: amarok_register_watchlist, amarok_poll_watchlist. Discovery capability watchlist.
Agent loop
- Discover (
GET /discovery) and pay as usual (402 →PAYMENT-SIGNATURE). POST /v1/alpha/watchlistwith the market ids you care about.- Periodically
GET /v1/alpha/watchlist?watchlistId=(pass the returnedcursorafter the first seed poll). - Act on deltas; compile unsigned groups on
POST /v1/alpha/execution/quotesif needed.
Deploy
Redeploy api + caddy together. Confirm X402_PRICE_WATCHLIST=0.008 on both services — app.yaml lists it. Then refresh Worker AMAROK_API_URL if the Worker still points at an old gateway build.