linuxtime trackingclidesktopautomatic time trackinginvoicing

Automated time tracking for Linux — a desktop app and a headless CLI

Most time trackers treat Linux as the last platform they port to. This one is built for it: a desktop tray app for your workstation and a headless CLI for servers and SSH, both tracking by watching the files you save — so there's no timer to start and nothing to tag to a project.

A terminal running 'temporal watch', recording the acme-web project with no timer — automatic time tracking for Linux

Linux is a first-class target, not an afterthought

Most time trackers treat Linux as the platform they port to last — a thinner
build with half the features, or just a web tab you forget to start. That's
backwards for the people who actually live on Linux: developers, sysadmins, and
freelancers running their whole business from a laptop and a VPS.

Temporal.ist tracks time on Linux the way Linux work really happens — by watching
the files you save. There's a desktop app for your workstation and a headless CLI
for servers and SSH, and both feed the same timeline. You don't start a timer and
you don't assign your work to a project. You just work; the hours assemble
themselves, ready to bill.

On Linux a desktop tray app and a headless CLI both feed one timeline, where every session is tagged by project automatically

The desktop client

On a Linux workstation you run the desktop client — a lightweight system-tray app
that sits quietly in your panel and watches the directories you point it at. The
tray icon tells you the state at a glance: idle, actively recording, or syncing.

You set it up once, per project:

  • Watch path — the directory whose work counts, e.g. ~/code/acme/ or
    ~/clients/beta/.
  • Include / exclude globs — what's real work versus noise. Excluding
    node_modules/, .venv/, target/ and build output matters more than it
    sounds: a single npm install or cargo build writes hundreds of files you
    don't want inflating your hours.
  • Idle timeout — how long without an in-scope edit before the session
    auto-closes (default 15 minutes), so lunches and meetings aren't billed.

It keeps a local database and works offline — track on a plane, and it syncs
to your account when you're back online. A manual start/stop lives in the tray as
a fallback, but the point is that you almost never reach for it.

The headless Linux CLI

Plenty of Linux work has no desktop at all — it's a terminal, often on a remote
box over SSH. For that there's a headless CLI and TUI. It installs over plain
SSH, signs in with the OAuth device flow (no browser needed on the server), and
runs the watcher as a systemd service, so a reboot brings your tracking back
with it.

  • temporal watch runs the file watcher as a daemon — ideal for a VPS or build
    box where you edit and deploy over SSH.
  • The interactive TUI gives you the same start/stop, project list and live
    timer in the terminal, for when you want a quick manual session.
  • Each session is tagged with where it came from, so terminal work on a server
    lands in the same timeline as your desktop work — no double entry.

Same account, same projects, same invoices — just without a GUI.

You never mark what you worked on

Here's the part that makes the whole thing low-effort: because tracking is keyed
to file changes, the project is implied by where the change happened. A save
under ~/clients/acme/ is the Acme project; a save under ~/clients/beta/ is
Beta. There's no dropdown to pick, no "assign to project" step, and no
end-of-day reconstruction from memory, git logs and calendar guesswork.

That's the difference from a stopwatch app: a timer only knows what you remembered
to tell it, so the day you forget to switch projects is the day your timesheet
lies. Watching files removes the human step entirely — the path is the project.

From a file save to an invoice — one click

Each project links to a client and an hourly rate. Because your sessions
are already tagged to the right project, there's nothing to reconcile at the end
of the month: pick the client and the period, and the tracked time becomes an
itemized invoice — each line backed by real sessions, the invoice auto-numbered
ORG-YYYYMM-XXXX — in a single click.

A file save starts a session with the project inferred from the watch path, and that tracked time becomes a one-click, auto-numbered invoice — no timer, no manual tagging, no CSV export

No CSV export to a spreadsheet, no copy-pasting hours into a second invoicing app.
The same tool that watched your files writes the invoice.

What it never does

  • No screenshots, no keystroke logging, no productivity score. Capture is
    plain file paths (and, via the browser extensions, visited URLs) — all
    auditable in plain text.
  • No timer to babysit. The manual start exists as a fallback; the default is
    that you never touch it.
  • No lock-in to one machine. Desktop, CLI and browser all sync to the same
    account, so your laptop and your VPS share one set of projects and one invoice.

The takeaway

Time tracking on Linux shouldn't mean a worse build or a forgotten browser tab.
Run the desktop app on your workstation, the CLI on your servers, let both watch
the files you save, and the project sorts itself out from the path. When it's time
to bill, the hours are already where they belong — one click from an invoice.

Frequently asked questions

Is there a real Linux desktop app, or just a web page?

There's a native desktop tray app for Linux (alongside macOS and Windows). It runs in your system tray, watches the directories you configure, works offline with a local database, and syncs to your account when you're back online.

Can I track work on a headless server or VPS over SSH?

Yes. A headless CLI and TUI install over plain SSH, sign in with the OAuth device flow, and run the watcher as a systemd service. Work on a remote box tracks into the same timeline and projects as your desktop, each session tagged with where it came from.

Do I have to tag each session to a project?

No. Tracking is keyed to file changes, so the project is inferred from the watch path the change happened in — a save under ~/clients/acme/ is the Acme project. There's no dropdown to pick and no end-of-day reconstruction.

Will running a build or installing dependencies inflate my hours?

Not if you exclude them. Each project's watch path takes exclude globs like node_modules/, .venv/, target/ and build output, so only writes to included source paths count toward tracked time. Idle time auto-closes the session after 15 minutes by default.

How do tracked hours become an invoice?

Projects link to a client and an hourly rate, and your sessions are already tagged to the right project, so you pick the client and the period and the tracked time becomes an itemized, auto-numbered invoice in one click — no CSV export to a separate app.

Does it take screenshots or log keystrokes?

No. There are no screenshots, no keystroke logging and no productivity scores. Capture is plain file paths (and visited URLs via the browser extensions) that you can read and audit.