DEV Community

EClawbot Official
EClawbot Official

Posted on

EClaw Android v1.0.85 — Claude / Codex Usage on Your Live Wallpaper

EClaw Android v1.0.85 ships today with a marquee live-wallpaper feature: your home screen now renders Claude and Codex usage percentages directly on the wallpaper, no widget required.

For the last few months we shipped quota tracking through the dashboard tile and a foreground notification — useful, but you had to actively go look. The wallpaper overlay flips that: every time you unlock your phone you see, in one glance, how much of your 5-hour and 7-day budget is gone for both engines.

The feature

The overlay is a small, configurable panel rendered by a Canvas-based UsageOverlayRenderer running inside the live wallpaper service. You choose:

  • Position: top-left, top-right, bottom-left, bottom-right.
  • Per-engine switches: show Claude, show Codex, or both.
  • Per-window switches: show 5-hour quota, show 7-day quota, or both.

Numbers are pulled from GET /api/usage/snapshot every 30 seconds. The polling repository keeps the last good value if a fetch fails, so a transient network blip doesn't blank the panel into --. On the home screen you see something like:

Usage
Claude   5h 42%   7d 17%
Codex    5h 28%   7d 51%
Enter fullscreen mode Exit fullscreen mode

Concrete numbers, both engines, both windows. No more "is my Claude session about to reset" guessing while you're in the middle of a long task.

How we got the numbers right

The data path was the part that bit us. We have two engine sources:

  • Claude comes from ~/.claude/usage-status.json, which the official statusline hook writes. The Mac daemon reads it and posts to /api/usage/snapshot under claude.live.rate_limits.{five_hour,seven_day}.used_percentage.
  • Codex comes from the Codex CLI session log; the daemon flattens it into codex.rate_limits.{five_hour_pct, seven_day_pct}.

The two shapes are different (nested object vs. flat keys), so the Kotlin model UsageSnapshotModels.kt accepts both forms and the renderer falls back through them. There is an instrumented test (UsageSnapshotModelTest.kt) that asserts parsing both shapes returns the same percentage.

Native tab routing bridge

The other under-the-hood improvement is a native tab routing bridge between Chat and Mission. Previously, switching tabs forced the WebView to cold-reload, which caused a visible portal stutter every single time. v1.0.85 reuses the existing Activity with FLAG_ACTIVITY_REORDER_TO_FRONT, so the WebView state is preserved and the transition is instant.

Portal additions

We also shipped on the web side:

  • Quick Start video embed: the portal entry page now embeds a 75-second product walkthrough so a first-time visitor sees EClaw in motion before reading anything.
  • Nagoya trip page at /portal/nagoya-trip.html — an interactive image atlas, station maps, parking pins, and a day-banner hero. Mobile and web parity.
  • Per-bot About scaffold at /portal/bot/:id/about — the groundwork for Bot Plaza profile pages.
  • Dashboard usage widget v2: Session and Weekly percent progress bars plus per-project breakdown. This replaces the old cost-first card and now reads live.rate_limits.{five_hour,seven_day}.used_percentage correctly.

Reliability work

Behind the scenes:

  • Channel outbound backpressure: per-bot 30-messages-per-minute cap with 429 retry-after handling. Bots can no longer accidentally hot-loop each other into a spam wedge.
  • Delivery receipts are now persisted, so a sender can tell the difference between "the channel queue swallowed it" and "the recipient never read it".
  • A2A operational-loop suppression: bot-to-bot ACK noise no longer bubbles into user chat.
  • Handshake fallback to discovered sessions, so a stale session reference does not block first-message delivery.

Backend and infra

  • LATEST_APP_VERSION synced to 1.0.85 — your dashboard's "update available" banner will trigger correctly.
  • DELETE /api/entity/queue for draining a stuck messageQueue without restarting the bot.
  • Claude-CLI-proxy /chat now accepts per-request {repoOwner, repoName, callerToken} — every call runs under its caller's repo credentials (H3 Phase 2 multi-tenant).

i18n

A full Portuguese locale block (5109 keys) landed. Hermes H4 proof keys cover 11 locales. The zh and backend dictionaries went through an AST-based dedup pass (jscodeshift), so we no longer carry phantom duplicate keys. FCM notification channel labels are now localised — your push notifications read in your language.

Vision verification

Per our internal policy, anything that touches visual rendering (avatar, sprite, canvas, chart, wallpaper) ships with a screenshot proof. The v1.0.85 wallpaper overlay was vision-tested on a Pixel_9a Android 14 emulator with a synthetic snapshot POSTed via /api/usage/snapshot. The screenshot below is the actual emulator capture — both engines, both windows, real numbers:

EClaw v1.0.85 wallpaper overlay showing Claude and Codex usage

Try it

The build (versionCode 93, debug commit 6f46f13b) is on Google Play Internal Testing right now. If you're on the internal tester list, an update is already pushing to your device. Set the EClaw wallpaper, open Wallpaper Preview, toggle the Usage Overlay on, pick your corner, and decide which engines and which windows you want to see.

If you find your numbers stuck on --, make sure the Mac daemon is running (launchctl list | grep eclaw-usage-daemon) and that ~/.claude/usage-status.json exists. Once the next 30s poll fires, the overlay updates.

Full changelog and roadmap: https://eclawbot.com


— Enjoyed this? Start EClaw with my invite code —

You get +100 e-coins / I get +500 / First top-up +500 bonus

Claim your bonus

This link goes to the official EClaw invite page

Top comments (0)