Highlights
The biggest release since v5.25 — 2,400+ lines changed across 10 files, delivering a native-feel mobile experience, self-healing sessions, plugin skill discovery, and a critical cross-session isolation fix.
📱 Native Mobile UI
A complete redesign for small screens that feels like a native app:
- Mobile header bar — hamburger menu, session title, live status dot (pulsing orange = working, green = idle, red = error), action buttons
- Settings bottom sheet — slides up from the edge with chip selectors for Mode, Agent, Model, Max Turns, plus quick links to Kanban, Schedule, Config
- Tabs overlay — full-screen session list with individual close buttons and tab counter badge
- Swipe edge areas — 16px touch targets on left/right edges for gesture navigation
- iOS safe area — proper insets on header and input area for notched devices
🔄 Self-Healing Sessions (Session Replay)
When a Claude session is lost — server restart, network timeout, expired session, "invalid session" errors — Studio now automatically rebuilds the full conversation context from SQLite history and replays it into a fresh session. Claude continues coherently from where it left off.
- Works for both local CLI and SSH sessions
- Covers all known Claude session-invalid error patterns via unified
isResettableClaudeSessionError()regex - Restart Session button appears when Claude exhausts auto-continues — one click to clear the broken session and keep going
🧩 Plugin Skill Discovery
Studio now auto-discovers skills from your installed Claude Code plugins:
- Scans
~/.claude/plugins/marketplaces/and~/.claude/plugins/cache/directories - Reads
plugin.jsonmanifest andSKILL.mdfrontmatter for metadata - Plugin skills appear in sidebar grouped by plugin name under "🧩 Plugin Skills"
- System prompt includes plugin root and skill directory paths for file references
- Auto-skill classifier tightened: selects 0–4 skills (was 1–4), prefers narrow matches, skips generic skills for simple questions
🛡 Cross-Session Message Leak Fix
Fixed a multi-vector bug where messages from a running chat could appear in newly opened tabs:
| Root cause | Fix |
|---|---|
done handler cleared global state for any session
| Guard with tabId === generatingTabId check
|
Task worker notifications broadcast without tabId
| Added tabId: task.source_session_id
|
Notification handler showed messages when tabId missing
| Removed fallback; require isVisible
|
Telegram-originated messages lacked tabId
| Added tabId: sessionId to all Telegram flows
|
Rich Tooltips for MCP & Skills
- MCP server tooltips — hover to see name, description, transport type, source URL/command (tokens sanitized)
- Skill tooltips — label, description, plugin name/version, file path
- Session bar chips — auto-skills and active skill chips show rich HTML tooltips on hover
- Visual refinement: larger fonts, border separators, proper spacing
SSH & CLI Improvements
- SFTP attachment upload — files attached in SSH sessions are automatically uploaded to remote server via SFTP before processing
- Session restart button — when CLI/SSH agent exhausts auto-continues, a Restart button renders in-chat
- Thinking block fix — system prompt no longer re-sent on resumed sessions (prevents signature invalidation)
- SSH host password form — fixed masked password overwrite, added validation guards
- File-type attachments — CLI now handles
filetype blocks (not just images), preserves original filenames
Accessibility & UX
- ARIA-compliant modal stack — all modals: focus trap, Escape-to-close, focus restoration,
role="dialog",aria-modal - Slash command modal — redesigned from inline form to full modal with keyboard navigation
- Composer state per-tab — textarea draft, attachments, reply-to state saved/restored atomically on tab switch
- Safe markdown links — state-machine parser blocks
javascript:URLs, handles nested parentheses - prefers-reduced-motion — respects OS setting, disables animations for users who opt out
- Copy image button — in file preview, copies image blob to clipboard
Full Changelog: v5.25.9...v5.28.0