Native GTK4 GUI to manage and resume AI coding agent sessions (Claude Code, Cursor)
Project description
Agent Session Manager
Native GTK4/libadwaita desktop app to browse, name, and resume your AI coding-agent sessions in embedded terminal tabs. Supports Claude Code and Cursor, side by side.
Unofficial community tool. An independent community project, not affiliated with or endorsed by any agent vendor (including Anthropic). It never modifies your agents' own session data — all app state lives in its own config file.
Features:
- Sidebar lists every session found on disk (for Claude Code, under
~/.claude/projects/), grouped by project (collapsible headers, with collapse-all/expand-all buttons next to the search box), with a Favorites section pinned on top — star a session to move it there. A search box filters by name, project, preview, or session id, and the list updates live as sessions are created or written to. - Sessions can be given custom names (pencil icon). Names, favorites, and hidden sessions persist in
~/.config/agent-session-manager/state.json— your agents' own session files are never modified. - Clicking a session opens a tab in the main area; each tab is an embedded VTE terminal running your
$SHELLwith the agent's resume command (claude --resume <session-id>for Claude Code) typed into it, in the session's original project directory. When the agent exits you drop to a shell prompt; the tab closes when the shell exits. Closing a tab asks the agent to exit cleanly (Claude Code's/exit) in the background first. - In-terminal search with a find bar (
Ctrl+Shift+G) over the tab's scrollback. - Status dots in both the sidebar and on each open tab: green = open, blue = output arrived in a background tab. A waiting badge (amber ?) marks sessions where the agent's last message was a question awaiting your reply.
- Tabs can be renamed, given an emoji prefix, or have their session ID copied (right-click → Rename… / Set emoji… / Copy session ID); renaming a session's tab updates its name everywhere. A close-all button appears when more than one tab is open, and the sidebar toggles with the header button or
F9. Shift+Enter inserts a newline in the agent's prompt. - Right-click a session for the full action set: open, open in Ghostty (external window — Ghostty can't be embedded), fork (
--fork-session), rename, favorite, details (messages/models/tokens, a peek at recent messages, and MCP servers/usage), copy session id, reveal transcript, hide, or move the transcript to trash. - Desktop notifications when a background session goes quiet after producing output — click to jump to that tab (toggle in Preferences).
- Select mode (checkbox button in the sidebar header) for bulk actions: open, star, hide, or trash many sessions at once.
- New session (tab icon in the header) asks for a project folder and starts a fresh agent session (
claude) there. - Quick switcher (
Ctrl+Shift+K) jumps to any session by type-ahead; the New Session button remembers your last folder; the sidebar is resizable and its width is remembered. - MCP servers browser (menu → MCP servers): a read-only view of every MCP server configured in
~/.claude.json, global and per-project. - Preferences (menu → Preferences, or
Ctrl+,): terminal font, scrollback, color scheme. - A status footer shows session, project, transcript-size, and open-tab counts.
Keyboard shortcuts
| Shortcut | Action |
|---|---|
Ctrl+Shift+F |
Focus search |
Ctrl+Shift+T |
New session |
Ctrl+Shift+N |
New window |
Ctrl+Shift+W |
Close current tab |
Ctrl+PgUp / Ctrl+PgDn |
Previous / next tab |
Ctrl+Shift+C / Ctrl+Shift+V |
Copy / paste in terminal |
Ctrl+Shift+G |
Find in terminal |
Ctrl+Shift+K |
Quick switcher (jump to any session) |
F9 |
Toggle sidebar |
Ctrl+, |
Preferences |
Requirements
Python ≥ 3.10, GTK 4, libadwaita ≥ 1.5, VTE (GTK 4 build), PyGObject — from your distro's packages:
# Ubuntu / Debian
sudo apt install python3-gi gir1.2-gtk-4.0 gir1.2-adw-1 gir1.2-vte-3.91
# Fedora
sudo dnf install python3-gobject gtk4 libadwaita vte291-gtk4
# Arch
sudo pacman -S python-gobject gtk4 libadwaita vte4
Plus a supported agent's CLI on your PATH — currently the claude CLI.
Installing with
pipx? PyGObject comes from the system, so usepipx install --system-site-packages agent-session-manager-gtk.
Install
Ubuntu — PPA:
sudo add-apt-repository ppa:matemiller992/agent-session-manager
sudo apt update && sudo apt install agent-session-manager
Arch — AUR: yay -S agent-session-manager
Any distro — pipx: pipx install --system-site-packages agent-session-manager-gtk
Debian/Ubuntu — .deb package (from the latest release):
sudo apt install ./agent-session-manager_0.8.0_all.deb
Dependencies are pulled in automatically; the app appears in your app grid as "Agent Session Manager".
From source:
git clone https://github.com/r4nd3l/agent-session-manager.git
cd agent-session-manager
python3 -m claude_session_manager
Or install the desktop launcher + icon (shows up in the app grid as "Agent Session Manager"):
./data/install.sh
Terminal shortcuts: Ctrl+Shift+C copy, Ctrl+Shift+V paste.
Layout
claude_session_manager/
├── app.py # Adw.Application entry point + CSS
├── window.py # main window: split view, sidebar, tabs, actions, dialogs
├── sessions.py # session discovery + transcript statistics
├── state.py # persistent app state (names, favorites, hidden, settings)
├── prefs.py # preferences dialog
└── terminal.py # VTE terminal tab spawning the agent CLI
data/
├── io.github.r4nd3l.AgentSessionManager.desktop # launcher template
├── icons/io.github.r4nd3l.AgentSessionManager.svg # app icon
└── install.sh # install launcher + icon for current user
scripts/
├── build_deb.sh # build the .deb package into dist/
└── make_demo_data.py # fake sessions for screenshots/demos
Publishing (maintainers)
Releases are one step: push a v* tag. .github/workflows/release.yml then
builds the wheel/sdist and the .deb, creates the GitHub Release (with the
.deb attached and auto-generated notes), and publishes to
PyPI via trusted
publishing (OIDC — no API tokens).
# bump version in pyproject.toml / __init__.py / debian/changelog, commit, then:
git tag -a v0.8.0 -m v0.8.0 && git push origin v0.8.0
PyPI trusted-publisher setup expects workflow release.yml (owner r4nd3l,
repo agent-session-manager). The AUR and PPA are updated separately
(see packaging/).
Roadmap
- Distribution: AUR, Ubuntu PPA, Flathub
- Optional: terminal color themes, "watch a project", i18n
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agent_session_manager_gtk-0.10.0.tar.gz.
File metadata
- Download URL: agent_session_manager_gtk-0.10.0.tar.gz
- Upload date:
- Size: 65.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d85d27b1aa35fd656d412e7d7bc8b163760fd93ddebe6a392c7c4c8e594835ea
|
|
| MD5 |
29dfe609ea4d8da6221358488fef7fca
|
|
| BLAKE2b-256 |
9d8a93425ff41122002548a1aff6005552c65cf51a9b98d53da3bcc70a4d13ea
|
Provenance
The following attestation bundles were made for agent_session_manager_gtk-0.10.0.tar.gz:
Publisher:
release.yml on r4nd3l/agent-session-manager
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent_session_manager_gtk-0.10.0.tar.gz -
Subject digest:
d85d27b1aa35fd656d412e7d7bc8b163760fd93ddebe6a392c7c4c8e594835ea - Sigstore transparency entry: 1791916614
- Sigstore integration time:
-
Permalink:
r4nd3l/agent-session-manager@1fe3d615d2f9e7c324b6aea5b73baa77d38da599 -
Branch / Tag:
refs/tags/v0.10.0 - Owner: https://github.com/r4nd3l
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1fe3d615d2f9e7c324b6aea5b73baa77d38da599 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agent_session_manager_gtk-0.10.0-py3-none-any.whl.
File metadata
- Download URL: agent_session_manager_gtk-0.10.0-py3-none-any.whl
- Upload date:
- Size: 75.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
391474ce024073aef9c07bd4641097a9e49e5aaaee559b9a02afef0a37e83570
|
|
| MD5 |
d4e2975d7e17ff01b2958493ec852cd9
|
|
| BLAKE2b-256 |
dce68c4af4734290bd0581bf0d8f09f5ae93037677e10de99dc6d93454fa6bc4
|
Provenance
The following attestation bundles were made for agent_session_manager_gtk-0.10.0-py3-none-any.whl:
Publisher:
release.yml on r4nd3l/agent-session-manager
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent_session_manager_gtk-0.10.0-py3-none-any.whl -
Subject digest:
391474ce024073aef9c07bd4641097a9e49e5aaaee559b9a02afef0a37e83570 - Sigstore transparency entry: 1791916708
- Sigstore integration time:
-
Permalink:
r4nd3l/agent-session-manager@1fe3d615d2f9e7c324b6aea5b73baa77d38da599 -
Branch / Tag:
refs/tags/v0.10.0 - Owner: https://github.com/r4nd3l
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1fe3d615d2f9e7c324b6aea5b73baa77d38da599 -
Trigger Event:
push
-
Statement type: