-
Notifications
You must be signed in to change notification settings - Fork 0
Home
justin edited this page May 17, 2026
·
3 revisions
CodexMeter is a tiny ESP32-S3 desk display for Codex usage monitoring, paired with a cross-platform host daemon and an iOS companion app.
π Project Board β see what's in progress and planned
CodexMeter shows your current Codex rate-limit windows, connection status, an animated status pet, and your active Codex session β all on a 128Γ128 screen the size of a postage stamp. A Python daemon runs on your Mac or Linux machine, gathers usage data from Codex/OpenAI, and sends it to the display over USB serial or BLE. An iOS app lets you check your usage from your iPhone.
| Component | Language | Purpose |
|---|---|---|
| Firmware | C++ (Arduino / ESP32-S3) | Renders usage data on the M5Stack AtomS3 display |
| Daemon | Python 3.10+ | Gathers Codex/OpenAI usage, pushes to device over serial/BLE, serves HTTP API |
| iOS App | Swift (iOS 17+) | Discovers daemon via Bonjour, shows usage dashboard and widget |
| Page | Description |
|---|---|
| Home | You're here β project overview |
| Setup Guide | Full installation walkthrough |
| Architecture | How the pieces fit together |
| Troubleshooting | Common problems and solutions |
| Page | Description |
|---|---|
| Daemon API Reference | HTTP endpoints, payload format, BLE GATT reference |
| Firmware Development | Building, flashing, pet sprite format |
| iOS App Development | XcodeGen, Bonjour discovery, widget structure |
| Contributing | How to contribute, style guide, PR process |
Codex OAuth API ββ
OpenAI Costs API ββΌβββ Python Daemon βββ¬ββ USB Serial βββ AtomS3 Display
Local Activity ββ βββ BLE βββββββββ AtomS3 Display
βββ HTTP :9595 βββ iOS App / Widget
- The daemon runs on your Mac/Linux, polls Codex usage every 60 seconds
- It enriches the data with your current Codex session activity (project, task, action)
- It pushes a compact JSON payload to the AtomS3 over USB serial (or BLE)
- The firmware renders five screens: Usage, Connection, Status Pet, Pet Selector, Now Working
- Simultaneously, the daemon serves an HTTP API on port 9595
- The iOS app discovers the daemon via Bonjour/mDNS and polls
/usageevery 30s
Press the AtomS3 button to cycle through screens:
| Screen | Shows |
|---|---|
| Usage | Primary (daily) and secondary (weekly) remaining percentages, reset countdowns, status |
| Connection | BLE state, device name, MAC address |
| Status Pet | Animated pet character with rotating status phrases |
| Pet Selector | Preview and select from Sukuna, Boba, Gojo, Itachi, ApuPepe, and more |
| Now Working | Active Codex session: project, thread, current action, last completed |
- Firmware: stable β builds and flashes on M5Stack AtomS3
- Daemon: stable β serial, BLE, HTTP transports all working; 3-tier data fallback
- iOS App: functional β Bonjour discovery, usage dashboard, widget extension
- CI: green β Python (ruff + pytest) and iOS (xcodebuild test) on every push
See the project board for active work and the TODO for planned improvements.
- Main README β Full setup guide with prerequisites
- System Reference β Protocol spec, data flow, constraints
- End-to-End Testing β Validation guide
- Issue Tracker
Getting Started
Reference
Development
Help
External