← Back to Changelog

Sessions v2 and Cursor background agents

Headline this week was Sessions v2. The old flat JSON arrays masked complex agent behavior — parallel tool calls, sub-agents, and other branching trajectories all got flattened into a single blob. We're now storing proper agent trajectories and linking each line of code to the exact tool call that produced it. Before, lines were only tied to the session they came from — too low-res to be useful. Now we can query and derive insights from huge agent sessions at tool-call-to-line granularity, which wasn't possible before. We're really excited about some of the insights this will unlock -- more on that soon.

We also shipped better background agent support and a lot of bug fixes and performance improvements across the board.

Sessions v2

  • Authorship notes v2 with sessions & trace IDs — every checkpoint and prompt is now anchored to a session and a trace, so multi-step agent runs reconstruct cleanly instead of collapsing into a single blob.
  • Transcript streaming — agents stream raw transcript events as they happen rather than batching at the end. Lower memory, faster ingestion, and live visibility into in-flight runs.
  • First-principles checkpoint rewrite — the checkpoint pipeline was rebuilt from scratch to be fast, use a fraction of the memory, and be fully async. This is what we'd have built first if we knew what we know now.

Agent support

  • Copilot across CLI, VSCode, and JetBrains — the Copilot preset has been split into dedicated CLI and IDE paths, so attribution now works correctly whether prompts are coming from the Copilot CLI, the VSCode extension, or the JetBrains/IntelliJ plugin. The two surfaces emit different hook payload shapes, so trying to handle them in one preset was producing gaps; now each is parsed on its own terms.
  • Codex apply_patch and file-edit hooks — Codex's file-edit tool variants and apply_patch are now hooked, so Codex edits attribute more accuratly.
  • Codex shell tool variants classified — additional Codex shell tool variants are now recognized in tool classification (closes #1204).
  • VSCode plugin dependency refresh@types/vscode, posthog-node, @typescript-eslint/parser, eslint, typescript, and @vscode/vsce all bumped to current versions.
  • JetBrains plugin dependency refreshintellij-platform, kotlin.jvm, gradle-wrapper, and sentry.jvm.gradle all bumped to current versions.

Performance & cleanup

  • gix-config for remotesremotes() and remotes_with_urls() now read git config directly via gix instead of spawning a git subprocess on every call. Big win on the checkpoint hot path.
  • Windows install + PowerShell fixes — a batch of install-time fixes for PowerShell quoting, path handling, and the Windows happy path.
  • Loud warning for git < 2.22.0install-hooks now warns prominently at the end if the system git is too old, instead of silently producing weird behavior later.
  • Filesystem-based git reads for checkpoints — checkpoint flow now reads from the filesystem instead of shelling out for plumbing.
  • Skills install opt-ininstall-hooks no longer installs Claude Code skills by default; pass --skills if you want them. Smaller, faster default install.

Bug fixes

  • repo_url in AgentUsage events — agent usage telemetry now includes the repo URL, fixing a gap in self-hosted dashboards.
  • Squash rebase preserves humans metadata — squash rebases no longer drop human authorship metadata, and the author identity now includes email.
  • bg tail defaults to print-and-exitgit ai bg tail now prints once and exits by default; pass -f/--follow to stream.
  • Multi-user reformat attribution — added an end-to-end test covering multi-user reformat AI attribution (closes #394) so this regression can't sneak back.

Track every line of AI code and the prompts that generated it