Skip to content
CodeVetter docs
Esc
navigateopen⌘Jpreview
On this page

The six native macOS sections and their shared CLI and MCP contracts.

Surfaces and navigation

The native app uses one persistent macOS split-view shell and six sections. Every page shares the same header, content width, spacing scale, evidence language, loading/empty/error treatment, and keyboard-sized click targets.

Section Native source Primary result
Usage PremiumUsageView.swift Remaining provider allowance first, then bounded historical usage, then Devin’s separate indexed history. Unavailable quota or Devin history is labelled unavailable, never zero.
Repo Unpack PremiumUnpackView.swift Repository brief, inventory, graph/history evidence, and exports.
Review PremiumWorkbench.swift Exact change, independent Claude/Codex review, executable evidence, findings, and handoff receipts.
Testing PremiumTestingView.swift plus focused testing views Preview, changed verification, scenarios, differential runs, warm verification, and opt-in PR watchers.
Performance PremiumPerformanceView.swift Exact local workload, baseline/candidate measurements, limits, cleanup, and optimization verdict.
Settings PremiumSettingsView.swift Accounts, agents, MCP, rubrics, memories, usage roots, updater/about, and other configuration.

The app source lives in apps/macos/CodeVetterPackage/Sources/CodeVetterFeature/. ContentView.swift owns navigation; PremiumPageHeader.swift and EvidenceStyle.swift own the shared page grammar.

Synchronized interfaces

The native UI uses the bundled codevetter executable. Humans and agents can call the same CLI directly, while codevetter-mcp publishes bounded read-only projections. Rust-owned schema versions and semantics are shared across all three; the SwiftUI client does not reimplement verdicts.

Typical entry point:

codevetter check --range main...HEAD \
  --task "Describe the expected behavior" \
  --json

Supporting commands cover scope resolution, T-Rex testing, performance, differential verification, scenario compilation, Repo Unpack, usage, settings, rubrics, memories, MCP readiness, X-Ray export, and isolated fix attempts. Run codevetter --help for the exact current contract.

MCP remains read-only: it can inspect evidence and prepare bounded review context, but it cannot start a review, execute tests, approve a fix, alter settings, or publish anything.

Devin on the Usage desk

Devin is indexed from its own SQLite session history and is never folded into the ccusage totals, so it renders as its own panel on the page rather than as a diagnostic. The panel follows the same 1w/30d/90d/all-time window selection as the ccusage desk.

DevinUsageSummary.availability(for:) separates three states the panel must not conflate: an unreadable history reads unavailable, a readable history with no sessions in the window reads empty, and anything else reads as activity. Stale counters alongside a failed status still read unavailable.

Usage revalidation

Usage keeps itself current while the section is open. PremiumUsageView starts a poll that lives exactly as long as the visible section, so nothing collects in the background after you navigate away.

Surface Cadence Why
Local history (codevetter usage) 60s Offline ccusage scan over agent logs.
Provider allowance (codevetter quota) 60s Spawns supervised claude and codex sessions that can take twenty seconds and reach the provider. The cadence is measured from the end of the previous collection.

Polling suspends while the app is not frontmost and revalidates immediately on reactivation, so a backgrounded window never spawns provider sessions the operator cannot see. A repeat collection whose source_fingerprint matches the accepted report keeps that report rather than re-rendering identical data. The header Refresh button always forces both reads.

Interaction policy

  • Review findings are leads until executable evidence supports a verdict.
  • Watchers are opt-in and app-lifetime bounded; they do not run while the app is closed and each execution session requires consent.
  • Destructive cleanup, fix execution, and authority changes are explicit, separately confirmed operations.
  • Missing usage, provider quota, or runtime data remains visibly unavailable.
  • Settings is one coherent destination with subsections, not a collection of unrelated top-level pages.

The retired React routes and Tauri WebView are historical implementation details. Do not restore them as parallel product surfaces.

Was this page helpful?