SessionIntent: Declarative session orchestration for Linux desktops
SessionIntent switches between intent-based modes (work, gaming, browsing, …) that automatically launch, reuse, and organize applications across workspaces.
Backends are auto-detected: GNOME, KDE Plasma, Hyprland, Sway, generic wlroots, and an EWMH fallback (override with --backend).
Features
- 🎯 Intent-based sessions - Define workflows as modes (work, browsing, gaming, …)
- 🖥️ Multi-desktop - Provider-based support for GNOME, KDE, Hyprland, Sway, wlroots, EWMH
- 🔋 Hardware awareness - Filter modes on battery vs AC power
- 📝 Declarative configuration -
config.yamlmodes +apps.yamlregistry (version: 2schema) - 🔒 Safe by default - Reuse before launch; destructive actions are explicit commands
- 🎛️ Workspace orchestration - Per-workspace app placement with optional monitor; switches wait until the app window is visible (GNOME Shell 46–51 via bundled extension)
- 👁️ Mode preview -
preview <mode>shows workspaces and apps before applying - 🔔 Notifications - Desktop notice on every mode switch
- 🧩 Plugins - Drop-in hooks in
~/.config/sessionintent/plugins/ - 🧪 Dev mode -
--devprints commands instead of executing
Quick Start
Installation
Method 1: Using installer script (recommended)
curl -fsSL https://raw.githubusercontent.com/fazrigading/SessionIntent/master/INSTALL.sh | bash
Method 2: Using uv
uv tool install git+https://github.com/fazrigading/SessionIntent
Or run without installing:
uvx --from git+https://github.com/fazrigading/SessionIntent sessionintent --help
Method 3: Manual installation (pip)
pip install .
Read docs/INSTALLATION.md for details. Distro packages: PKGBUILD in packaging/arch/, Debian sources in debian/, Flatpak manifest in packaging/flatpak/, RPM spec in packaging/fedora/ (all pending upload except the installer).
Configuration
- Initialize SessionIntent:
sessionintent init
- Set up your apps:
sessionintent setup
-
Edit
~/.config/sessionintent/config.yamlto define your modes, read examples/config.example.yaml for reference. -
Launch the mode selector:
sessionintent
Upgrading from flag-based CLI or version: 1 configs? See docs/MIGRATION.md.
Usage
# Select mode via UI (requires wofi/rofi) - default behavior
sessionintent
sessionintent select
# Apply specific mode directly (without wofi/rofi)
sessionintent apply browsing
# Preview a mode without applying
sessionintent preview browsing
# Session control
sessionintent panic # Clear state (no app termination)
sessionintent quit # Gracefully close managed apps
sessionintent clear # Clear state files only
sessionintent kill # Force kill managed apps
sessionintent suspend # Suspend session
# Status and listing
sessionintent status # Show current status
sessionintent list # List available modes
# Configuration
sessionintent init # Initialize default configs and extension
sessionintent setup # Set up SessionIntent (scan apps)
sessionintent scan # Rescan installed apps
sessionintent scan --force # Rescan, ignore cache
sessionintent reload # Reload configuration
sessionintent version # Display version information
# Global flags (come before the command)
sessionintent --dev apply work
sessionintent --backend sway apply work
sessionintent --config ~/other.yaml list
Key Files
| File | Purpose |
|---|---|
~/.config/sessionintent/config.yaml |
User mode definitions ($XDG_CONFIG_HOME honored) |
~/.config/sessionintent/apps.yaml |
User app registry |
/usr/share/sessionintent/apps.yaml |
System app registry |
~/.local/state/sessionintent/current |
Current session state ($XDG_STATE_HOME honored) |
Requirements
- Python 3.10+
- PyYAML
- wofi or rofi (OPTIONAL, for UI; terminal fallback otherwise)
- A supported desktop (GNOME, KDE, Hyprland, Sway, wlroots) or X11/EWMH
License
GPL-3.0-or-later - see LICENSE for details.
Contributing
Contributions are welcome! See CONTRIBUTING.md and docs/ROADMAP.md for details.
Acknowledgments
- Provider-based multi-desktop support
- Inspired by window manager session management tools
Metadata
Release files for sessionintent 0.4.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sessionintent-0.4.3.tar.gz | 63.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sessionintent-0.4.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 143.1 kB
Release files / sessionintent-0.4.3.tar.gz
| Download URL | sessionintent-0.4.3.tar.gz |
|---|---|
| Size | 63.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
64945caabc1c84bf6d5dc4304b9bf779c472a4b9ce21eb55f6a63605d63de609
|
|
BLAKE2b-256 checksum How to use checksums |
d3f365f265a5cd1a808e0dab8d2ab576f4d938efdd97139c79406873c8d124ec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / sessionintent-0.4.3-py3-none-any.whl
| Download URL | sessionintent-0.4.3-py3-none-any.whl |
|---|---|
| Size | 79.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b1ca7e6d5874d1626f6da3a8ec904e8e929dd63585995410061c11bea0c428b6
|
|
BLAKE2b-256 checksum How to use checksums |
c127f5ce4b0a20970664268bab61b7b6fa2eb9b368dc2541d48d101824ab982b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|