How nanako0129/syrtis works
Syrtis is a local-first macOS menu-bar monitor for AI coding usage and subscription quotas. The main workflow reads tool session logs, obtains usage data through the Rust/C interface, derives reports and charts, then presents them in the menu-bar dashboard. Separate quota integrations supply provider windows; settings control presentation and quota choices. The README documents capabilities not fully represented in the sampled excerpts, so links to those features rely on the documented architecture rather than inspected call sites.
Main entry points: DashboardModel.swift Dashboard model · lib.rs Rust C interface · agent_quota_history.rs Quota adapters · StatusItemController.swift Menu-bar shell
Components 22
Usage collection
- Usage data source
Sources/Syrtis/UsageDataSource.swift - Rust C interface
crates/tb_core_ffi/src/lib.rs - Agent usage adapters
crates/tb_core_ffi/src/agent_usage.rs - Quota adapters
crates/tb_core_ffi/src/agent_quota_history.rs
Usage and quota analysis
- Dashboard model
Sources/Syrtis/DashboardModel.swift - Usage reports
Sources/TokenBarCore/TBCore.swift - Quota analysis
Sources/TokenBarCore/QuotaResolver.swift - Usage attribution
Sources/TokenBarCore/UsageAttribution.swift - Session trace
Sources/TokenBarCore/UsageTrace.swift - Last-known snapshots
Sources/Syrtis/SnapshotStore.swift
Menu bar and dashboard
- App entry
Sources/Syrtis/main.swift - App lifecycle
Sources/Syrtis/AppDelegate.swift - Menu-bar shell
Sources/Syrtis/StatusItemController.swift - Dashboard lenses
Sources/Syrtis/Views/DashboardTabs.swift - Activity charts
Sources/Syrtis/Charts/ContributionGraph3D.swift
Settings and updates
- Settings UI
Sources/Syrtis/SettingsWindowController.swift - Client tray options
Sources/Syrtis/ClientTray.swift - Update service
Sources/Syrtis/UpdaterService.swift
Other components
- Mac user
- Tool session logs
- Quota providers
- Sparkle updates
Connections 25
- Mac user → App entry: launches
- Tool session logs → Usage data source: reads
- Usage data source → Rust C interface: requests usage
- Rust C interface → Agent usage adapters: dispatches
- Agent usage adapters → Dashboard model: returns usage
- Dashboard model → Usage reports: builds reports
- Dashboard model → Usage attribution: derives attribution
- Dashboard model → Session trace: builds trace
- Quota providers → Quota adapters: serves quota data
- Rust C interface → Quota adapters: dispatches
- Quota adapters → Quota analysis: returns windows
- Dashboard model → Quota analysis: resolves quotas
- Dashboard model → Last-known snapshots: retains readings
- Last-known snapshots → Dashboard model: restores readings
- App entry → App lifecycle: starts app
- App lifecycle → Menu-bar shell: sets up
- Menu-bar shell → Dashboard model: requests dashboard
- Dashboard model → Dashboard lenses: supplies data
- Usage reports → Dashboard lenses: supplies reports
- Dashboard lenses → Activity charts: renders activity
- Mac user → Menu-bar shell: opens dashboard
- Mac user → Settings UI: opens settings
- Settings UI → Client tray options: configures tracks
- Mac user → Update service: requests update
- Update service → Sparkle updates: checks updates