Six releases of not losing your conversation
z.19 to z.24: OAuth logouts, answers that vanished, conversations lost after a cancel, stuck 'Waiting' dots, and an app that stays fast with many sessions.
Before 1.0, Splitkick shipped as JeanZ, a fork of Jean. This post covers JeanZ z.19 to z.24.
After a run of new features, these six releases had one theme: do not lose state. Not a login, not an answer, not the context of a conversation.
What broke, what changed
- z.19 — logouts. The app refreshed Claude’s OAuth token itself and logged running sessions out (“OAuth session expired”). Now it only reads the token. Answers to agent questions no longer get lost; a fork opens the new session.
- z.20 — plans and worktrees. A plan sent to a new worktree sometimes hung, used the wrong base branch, or the worktree vanished. The chat now shows where a plan went. The stuck “Waiting” dot got its first fix.
- z.21 — the dot, properly. The workspace row computed its own status; now it uses the session rows’ status.
- z.22 and z.23 — cancel keeps the conversation. Cancel a turn before Claude wrote anything and the next turn started from zero. z.22 fixed the symptom; z.23 fixed the cause: the app now picks the Claude session id itself and saves it before Claude starts.
- z.24 — speed. Switching sessions refreshes only the affected worktree; session lists are cached and re-parsed only when the file changes; git status checks stop rewriting the projects file. Plus pinch-zoom in the image viewer.
The pattern
The first fix is not always the fix. z.22 stopped a cancel from dropping the resume id, but a new conversation only got its id once Claude answered, so a turn cancelled before any output still lost the context. z.23 made the rule structural: the session id is chosen and saved before the agent starts, so no later step can drop it. Since then the repository has a rule: before a session-state bug counts as fixed, check the real session data — the saved run metadata and the arguments of the running process — not only a unit test.