The yqmev TUI is an interactive terminal dashboard built with Bubble Tea and Lip Gloss. It provides real-time visibility into the MEV engine, live auction streams, bundle monitoring, and an integrated Q AI chat interface -- all from your terminal.
Installation
Go Install
go install github.com/yoorquezt-labs/yoorquezt-mev/cmd/yqtui@latest
Homebrew
brew tap yoorquezt/tap
brew install yqtui
npm
npm install -g @yoorquezt/yqtui
curl
curl -sSL https://install.yoorquezt.io/yqtui | bash
Quick Start
# Connect to local MEV engine
yqtui
# Connect to a remote gateway
yqtui --gateway wss://gateway.yoorquezt.io
# With authentication
YQMEV_API_KEY=your-key yqtui --gateway wss://gateway.yoorquezt.io
Tabs
The TUI has 6 tabs, navigable with Tab / Shift+Tab or number keys 1-6.
1. Overview
Summary of engine health, connected chains, active relays, recent blocks, and P&L.
2. Auction (Live WebSocket)
Real-time sealed-bid auction stream over WebSocket. Displays incoming bids, auction rounds, winners, and settlement status. Data updates in real time via the gateway's subscription API.
┌─ Auction #4821 ──────────────────────────────────┐
│ Status: SETTLING Block: 19,482,301 │
│ Bids: 14 Winner: 0xA3f2... │
│ Winning Bid: 0.0847 ETH Protocol Fee: 0.0042 │
│ Settlement TX: 0x8bc1... (2 confirmations) │
└───────────────────────────────────────────────────┘
3. Bundles
Monitor submitted bundles: status (pending, landed, failed), gas usage, profit, and target block. Filter by status or bundle hash.
4. Protection
View OFA-protected transactions. Shows intercepted swaps, detected MEV, backrun status, and user rebate amounts.
5. Intents
Track intent submissions, solver matches, fulfillment progress, and settlement outcomes.
6. Q AI
Integrated Q AI chat. Ask natural language questions about MEV activity, get forensic reports, and trigger engine actions (with confirmation).
You: What's the profit from the last 24 hours?
Q: Total profit (24h): 2.847 ETH across 142 landed bundles.
Top strategy: triangular arb (1.23 ETH, 43%).
Top chain: Ethereum mainnet (2.1 ETH).
Key Bindings
| Key | Action |
|---|---|
Tab / Shift+Tab | Switch tabs |
1-6 | Jump to tab |
j / k or Up / Down | Scroll list |
Enter | Select / expand item |
/ | Filter / search |
r | Refresh current view |
q / Ctrl+C | Quit |
? | Show help overlay |
Environment Variables
| Variable | Description | Default |
|---|---|---|
YQMEV_GATEWAY_URL | WebSocket gateway URL | ws://localhost:9099 |
YQMEV_API_KEY | API key for authentication | (none) |
YQMEV_REFRESH_INTERVAL | Data refresh interval | 2s |
YQMEV_THEME | Color theme (dark, light) | dark |
YQMEV_LOG_FILE | Log file path | (stderr) |
Bundle Monitoring
The Bundles tab provides detailed monitoring:
- Real-time status tracking -- see bundles transition from
pendingtosimulatedtolandedorfailed. - Profit breakdown -- gas cost, coinbase transfer, net profit per bundle.
- Chain grouping -- bundles grouped by target chain with per-chain P&L.
- Hash lookup -- press
/and paste a bundle hash to jump directly to it. - Auto-refresh -- configurable polling interval with manual refresh via
r.
Q AI Tab Integration
The Q AI tab connects to the Q AI API and supports:
- Natural language queries about engine state, profits, and strategies.
- Streaming responses displayed token-by-token.
- Tool confirmations for mutating actions (e.g., "submit this bundle" requires explicit
yconfirmation). - Context awareness of the current view -- ask "what's this bundle?" while viewing one.
# Example: ask Q AI about a specific bundle
You: Analyze bundle 0xabc123...
Q: Bundle 0xabc123 is a triangular arb on Ethereum:
Path: WETH → USDC (Uniswap V3) → DAI (Curve) → WETH (SushiSwap)
Expected profit: 0.032 ETH (after gas)
Status: Landed in block 19,482,305
Code Examples
Programmatic Access
The TUI uses the same client SDK available to your applications:
package main
import (
"context"
"fmt"
"github.com/yoorquezt-labs/yoorquezt-sdk-mev-go"
)
func main() {
c, err := yqmev.Dial("ws://localhost:9099")
if err != nil {
panic(err)
}
defer c.Close()
// Subscribe to auction events (same feed as TUI Auction tab)
ch, err := c.Subscribe(context.Background(), "auction")
if err != nil {
panic(err)
}
for event := range ch {
fmt.Printf("Auction event: %s\n", event)
}
}
TypeScript
import { MEVGatewayClient } from "@yoorquezt/sdk-mev";
const gw = new MEVGatewayClient("ws://localhost:9099");
// Stream auction events
const sub = await gw.subscribe("auction");
sub.on("data", (event) => {
console.log("Auction:", event);
});