README_EN.md

August 22, 2026 · View on GitHub

VibeMeter — a local-first AI coding activity tracker for macOS

VibeMeter

Know what your agents are doing.
Track your agents. Discover your coding type.

Version CI macOS 14+ Local first MIT License

🇨🇳 中文 · 🇺🇸 English

VibeMeter brings live status, long-term analytics, and your VCTI profile into one local-first macOS app. A glance at the Notch tells you whether Claude Code, Codex, or DeepSeek Harness is thinking, reading, using a tool, or waiting for you. Sessions, tokens, cost, models, tools, and Skill usage stay on your Mac and become a history you can inspect and share. Once the evidence is strong enough, 24 VCTI personalities turn that history into a recognizable picture of how you build with agents.

VibeMeter does not control your agents, approve requests, or modify source repositories. If a signal is unavailable, the UI says so instead of dressing missing data up as zero.

✨ Three views. One clear picture.

  • Understand at a glance. The Notch shows live Claude Code, Codex, and DeepSeek Harness stages, priority, and recent structured actions. The menu-bar popover covers time ranges, tokens, cost, activity trends, and remaining quota.
  • Learn from every session. Data brings together sessions, input/output/cache tokens, time, cost, agents, models, tools, Skills, activity patterns, and work events.
  • Turn behavior into identity. VCTI maps verifiable local behavior to 24 AI coding personalities, with dimensions, confidence, and evidence. Thin evidence stays explicitly incomplete.

Session details now have separate Process and Context views. Context is read-only observation: coverage is labeled Observed, Estimated, or Not recorded, with token summaries, context composition, an event timeline, and complete categories for system prompts, tool schemas, user messages, injected context, agent replies, and tool results. The first request loads the 50 most recent events and can continue into older history; text is sanitized and bounded only when previewed on demand, and complete source text is not stored.

The Context browser’s interaction direction was informed by dsh-context. Thanks to bowenliang123 for the open-source work; VibeMeter uses an independent data model and implementation.

Share and Settings remain utility surfaces. Catchphrases and insight cards live on VCTI; comparison bars and session replay live on Data. Sources remain a transitional route opened from Settings. The review workspace is intentionally not shipped in VibeMeter; its previous implementation remains archived in TokenGraph. aftervibe remains only as a legacy database migration identifier.

📸 Key screens

VCTI profileLive activity with Notch
VCTI profileLive activity and Notch
DataShare
Data pageShare page

Menu-bar analytics popover

🧬 VCTI: 24 AI coding personalities

VCTI groups collaboration behavior into six stages with four personalities in each stage. The names make the patterns memorable; the result still comes from verifiable local behavior. When the evidence is too thin, VibeMeter keeps collecting instead of forcing a type.

The 24 VCTI personalities

Starting Style

VCTI Starting Style: VIBE, SPEC, HACK, and MIX

CodePersonalityIn one line
VIBEVibe LeadThe spec can wait; the feeling has to arrive first.
SPECSpec OwnerA task without acceptance criteria has not received a building permit.
HACKShortcut HackerThe orthodox answer is still reading docs; your side route already runs.
MIXStack StitcherYou turn wheels, frames, and engines into a vehicle that runs.

Agent Direction

VCTI Agent Direction: YOLO, LOOP, BOSS, and SWARM

CodePersonalityIn one line
YOLOAll-in OperatorSelect all, execute, accept, pray—no wasted motion.
LOOPOne-more-versionThere is no failure between you and the agent, only another version.
BOSSAgent ForemanYou write less code and get better at arranging how code gets written.
SWARMParallel ManiacThe product is not live, but the agent org chart already is.

Quality Control

VCTI Quality Control: DIFF, TEST, DOCS, and UNDO

CodePersonalityIn one line
DIFFDiff SupervisorAgents may improvise; every line still answers for itself.
TESTTest GatekeeperA page opening merely qualifies it to enter testing.
DOCSDocs DiehardKnowledge that only lives in chat is one cleanup away from extinction.
UNDORollback MasterYou let anything happen because you know how to make it unhappen.

Debug & Repair

VCTI Debug and Repair: DEBUG, PATCH, STACK, and AUTO

CodePersonalityIn one line
DEBUGBug DetectiveOthers see an error; you see an unorganized clue.
PATCHPatch HeroStop the leak first; restoring service is the present priority.
STACKInfra MaximalistA button problem eventually gets its own service layer.
AUTOAutomation ManiacAnything done manually twice is challenging your principles.

Delivery Rhythm

VCTI Delivery Rhythm: SHIP, RUSH, MVP, and DETAIL

CodePersonalityIn one line
SHIPRelease WarriorWhile others debate field names, your preview link is already in chat.
RUSHSprint BurnerYou cruise steadily, then compress the final push into one intense closing window.
MVPBarebones BuilderThe flow works and the data stays put—time to invite the first users.
DETAILDetail ControllerThe feature shipped long ago; the final two pixels have not.

Tool Relationship

VCTI Tool Relationship: FORK, TOKEN, CACHE, and BUDDY

CodePersonalityIn one line
FORKTool HopperEvery new tool is a long-term relationship until the next one appears.
TOKENToken AccountantEvery model call opens a cost report in your head.
CACHEContext HoarderGive the agent every background fact and it will find the answer somewhere.
BUDDYCyber PartnerA genuinely compatible agent is worth building a long relationship with.

⚡ Live monitoring

After onboarding, VibeMeter can install managed local hooks for detected Claude Code and Codex installations:

  • existing JSON and TOML configuration is merged rather than replaced;
  • an existing configuration is backed up before the first change;
  • the managed script sends events to a 0600 Unix socket under ~/.vibemeter;
  • the Notch shows structured status only, never raw prompts, commands, code, paths, or tool output;
  • Codex phase refinement reads only event type, collaboration mode, tool name, and lifecycle timestamps—not prompts, responses, reasoning, code, paths, or tool arguments;
  • background waiting and error transitions send silent notifications; background CLI completion may notify, while Codex Desktop completion never receives a duplicate VibeMeter notification;
  • repair and uninstall touch only VibeMeter-managed entries.

DeepSeek Harness needs no installed hook. VibeMeter read-only observes its local structured session stream to provide Codex-level exact lifecycle status, historical analytics, trajectory replay, source health, and a validated jump-back entry without changing Harness configuration or sessions.

The Notch disappears into the physical cutout while idle. With one active session, the compact left wing shows its source icon and project name; with multiple sessions, it shows per-source session counts. The right wing shows one highest-priority state. Click or deliberately hover over the cutout/wings for about 300 ms to expand. A hover-opened panel collapses about 500 ms after exit; clicking elsewhere also collapses unless that expansion is temporarily pinned. Manual close and app restart reset the pin. Notch and menu-bar visibility can be controlled independently. Macs without a physical Notch keep the menu-bar and main-window paths. Claude Code, Codex, DeepSeek Harness, Kimi Code, and ZCode provide exact live lifecycle status; DeepSeek Harness, Kimi Code, and ZCode are observed read-only through bounded structured local state. Cursor, OpenClaw, and Hermes contribute only readable historical evidence to Data, replay, and VCTI.

💬 Catchphrases

Historical source text is scanned transiently in local memory. VibeMeter stores only derived phrase counts, session counts, and source attribution:

  • Chinese candidates contain 3–12 characters; English candidates contain 2–5 words;
  • variable yes/no questions may be collapsed to a safe frame such as 你接受……吗 or do you accept…?; the variable body is not retained;
  • a phrase must repeat across multiple sessions;
  • code, paths, secret-like values, tool output, markup, punctuation-only tokens, and stopwords are filtered;
  • client-generated transport scaffolding, including Codex attachment manifests and My request for Codex headings, is filtered;
  • nested phrases with substantially overlapping session evidence are collapsed to the most complete expression;
  • each role exposes at most eight phrases;
  • font size represents frequency;
  • Agent phrase backgrounds identify the dominant source; attribution prefers the recorded model and falls back to the Agent.

Raw live-hook envelopes are discarded after canonical normalization by default. If the user explicitly enables diagnostic mode, they are encrypted locally with a macOS Keychain-protected key, expire after seven days, and can be cleared early. Long-term VCTI and activity features use canonical and derived metrics rather than raw envelopes.

🔐 Privacy boundaries

  • Source histories and source repositories remain read-only.
  • The VibeMeter index lives at ~/Library/Application Support/com.vibemeter.desktop/vibemeter.sqlite.
  • First launch copies the aftervibe database when available, otherwise the legacy TokenGraph database, using SQLite online backup.
  • Git evidence and account-level Cursor usage remain opt-in and separate from local VCTI/session analytics.
  • Share Guard blocks secret-like strings and absolute paths before export.

See docs/privacy.md and docs/vibemeter-migration.md.

🎨 Share Studio

Share Studio includes six public templates across usage, developer retrospective, agent comparison, session recap, VCTI identity, and catchphrases. It is preview-first, supports five common aspect-ratio presets in the UI, and exports deterministic PNG or SVG output in Simplified Chinese or English, light or dark. Every export passes through Share Guard before it leaves the app.

🧰 Development

Requirements: macOS 14+, Node.js 22+, Rust stable, and Xcode Command Line Tools.

npm install
npm run ci
npm run build

The Tauri bundle is written to:

apps/desktop/src-tauri/target/release/bundle/macos/VibeMeter.app

Local builds are ad-hoc signed and are not notarized.

For a release, keep the versions in both package.json files, Cargo.toml, and tauri.conf.json in sync, then push the matching vX.Y.Z tag. GitHub Actions runs the full validation suite, builds Apple Silicon and Intel DMG and ZIP packages, and creates the GitHub Release. These artifacts are ad-hoc signed; Apple notarization remains a separate distribution step.

🗂️ Repository layout

apps/desktop/src/                 React UI, state, charts, and localization
apps/desktop/src-tauri/src/       Rust adapters, live monitor, storage, and exports
apps/desktop/src-tauri/tests/     Rust integration tests
docs/                             Architecture, privacy, and migration records

🤝 Contributing

Issues and pull requests are welcome. Please read CONTRIBUTING.md and SECURITY.md first. Use synthetic fixtures and screenshots; never commit real conversations, credentials, databases, or local build artifacts.

VibeMeter is available under the MIT License. The bundled Space Grotesk font is distributed under the SIL Open Font License 1.1. VibeMeter is not affiliated with or endorsed by the coding-agent providers named above.