Handoff VSCode v0.8 — Nested Projects and a Unified Project Filter
The extension now scans a workspace recursively for .handoff directories and groups tasks by project. One project selector drives every panel, and Gantt rows can be hidden individually.
Here is what changed in v0.8.0 of the Handoff VSCode extension. This release is mostly about how things look once a workspace holds more than one project.
Nested workspace support
The extension scans the workspace recursively and finds .handoff at any depth. A monorepo that keeps a project per sub-package can now be viewed as a whole.
The Task Explorer groups tasks by project, and each task card carries a badge showing where it came from. Task identifiers stay distinct across projects, so nothing collides in the merged view.

One project selector for every panel
Project filtering used to be set separately in each panel. It is now a single shared selector: the Dashboard, Gantt Chart, Metrics, Team panel, and Session Timeline all follow the same choice, and that choice persists across reloads.
- Gantt visibility toggles — hide completed tasks in one step, or hide individual rows and bring them back from a restore popup. The state is stored in
config.toml
Estimates no longer inflated by finished work
Done and skipped tasks now contribute their actual hours rather than their estimates. This affects the workload heat gauge, the auto-scheduler's leveling, and the aggregates shown in the Team and Metrics panels.
When a finished task's estimate was off, that error used to leak into projections about work still ahead. Counting completed work by what it actually took is the more honest treatment.
Fixing the blank GUI when switching projects
Switching projects while a Gantt assignee filter was active could blank the entire GUI.
The cause was a violation of React's rules of hooks: GanttChart returned early, before its hooks ran. The empty-state guard now lives inside conditional JSX, so the hooks always execute in the same order. A root-level ErrorBoundary was added as well, along with defensive guards around done_criteria and labels. A future render error of this kind will be contained rather than taking the whole view down.
Installing and updating
The extension updates through the VS Code Marketplace. The case study page covers what it does and how it is used.

