Skip to main content

Aggregate local work activity from Gemini, Claude, Cursor, OpenAI Codex IDE, Chrome, Mail, worklog, optional GitHub public activity, and optional Screen Time.

Project description

Gittan bee logo

Gittan

Timelog Extract

Local time reports from how you actually work.

Python 3.9+ License: GPL-3.0 PyPI package

Your day leaves traces—IDE, browser, mail, commits, worklog. Gittan turns those signals into project hours and optional invoice PDFs, without sending your raw activity to our servers by default. Everything runs local-first; you stay in control.


Install

You need Python 3.9+. The fastest path is the one-line installer — it uses pipx under the hood (falling back to pip install --user if pipx is missing) so gittan lands on your PATH:

curl -fsSL https://gittan.sh/install | bash
gittan -V

Prefer the manual steps? Install with pipx directly:

python3 -m pip install --user pipx
python3 -m pipx ensurepath
# open a new shell, then:
pipx install timelog-extract
gittan -V
Other install paths

pip install --user — scripts may land outside your default PATH. Add the user-level bin for that Python install (OS-specific; python3 -m site --user-base helps locate it), or run gittan doctor after install for hints.

python3 -m pip install --user timelog-extract

Virtualenv

python3 -m venv .venv && source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install timelog-extract

From source

git clone https://github.com/mbjorke/timelog-extract.git
cd timelog-extract
python3 -m pip install -e .
gittan -V

A Homebrew tap (brew install gittan) is planned; until then use the installer or pipx above. Maintainer notes: docs/runbooks/homebrew-tap.md.

Maintainers: release steps — docs/runbooks/versioning.md.


First run

Use a git checkout (usually the repo root) and lock your worklogs to per-project files:

  1. gittan doctor — see what collectors can see on this machine.
  2. gittan setup — wire optional hooks and timelog_projects.json (--dry-run / --interactive if you want previews).
  3. gittan report --today --source-summary — your first real report from real traces.

Projects config default path (--projects-config when omitted):

  1. GITTAN_PROJECTS_CONFIG if set (full path to config file).
  2. Else $GITTAN_HOME/timelog_projects.json if GITTAN_HOME is set.
  3. Else the canonical file under the Gittan home directory (gittan config path shows the exact path; same target when the file does not exist yet).
  4. Else the per-user profile home fallback if that older file exists.

Resolution does not depend on the current working directory. A stray home-directory or repo-local copy is ignored (with a warning on gittan report / gittan doctor). Use --projects-config only for demos or deliberate overrides.

You usually do not need to set any env vars; check the active path with gittan config path.

Worklog model (locked standard):

  • Primary: per-project files in ~/.gittan/worklogs/<project-id>.md.
  • Store each path in that project profile as "worklog" inside timelog_projects.json.
  • Legacy fallback: repo-local TIMELOG.md remains supported for compatibility, but is not the recommended default.

Legacy fallback resolution order (same order as AGENTS.md and CONTRIBUTING.md):

  1. --worklog PATH if you pass it.
  2. Else the top-level worklog field in timelog_projects.json, if set.
  3. Else TIMELOG.md in the current working directory, if that file exists.
  4. Else <current_repo_root>/TIMELOG.md, with <current_repo_root> from Git (git rev-parse --show-toplevel) when you are inside a repository, otherwise the current directory.

Commands you’ll use

Goal Command
Interactive report (asks for dates if you omit them) gittan report
Today / last week / range gittan report --today · --last-week · --from YYYY-MM-DD --to YYYY-MM-DD
Map URL hosts to projects gittan review (or gittan review --json for read-only candidates)
Clean up uncategorized time (legacy) gittan review --uncategorized
Quick totals gittan status --today
Collector status gittan sources
Edit project rules gittan projects
Show active config path/source gittan config path
Repo-wide git → worklog hooks gittan setup-global-timelog

JSON / HTML export (for scripts or archiving):

gittan report --today --format json
gittan report --from YYYY-MM-DD --to YYYY-MM-DD --format json --json-file out/truth.json --report-html out/report.html

out/ is local output (gitignored by default). Optional GitHub activity: set GITHUB_USER / --github-user, optional GITHUB_TOKEN — details in docs/sources/sources-and-flags.md.


Timelog vs config

Per-project worklogs (~/.gittan/worklogs/<project-id>.md) Primary standard; each profile in timelog_projects.json should carry explicit "worklog" path.
TIMELOG.md Legacy fallback (compatibility only); still supported for existing setups.
timelog_projects.json Machine rules; back it up. Setup writes timestamped backups before replacing broken JSON.

Troubleshooting

Symptom Where to look
gittan not found PATH (pipx ~/.local/bin, or pip --user bin); then gittan doctor.
No events / empty sources docs/sources/sources-and-flags.md
Bad or missing config gittan setup · backups timelog_projects.backup-*.json
Permissions / paths --worklog, browser DB access, Mail / Screen Time
Global hooks docs/runbooks/global-timelog-setup.md

Documentation

Layered docs so you can go shallow or deep:


Contributing · tests · license

If you want to change the tool, start with CONTRIBUTING.md — it covers branch names, English PR titles and descriptions, and what to run locally before review.

  • Branch like this: short-lived task/<scope> from main, then open a PR — spelled out in BRANCH.md.
  • Understand CI: what GitHub runs on every push is in docs/runbooks/ci.md.
  • Match CI before you push: bash scripts/run_autotests.sh from the repository root.
  • Deeper rules for humans and agents: AGENTS.md — timelog policy, push gates, review cadence.
  • License: GNU GPL-3.0-or-later — copyleft; share improvements on the same terms.
  • What shipped when: CHANGELOG.md.
  • Logos, favicon, social preview: docs/brand/README.md for maintainers building assets from canonical marks.

Feedback

Questions and rough edgesGitHub Discussions. Bugs you can reproduceIssues.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

timelog_extract-0.3.0.tar.gz (520.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

timelog_extract-0.3.0-py3-none-any.whl (439.7 kB view details)

Uploaded Python 3

File details

Details for the file timelog_extract-0.3.0.tar.gz.

File metadata

  • Download URL: timelog_extract-0.3.0.tar.gz
  • Upload date:
  • Size: 520.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for timelog_extract-0.3.0.tar.gz
Algorithm Hash digest
SHA256 13526108075f29be92058cbb2b02fc2b3afd3b3596bb7f2a507897c69c3e7a32
MD5 e729032a2b7ecf6ec10c855384412486
BLAKE2b-256 48508df8a5289eed1bfe6bf7685f74d24c646a192aad930a103cdfb95e7f6008

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_extract-0.3.0.tar.gz:

Publisher: pypi.yml on mbjorke/timelog-extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_extract-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: timelog_extract-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 439.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for timelog_extract-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f2f8247bc472f86db7528b97775ff95b746fcd68ec19b2b67ebdd51899f406a0
MD5 14b78d0ee1317f07f4738110d30fa653
BLAKE2b-256 db6fb038d13dca8f53be2dec4c2c91de2f5bfc2284536470c0c716169b127048

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_extract-0.3.0-py3-none-any.whl:

Publisher: pypi.yml on mbjorke/timelog-extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page