· 4 min read
Clessira: a local-first time tracker for macOS
Time trackers generally fall into one of two categories: lightweight timers with little reporting behind them, or products whose reporting depth is tied to a hosted backend and, in the team variants, to visibility for third parties. Clessira is my attempt to get the reporting depth of the second category under the storage model of the first. It is a time tracker for macOS, iOS and iPadOS, keeps its data in a local file, requires neither an account nor a server-side component, and is sold as a one-time purchase.
Idle detection and confirmation prompts
The practical problem in hourly billing is not recording an interval but remembering to start one. Clessira detects idle gaps and classifies them against earlier entries in the same context. Where the classification is unambiguous the gap is assigned automatically; otherwise a prompt offers the most probable activities on the number keys 1 to 3, so a complete entry takes a single keystroke. Prompts are suppressed while a macOS Focus mode is active, which covers presentations and comparable situations. Breaks are a regular category, so gaps do not have to be justified. The application does not track which programs are in the foreground and keeps no streak or completeness metric.
Reporting
Reporting covers day, week, month and free date range views, a statistics view, and a pivot table that maps activities against weekdays as a matrix — the form usually needed for a weekly review or a monthly invoice. An exact mode calculates to the minute instead of to a rounded interval. Every entry carries a note field, and notes are indexed by Spotlight, so an entry can be located later from its content rather than from its date.
Development workflow
Setting up an activity catalogue for a sprint otherwise means retyping ticket titles. Clessira accepts a pasted Jira list, Markdown checklist or table, detects the format and creates one activity per row, retaining the issue key (PROJ-123) as the activity code. A VS Code extension reports the active branch on every switch and proposes the matching activity. Automation is available through AppleScript, a clessira command line tool, Shortcuts and App Intents, macOS Services, and a loopback HTTP API with official npm and PyPI SDKs.
Export formats are defined by the user rather than by the application. Custom export scripts run as sandboxed JavaScript without network access, which makes a specific CSV layout for accounting, an invoice format, or JSON for a downstream system a matter of a script rather than of a feature request.
Storage and synchronisation
The data is kept in a plain, human-readable JSON file. The built-in iCloud sync merges entry by entry across several Macs; alternatively the file can be placed in any directory — Dropbox, OneDrive, a network share, or local disk only. Rolling daily JSON snapshots allow an earlier state of the same day to be restored. Companion apps for iPhone, iPad and Apple Watch mirror the running session.
Since no data is transmitted, there is no processing to disclose: no server, no account, no analytics, and correspondingly little to state in a privacy policy.
Availability
Clessira is available on the Mac App Store as a one-time purchase without a subscription; the same universal app runs on iPhone and iPad. The reasoning behind the storage model is set out in the post on local-first software.