mothermachine

Browse / Scheduling and staffing

TimeTagger

Tag-based personal time tracker with a documented web API that mirrors the hosted timetagger.app.

AdaptableOperable Business appWeb app Deterministic Python API License: GPL-3.0

TimeTagger is a lightweight time tracker for individuals and freelancers: an interactive timeline, tags instead of projects, targets, Pomodoro and PDF/CSV reports. The Python server runs from pip or Docker and is configured with TIMETAGGER_* environment variables. The Builder documents a records/settings/updates web API with API tokens, identical on self-hosted servers and the EUR 3 per month hosted edition.

Use it when
  • I'm a freelancer who wants a fast timeline-style tracker on my own box, with tags instead of a project hierarchy
  • I want my agent to log what I worked on and pull the week's records over a small token-authenticated API
Gotchas
  • GPL-3.0 plus a CLA granting the author rights to use contributions in the hosted service
  • Built for individuals: no teams, clients or invoicing; multi-user means separate credential entries, not shared data
  • Last push 2026-05-17, inside the window but the slowest cadence on this shortlist
  • API tokens never expire; reports and exports are not reachable through API

Last activity May 17, 2026. Fit: adaptable 2, operable 3.

Editions

Self-hosted · Free open source

  • Clonegit clone https://github.com/almarklein/timetagger
  • Installpip install -U timetagger && python -m timetagger
  • ImageContainer

closed source

For agents: JSON · Markdown

Adaptable: what is yours to change

Make it yours

Config only11 things to edit

Everything is an environment variable or CLI flag: TIMETAGGER_BIND, TIMETAGGER_DATADIR, TIMETAGGER_CREDENTIALS (bcrypt user:hash pairs) for multi-user, TIMETAGGER_PROXY_AUTH_ENABLED, TIMETAGGER_PROXY_AUTH_TRUSTED and TIMETAGGER_PROXY_AUTH_HEADER to sit behind Authelia or similar, TIMETAGGER_PATH_PREFIX and TIMETAGGER_APP_REDIRECT. deploy/docker-compose.yml is the Docker path. For custom auth (JWT, OAuth) the libapi docs show a short Python run script overriding authenticate() and api_handler_triage().

Env vars
TIMETAGGER_BIND TIMETAGGER_DATADIR TIMETAGGER_LOG_LEVEL TIMETAGGER_CREDENTIALS TIMETAGGER_PROXY_AUTH_ENABLED TIMETAGGER_PROXY_AUTH_TRUSTED TIMETAGGER_PROXY_AUTH_HEADER TIMETAGGER_PATH_PREFIX TIMETAGGER_APP_REDIRECT
Config files
deploy/docker-compose.yml deploy/docker-compose.nonroot.yml
Prompt files
none
Accounts you need
timetagger.app (hosted edition only)

Source

Operable: what an agent can drive

Interface

OfficialAPIpublished by the builderremote or local

How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.

Docs
timetagger.readthedocs.io/en/latest/webapi/

Reach

Partial coverage. 6 of 9 jobs reachable through the stated interface.

JobThrough the interfaceEvidence
Read time records for a date rangeReachablewebapi: GET records with range and tag filters
Create and edit recordsReachablewebapi: PUT records accepts new or edited record objects
Start and stop a running timerReachablewebapi: records can be filtered by running state; a running record is written with PUT
Delete a recordReachablewebapi: prefix the description with HIDDEN, the convention clients honour
Read and change settingsReachablewebapi: GET and PUT settings
Sync incrementallyReachablewebapi: GET updates since a timestamp
Generate PDF or CSV reportsNot reachablewebapi documents no report endpoint; reports are produced client-side from records
Set daily, weekly or monthly targetsUndeterminedtargets live in the client; not stated whether they are in the settings object
Pomodoro timerNot reachableclient-side feature

Code stack

Languages
Python
Frameworks
asgineeruvicornitemdbPScript
Package manager
pip
Database
SQLite
Hosting target
dockerpypi
Built
Human-written (recorded, never ranked)

Evidence and confidence

FieldWhere it was seenConfidence
formFactorREADME: web-based time tracker served by a Python server, runs locally or on a server95%
executionModelno model SDK or AI feature95%
operabilitytimetagger.readthedocs.io/en/latest/webapi/ published by the Builder; same endpoints on timetagger.app90%
efforttimetagger.readthedocs.io/en/latest/libapi/ lists TIMETAGGER_* variables; README shows credential and proxy-auth examples90%
editionsREADME: pip and Docker self-host under GPL-3.0; timetagger.app account EUR 3 per month90%
activeshortlist pushedAt 2026-05-17–
reach80%

Open questions

  • Are targets stored in the settings object and therefore reachable through PUT settings?
  • Does the hosted edition expose API tokens on every plan?

Sources