Releases: BlockRunAI/ClawRouter
Releases · BlockRunAI/ClawRouter
v0.12.193 — Surf crypto-data API (skill-only)
- Surf integration — first skill-only marketplace API. BlockRun launched the Surf unified crypto data API (blockrun.ai/marketplace/surf) — 84 endpoints across 13 domains: CEX/DEX markets, on-chain SQL over 80+ ClickHouse tables (Ethereum, Base, Arbitrum, BSC, TRON, HyperEVM, Tempo), 100M+ labeled wallets, prediction markets (Polymarket + Kalshi), social/CT mindshare, news, project/DeFi metrics, token analytics, unified search, VC fund intelligence. Settles directly to Surf's Base treasury in USDC; no Surf account or API key required.
- New release pattern: base whitelist + skill, no typed wrappers. Earlier integrations (Predexon, Phone/Voice) wrote 200–400 lines of TypeScript per partner in
src/partners/registry.ts— hand-authored summaries of each endpoint exposed asblockrun_*tools. That pattern doesn't scale: Surf alone has 84 endpoints, and the next BlockRun-marketplace API will have more. From this release forward, new partner APIs ship as a skill (markdown the agent reads on demand) plus a one-line addition to the proxy namespace whitelist. The agent readsskills/<api>/SKILL.md, crafts the HTTP call, and gets paid x402 settlement transparently. Adding a new Surf endpoint requires zero ClawRouter release. This matches the Anthropic Skills convention (github.com/anthropics/skills) and aligns with how Claude Code is designed to consume capability surfaces. - Proxy whitelist. Extended the partner-route regex at
src/proxy.tsto match/v1/surf/*. Requests flow through the existingproxyPaidApiRequest(x402 handled transparently). NewisSurfbranch in the telemetry hook emitstier: "SURF"withmodel = "surf/<operation>"soclawrouter statsandclawrouter reportsee Surf usage as a distinct line — distinct from LLM, generic Partner, and Phone tiers. UpdatedproxyPaidApiRequestJSDoc + the inline route comment to document the new namespace. - No registry entries — no
blockrun_surf_*tools. Deliberate. The agent readsskills/surf/SKILL.mdfor the endpoint catalog and crafts calls tohttp://127.0.0.1:8402/v1/surf/...directly. Skip the duplication. skills/surf/SKILL.md(new). Full endpoint reference grouped by domain (Exchange, Market Overview, News, On-Chain, Prediction Markets, Project + DeFi, Social/CT, Token Analytics, Unified Search, VC Fund, Wallet Intelligence, Web, Chat). Pricing tier table ($0.001 / $0.005 / $0.020). Four worked example flows (wallet ID, token concentration, custom on-chain SQL with schema-fetch pattern, project mindshare lookup). Frontmatter triggers cover the natural-language queries an agent would phrase to find this skill ("onchain sql query","wallet labels api","crypto mindshare", etc.).skills/clawrouter/SKILL.mdheadline update — per thefeedback_skill_dual_layerrule. Added "Crypto Data (Surf) — skill-only integration" section after Prediction Markets, explaining the new base+skill pattern and pointing at the dedicatedsurfskill. Frontmatterdescriptionandtriggersextended to surface Surf capabilities. Without this headline update, agents reasoning about crypto-data tasks would skip ClawRouter even with the dedicatedsurfskill present.- README — new "Crypto Data (Surf)" section between Phone & Voice and Models & Pricing, with the pricing table, three curl examples (price, batch wallet labels, on-chain SQL), and a link to
skills/surf/SKILL.md. Notes that this is the new pattern for marketplace APIs. openclaw.plugin.jsondescription — mentions Surf so the OpenClaw plugin browser surfaces the capability.- Tests — new
src/proxy.surf-routing.test.tsmirrors the partner-path regex literal and adds 10 assertions: positive matches for/v1/surf/{market/price,onchain/sql,wallet/labels/batch,prediction-market/polymarket/markets,chat/completions}, negative guards against/v1/surfer/*,/v1/surfaces/*, and bare/v1/surf(no trailing slash), plus regression guards for existing partner paths (/v1/pm/*,/v1/exa/*,/v1/phone/*,/v1/voice/*,/v1/stocks/*) and non-partner/v1routes (/v1/chat/completions,/v1/models,/v1/images/generations). Mirroring the regex literal here means any silent regex edit fails loudly in CI. - Aborted course-correction in the same session (process note worth recording): the first pass of this integration also added 11 typed
blockrun_surf_*tools tosrc/partners/registry.ts(~470 lines) and generalized the__dynamic__handler insrc/partners/tools.ts. Reverted both before commit on user feedback — Surf doesn't belong inregistry.ts, and generalizing the dynamic handler without a second user would have been speculative. Lesson: mirroring the Predexon/Phone pattern by reflex skips the question of whether the pattern itself still scales. With Surf at 84 endpoints, it doesn't. New rule: typed partner wrappers are reserved for narrow, high-leverage APIs (≤12 endpoints, agent-facing tools that benefit from JSON-schema validation in OpenClaw). Everything else is base + skill.
v0.12.192
v0.12.192 — May 16, 2026
- Phone & Voice integration — BlockRun's phone capability stack is now first-class in ClawRouter. BlockRun shipped 8 phone endpoints earlier this cycle (Twilio for number intelligence + provisioning, Bland.ai for AI-powered outbound voice calls), all x402-gated behind
blockrun.ai/api/v1/phone/*andblockrun.ai/api/v1/voice/*. ClawRouter had zero integration — agents reasoning about phone tasks would skip ClawRouter entirely (per thefeedback_skill_dual_layerrule: ifskills/clawrouter/SKILL.mddoesn't list a BlockRun capability, AI agents ignore the local proxy and hit the gateway directly, losing wallet/telemetry/local visibility). This release closes the gap on every surface. - Proxy paths. Extended the partner-route regex at
src/proxy.ts:2782to match/v1/phone/*and/v1/voice/*. Both flow through the existingproxyPaidApiRequest(x402 handled transparently). NewisPhonebranch in the telemetry hook emitstier: "PHONE"with model =phone/<operation>(soclawrouter statsandclawrouter reportsee phone usage as a distinct line).PHONE_PRICINGtable mirrors server-sidetwilio.ts+bland.tspricing (longest-prefix match handles/voice/call/{id}poll URLs correctly) and is used only as the telemetry fallback when the x402 paymentStore is empty — actual settlement is always server-dictated. - Tool registry. Eight new entries in
src/partners/registry.ts(PartnerCategoryunion extended with"Communications"):blockrun_phone_lookup($0.01) — carrier + line typeblockrun_phone_lookup_fraud($0.05) — SIM-swap + call-forwarding signalsblockrun_phone_numbers_buy($5.00 / 30 days) — provision a US/CA number tied to the walletblockrun_phone_numbers_renew($5.00 / +30 days) — extend leaseblockrun_phone_numbers_list($0.001) — wallet's active numbersblockrun_phone_numbers_release(free) — release a number back to the poolblockrun_voice_call($0.54 flat, ≤30 min) — outbound AI voice call via Bland.aiblockrun_voice_status(free) — poll call status / transcript / recording- Voice-call tool description carries an explicit safety guardrail: "places a REAL outbound phone call to a real number — only invoke when the user has explicitly asked." Server enforces an emergency-number blocklist; ClawRouter trusts upstream rather than duplicating the list.
/cr-callslash command insrc/index.ts, registered alongside/cr-imagegenand/videogen. Syntax:/cr-call +1<E.164> "<task>" [--voice nat] [--max-duration 5] [--from +1<owned-number>] [--language en-US]. NewparseCallArgshelper handles both--key=valueand--key valueflag forms, recognizes the first+E.164-shaped token as the destination, and packs the rest as the natural-language task. Mode is fire-and-forget: the command POSTs to/v1/voice/call, returnscall_id+poll_urlimmediately, and tells the user to poll for transcript when the call completes. Thecr-prefix is mandatory —/calland/phoneare even more commonly reserved by chat platforms than/imagegenwas when v0.12.190 had to rename it; we don't register either bare form.clawrouter phoneCLI subcommand insrc/cli.tscovers the wallet-resource operations that don't make sense as chat slash commands:clawrouter phone numbers list— formatted table with E.164, country, expiry-in-days,⚠ renew soonflag for ≤2 days remainingclawrouter phone numbers buy <US|CA> [--area-code <code>]— provisionclawrouter phone numbers renew <+E.164>— extend leaseclawrouter phone numbers release <+E.164>— releaseclawrouter phone lookup <+E.164>— quick carrier checkclawrouter phone fraud <+E.164>— quick SIM-swap check- All subcommands POST to the running proxy at
127.0.0.1:8402; payment flows through the existing wallet. 402 errors render with a friendly "fund your wallet" hint.
- SKILL.md double-layer update, per
feedback_skill_dual_layerrule:skills/clawrouter/SKILL.md— added "Phone & Voice (Twilio + Bland.ai)" section after Image & Video, with the full 8-tool table; updated frontmatterdescriptionandtriggersto mention phone capabilities. Without this headline update, AI agents would route around ClawRouter when reasoning about phone tasks even with the partner registry populated — they need to see the capability surfaced where they're already looking.skills/phone/SKILL.md(new) — dedicated reference: full HTTP API for each endpoint, parameter tables, fire-and-forget polling explanation, three example agentic flows (verify-before-text, appointment confirmation, acquire-caller-ID).
- README — new "Phone & Voice Calls" section between Image Editing and Models & Pricing, with the pricing table, slash command + CLI examples, raw
curlHTTP usage, and the same safety guardrail surfaced in the tool description. openclaw.plugin.jsondescription bump — mentions phone + voice capability so the OpenClaw plugin browser surfaces it.- Out of scope (deferred): local recording/transcript download (recordings can be large; returning Bland.ai's hosted URL is sufficient for v1), auto-polling voice-call status to completion in the slash command (user opted for fire-and-forget so the chat experience returns immediately), SMS/MMS (BlockRun hasn't exposed yet), auto-renew on lease expiry (CLI surfaces the warning, user decides).
- Two telemetry bugs surfaced and fixed during real-call smoke testing (placed an actual $0.54 call to
+15707043521via the patched dist; tx0xfe6c6b5e...settled on Base; wallet reconciliation correct: $84.49 → $83.95 = exactly one $0.54 debit). Both bugs were pure logging artifacts — wallet was never wrongly debited — but they would have given misleading numbers inclawrouter statsandclawrouter report. Both fixes consolidated into a new exported pure helperresolvePhoneTelemetryCost(insrc/proxy.ts) with 8 unit tests locking down the gates:- Bug 1 — phantom $0.54 charge on 4xx voice POST. First smoke test POSTed
/v1/voice/callwith empty{}body to exercise routing without spending money. BlockRun returned 400 (Zod validation: "expected string, received undefined"). The wallet wasn't charged, but the telemetry hook sawpaymentStore.amountUsd = 0and fell back toestimatePhoneCost("/v1/voice/call") = $0.54. Stats would record a phantom voice call. Fix: gate the fallback onupstream.statusbeing 2xx — any 4xx/5xx skips the fallback and logs$0. - Bug 2 — GET poll miscounted as another $0.54 voice call. After placing a real call, polling
GET /v1/voice/call/{call_id}for transcript status (free upstream) was being logged at $0.54 because the longest-prefix match onvoice/call/triggered the same fallback row as the initiating POST. Every 30s poll would inflate stats by $0.54. Fix: also gate the fallback onreq.method === "POST"— GET polls log$0. - Refactor: gate logic was originally inline inside
proxyPaidApiRequest. Pulled it out intoresolvePhoneTelemetryCost(args)so the rules are independently testable (the call site is now four lines passing an args bag through the helper). Adds 8 vitest cases covering: paid-amount-wins, 4xx phantom guard, GET poll guard, 5xx guard, missing-method guard, non-phone-passthrough, and the original "successful POST with empty paymentStore → fallback" path. Without the helper extraction, locking these gates in tests would have required a full integration test with a mocked upstream — too heavy for telemetry-only logic.
- Bug 1 — phantom $0.54 charge on 4xx voice POST. First smoke test POSTed
- Tests — new
src/proxy.phone-routing.test.ts(regex matching for /v1/phone/, /v1/voice/, /v1/voice/call/{id} poll, plus negative case for /v1/phonebook),src/proxy.phone-pricing.test.ts(longest-prefix matching + the 8resolvePhoneTelemetryCostgate cases above),src/parse-call-args.test.ts(both flag forms, quoted task spans, E.164 first-token detection). Total 31 new test cases; all 569 vitest tests green; typecheck + lint clean. - Smoke test record (free-tier verification before the real call): list-numbers ($0.001) returned an existing wallet-owned number
+15707043521(PA, expires 2026-06-15); lookup ($0.01) on that same number returned full Twilio carrier metadata (type: nonFixedVoip,carrier_name: Twilio - SMS/MMS-SVR); negative test/v1/phonebook/testcorrectly rejected by the partner regex (502 from chat-completion fallback rather than partner routing); CLI table formatting + expiry-warning logic verified byclawrouter phone numbers list.
v0.12.190 — /imagegen → /cr-imagegen (Telegram collision fix)
Fix
Renames the /imagegen slash command to /cr-imagegen to resolve a collision with Telegram channel commands.
OpenClaw runtime previously emitted:
Plugin command "/imagegen" conflicts with an existing Telegram command
because Telegram channels reserve /imagegen for their own image-gen bots (HuggingFace Spaces et al.). The OpenClaw command registry can't claim the same prefix without inconsistent routing behavior in Telegram.
What changed
src/index.ts:1768—api.registerCommand({ name: "imagegen" })→name: "cr-imagegen"src/proxy.ts:3472— chat-prefix interceptor accepts both/cr-imagegenand/imagegen(backward compatibility for muscle memory; legacy form still works in chat)- README,
docs/image-generation.md,skills/imagegen/SKILL.mdupdated to lead with/cr-imagegenand note the legacy form still works in chat /videogendeliberately untouched — no field reports of collision
Migration
- Slash command in Telegram/Discord/Slack picker: use
/cr-imagegen(the new registered name) - Typing in chat: both
/cr-imagegen <prompt>and/imagegen <prompt>continue to work
Install
npm install -g @blockrun/clawrouter@0.12.190Closes #165.
v0.12.159
- Market data tools — BlockRun gateway now exposes realtime and historical market data; ClawRouter wires them into OpenClaw as 6 first-class agent tools so the model stops scraping finance sites. Paid ($0.001 via x402, same wallet as LLM calls):
blockrun_stock_priceandblockrun_stock_historyacross 12 global equity markets (US, HK, JP, KR, UK, DE, FR, NL, IE, LU, CN, CA). Free (no x402 charge):blockrun_stock_list(ticker lookup / company-name search),blockrun_crypto_price(BTC-USD, ETH-USD, SOL-USD, …),blockrun_fx_price(EUR-USD, GBP-USD, JPY-USD, …),blockrun_commodity_price(XAU-USD gold, XAG-USD silver, XPT-USD platinum). Tool schemas advertise market codes, session hints (pre/post/on), and bar resolutions (1/5/15/60/240/D/W/M). Path routing extended: the partner-proxy whitelist insrc/proxy.tsnow matches/v1/(?:x|partner|pm|exa|modal|stocks|usstock|crypto|fx|commodity)/, routing all new paths throughproxyPaidApiRequest(payFetch handles 402 when present, passes through 200 for free categories). Tool definitions added insrc/partners/registry.ts;skills/clawrouter/SKILL.mdgains a "Built-in Agent Tools" section listing market data + X intelligence + Polymarket alongside the LLM router.
v0.12.158
- SKILL.md data-flow + key-storage transparency — second-pass fix for the OpenClaw scanner on clawhub.ai. v0.12.157 cleared the original scanner flags (opaque credentials, implied multi-provider keys, no install artifact). A deeper rescan surfaced three new nuanced flags: prompts go to blockrun.ai (data-privacy framing), wallet private-key storage location/encryption undocumented, and users may expect strictly-local routing. All three addressed: description reframed as "Hosted-gateway LLM router" with explicit Ollama pointer for local-only needs; new Data Flow section with ASCII diagram, enumerated sent/not-sent lists, link to https://blockrun.ai/privacy; new Credentials & Local Key Storage section documenting config file paths per OS, 0600 POSIX permissions, plaintext parity with other OpenClaw provider keys, encryption guidance (FileVault/LUKS/BitLocker or burner wallet), src/wallet.ts source pointer; new Supply-Chain Integrity section with npm pack verification and tagged-release invariant.
v0.12.157
- SKILL.md credential transparency — rewrote
skills/clawrouter/SKILL.mdto clear the OpenClaw scanner's medium-confidence suspicious verdict on clawhub.ai. Frontmatter now declaresrepository: https://github.com/BlockRunAI/ClawRouter,license: MIT, and a structuredmetadata.openclaw.installarray (kind: node,package: @blockrun/clawrouter,bins: [clawrouter]) so the registry entry has an auditable install artifact instead of a bare bash block. Body adds a Credentials & Data Handling section fully enumerating whatmodels.providers.blockrunstores (walletKey/solanaKey— auto-generated locally, never transmitted;gateway/routing— non-sensitive), and explicitly states the plugin does not collect or forward third-party provider API keys (OpenAI/Anthropic/Google/DeepSeek/xAI/NVIDIA) — the blockrun.ai gateway owns those relationships and routes on the server side. Addresses the three scanner flags (opaque credential declaration, implied multi-provider credential collection, no install artifact for review) raised against v0.12.156 on https://clawhub.ai/1bcmax/clawrouter.
v0.12.156
v0.12.156 — Apr 20, 2026
- Kimi K2.6 added — Moonshot's new flagship (
moonshot/kimi-k2.6, 256K context, vision + reasoning, $0.95 in / $4.00 out per 1M) registered inBLOCKRUN_MODELSwithkimi-k2.6alias. Added to the curated/modelpicker list (src/index.ts,scripts/update.sh,scripts/reinstall.sh), the README pricing table,docs/routing-profiles.md, and the AI-agent-facing model catalog inskills/clawrouter/SKILL.md. Premium routing tier (blockrun/premium) now uses K2.6 as the SIMPLE primary and as a fallback in MEDIUM/COMPLEX, withnvidia/kimi-k2.5retained as the first fallback for reliability. The generickimi/moonshotaliases still resolve tonvidia/kimi-k2.5(matches BlockRun server'sblockrun/kimistance); users opt in to K2.6 explicitly viakimi-k2.6orblockrun/premium. - GitHub restored as canonical source — BlockRunAI GitHub org is back.
package.jsonrepository.url, README badges, CONTRIBUTING clone URL,openclaw.security.json, all docs (anthropic-*,clawrouter-cuts-*,clawrouter-vs-openrouter,11-free-ai-models,llm-router-benchmark-*,smart-llm-router-14-dimension-classifier,subscription-failover,troubleshooting),skills/release/SKILL.md, and thesse-error-formatregression-test comment now point atgithub.com/BlockRunAI/ClawRouter. GitLab mirror (gitlab.com/blockrunai/ClawRouter) is kept as a secondary remote for redundancy but is no longer advertised. Metadata + docs only; no runtime/code changes.