Self-install
The Metermark agent runs on the machine where Claude Code, Codex and Cursor run. It reads their local history, labels each session, and syncs labels and numbers to your organization. Nothing else: no prompts are stored, no source files are read, and there is nothing to type after setup.
Install it with one command, no administrator rights needed.
macOS and Linux
curl -fsSL https://metermark.ai/install | sh
Windows (PowerShell)
irm https://metermark.ai/install.ps1 | iex
Both scripts do the same four things:
- Download the agent for your platform and verify its SHA-256 checksum before anything runs. macOS builds are signed by Hassion Studio, Inc. and notarized by Apple.
- Install it in your home folder (
~/.metermark/binon macOS and Linux,%LOCALAPPDATA%\Metermark\binon Windows) and add that folder to yourPATH. - Run
metermark setup, a guided flow with one section per step:- Sign in: opens the Metermark sign-in in your browser, shows a code to confirm, and keeps a refresh token on the machine (readable only by you).
- Import: reads every local tool, one row per session. Labels and numbers only.
- Classify: labels the first batch of sessions (see "What gets classified" below).
- Sync: uploads the rows to your organization.
- Schedule: registers a background job that repeats the cycle every 15 minutes and on login.
- Done: prints where the data went, what was labeled, and how to stop it.
- The dashboard's "waiting for your first sync" card flips to live numbers on the next reload.
Every command prints plain text when it is not talking to a terminal, so --plain, NO_COLOR,
and pipes all work, and the scheduled run writes a one-line-per-event log either way.
macOS
The agent lives in ~/Applications/Metermark.app, a background-only app with the Metermark icon.
That is why System Settings → General → Login Items & Extensions → Allow in the Background lists
Metermark from Hassion Studio, Inc. rather than an anonymous item. The schedule is a launch
agent, ~/Library/LaunchAgents/ai.metermark.agent.plist, that runs the app every 15 minutes.
~/.metermark/bin/metermark is a link into the app, so the command, the schedule and self-update
all point at the same binary.
Every release ships the app already signed and notarized. setup, metermark schedule and
metermark update download it, verify the checksum and the signature, and swap it into
~/Applications untouched. metermark status shows the signature under Schedule.
The agent reads ~/.claude, ~/.codex and Cursor's application support folder. None of them needs
Full Disk Access or any other permission prompt. If a session ran inside Documents, Desktop or
Downloads, the agent does not look up that folder's git remote, to avoid a macOS privacy prompt;
the session is still imported and labeled.
Apple Silicon and Intel are both supported.
Linux
The installer works on x64 Linux with curl and sh. Differences from macOS:
The schedule is a systemd user timer.
~/.config/systemd/user/metermark-agent.timerrunsmetermark-agent.service(onemetermark run) every 15 minutes and shortly after boot. To watch it:systemctl --user status metermark-agent.timer systemctl --user list-timers metermark-agent.timer journalctl --user -u metermark-agent.service -n 50It needs a user session.
systemctl --userrequires a login session (a desktop, or an SSH login). On a headless machine, runloginctl enable-linger $USERonce so the user manager starts at boot and keeps running after logout;metermark schedulethen installs the timer. Without a session, setup still installs the unit files and tells you this is the missing step.Sign-in needs a terminal. Piping the installer through
sshor a provisioning script with no terminal installs the agent and stops before sign-in; runmetermark setupfrom a terminal, or setMETERMARK_API_KEYto an enrollment key first to sign in without a browser.Files live in
~/.metermark(metermark.db,config.json,credentials.json,state.json,logs/agent.log). There is no app bundle; the timer runs the binary directly andmetermark updatereplaces it in place.METERMARK_HOMEmoves the whole directory.Managed configuration for fleets comes from
/etc/metermark/config.jsonand$XDG_CONFIG_HOME/metermark/config.json; see Fleet deployment.
arm64 Linux is not built yet.
Windows
Run the one-liner in PowerShell as your normal user; no administrator prompt appears. The script
downloads metermark.exe, verifies its checksum, installs it to %LOCALAPPDATA%\Metermark\bin,
adds that folder to your user PATH (the current window is updated too), and starts
metermark setup. Setup signs you in through the browser, imports Claude Code
(%USERPROFILE%\.claude), Codex (%USERPROFILE%\.codex) and Cursor (%APPDATA%\Cursor), labels
the first batch, syncs, and registers the schedule.
- The schedule is a Task Scheduler entry, "Metermark Agent", created for your user only. It
runs
metermark runevery 15 minutes while you are signed in, as you, with no stored password and no elevation, and no window appears when it fires. Task Scheduler shows it in the library root; from a terminal,schtasks /Query /TN "Metermark Agent" /V /FO LISTshows its state and last result, andmetermark statusshows the same plus what the last run did. - Files live under
%LOCALAPPDATA%\Metermark(metermark.db,config.json,credentials.json,state.json,logs\agent.log), inside your profile where other standard users cannot read them. - Updates:
metermark update, or the daily check after a run that did something. Windows will not overwrite a running program, so the oldmetermark.exeis renamed to.oldand removed on the next update. - Uninstall:
metermark uninstallremoves the task, the data and the credentials at once, and the program itself a few seconds after the command exits (a one-shot task deletes the folder once the program is no longer running, then deletes itself). Remove thePATHentry under System Properties → Environment Variables if you want it gone too. - The Windows builds are not code-signed yet. The installer and the scheduled task start the program from the command line, which does not prompt. If you open the file from Explorer and Windows shows a SmartScreen notice, choose More info → Run anyway.
- The output is plain text in Command Prompt and coloured in Windows Terminal and VS Code.
Windows on ARM runs the x64 build under emulation; the installer says so. WSL users can use the macOS/Linux installer inside WSL, which then sees the Linux home, not the Windows one.
Company-managed Windows machines get an MSI and registry policy instead of the one-liner: Fleet deployment.
One person, one row
Setup records the account you signed in with. From then on every session the agent imports, from
whichever tool and whatever account that tool is signed into, belongs to that address, and the
tool's own login is kept as an alias (metermark status lists them under "also this person").
Sessions imported earlier under a tool login are moved onto your account on the next run, so the
People page shows one row for you. Set METERMARK_USER_EMAIL to override the account, or add
~/.metermark/identity.json to map more aliases; fleets set it centrally
(Fleet deployment, "Who the sessions belong to").
What gets classified, and when
Classification is the only step with a cost, so the agent is deliberate about it.
- Free plan. Setup labels the newest 20 sessions from the last 14 days. Everything older is imported and synced without a label: its cost and tokens show on the dashboard, its kind of work does not. After setup, new sessions are labeled as they appear, newest first, until the month's 50 are used; each session counts once, however many runs it takes. Setup prints what it chose and how many labels are left.
- Team and Enterprise. No monthly cap. Setup labels the first 100 sessions and each scheduled
run labels 100 more until the whole history is done. Upgrading later works the same way: the
agent notices the plan within a day and labels the backlog over the next runs.
metermark statusshows how many are still waiting. - A run with nothing new makes no request. Import is local; if nothing was imported, nothing
waits for a label and nothing waits to sync, the run ends there.
metermark statusshows it as "nothing new, no requests". - The release manifest is checked at most once a day, and only after a run that did something.
Commands
All optional; the schedule does everything on its own.
| Command | Purpose |
|---|---|
metermark status | account and quota, whose sessions these are and the aliases folded in, managed configuration, the schedule and next run, what each tool contributed, whether an update is out |
metermark coverage | which tools this machine can see and what each one exposes |
metermark run | one cycle now; --verbose draws each step |
metermark sync | upload what is waiting; --dry-run shows what would be sent |
metermark pause / metermark resume | stop and restart the schedule without uninstalling |
metermark schedule | reinstall the schedule (and on macOS the app) without re-running setup |
metermark update | fetch the latest release and replace the program; --check only reports |
metermark uninstall | remove the schedule, the app, the program and the local store |
metermark --help | every command, grouped Everyday · Setup · Advanced |
Re-running metermark setup is safe: it keeps your credentials and refreshes the schedule.
Installer variables, for scripts: METERMARK_API_KEY (sign in with an enrollment or API key instead
of the browser), METERMARK_INSTALL_VERSION (pin a version), METERMARK_NO_SETUP=1 (install
only), METERMARK_HOME (macOS and Linux: where the agent lives).