chronik reads your GitHub and GitLab commits, picks up task tags from the commit message, and fills in your Odoo timesheets automatically. Self-host, free, fully under your control.
No credit card. No paywall. Never has been, never will be.
Open GitHub, scroll commits, type them out again — every day.
10 minutes a day × 220 days = 36 hours a year of retyping.
Charge client A for work done for client B — auditors will notice.
Click Continue with Google to sign in, then link GitHub and GitLab. OAuth is one-click — no need to register your own app.
Map each repository to an Odoo project. Set a default task per repository as a fallback.
Write commits that include +T{task_id}. Optional — commits without a tag land on the default task.
chronik turns your commits into timesheet drafts. Review them, tweak the hours if needed, then approve.
Entries appear in Odoo. Prefer fully hands-off? Switch to auto_push mode.
Every commit goes to the model with its full diff, the task's remaining budget, and your own historical pace per commit. Anchored reference points keep the output grounded — trivial typos around 0.1h, a major refactor up to your per-commit cap. Pick an optimist, realistic, or pessimist bias to match your estimating style. Temperature 0, JSON-only, OpenAI-compatible — OpenAI, Azure, OpenRouter, or self-hosted Ollama.
hours_mode = "ai_estimate"
ai_max_hours_per_commit = 4.0
ai_estimation_bias = "realistic" # optimist · realistic · pessimist
# Signals sent to the model, per commit:
# • commit message + full diff
# • task name, description, budget, remaining
# • user historical average h/commit
# • anchored scale: typo 0.1h · fix 0.5-1h · feature 1-3h · refactor ≤ cap
# Provider: OpenAI / Azure / OpenRouter / Ollama (OpenAI-compatible URL)
GitHub and GitLab OAuth built in. No need to register your own app.
Sync today, this week, or any custom range. Per-provider checkpoints prevent duplicates.
Defaults to +T{id}. Switch to #123 or [T-42] — any regex works.
Review drafts before they reach Odoo, or go fully hands-off — your choice, per user.
Beyond the basics — the quality-of-life features that make chronik usable every day.
Spread hours across a date range with weekend skips, or set a target total and let the AI split it across commits — weighted by volume and complexity.
A cron-driven background worker runs sync on your schedule. Set it once at 07:00 and stop thinking about it.
Tweak hours with auto-save, change project or task in place, skip or approve rows in two clicks — no modal round-trips.
Remove a draft from chronik and unlink its Odoo timesheet entry in a single action — no stale entries left behind.
Your GitLab display name differs from your GitHub login? Add aliases by email, login, or name — chronik matches them all and de-duplicates by SHA.
Skip WIP commits by regex, enforce a minimum message length, restrict branches, exclude merges, or keep only working days — mix and match.
+ Plus a bilingual UI (English / Bahasa Indonesia), a built-in dark mode, and a description template you can shape to fit your team.
One binary, one docker-compose file, one VPS. Host it yourself and stay in full control.
I got tired of filling in timesheets too. Once the problem was solved I just wanted to share it. There is no plan to monetise.
Your GitHub, GitLab, and Odoo tokens are encrypted with XChaCha20-Poly1305. We never ask for your Odoo password — only an API key.
Odoo 14 through 19. Anything with External API (XML-RPC / JSON-RPC) and the API Key feature (introduced in Odoo 14).
Yes. A docker-compose setup is included. Use Supabase Postgres or your own Postgres. When self-hosting you register your own OAuth apps — your call.
The MVP supports gitlab.com only. Self-hosted GitLab is on the roadmap — reach out if you need it.
Each user configures their own account. There is no shared organisation account in the MVP. Reach out if you need multi-user support.
Free forever. No dark-pattern sign-up.