Describe your "intents" (modes) to orchestrate application launch, workspace layout, and session state.
SessionIntent is a declarative session orchestration system for Linux desktop environments, with a focus on GNOME and Wayland. It lets you define named session modes in YAML and automatically manage applications, workspaces, and desktop state as you switch between contexts such as browsing, work, media, or focus sessions.
Instead of launching apps manually each time, you define the behavior of a session once and let SessionIntent restore it consistently.
- π― 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
- Python 3.10+
- PyYAML
wofiorrofiβ optional, for the mode picker. Without either, SessionIntent falls back to a terminal menu.- A supported DE or compositor: GNOME, KDE Plasma, Hyprland, Sway, wlroots, or X11/EWMH
curl -fsSL https://raw.githubusercontent.com/fazrigading/SessionIntent/master/INSTALL.sh | bashThe script checks prerequisites, installs SessionIntent, seeds a default config, and sets up autostart.
uv tool install git+https://github.com/fazrigading/SessionIntentTo run without installing:
uvx --from git+https://github.com/fazrigading/SessionIntent sessionintent --helpFedora:
sudo dnf copr enable fazrigading/SessionIntent
sudo dnf install sessionintent -yNote
The project name is case-sensitive. The RPM does not set up autostart,
so run sessionintent init once after installing.
For Debian and Arch, there are no distro package yet. Install the dependencies, then use Method 1 or 2:
# Debian-based
sudo apt install python3-pip python3-yaml rofi
# Arch-based
sudo pacman -S python python-yaml rofiNote
Only the Fedora RPM is built and published. packaging/arch/, debian/,
and packaging/flatpak/ are kept as reference for downstream packagers.
Important
See docs/INSTALLATION.md for manual installs, uninstalling, custom install locations, and troubleshooting.
-
Initialize SessionIntent. This writes a default config and installs the GNOME Shell workspace extension:
sessionintent init
-
Choose the apps you want to manage:
sessionintent setup
Your selection is saved to
~/.config/sessionintent/apps.yaml. -
Define your modes in
~/.config/sessionintent/config.yaml. See examples/config.example.yaml for reference. -
Launch a mode:
sessionintent # picker (needs wofi or rofi) sessionintent apply browsing # apply directly, no picker
Warning
Upgrading from the flag-based CLI or version: 1 configs? See
docs/MIGRATION.md.
Note
Backends are auto-detected: GNOME, KDE Plasma, Hyprland, Sway, generic
wlroots, and an EWMH fallback. Override with --backend.
# 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| 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) |
GPL-3.0-or-later - see LICENSE for details.
Contributions are welcome! See CONTRIBUTING.md and docs/ROADMAP.md for details.
Inspired by window manager session management tools.
Fazri Gading (Copyright 2026)