Skip to content

Releases: arielbk/trace

v0.15.1

Choose a tag to compare

@arielbk arielbk released this 20 Jul 08:34
273a856

Sync-fidelity fixes for cloud sync between machines, plus a more eager board sync. All changes are client-side — task rows round-trip through the sync server unchanged, so no server changes are involved.

Fixes

  • Pulled docs keep their real modified times. Doc manifest entries now carry the source machine's file mtime (end-to-end encrypted alongside the file content), and pulling restores it — so the board's "document last modified" and task ordering reflect when a doc was actually edited, not when it was synced. Manifests from older clients still apply cleanly.
  • Pins propagate between machines. Pinning or unpinning a task now bumps the row's last-write-wins clock and rides the sync payload, so a pin made on one machine shows up on the other. Rows from older clients merge as unpinned.
  • Pulled tasks join existing projects by git identity. Task rows now carry their project's git fingerprint (remote URL and root commit), and merging resolves projects by fingerprint before falling back to path matching — a task pushed from ~/a/repo on one machine lands under the existing project for the same repo cloned at ~/b/repo on another, instead of minting a duplicate project.
  • Plugin skills and hooks correctly pin the published CLI again. The 0.14.0 release accidentally shipped skill/hook templates pointing at a local development build path instead of npx @arielbk/trace@<version>; the pins are restored and stamped to 0.15.1.

Improvements

  • The board syncs more eagerly, shrinking the divergence window. While trace serve is running, the board now syncs shortly after board mutations (pin, archive, checkbox…), on mount and window focus, and on a periodic timer while left open — so acting on a freshly-focused board starts from up-to-date rows instead of waiting for the next manual sync. Triggers no-op when logged out and are throttled server-side.

Full changelog: v0.15.0...v0.15.1

v0.15.0

Choose a tag to compare

@arielbk arielbk released this 18 Jul 14:54

Highlights

  • End-to-end encrypted task documents — task docs are now encrypted on the client before they ever leave your machine. Encryption keys are set up automatically on login, and document keys are stored locally.
  • Sharing-ready key architecture — reworked document keying to per-task keys wrapped by a master key, laying the groundwork for sharing a task with someone else without re-encrypting your data.

Codex improvements

  • Surface Codex context occupancy so you can see how full a session's context window is.
  • Account for Codex CLI cached input in token totals.
  • Realign Codex desktop token buckets for accurate accounting.
  • Track the latest model used in a Codex session.

Fixes

  • Auth tests no longer open a real browser.

v0.14.0

Choose a tag to compare

@arielbk arielbk released this 17 Jul 09:38

Highlights

  • Cloud sync groundwork (#63). Trace can now sync tasks, session metadata, and doc blobs to a sync server: last-write-wins row sync, content-addressed doc blobs, and GitHub device-flow login. The feature is dormant unless a server URL is configured (trace config set server-url or TRACE_SERVER_URL) — unconfigured installs see no cloud UI and behave exactly as before.

Sync details

  • Doc titles and descriptions travel in the sync manifest, so re-entry footers keep their labels across machines.
  • Duplicate task slugs converge on pull instead of aborting the merge; slugs stay machine-local stable addresses.
  • Task title renames now bump sync metadata so they propagate through the merge.
  • Pulled tasks resolve local project identity, and sync state derives correctly even when identity was never recorded.
  • The board shows a sync status badge only when a server is configured.

Fixes

  • Device login opens the browser, honors the code lifetime, and floors the poll interval — no more indefinite hang on an expired code.
  • The refresh-mode stop-hook nudge is now advisory rather than blocking (#71).

Chores

  • Dependency refresh, Dependabot configuration, and TypeScript 7 compiler adoption.
  • Environment-sensitive CLI tests are isolated for reliable runs.

v0.13.0

Choose a tag to compare

@arielbk arielbk released this 14 Jul 15:11

Auto-maintained state.md

A bound task's state.md now materializes and stays fresh on its own — the common bind → /spec (or /slice) → /clear flow produces a complete state.md (docs footer and prose) even when handoff is never run.

Highlights

  • New trace state command group owns state freshness portably: trace state check returns a neutral seed/refresh/no-op verdict and idempotently reconciles the docs-manifest footer; trace state reflect stamps the prose-fingerprint marker.
  • Footer as a projection of the docs directory — reconciled render-on-read in the CLI and eagerly at the bind seam, so state.md exists with a correct footer the moment a task has a real doc. Idempotent, so board polling causes no mtime churn.
  • Claude Stop hook consumes the verdict: when the doc set has drifted from what the prose last reflected, it sends the still-warm agent back once to seed or refresh the prose. No drift → no-op, so ordinary turns never block. All staleness logic stays in the CLI, keeping the brain portable.
  • Re-entry as the cross-platform tier — the re-entry manifest now carries a stateFreshness block, so agents on read-only or fire-and-forget platforms still see and repair drift when they bind.

UI

  • The task page badges stale state prose with a quiet "docs changed since this was saved" crumb, so unrepaired drift is visible to a human.

Skills / docs

  • Renamed the handoff skill to trace-state with dual triggers.
  • README documents the state.md freshness tiers.

v0.12.0

Choose a tag to compare

@arielbk arielbk released this 13 Jul 15:18

Highlights

Path-independent project identity (#62) — projects are now identified by a stable fingerprint instead of their checkout path. The same repo cloned (or moved) to a different directory resolves to the same Trace project, so tasks and sessions no longer fragment across paths.

  • trace project merge — new CLI command to fold a duplicate project into its canonical one, for histories that split before this release.
  • Project resolution now works across checkout paths in the CLI and at every bind seam.

Web UI

  • Board URLs now use stable project slugs, and project views are keyed by stable identity — links survive a repo moving on disk (#62).

Fixes

  • Fall back to USERPROFILE when HOME is unset, unbreaking Trace on Windows shells that don't set HOME (#61).

v0.11.0

Choose a tag to compare

@arielbk arielbk released this 12 Jul 19:30

Highlights

  • Pinned tasks + agent recency sorting (#60) — tasks can now be pinned, and agent-facing task listings (listTasks, recall candidates) surface pinned work first, with everything else ordered by last activity (task creation, newest bound session, or newest doc — computed in SQL, so it can't drift).
  • Rename tasks (#58) — trace task update --title renames a task in place.

Web board

  • Pinned section sits above the recency-sorted task list, with accent section headings.
  • Hover-revealed pin toggle on task rows (instant, reversible — no confirm step). Archived rows don't offer it; archiving a task clears its pin.

Fixes

  • Task docs are no longer duplicated when the same doc is reachable via both registered and native paths (#59).

Dev

  • dev:stamp / dev:unstamp scripts allow publish-free local testing of the CLI and skill pins.

v0.10.1

Choose a tag to compare

@arielbk arielbk released this 10 Jul 09:11

Highlights

Better Codex session coverage (#57): Trace now discovers Codex subagents it previously missed and reads their sessions more reliably.

Codex

  • Recover multi-agent v2 spawns from sub_agent_activity events, and recover Desktop subagent spawns from spawn_agent call pairs
  • Surface Codex thread names from the session index
  • Heal synthetic Codex locators on the first read
  • Parse model and fresh-input totals from Codex Desktop rollouts

Fixes

  • Carry a re-bound session's subagent fan over to its new task
  • Humanize bare and suffixed GPT model ids in the web UI

Docs

  • Revamped README, with contributor guidance split out into CONTRIBUTING (#56)

v0.10.0

Choose a tag to compare

@arielbk arielbk released this 09 Jul 14:58

Highlights

Codex and Cursor sub-agents on the board (#53) — in-process sub-agents from Codex and Cursor now appear nested under their parent session with a type badge, the same way Claude sub-agents do. Neither tool has a SubagentStop-style hook, so discovery happens at board read time: listSessionsForTask links new children as part of the store's read-time refresh, so a fan-out shows up the moment anyone looks at the task.

  • Codex — children are recovered from rollout linkage on both ends: the child's session_meta names its parent thread, and the parent records a collab_agent_spawn_end event per spawn. Spawns whose rollout isn't on disk yet register under a synthetic locator that upgrades when a later scan finds the file.
  • Cursor — children are found via the composer's mirrored subagents/<id>.jsonl transcripts, with sub-agent type resolved from the child composer's subagentInfo (or prompt-matching as a fallback on machines without the GUI store).

Redundant belts

  • trace session scan --codex now links sub-agent rollouts automatically as a second pass, with zero extra file reads.
  • Task re-entry sweeps the task's Codex/Cursor root sessions before building the manifest (best-effort — an unreadable transcript never blocks re-entry).
  • New trace session discover-subagents <id> verb runs the right scanner on demand for any tool.

Internals

  • openTraceStore accepts optional codexHome / cursorProjectsRoot overrides for pointing discovery at fixtures.
  • setSessionParent accepts an optional subagentType (enrich-not-clobber) so discovery can promote a child a plain scan already registered as a root session.
  • session register / set-parent accept cursor as a tool.

18 new tests; 831 tests, typecheck, and lint green across the workspace.

v0.9.1

Choose a tag to compare

@arielbk arielbk released this 08 Jul 19:07

Fixes completing the Cursor GUI re-entry feature shipped in 0.9.0. Cursor sessions are now identified deterministically, bind to the right flavor, record the real model, and keep their context-token usage.

Cursor session identity

  • Cursor identity is now env-var-driven, mirroring claude/codex: the session id is read from CURSOR_CONVERSATION_ID and its flavor resolved via the composerData:<id> record in state.vscdb. The old cwd + mtime freshness heuristic remains only as a fallback for older Cursor versions or bare terminals. This fixes re-entry landing on the wrong session and GUI sessions binding with the wrong model.
  • Wrong-flavor bindings self-heal: a live GUI session may initially bind to the JSONL agent-transcript flavor (Cursor flushes its composer record lazily), but the locator is canonicalized to the composer flavor on session refresh — clearing the broken cursor-agent --resume button and correcting the model to the real one (e.g. claude-opus-4-8 instead of composer-2.5-fast).
  • A table-less workspace DB is now treated as a missing key instead of erroring.

Context tokens

  • Context-token usage is persisted on sessions (context_tokens_used / context_tokens_limit, migration 0010) instead of being re-derived live, with a preserve-on-null guard matching the existing model/title rules.

🤖 Generated with Claude Code

v0.9.0

Choose a tag to compare

@arielbk arielbk released this 08 Jul 15:56

Highlights

  • Cursor support — Trace now understands Cursor sessions end to end: cursor-agent CLI sessions are captured and re-enterable, model and cwd are read from Cursor's private chat store, and Cursor GUI sessions support re-entry.

Task board & UI

  • Skeleton loaders for the task list and detail views, with cross-fade reveals via @starting-style and a shared SkeletonReveal component.
  • Context-window occupancy shown for Cursor sessions (Cursor stores no cumulative spend), with Cursor's real app icon on the board.
  • Task detail polish: balanced titles, prettier body text, header stacks on mobile; modernized dropdown entry and clamped expansion animations.

Fixes

  • Static assets are served as bytes rather than UTF-8 text, fixing binary assets (icons, images) served by the board.
  • Cursor prompt envelopes are unwrapped so prompts display cleanly.
  • On slow loads, content reveals correctly after the skeleton instead of getting stuck.

Internal

  • Hook invocations now go through one front door in the citty CLI; pass-through store wrappers deleted, with the db path resolved via core.
  • The transcript locator convention lives in one module, and the SessionTool axis is single-sourced; the Cursor resolver is wired at a single identity composition root.
  • Project renamed from trace-v2 to trace.