You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
suivi track <path> [--name NAME] — first-class command to add a project to tracking. Auto-backfills historical (untracked) turns whose cwd falls under the new path, using config::find_project longest-match semantics so nested tracked projects keep ownership of their own turns.
suivi untrack <path-or-name> — remove a project from tracking. Confirms with (y/N) by default (--yes to skip). Historical DB rows are preserved.
stats --until YYYY-MM-DD — closes the open-ended --since into a finite range. clap-enforced constraints: requires --since, conflicts with --today/--week/--month/--all. Renders custom range (YYYY-MM-DD → YYYY-MM-DD) in section titles.
Config [[exclude]] list with built-in defaults (/private/var/folders, /tmp, ~/.cache). Excluded paths are skipped at hook time — turns from temp dirs never enter the DB.
suivi doctor --prune-excluded — one-shot cleanup of already-recorded turns whose cwd matches an exclude entry.
suivi doctor --fix-outliers — clamps historical turns whose agent_duration_secs or wall window exceeds tracking.max_turn_secs. Dry-run by default, --yes to apply.
suivi doctor --fix-from-transcripts — for historical Claude Code turns, rewrites ended_at and agent_duration_secs by scanning the JSONL transcript for the last live-activity event. Reclaims phantom idle time recorded when sessions were suspended (laptop sleep, walk-away). Reclaimed 84.7 hours on the maintainer's DB.
Config knobs: tracking.max_turn_secs (fallback cap for agents without transcripts, default 7200s), tracking.transcript_gap_threshold_secs (transcript inter-event gap for Claude Code, default 300s).
Changed
Claude Code ended_at now comes from the transcript, not from now. The Stop hook scans the JSONL for the last user/assistant/system/attachment event within the turn's window and truncates at the first gap larger than transcript_gap_threshold_secs (default 5 min). Suspended sessions no longer record hours of phantom work; legitimate long autonomous runs are preserved without a cap.
Signal-less turns (transcript has no in-window events) now record agent_duration_secs = 0 and effective_duration_secs = 0 — the human buffer is skipped when there's nothing to attribute it to.
stats --today/--week/--month scopes the Top projects/agents section to the active flag (was hardcoded to "this week"). The activity graph in project/agent views does the same.
Daily activity graph now correctly clips turns that span midnight, splitting attribution across the calendar days they touch. A turn from 23:00 to 02:00 no longer credits 3 hours to the start day.
stats silently auto-clamps outliers on every invocation (belt-and-suspenders alongside the write-time clamp).
Fixed
The write-time cap was setting ended_at = started_at + 2h when clamping — plausible-looking but wrong for suspended sessions. Claude Code turns now use the transcript-derived end; other agents still use the cap fallback with the same behavior as before.
stats --today silently used an unbounded window because the since-filter for the "today" branch was None. Now correctly bounded.
The per-project and per-agent activity graphs used a hardcoded 30-day window regardless of the active flag; they now follow the flag's window.