wave Dispatchwave.online ↗

docs

Route any agent or script through wave Dispatch. Your keys + data stay on your infra.

classify POST / {"prompt":"…"} + Authorization: Bearer <key>
returns {route, probability, margin, decided_at, forward}
Claude Code ANTHROPIC_BASE_URL → local dispatch proxy
Codex/Cursor/Gemini OPENAI_BASE_URL → local dispatch openai-proxy
MCP wave_route · wave_dispatch · wave_pool · wave_agent
pay-per-use x402 (HTTP 402 → pay → retry)
multimodal image/audio reduced to text on YOUR infra (vision/STT) → routed by the classifier; raw media never leaves local

Sign in with Privy

flow Your client (browser, mobile, agent) loads Privy and gets an access_token → POST it as Authorization: Bearer <jwt> to /account/key → worker verifies online via auth.privy.io/api/v1/users/me + returns your linked license_key.
link Same ssoacct:<email> mapping as Supabase SSO — one license follows you regardless of provider.
wallet For agent-side pay-per-call with a Privy server wallet, see sdk/WALLET.mdDispatch.walletHook({provider:"privy",...}).

dispatch train (v0)

contract POST /train with {routes:[{prompt,true_route},...], description?}; need ≥10 labels. true_route ∈ {claude_reason · direct · local_code · local_search · local_summarize}. Returns {job_id, status:"accepted", count, contract:"v0"}.
status GET /train/<job_id> with the same bearer — returns the queued record (count, dropped, description, received_at). 30-day retention.
honesty v0 = queue + record. Actual retraining runs offline on the Mac Studio; we'll wire the retrain pipeline to consume traindata:<job_id> and ship updated weights once the queue length justifies it. Want priority? Send a feature request via /feedback.

machine-readable: /llms.txt · /openapi.json · /skill.md · /.well-known/x402 · /transparency.json · /payments (protocols + rails)