Stint
Stint is a self-hosted coding activity and AI telemetry console for personal engineering. The current vertical includes the ingestion pipeline, GitHub/session auth, editor API keys, OAuth app/server flows, rate limiting, Redis/Asynq stats jobs, durations, summaries, cached stats ranges, AI metrics, status-bar data, projects, machines, insights, goals, leaderboards, external durations, custom rules, data dumps, all-time totals, and a dark dashboard shell.
Local Development
Start dependencies:
docker compose up -d postgres redis
Run the API:
cp .env.example .env
go run ./cmd/server
Run the background worker in a second terminal when using queued stats recomputation:
go run ./cmd/server worker
Run the web app:
cd web
npm install
npm run dev
Open http://localhost:3000/login for local npm run dev, or http://localhost:3001/login when using Docker Compose. Choose "Create local dev key", then copy the generated editor config from Settings.
New empty dashboards show a dismissible editor setup modal with a local API URL, a copyable editor config block, and the expected two-minute activity refresh window after opening an editor.
Settings surfaces the signed-in GitHub account identity and sign-out action alongside profile preferences, API keys, OAuth apps, share tokens, data exports, imports, custom rules, AI costs, and account deletion.
Settings includes server diagnostics from /api/v1/meta, including the configured API URL, base URL, hostname, detected client IP, and build version.
Settings also shows the /api/v1/editors metadata registry so plugin setup can confirm known editor clients.
Language charts use the /api/v1/program_languages catalog colors so languages render consistently across summaries and timelines.
Regenerate the sqlc model package after changing migrations or query files:
scripts/generate-sqlc.sh
Plugin Setup
Install the Stint CLI, save your endpoint and key, then use your editor or agent
normally:
curl -fsSL https://stint.fyi/install.sh | sh
stint config init --api-url http://localhost:8080/api/v1 --api-key waka_00000000-0000-4000-8000-000000000000
stint doctor
stint heartbeat --entity "$PWD/main.go" --write --project stint
For Codex CLI:
codex plugin marketplace add https://github.com/keithah/stint.git
codex plugin add codex-cli-stint@stint
For Claude Code:
claude plugin marketplace add https://github.com/keithah/stint.git
claude plugin i claude-code-stint@stint
For editor-only tracking, install the WakaTime plugin from your editor's
marketplace and use this shared config:
[settings]
api_url = http://localhost:8080/api/v1
api_key = waka_00000000-0000-4000-8000-000000000000
heartbeat_rate_limit_seconds = 30
offline = true
Common checks:
stint today
stint user-agents
stint data-dumps download DUMP_ID
stint offline sync
stint --sync-ai-activity --ai-agent codex
The Codex and Claude plugins run Stint from hooks. If stint is not on your
PATH, set STINT_BIN to its absolute path. Hook-time install is opt-in only:
STINT_PLUGIN_AUTO_INSTALL=1.