Nelson Pires 0981194eed feat: Multi-provider Usage Dashboard & Quota Monitoring (#259)
* feat(openchamber): persist usage auto-refresh settings

Enable a switch to toggle automatic usage refresh
Provide input to configure refresh interval in milliseconds
Persist changes to desktop settings and server API when changed

* feat: add UsageCard component

Add a new UsageCard component to display a usage window with title, optional subtitle, and a progress bar
Show current usage percentage and a reset time label for the window
Render a formatted window label and a compact subtitle for concise UI

* feat(usage): add UsagePage UI for quota usage

Add a dedicated UsagePage with provider-based usage details
Show last updated time and auto-refresh status
Handle empty, not configured, and error states with informative banners

* feat(usage): add UsageProgressBar component

Introduce a new UsageProgressBar component to visualize quota usage
Display a gradient fill that changes with critical, warn, or normal tones
Expose accessible progress attributes for screen readers

* feat(usage): add UsageSidebar component

Display quotas for all providers in a scrollable sidebar
Refresh quotas with a button and loading indicator
Colorize provider rows based on usage status and runtime context

* feat: add usage section to Settings

Add a new Usage item to the Settings sidebar for desktop and mobile
Render UsagePage when the Usage tab is selected in Settings
Wire up new UsageSidebar and UsagePage components under usage

* feat: add Usage section to sidebar

Add new Usage section in the sidebar for API quota monitoring.
Display a bar chart icon and description for the Usage item.
Monitor and display API quota usage across providers.

* feat(desktop): add usage auto-refresh settings

Enable automatic refresh for usage data with new settings
Store refresh interval in milliseconds for usage updates

* feat(persistence): support usageAutoRefresh and usageRefreshIntervalMs

Persist usageAutoRefresh in desktop settings
Persist usageRefreshIntervalMs in desktop settings
Validate types for new fields during sanitizeWebSettings

* feat(quota): export providers and utilities

Expose QUOTA_PROVIDERS and QUOTA_PROVIDER_MAP for consumers
Export QuotaProviderMeta type for user code
Make formatting and usage resolution utilities available from quota module

* feat(quota): define base quota provider interface

Define QuotaProvider interface with id, name, isConfigured, and fetchQuota
Expose ProviderResult type in fetchQuota contract

* feat: add quota providers index and map

Expose QUOTA_PROVIDERS with OpenAI, Google and z.ai
Provide QUOTA_PROVIDER_MAP for quick provider lookup by id

* feat: add quota utils for percent formatting and tone

Add clampPercent to sanitize and clamp numbers to 0-100
Add formatPercent to render '-' for null and 'x%' for values
Add resolveUsageTone to categorize percent as safe, warn, or critical

* feat: add useQuotaStore for quota data

Load usage settings from desktop, VSCode, or API at startup
Fetch quotas for all providers in parallel and update loading state
Expose lastUpdated timestamp and error state for UI feedback

* feat: export quota types from quota module

Expose quota-related types in UI type definitions
Allow downstream code to import QuotaProviderId and related types
Aggregate quota exports under the quota module in index

* feat: add quota types for usage providers

Add QuotaProviderId and UsageWindow shapes to model quota data
Add ProviderUsage, ProviderResult, and related usage mapping for providers

* feat: add quota provider endpoints API

List available quota providers via GET /api/quota/providers
Retrieve quota details for a specific provider with GET /api/quota/:providerId
Log errors and return 500 with error message on quota fetch failures

* feat: add quota providers discovery and formatting

Detect configured quota providers from auth and account files
Normalize auth entries to tokens or objects for API usage
Expose formatted reset times and remaining window metrics

* feat: persist usage settings in UsageSidebar and remove from defaults

Load usage settings on mount for the sidebar
Persist changes to auto-refresh and refresh interval to server
Remove usage settings state and effects from DefaultsSettings

* fix(usage): guard auto-select in UsagePage when results empty

Guard auto-select in UsagePage when results are empty
Prevent unexpected provider selection on initial render

* fix(quota): set error state during quota updates

Reset error to null when a new quota result is added
Set error to the error message on fetch failure or fallback
Keep error state alongside results in all update paths
2026-02-01 18:30:30 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00
2026-01-30 15:40:25 +02:00
2026-01-30 15:40:25 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00
2026-01-30 15:40:25 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00

OpenChamber

GitHub stars GitHub forks GitHub release Created with OpenCode Ask Zread Discord Support the project

Web and desktop interface for the OpenCode AI coding agent. Works alongside the OpenCode TUI.

The OpenCode team is actively working on their own desktop app. I still decided to release this project as a fan-made alternative.

It was entirely built with OpenCode tool - first with the TUI version, then with the first usable version of OpenChamber, which I then used to build the rest.

The whole project was built entirely with AI coding agents under my supervision. It started as a hobby project and proof of concept that AI agents can create genuinely usable software.

OpenChamber Chat

More screenshots

Tool Output Settings Web Version Diff View VS Code Extension

PWA Chat PWA Terminal

Why use OpenChamber?

  • Cross-device continuity: Start in TUI, continue on tablet/phone, return to terminal - same session
  • Remote access: Use OpenCode from anywhere via browser
  • Familiarity: A visual alternative for developers who prefer GUI workflows

Features

Core (all apps versions)

  • Integrated terminal
  • Git operations with identity management and AI commit message generation
  • Smart tool visualization (inline diffs, file trees, results highlighting)
  • Rich permission cards with syntax-highlighted operation previews
  • Per-agent permission modes (ask/allow/full) per session
  • Multi-agent runs from a single prompt (isolated worktrees; Web/PWA + Desktop)
  • Branchable conversations: start a new session from any assistant response
  • Task tracker UI with live progress and tool summaries
  • Model selection UX: favorites, recents, and configurable tool output density
  • UI scaling controls (font size and spacing)
  • Session auto-cleanup with configurable retention
  • Memory optimizations with LRU eviction

Web / PWA

  • Mobile-first UI with gestures and optimized terminal controls
  • Self-serve web updates (no CLI required)
  • Update and restart keeps previous server settings (port/password)
  • Cloudflare Quick Tunnel support for easy remote access (--try-cf-tunnel)
  • QR code generation for quick mobile access (--tunnel-qr)
  • Auto-login URL with embedded password (--tunnel-password-url)

Desktop (macOS)

  • Native macOS menu bar integration with app actions
  • First-launch directory picker to minimize permission prompts

VS Code Extension

  • Editor-integrated file picker and click-to-open from tool output
  • In-extension Settings access and theme mapping

GitHub Actions (Cloud Usage)

Run OpenChamber remotely using GitHub Actions. No local computer required.

  • Zero Setup: Runs on GitHub's infrastructure.
  • Persistence: Optional; enabled when OPENCODE_SERVER_PASSWORD is set (encrypted).
  • Remote Access: Access via secure tunnel (Cloudflare/Ngrok).

Read the Guide: OpenChamber for Actions

Custom Themes

Create your own color schemes by dropping JSON files into ~/.config/openchamber/themes/. Hot reload supported — no restart needed.

Read the Guide: Custom Themes

Installation

VS Code Extension

Install from VS Code Marketplace / Open VSX Registry or search "OpenChamber" in Extensions.

CLI (Web Server)

# Quick install (auto-detects your package manager)
curl -fsSL https://raw.githubusercontent.com/btriapitsyn/openchamber/main/scripts/install.sh | bash

# Or install manually
bun add -g @openchamber/web    # or npm, pnpm, yarn
openchamber                          # Start on port 3000
openchamber --port 8080              # Custom port
openchamber --daemon                 # Background mode
openchamber --ui-password secret     # Password-protect UI
openchamber --try-cf-tunnel          # Create a Cloudflare Quick Tunnel for remote access
openchamber --try-cf-tunnel --tunnel-qr              # Show QR code for easy mobile access
openchamber --try-cf-tunnel --tunnel-password-url   # Include password in URL for auto-login
OPENCODE_PORT=4096 OPENCODE_SKIP_START=true openchamber  # Connect to external OpenCode server
openchamber stop                     # Stop server
openchamber update                   # Update to latest version

Desktop App (macOS)

Download from Releases.

Prerequisites

See CONTRIBUTING.md for guidelines.

Tech Stack

Frontend

React TypeScript Vite Tailwind CSS

State & UI

Zustand Radix UI

Backend & Desktop

Express Tauri OpenCode SDK

Acknowledgments

Independent project, not affiliated with OpenCode team.

Special thanks to:

  • OpenCode - For the excellent API and extensible architecture.
  • Flexoki - Beautiful color scheme by Steph Ango.
  • Pierre - Fast, beautiful diff viewer with syntax highlighting.
  • Tauri - Desktop application framework.
  • Ghossty-web - for a great implementeation of a Ghostty web renderer.
  • David Hill - who inspired me to release this without overthinking.
  • My wife, who created a beautiful firework animation for the app while testing it for the first time.

License

MIT

S
Description
No description provided
Readme MIT
82 MiB
Languages
TypeScript 74.8%
JavaScript 19.8%
MDX 4.7%
CSS 0.4%
HTML 0.1%
Other 0.1%