I built Worktale because I couldn't remember what to say at my last performance review: "What did you ship this quarter?"
I'd spent months debugging race conditions, redesigning a reporting pipelines, shipping a major migration — all behind a corporate firewall in private repos. None of it was visible. Not on GitHub. Not on my resume. Not even to me.
So I built a CLI that reads your local git history and turns it into a personal record of what you actually built. No account, no cloud, no code leaves your machine.
How it works:
npm i -g worktale cd my-project worktale init # scans full git history, installs a silent post-commit hook worktale # opens a TUI dashboard — overview, daily log, heatmap worktale digest # generates a daily summary (template or local Ollama AI)
After 'init', every git commit silently captures metadata (message, lines changed, timestamps) into a local SQLite database. That's it. No network requests, no telemetry.
If you don't want hooks in your repos--fair point, for those with a fear of commitment:
cd ~/projects worktale batch --since 3m # scans all repos recursively, imports history, installs nothing worktale hook install # opt-in to live tracking per repo later
Technical details for the curious:
- TypeScript, compiled to ESM with tsup
- TUI built with Ink 5 (React 18 for terminals)
- SQLite via better-sqlite3 in WAL mode
- Historical analysis runs in worker threads (batches of 500 commits)
- Bash + PowerShell git hooks for cross-platform support
- 385 tests across 28 test files
- MIT licensed
What it is not: - Not a time tracker (it estimates from commit timestamps, but that's a side effect)
- Not a replacement for GitHub contributions (this is your private journal)
- Not a team tool (yet — cloud with shareable profiles is on the roadmap)
The whole thing runs locally. The only optional network call is if you use Ollama for AI-generated digests, and that's localhost.Source: https://github.com/worktale/worktale-cli Site: https://worktale.org
npm: npm i -g worktale
Happy to answer questions about the architecture, the SQLite schema, or why I parse git log --format instead of using a library.