{"id":51518226,"url":"https://github.com/xodapi/vimit","last_synced_at":"2026-07-08T13:30:33.426Z","repository":{"id":366343110,"uuid":"1275897334","full_name":"xodapi/vimit","owner":"xodapi","description":"Living quota monitor for VibeMode — credits visualized as a breathing creature","archived":false,"fork":false,"pushed_at":"2026-07-03T14:00:03.000Z","size":1689,"stargazers_count":0,"open_issues_count":26,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-03T15:18:12.041Z","etag":null,"topics":["abtop","ambient-display","cli","codex","data-visualization","droid","gamification","gui","limits","monitoring","quota","rust","vibemode"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xodapi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":"AUDIT.md","citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-21T09:24:19.000Z","updated_at":"2026-07-03T14:00:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/xodapi/vimit","commit_stats":null,"previous_names":["xodapi/neurogate-limit-watch","xodapi/vimit"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/xodapi/vimit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xodapi%2Fvimit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xodapi%2Fvimit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xodapi%2Fvimit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xodapi%2Fvimit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xodapi","download_url":"https://codeload.github.com/xodapi/vimit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xodapi%2Fvimit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35266857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-08T02:00:06.796Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["abtop","ambient-display","cli","codex","data-visualization","droid","gamification","gui","limits","monitoring","quota","rust","vibemode"],"created_at":"2026-07-08T13:30:31.281Z","updated_at":"2026-07-08T13:30:33.417Z","avatar_url":"https://github.com/xodapi.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vimit\n\n[English](README.md) | [Русский](README.ru.md)\n\n[![CI](https://github.com/xodapi/vimit/actions/workflows/ci.yml/badge.svg)](https://github.com/xodapi/vimit/actions/workflows/ci.yml)\n[![Stars](https://img.shields.io/github/stars/xodapi/vimit.svg?style=flat-square)](https://github.com/xodapi/vimit/stargazers)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](LICENSE)\n[![Rust](https://img.shields.io/badge/rust-2024-orange.svg?style=flat-square)](https://www.rust-lang.org)\n[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey?style=flat-square)](https://github.com/xodapi/vimit)\n[![Tests](https://img.shields.io/badge/tests-CI%20passing-brightgreen?style=flat-square)](https://github.com/xodapi/vimit/actions/workflows/ci.yml)\n\n**vimit** gives your VibeMode quota a visual presence: one native Rust binary with CLI, TUI, GUI, and a floating overlay where remaining credits pulse as a living creature.\n\nPolls `GET /v1/me`, summarizes credit/request windows (5h / 24h / 7d / 30d),\nrenders a live TUI dashboard (or JSON / compact text), sends desktop\nnotifications on threshold breach, and supports multiple VibeMode accounts.\n\nNo Python, Node, or SDK dependencies — just one executable.\n\n## Demo\n\n![vimit floating overlay demo](docs/vmit_demo_scren.gif)\n\n## Quick Start\n\n```bash\n# Download from releases, then:\nvimit --demo                # try without an API key\nvimit --demo --monitor      # full-screen dashboard\nvimit --init                # interactive setup wizard\nvimit                       # real VibeMode limits\nvimit --doctor              # system diagnostics\n```\n\n## Why\n\nVibe coders need to know whether they can safely keep a Codex/Droid/Claude\nsession running or whether they are about to hit VibeMode limits. The tool is\nsmall, local-first, and intentionally avoids storing API keys or logging\nprivate prompts.\n\n## Features\n\n- **Self-updates** (`vimit update`): check and update the CLI \u0026 GUI natively using GitHub Releases. The GUI includes a dedicated Updates section with a Check Now button and an Auto-check toggle.\n- **Active endpoint failover**: automatically failover between API routers, displaying an active connection badge (`api`/`r-api`).\n- **Trend sparklines**: 15-day usage graphs rendered inside GUI quota cards.\n- **Stealth Mode**: mask sensitive numeric values with `***` in the GUI.\n- **Living overlay creature**: a floating, color-shifting quota indicator with compact/full modes, skin switching, pulse animation, Windows sounds on level changes, and calm sleep/recovery behavior instead of punishment mechanics.\n- **Multiple output modes**: human, JSON (`--json`), compact one-line (`--compact`).\n- **Live TUI monitor** (`--monitor`): ratatui dashboard with gauges, sparklines, color themes.\n- **Monitor presets**: `full` (2-column grid), `compact` (single-column), `mini` (one-liner).\n- **12 color themes**: btop, dracula, catppuccin, tokyo-night, gruvbox, nord, high-contrast, protanopia, deuteranopia, tritanopia, solarized, monokai.\n- **Multi-account**: `accounts.toml` profiles, Tab switching in TUI, dropdown in GUI.\n- **Desktop notifications** (`--notify`): alert on warning/danger, no-repeat logic.\n- **Custom thresholds** (`--warning`, `--danger`, `--threshold`): per-window warning/danger levels.\n- **CI integration** (`--fail-on`): exit non-zero when threshold is breached.\n- **Watch mode** (`--watch N`): periodic polling every N seconds.\n- **abtop integration** (`--with-abtop`): merge local Codex/Claude agent status.\n- **Diagnostics** (`--doctor`): validate config, accounts, env, API connectivity.\n- **Setup wizard** (`--init`): interactive config, .env, and API key setup.\n- **GUI** (`--features gui`): Slint-based desktop window with stealth toggle, sparklines, account dropdown, informative system tray tooltip with exact usage percentages on hover, proper taskbar application icon on Windows, updates configuration panel, and floating creature overlay.\n- **Safe by design**: API key from env only, never logged, no telemetry.\n\n## Stale Cache vs Offline API\n\n- `stale cache` means `vimit` could not fetch fresh `/v1/me` data and is showing the last cached snapshot instead.\n- `offline API` means the live API is currently unreachable; when cache fallback is available, output can show both states at once.\n- JSON exposes this explicitly with `data_status`, `api_status`, `stale`, and `offline_duration_min`.\n\n## Download\n\nRelease binaries:\n\nhttps://github.com/xodapi/vimit/releases\n\nPick the archive for your platform, unpack it, then run:\n\n```bash\nvimit --version\nvimit --demo\nvimit --demo --monitor\n```\n\nWindows PowerShell:\n\n```powershell\n.\\vimit.exe --version\n.\\vimit.exe --demo\n.\\vimit.exe --demo --monitor\n```\n\nIf you double-click `vimit.exe` in Explorer, the Windows console will stay\nopen after the command finishes. The Windows archive also includes\n`vimit-open.cmd`, a double-click helper that always pauses at the end, and\n`vimit-monitor.cmd` for launching the live monitor directly.\n\n## .env Next To The Binary\n\nYou can keep the VibeMode API key in a local `.env` file next to `vimit`\nor in the directory where you run it. The release archive includes\n`.env.example`.\n\n```bash\ncp .env.example .env\n```\n\nEdit `.env`:\n\n```dotenv\nVIBEMODE_API_KEY=YOUR_VIBEMODE_API_KEY\nVIBEMODE_API_BASE=https://r-api.vibemod.pro\n```\n\nThen run:\n\n```bash\nvimit\nvimit --compact\nvimit --json\n```\n\nWindows PowerShell:\n\n```powershell\nCopy-Item .env.example .env\nnotepad .env\n.\\vimit.exe --compact\n```\n\nDouble-click option on Windows:\n\n```text\nvimit-open.cmd\nvimit-monitor.cmd\n```\n\nLookup order:\n\n1. `--env-file \u003cPATH\u003e`\n2. `.env` in the current directory\n3. `.env` next to the `vimit` executable\n4. `~/.vimit/.env` (or `%USERPROFILE%\\.vimit\\.env` on Windows)\n\nReal environment variables have priority over `.env` values. `.env` is ignored\nby git and should not be committed.\n\n## Build From Source\n\nRequirements: Rust stable.\n\n```bash\ngit clone https://github.com/xodapi/vimit.git\ncd vimit\ncargo build --release --locked\n```\n\nBinary location:\n\n- Windows: `target/release/vimit.exe`\n- Linux/macOS: `target/release/vimit`\n\n## Diagnostics\n\nCheck system health:\n\n```bash\nvimit --doctor\n```\n\nExample output:\n\n```\nvimit doctor — system diagnostics\n\n  [✓] config.toml found: /home/user/.config/vimit/config.toml\n  [✓] config.toml is valid TOML\n  [✓] accounts.toml: 2 account(s): dev, prod\n\n  environment:\n       HOME: /home/user\n       VIBEMODE_API_BASE: (not set, will use default)\n       VIBEMODE_API_KEY: (set)\n\n  testing API connection to https://r-api.vibemod.pro... OK (4 window(s))\n\n  status: all checks passed\n```\n\n## Interactive Setup\n\n```bash\nvimit --init\n```\n\nCreates config directory, config.toml with defaults, optionally sets up\n`.env` with your API key, and tests the connection.\n\n## Self-Updates\n\n`vimit` supports native self-updating via GitHub Releases:\n\n```bash\nvimit update --check   # Check if a new version is available\nvimit update           # Automatically download and install the latest release\n```\n\nBackground checking is performed automatically in the background on TUI and GUI startup (if enabled). To avoid GitHub API rate limits, checks are cached for 24 hours in `~/.config/vimit/state.json`.\n\nIn the GUI, a dedicated Updates section has been added to the settings panel:\n- **Check Now** button to trigger an immediate check.\n- **Auto-check** toggle (On/Off) to enable or disable automatic startup checks (setting is persisted in `state.json`).\n- Orange **\"Update Available\"** badge next to the router status in the window header when a newer version is found.\n\n## Usage\n\nTry without a key or network:\n\n```bash\nvimit --demo\nvimit --demo --json\n```\n\nUse a real VibeMode key:\n\n```bash\nexport VIBEMODE_API_KEY=\"YOUR_VIBEMODE_API_KEY\"\nvimit\nvimit --json\nvimit --with-abtop\n```\n\nWindows PowerShell:\n\n```powershell\n$env:VIBEMODE_API_KEY = \"YOUR_VIBEMODE_API_KEY\"\n.\\vimit.exe\n.\\vimit.exe --json\n```\n\nMock a saved `/v1/me` payload:\n\n```bash\nvimit --mock tests/fixtures/me.json\nvimit --mock tests/fixtures/me.json --json\n```\n\nWatch mode:\n\n```bash\nvimit --watch 60 --with-abtop\nvimit --watch 60 --notify\n```\n\nLive monitor:\n\n```bash\nvimit --monitor\nvimit --monitor --watch 10\nvimit --monitor --with-abtop\nvimit --monitor --notify\n```\n\nMonitor presets for different terminal sizes:\n\n```bash\nvimit --monitor --preset full      # 2-column grid, sparklines (default)\nvimit --monitor --preset compact   # single-column, gauge + metrics\nvimit --monitor --preset mini      # one line per window, minimal\n```\n\nPer-window thresholds:\n\n```bash\nvimit --monitor --threshold 5h=80:95,7d=90\nvimit --fail-on warning --threshold 24h=85:98\n```\n\nFormat: `KEY=WARNING[:DANGER]` where KEY is one of `5h`, `24h`, `7d`, `30d`.\nPer-window thresholds override `--warning`/`--danger` for those windows.\n\nIn monitor mode, press `r` to refresh immediately and `q` or `Esc` to quit.\nIt renders an abtop-style dashboard with VibeMode quota windows, warning\nalerts, reset timers, remaining credits/requests, and optional local\nCodex/Claude agent context from `abtop --status-json`.\n\nAPI cache behavior:\n\n- Successful live `/v1/me` responses are cached for 30 seconds by default.\n- Set `cache_ttl_secs = 120` in `config.toml` to change the cache TTL.\n- `--no-cache` always performs a live fetch and does not read or write the API\n  cache, including stale fallback.\n- In monitor mode, pressing `r` clears the current account/endpoint cache entry\n  before forcing the next refresh.\n\nDesktop notifications:\n\n```bash\nvimit --notify\nvimit --watch 60 --notify\nvimit --monitor --notify\n```\n\n`--notify` sends a local desktop alert when a quota window escalates into\n`warning` or `danger`. It keeps one in-process state map, so polling and\nmonitor loops do not spam the same alert on every refresh. De-escalation after a\nwindow reset is silent.\n\nCI/automation threshold:\n\n```bash\nvimit --fail-on warning\nvimit --fail-on danger --json\nvimit --warning 80 --danger 95 --fail-on warning\nvimit --fail-on warning --ci-annotate\n```\n\n`--ci-annotate` keeps normal stdout output intact and emits GitHub Actions-style\n`::warning` / `::error` lines to stderr for breached windows, so it can be used\nin CI logs without adding hook orchestration or request mutation.\n\nCompact one-line output for widgets/status bars:\n\n```bash\nvimit --compact\nvimit --compact --with-abtop\n```\n\n## Output\n\nHuman output:\n\n```text\nVibeMode limits\n  5h   warning reset in 2h 30m\n       credits  39/50 (78.0%, left 11)\n       requests 610/1000 (61.0%, left 390)\n```\n\nJSON output:\n\n```json\n{\n  \"source\": \"vibemode\",\n  \"windows\": [\n    {\n      \"window\": \"5h\",\n      \"level\": \"warning\",\n      \"credits\": { \"used\": 39.0, \"limit\": 50.0, \"remaining\": 11.0, \"percent\": 78.0 }\n    }\n  ],\n  \"abtop\": null\n}\n```\n\n## Safety\n\n- API key is read from the environment variable `VIBEMODE_API_KEY` (with `NEUROGATE_API_KEY` supported as a fallback).\n- The key is never written to disk.\n- Errors do not print the key.\n- JSON output intentionally omits account identity fields.\n- `--with-abtop` uses `abtop --status-json`, which is the compact,\n  privacy-preserving abtop payload without local paths, prompts, chat text, or\n  session IDs.\n- `--monitor` uses the same privacy-safe summaries and keeps the API key out of\n  the terminal output.\n- `--notify` only passes quota summary text to a local OS notification helper:\n  Windows PowerShell toast/fallback popup, macOS `osascript`, or Linux/BSD\n  `notify-send`.\n- No telemetry, no external network calls except VibeMode `/v1/me`.\n\n## Configuration\n\nEnvironment variables:\n\n- `VIBEMODE_API_KEY`: VibeMode API key (fallback: `NEUROGATE_API_KEY`).\n- `VIBEMODE_API_BASE`: API base URL, default `https://r-api.vibemod.pro` (fallback: `NEUROGATE_API_BASE`).\n- `ABTOP_BIN`: abtop binary path, default `abtop`.\n\nCLI options:\n\n```bash\nvimit --help\n```\n\n## Discussions\n\nIdeas, feature requests, and VibeMode/Codex/Droid workflow notes are welcome\nin GitHub Discussions:\n\nhttps://github.com/xodapi/vimit/discussions\n\nSee [ROADMAP.md](ROADMAP.md) for the current improvement backlog.\n\n## Supported OS\n\n- Windows (x86_64)\n- macOS (aarch64)\n- Linux (x86_64, aarch64)\n- Android/Termux — see [docs/termux.md](docs/termux.md); native Slint Android spike is tracked in [docs/android.md](docs/android.md)\n\n## Optional Jujutsu Workflow\n\n`jj` is reasonable here only as an optional local workflow on top of the\nexisting Git repository. It can improve local iteration with operation log,\nconflict recovery, and cleaner in-progress history, but it should not replace\nthe project's canonical GitHub flow.\n\nRecommended stance:\n\n- Use `jj` only if a developer or agent already prefers it locally.\n- Keep GitHub Issues, branches, PRs, and remote state managed through `git` +\n  `gh`.\n- Do not require `jj` in CI, build scripts, onboarding, or AGENTS workflow.\n- Do not add `vcs-jj` or `vcs-core` unless a future automation issue proves\n  they solve a concrete project problem.\n\nMinimal issue workflow with `jj`:\n\n```bash\njj git clone https://github.com/xodapi/vimit.git\ncd vimit\ngh issue view 138\ngit checkout -b issue-138-evaluate-optional-jujutsu-workflow\njj bookmark create issue-138-evaluate-optional-jujutsu-workflow -r @\n\n# edit files, then verify the required check\ncargo fmt --check\n\n# when ready, sync the current jj commit to the Git branch and push normally\njj git push --bookmark issue-138-evaluate-optional-jujutsu-workflow\ngh pr create --base main --title \"docs(dev): evaluate optional Jujutsu workflow\" --body \"Closes #138\"\n```\n\nIf you use `jj`, treat it as a personal productivity layer. The repository\nstill expects Git-compatible branch names, standard commits, and the same issue\nassignment / PR review flow documented in `AGENTS.md`.\n\n## Tests\n\n```bash\ncargo test --locked\ncargo clippy --all-targets -- -D warnings\ncargo fmt --check\ncargo run --locked -- --demo --json\n```\n\n## What works\n\n- Native Rust CLI and GUI (build with `--features gui`).\n- VibeMode `/v1/me` polling with robust schema tolerance.\n- 5h / 24h / 7d / 30d credit and request windows.\n- Human, JSON, and compact output modes with ANSI color coding.\n- Full-screen ratatui monitor with gauges, sparklines, color coding.\n- Monitor presets: `full`, `compact`, `mini` for different terminal sizes.\n- 12 color themes including accessibility-optimized (protanopia, deuteranopia, tritanopia, high-contrast).\n- Per-window thresholds: `--threshold 5h=80:95,7d=90`.\n- `.env` file next to the binary or working directory.\n- Custom warning/danger thresholds.\n- Desktop notifications with escalation tracking.\n- Multi-account support via `accounts.toml` (Tab switching in TUI, dropdown in GUI).\n- Demo/mock mode without a key.\n- Optional local abtop integration.\n- `--doctor` system diagnostics.\n- `--init` interactive setup wizard.\n- Actionable error messages with suggestions.\n- CI and release workflow for native binaries (Windows, Linux, macOS, ARM).\n- PowerShell install/uninstall scripts.\n- Termux/Android install guide.\n\n---\n*Note: Sign up for VibeMode using [this referral link](https://portal.vibemod.pro/?ref=cbvBMDP06DSwPL9u) to receive a $5 bonus on your account.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxodapi%2Fvimit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxodapi%2Fvimit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxodapi%2Fvimit/lists"}