How it worksLocal EditionExplainable analytics

How Fleetlens turns agent history into useful signals.

The Local Edition runs on your machine. Provider adapters read local history, the parser normalizes it, analytics derive stable metrics, and the dashboard presents the result. This page explains the rules behind the views; the Local Edition feature guide explains what to use each view for.

The data path

Claude Code~/.claude/projects
Codex~/.codex/sessions
GitHub Copilot CLI~/.copilot/session-state
Other agentsGemini, Antigravity, Cowork, and Grok adapters
Parser + analyticsCommon session shapes, active segments, canonical projects, daily buckets, entries, costs, and concurrency bursts.
parseranalyticsentries
Local dashboardOverview, sessions, projects, day, insights, usage, agent, and settings
Local state~/.cclens for usage, entries, digests, logs, and PID files
Team serverSelected daily and rich rollups after explicit pairing

Repository responsibilities

Package or areaResponsibilityBoundary
packages/parserAgent adapters, transcript parsing, session types, analytics, filesystem readers.Pure parser code avoids network; Node filesystem access is isolated in its fs entry point.
packages/entriesDay-scoped work units, enrichment, digest inputs, queues, and perception.Consumes normalized session data; raw transcripts do not flow to Team Edition.
apps/webLocal Next.js dashboard, settings, Team onboarding, insights, and API routes.Reads local files per request and starts local CLI work where required.
packages/cliPublished fleetlens command, bundled web server, daemon, update flow, and team sync.Owns local lifecycle and the explicit outbound sync boundary.
packages/team-serverSelf-hosted Next.js server, Postgres model, authentication, ingestion, and team views.Stores derived rollups and server-side team data, not raw member transcripts.

Core semantics

Agent time

A session is split into active segments wherever the gap between timestamped events exceeds three minutes. The metric sums those segments, so user-away gaps do not become work time.

Canonical project

A project is identified by its current working directory with /.worktrees/<name> removed. Worktree sessions roll into the parent project while retaining context.

Daily activity

Active segments are clipped across every local calendar day they touch. A session that crosses midnight contributes to both days.

Concurrency

Overlaps shorter than one minute are dropped, and overlaps within ten minutes are merged into bursts. Same-project bursts are teal; cross-project bursts are purple.

Why the layers matter

  1. Adapters keep differences at the edge. Each provider can write a different JSONL shape, but the rest of the product works with common session and event types.
  2. Analytics make the headline numbers explainable. Agent time, projects, daily activity, and concurrency are calculated from explicit rules rather than UI guesses.
  3. Entries make deeper views bounded. Local digests and enrichment consume compact day-scoped representations instead of handing an unbounded transcript to every feature.
  4. Team Edition sync is an outbound contract. The member chooses the project scope, and the server receives rollups rather than raw event streams.
Read next

Use the privacy model to inspect the local/team boundary, or use the reference for supported sources, routes, state files, and commands.