Client-agnostic developer telemetry. It measures real task time (and how much of it was AI-assisted) by instrumenting our machines and tools — never a client's repos, workflows, or Jira. Events land in our own Postgres; Jira/Tempo only ever receive human-approved worklogs.
Full spec: docs/devpulse-mvp-brief.md. test
apps/dashboard/ Next.js app — UI + ingestion/auth/cron API routes, Drizzle schema
packages/shared/ zod event schemas, issue-key regex, API client (the contract)
packages/setup-cli/ npx @mnl-dev-telemetry/setup — device-auth login, global git hooks, event agent
packages/vscode-extension/ MnlDevTelemetry for VS Code / Cursor — one-click setup, current task in the status bar, presence heartbeats
infra/ docker-compose.yml (local Postgres)
docs/ spec, phase notes, deployment + testing guides
| Phase | Scope | State |
|---|---|---|
| 1 | Monorepo, shared schemas, DB, POST /api/ingest/events |
done |
| 2 | Setup CLI, global git hooks, offline spool | done |
| 3 | MCP server + Claude Code hooks | not started |
| 4 | Session stitching, Auth.js SSO, timeline/task/team/settings | done |
| 5 | Nightly drafts, approve UI, Tempo sync | not started |
| 6 | VS Code / Cursor extension + editor heartbeats (pulled forward for the demo) | done |
Phase notes: docs/phase-1-notes.md · docs/phase-2-notes.md · docs/phase-4-notes.md · docs/phase-6-notes.md
Requires Node ≥ 20, pnpm 10, Docker.
pnpm install
cp .env.example .env # set AUTH_SECRET, DEV_LOGIN_ENABLED=true for local
pnpm db:up && pnpm db:migrate
pnpm db:seed:demo # 3 devs + 1 lead, ~2.5 weeks of events
pnpm --filter @mnl-dev-telemetry/dashboard dev # http://localhost:3000Sign in with dev login as alice@mnl-dev-telemetry.local (dev view) or dana@mnl-dev-telemetry.local (lead view). The demo walkthrough is at the end of docs/phase-4-notes.md.
pnpm test # vitest across all packages
pnpm typecheck # tsc --noEmit
pnpm build # turbo build
pnpm db:up / db:down / db:migrate / db:generate / db:seed / db:seed:demoSee docs/testing.md for manual verification flows and docs/deployment.md for hosting.
- Metadata only: timestamps, repo/branch names, issue keys, diff stats, session info. Never code, diffs, file paths, or prompts.
- Nothing is written into client repos — hooks install to
~/.devpulse/hooks/via globalcore.hooksPath, and chain any pre-existing hooks path. - Git hooks never block a commit: 2s timeout, spool locally and retry on the next invocation.
- Agent tokens are write-only (plus own-current-day reads). Jira/Tempo credentials stay server-side.
- Individuals see their own data; leads see aggregates only, enforced in queries.
- All external payloads are zod-validated, and every schema lives only in
packages/shared.
