The desktop app watches connected folders with stdlib fs.watch and pushes debounced refresh events, so agent edits appear on the board with no manual rescan.
The board could read folders but it could not notice them changing. Every agent edit needed a manual rescan, which defeats the point of watching an agent work. The desktop app now watches connected folders and refreshes the board on its own.
Node watches, the renderer rescans
The main process walks each project folder and puts a stdlib fs.watch on every directory, skipping node_modules, dist, out, git, and hidden folders. Change events debounce for 300ms so an agent burst that writes five files triggers one refresh instead of five. When the timer fires, the main process sends one project-changed event to every window.
The renderer subscribes once at startup and quietly rescans just that project. It honors the auto-refresh toggle and skips hidden tabs. Nothing else in the render path changed.
No new dependency
chokidar was the obvious pick and got skipped. fs.watch covers macOS and Windows, which is where the packaged app runs first. If Linux watching proves flaky, that is the moment to add it, not before.
The poller stays as backup
The five second browser poller never ran in Electron because it required folder handles that only exist in the browser. One condition change lets it cover Electron too, so a missed watch event still surfaces within seconds. Push first, poll as the net.
Where it stands
Agent writes a file, the board updates with no clicks. Verified with a watch smoke test plus both builds passing, and the event strings confirmed present in the packaged output.