<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alan Rodrigo Vivares</title>
    <description>The latest articles on DEV Community by Alan Rodrigo Vivares (@arvivares).</description>
    <link>https://dev.to/arvivares</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4117596%2F69ce9894-d0bd-4fba-9654-94e14ad30937.png</url>
      <title>DEV Community: Alan Rodrigo Vivares</title>
      <link>https://dev.to/arvivares</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arvivares"/>
    <language>en</language>
    <item>
      <title>I built Statusline: an open-source Codex usage monitor for desktop and mobile</title>
      <dc:creator>Alan Rodrigo Vivares</dc:creator>
      <pubDate>Wed, 09 Sep 2026 13:14:31 +0000</pubDate>
      <link>https://dev.to/arvivares/i-built-statusline-an-open-source-codex-usage-monitor-for-desktop-and-mobile-58pj</link>
      <guid>https://dev.to/arvivares/i-built-statusline-an-open-source-codex-usage-monitor-for-desktop-and-mobile-58pj</guid>
      <description>&lt;p&gt;Statusline started with a small interface detail I wanted to make more useful:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Weekly limit: [███████████░░░░░░░░░] 53% left (resets 09:02 on 2 Sep)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That line answers two practical questions: how much capacity is left, and when it&lt;br&gt;
resets.&lt;/p&gt;

&lt;p&gt;I wanted to keep that information visible while working—and make it accessible&lt;br&gt;
from my phone without opening a terminal.&lt;/p&gt;

&lt;p&gt;That became &lt;strong&gt;Statusline&lt;/strong&gt;, an open-source desktop companion with native mobile&lt;br&gt;
apps and home screen widgets.&lt;/p&gt;

&lt;p&gt;The iPhone app is now available on the App Store. Desktop builds and Android are&lt;br&gt;
available in beta.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Statusline does
&lt;/h2&gt;

&lt;p&gt;Statusline reads usage information from your local Codex session and presents the&lt;br&gt;
remaining quota, reset time, and sample timestamp. The desktop companion also&lt;br&gt;
displays short-window usage and account-plan information when available.&lt;/p&gt;

&lt;p&gt;It lives in the menu bar on macOS or the system tray on Windows and Linux. Optional&lt;br&gt;
encrypted synchronization carries a minimal quota snapshot to the mobile apps and&lt;br&gt;
their widgets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7jfc70ia02nyosht00mk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7jfc70ia02nyosht00mk.png" alt="Statusline Companion showing remaining Codex quota, reset information, and synchronization status" width="500" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The visual language, called &lt;em&gt;Data Plane&lt;/em&gt;, grew out of the original terminal&lt;br&gt;
display: segmented meters, restrained typography, dark surfaces, and an amber&lt;br&gt;
accent.&lt;/p&gt;

&lt;p&gt;The interface is intentionally focused. Statusline monitors your personal Codex&lt;br&gt;
quota; it does not run coding tasks, manage conversations, or increase your usage&lt;br&gt;
limits.&lt;/p&gt;
&lt;h2&gt;
  
  
  The architecture: shared protocol, native interfaces
&lt;/h2&gt;

&lt;p&gt;The project uses different technologies where they fit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Desktop:&lt;/strong&gt; Tauri, Rust, and TypeScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;iPhone:&lt;/strong&gt; SwiftUI and WidgetKit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android:&lt;/strong&gt; Kotlin, Jetpack Compose, and native app widgets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relay:&lt;/strong&gt; TypeScript, currently deployed on Cloudflare Workers with D1.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of sharing one UI implementation across every platform, the clients share&lt;br&gt;
a versioned synchronization contract.&lt;/p&gt;

&lt;p&gt;The data flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Local Codex runtime
        │
        │ Usage metadata over local stdio
        ▼
Desktop companion
        │
        │ Encrypt snapshot with AES-256-GCM
        ▼
HTTPS relay
        │
        │ Encrypted snapshot
        ▼
Native mobile app
        │
        │ Decrypt, validate, and cache
        ▼
Home screen widget
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The desktop companion communicates with the local Codex App Server process. It&lt;br&gt;
normalizes the relevant usage information before deciding what to display locally&lt;br&gt;
and what to synchronize.&lt;/p&gt;

&lt;p&gt;The current mobile payload is deliberately small: remaining percentage, reset&lt;br&gt;
time, and the time of the reading.&lt;/p&gt;

&lt;p&gt;A Windows computer and an iPhone use the same pairing and snapshot protocol as a&lt;br&gt;
Linux computer and an Android phone. The synchronization flow does not require a&lt;br&gt;
shared iCloud account.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/arvivares/statusline/blob/main/protocol/statusline-relay-v1.md" rel="noopener noreferrer"&gt;relay protocol specification&lt;/a&gt;&lt;br&gt;
and encryption interoperability fixture are versioned in the repository so the&lt;br&gt;
Rust, Swift, and Kotlin implementations can be checked against the same contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping account credentials out of synchronization
&lt;/h2&gt;

&lt;p&gt;A quota widget should not need your prompts, source code, or conversation history.&lt;/p&gt;

&lt;p&gt;Statusline does not require an OpenAI API key. The local Codex runtime manages its&lt;br&gt;
own authentication; Statusline does not copy its credential files or send those&lt;br&gt;
credentials to the relay.&lt;/p&gt;

&lt;p&gt;Device pairing separates authentication from encryption:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The companion creates a relay channel and generates an encryption key locally.&lt;/li&gt;
&lt;li&gt;A single-use pairing QR transfers the pairing information and encryption key to
the phone.&lt;/li&gt;
&lt;li&gt;The phone exchanges the temporary pairing token for a reader credential.&lt;/li&gt;
&lt;li&gt;The companion encrypts quota snapshots before uploading them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The relay never receives the encryption key. It stores the encrypted snapshot&lt;br&gt;
alongside the operational information needed to manage the channel, such as&lt;br&gt;
credential hashes and timestamps.&lt;/p&gt;

&lt;p&gt;That distinction matters: encrypted payloads do not mean the service has no&lt;br&gt;
metadata. The goal is to keep the quota contents and Codex credentials outside the&lt;br&gt;
relay's trust boundary.&lt;/p&gt;

&lt;p&gt;The pairing QR is also sensitive information. It should not appear in screenshots,&lt;br&gt;
public issue reports, or promotional videos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supporting macOS users without a separate CLI installation
&lt;/h2&gt;

&lt;p&gt;One practical issue came up during development: some people use Codex through the desktop application and have never installed a standalone CLI.&lt;/p&gt;

&lt;p&gt;The latest macOS beta can discover the Codex executable bundled inside supported&lt;br&gt;
ChatGPT or Codex.app installations. That allows Statusline to use the existing&lt;br&gt;
local runtime without requiring a separate CLI installation.&lt;/p&gt;

&lt;p&gt;There are important boundaries to this support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Older desktop-app versions may not contain a compatible runtime.&lt;/li&gt;
&lt;li&gt;Session reuse depends on how the local Codex installation manages authentication.&lt;/li&gt;
&lt;li&gt;Windows and Linux currently retain their CLI-based discovery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a session is unavailable, Statusline reports that state. It does not attempt to&lt;br&gt;
extract desktop cookies or silently migrate account credentials.&lt;/p&gt;

&lt;p&gt;The supported sources and troubleshooting steps are documented in the&lt;br&gt;
&lt;a href="https://github.com/arvivares/statusline/blob/main/docs/architecture/codex-sources.md" rel="noopener noreferrer"&gt;Codex runtime guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A widget shows a snapshot, not a live connection
&lt;/h2&gt;

&lt;p&gt;One design decision I want to be explicit about is freshness.&lt;/p&gt;

&lt;p&gt;The widgets read a local cache populated by the mobile app. They display the most&lt;br&gt;
recently synchronized sample, not a continuously streaming connection to Codex.&lt;/p&gt;

&lt;p&gt;A new reading depends on the companion collecting and publishing it, the phone&lt;br&gt;
fetching it, and the operating system allowing the relevant work.&lt;/p&gt;

&lt;p&gt;That is why the sample timestamp matters alongside the percentage. A reading can&lt;br&gt;
still be useful when it is cached, but users should be able to understand how&lt;br&gt;
recent it is.&lt;/p&gt;

&lt;p&gt;Push-assisted background refresh is planned; it is not something the current&lt;br&gt;
release promises.&lt;/p&gt;

&lt;h2&gt;
  
  
  Availability
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Current availability&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;iPhone&lt;/td&gt;
&lt;td&gt;Available on the App Store; requires iOS 17 or later&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Android&lt;/td&gt;
&lt;td&gt;Beta APKs and Google Play closed testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;Universal beta DMG and PKG installers, signed and notarized&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;Beta DEB, RPM, and AppImage packages with detached OpenPGP signatures&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;Beta NSIS and MSI installers; currently unsigned previews&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Windows signing remains unfinished. SmartScreen may warn about or block those&lt;br&gt;
installers. Signed checksums help verify file integrity, but they do not replace a&lt;br&gt;
trusted Windows publisher signature.&lt;/p&gt;

&lt;p&gt;The applications support English and Spanish, following the system language with&lt;br&gt;
English as the fallback.&lt;/p&gt;

&lt;h2&gt;
  
  
  What comes next
&lt;/h2&gt;

&lt;p&gt;The first version focuses on Codex.&lt;/p&gt;

&lt;p&gt;The longer-term direction is a single view of capacity across coding agents. AGY,&lt;br&gt;
Claude Code, and GitHub Copilot are on the research roadmap, but they are not&lt;br&gt;
supported integrations today.&lt;/p&gt;

&lt;p&gt;The challenge is not simply adding more progress bars. A future adapter needs a&lt;br&gt;
reliable, authorized data source and a clear definition of what its numbers mean.&lt;br&gt;
Requests, tokens, credits, and subscription percentages should not be presented as&lt;br&gt;
interchangeable measurements.&lt;/p&gt;

&lt;p&gt;Other planned improvements include local usage history, low-capacity alerts,&lt;br&gt;
configurable multi-provider widgets, and a separately packaged Linux relay for&lt;br&gt;
self-hosting.&lt;/p&gt;

&lt;p&gt;These are directions, not delivery commitments. The&lt;br&gt;
&lt;a href="https://github.com/arvivares/statusline/blob/main/ROADMAP.md" rel="noopener noreferrer"&gt;public roadmap&lt;/a&gt; tracks&lt;br&gt;
the scope and constraints.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it, or help improve it
&lt;/h2&gt;

&lt;p&gt;Statusline is available under the MIT license:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://statusline.inmerzion.io/" rel="noopener noreferrer"&gt;Project website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/arvivares/statusline" rel="noopener noreferrer"&gt;Source code and documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/app/statusline/id6807851320" rel="noopener noreferrer"&gt;Download for iPhone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/arvivares/statusline/releases" rel="noopener noreferrer"&gt;Desktop and Android beta downloads&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm particularly interested in feedback on initial setup, device pairing, and&lt;br&gt;
widget readability.&lt;/p&gt;

&lt;p&gt;I'm also looking for Android testers before the public Google Play release. If you&lt;br&gt;
use Codex and would like to try the Android app, leave a comment or get in touch&lt;br&gt;
through the project.&lt;/p&gt;

&lt;p&gt;What would make a quota monitor useful in your workflow: a simple&lt;br&gt;
remaining-capacity indicator, reset notifications, or usage history?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Statusline is an independent project. It is not affiliated with, sponsored by, or&lt;br&gt;
endorsed by OpenAI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>rust</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
