assist v0.396
A pi harness and multi-harness sessions
Following on from Codex the day before, I added support for a third coding harness, pi (spawnPi), and then wired it through the full session lifecycle: pi sessions can be created from the web UI and report live status like any other. A shared harnessLabel now names whichever harness a session runs under, so cards and launchers can display the right agent instead of assuming Claude everywhere.
Codex got its own command auto-approval hook (syncCodexHooks), matching the auto-approval behaviour Claude sessions already had, so a Codex session isn’t stopping to ask permission for commands it’s been cleared to run.
The web backlog view gained a three-way status filter (all / open / done rather than a simple toggle), and usage history now shows a phase count per row so you can see how many phases went into a peak.
The fixes were mostly platform and ordering details. Windows sessions are now restored even when the daemon is down (discoverWindowsSessions, hasPersistedWindowsSessions), the cwd→/mnt path rewrite is gated to only run under WSL (toGitCwd) so it doesn’t corrupt paths elsewhere, branch creation is guarded at the command boundary, and phaseDone now signals completion only after its database writes land — previously the signal could race ahead of the persisted state.