{"slug": "a-native-linux-app-to-manage-claude-code-sessions", "title": "A native Linux app to manage Claude Code sessions", "summary": "A developer built Claude Session Manager, a native Linux desktop app that provides a proper interface for managing Claude Code sessions. The app uses VTE, the production-grade embeddable terminal widget behind GNOME Terminal, to handle Claude Code's heavy TUI with alternate screens and constant redraws. The tool never touches Claude Code's own data, storing names and favorites in its own config file while keeping transcripts read-only.", "body_md": "If you use [Claude Code](https://claude.com/claude-code) daily, you know the problem: after a few weeks you have *dozens* of sessions scattered across every project you've touched. They live as JSONL files under `~/.claude/projects/`\n\n, named by UUID. Which one was the JWT refactor? Which one is still mid-task? `claude --resume`\n\nshows you a picker for the current directory — but there's no overview of everything, no naming, no \"this one matters, pin it\".\n\nSo I built **Claude Session Manager** — a native Linux desktop app that gives Claude Code sessions a proper home.\n\nGitHub: [https://github.com/r4nd3l/claude-session-manager](https://github.com/r4nd3l/claude-session-manager)\n\n`claude --resume <id>`\n\nin the session's original project directory, inside your own shellImportantly: it **never touches Claude Code's own data**. Names, favorites, everything app-side lives in its own config file. Transcripts are read-only to this app (unless you explicitly trash one — and that goes to the system trash, recoverable).\n\nI wanted a *native* app, and the deciding factor turned out to be one component: **the terminal widget**.\n\nClaude Code is a heavy TUI — alternate screens, spinners, constant redraws. A half-baked terminal emulator widget will mangle it. On Linux there's exactly one production-grade embeddable terminal: **VTE**, the widget behind GNOME Terminal and Ptyxis. That decision cascaded into the rest of the stack:\n\n`AdwTabView`\n\n/`AdwTabBar`\n\ngave me the tab system basically for free, `AdwOverlaySplitView`\n\nthe sidebar layout**1. Some libadwaita types are final.** `class SessionSidebar(Adw.ToolbarView)`\n\ncompiles fine and explodes at runtime with `could not create new GType`\n\n. `AdwToolbarView`\n\ncan't be subclassed — wrap it in a `Gtk.Box`\n\ninstead.\n\n**2. GtkListBox headers belong to rows.** I implemented collapsible project groups by filtering out the group's rows... and the group\n\n**3. Bind properties, don't rebuild lists.** The first version rebuilt the whole sidebar on every change — fine at 10 sessions, scroll-position-destroying at 50+ with live file monitoring. The fix was a proper model layer: a `GObject`\n\nitem per session with bindable properties, reused across refreshes. Renames, stars and status dots now update in place, and the list is only re-spliced when the *order* actually changes.\n\n```\nsessions.py   # transcript discovery + parsing (pure Python, fully testable)\nstate.py      # app-side persistence (names, favorites, settings)\nstore.py      # single source of truth: threaded scans, file monitors, diffing\nsidebar.py    # the session list widget\nwindow.py     # tabs + actions + composition\n```\n\nThe data layer is GTK-free, which means the test suite runs on a bare `python:3.12-slim`\n\ncontainer in CI — no display server, no GTK packages.\n\nThere's a `.deb`\n\non the [release page](https://github.com/r4nd3l/claude-session-manager/releases/latest):\n\n```\nsudo apt install ./claude-session-manager_0.1.0_all.deb\n```\n\nOr run from source (Fedora/Arch package names in the README):\n\n```\ngit clone https://github.com/r4nd3l/claude-session-manager.git\ncd claude-session-manager\npython3 -m claude_session_manager\n```\n\nIt's GPL-3, unofficial, and not affiliated with Anthropic. Issues and PRs welcome — the next feature on my list is *transcript peek*: reading the last few messages of a session in the details dialog, so you can identify a session without resuming it.\n\nIf you try it, I'd genuinely like to know what breaks on your distro. 🐧\n\nEnjoying the content? If you'd like to support my work and keep the ideas flowing, consider buying me a coffee! Your support means the world to me!", "url": "https://wpnews.pro/news/a-native-linux-app-to-manage-claude-code-sessions", "canonical_source": "https://dev.to/matemiller/a-native-linux-app-to-manage-my-claude-code-sessions-2emp", "published_at": "2026-06-05 17:11:00+00:00", "updated_at": "2026-06-05 17:43:14.628230+00:00", "lang": "en", "topics": ["ai-tools", "ai-products", "ai-agents", "large-language-models", "artificial-intelligence"], "entities": ["Claude Code", "Claude Session Manager", "VTE", "GNOME Terminal", "Ptyxis", "GitHub", "r4nd3l"], "alternates": {"html": "https://wpnews.pro/news/a-native-linux-app-to-manage-claude-code-sessions", "markdown": "https://wpnews.pro/news/a-native-linux-app-to-manage-claude-code-sessions.md", "text": "https://wpnews.pro/news/a-native-linux-app-to-manage-claude-code-sessions.txt", "jsonld": "https://wpnews.pro/news/a-native-linux-app-to-manage-claude-code-sessions.jsonld"}}