TUI dashboard for tmux sessions with git and PR status
Project description
vigil
TUI dashboard for tmux sessions. Monitors git status and GitHub PR state across all your sessions from a single view.
Navigate sessions with vim-style keybindings, merge PRs, approve reviews, rebase branches, and clean up sessions — all without leaving the terminal. Works with any tmux workflow: git worktrees, one-branch-per-session, or plain repos.
Install
pipx install vigil-tui
Or from source:
git clone https://github.com/joshuazd/vigil.git
pipx install ./vigil
Prerequisites
Usage
# Launch the TUI
vigil
# Show help
vigil --help
Vigil discovers all tmux sessions, reads git status from each session's working directory, and fetches PR state via gh. Sessions are color-coded by state: idle, pending review, CI failing, mergeable, etc.
Keybindings
| Key | Action |
|---|---|
j / k |
Navigate down / up |
Enter |
Switch to session (popup mode) or toggle detail |
Tab |
Toggle detail panel |
o |
Open PR in browser |
m |
Merge PR (press twice to confirm) |
a |
Approve PR |
b |
Rebase and force-push |
x |
Cleanup session (press twice to confirm) |
d |
Dispatch (run configured hook with input) |
r |
Refresh |
q |
Quit |
Configuration
All configuration is optional. Create ~/.config/vigil/config.toml to customize:
[settings]
git_interval = 3 # Git polling interval (seconds)
pr_interval = 30 # PR polling interval (seconds)
cache_ttl = 30 # Cache staleness threshold (seconds)
log_level = "INFO" # DEBUG, INFO, WARNING, ERROR
git_workers = 8 # Max parallel git status threads
capture_window = "" # Window name for detail panel (empty = first window)
[hooks]
cleanup = "tmux kill-session -t {session} && git worktree remove {path}"
dispatch = "my-dispatch-script {input}"
merge = "gh pr merge {branch} --squash --delete-branch"
approve = "gh pr review {branch} --approve"
Hooks
Actions are shell command templates with {placeholder} variables, automatically shell-escaped:
| Hook | Variables | Default |
|---|---|---|
cleanup |
{session}, {path}, {branch}, {git_root} |
Built-in (see below) |
dispatch |
{input} |
(none — must be configured) |
merge |
{branch}, {git_root} |
gh pr merge {branch} --squash --delete-branch |
approve |
{branch}, {git_root} |
gh pr review {branch} --approve |
The built-in cleanup kills the tmux session, then removes the git worktree if the session directory is one. For non-worktree sessions, it just kills the session. Override with a hook for custom behavior.
The default merge uses --squash --delete-branch. Override [hooks] merge for a different strategy. Set any hook to "" to disable it.
Environment variable overrides
Environment variables override TOML settings for quick testing:
VIGIL_GIT_INTERVAL, VIGIL_PR_INTERVAL, VIGIL_CACHE_TTL, VIGIL_LOG_LEVEL, VIGIL_GIT_WORKERS, VIGIL_CAPTURE_WINDOW
Development
git clone https://github.com/joshuazd/vigil.git
cd vigil
pip install -e ".[dev]"
pytest
The ./vigil bootstrap script auto-creates a virtualenv at ~/.local/share/vigil/venv for quick local use without a manual install.
Logs are written to ~/.local/share/vigil/vigil.log (rotating, 2 MB max).
License
GPL-3.0 — see LICENSE for details.
Project details
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 vigil_tui-0.1.1.tar.gz.
File metadata
- Download URL: vigil_tui-0.1.1.tar.gz
- Upload date:
- Size: 41.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3c571245f5fc42536d67956530283ffc56d768136cd7054f2a5863ab7e98684
|
|
| MD5 |
16d893e32bed95bc4da584945b7864df
|
|
| BLAKE2b-256 |
917c89a343f43c790ccfc11fd93a416480f166188db084f74659928b5b7943d8
|
Provenance
The following attestation bundles were made for vigil_tui-0.1.1.tar.gz:
Publisher:
publish.yml on joshuazd/vigil
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vigil_tui-0.1.1.tar.gz -
Subject digest:
a3c571245f5fc42536d67956530283ffc56d768136cd7054f2a5863ab7e98684 - Sigstore transparency entry: 1193069474
- Sigstore integration time:
-
Permalink:
joshuazd/vigil@396e3a10e8f11de277d4cbdf917df9b4d0637391 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/joshuazd
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@396e3a10e8f11de277d4cbdf917df9b4d0637391 -
Trigger Event:
release
-
Statement type:
File details
Details for the file vigil_tui-0.1.1-py3-none-any.whl.
File metadata
- Download URL: vigil_tui-0.1.1-py3-none-any.whl
- Upload date:
- Size: 34.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
353eaf4ab5a221f382a59427b114a413305a0f193fa58403e8e332bd7921658b
|
|
| MD5 |
24f02c6cffe648a80cde224bbbb9914f
|
|
| BLAKE2b-256 |
e58f51f2e47a5ff9741c40fd4750c682e1fe23a3c6a79ad02c3348c60de50563
|
Provenance
The following attestation bundles were made for vigil_tui-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on joshuazd/vigil
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vigil_tui-0.1.1-py3-none-any.whl -
Subject digest:
353eaf4ab5a221f382a59427b114a413305a0f193fa58403e8e332bd7921658b - Sigstore transparency entry: 1193069496
- Sigstore integration time:
-
Permalink:
joshuazd/vigil@396e3a10e8f11de277d4cbdf917df9b4d0637391 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/joshuazd
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@396e3a10e8f11de277d4cbdf917df9b4d0637391 -
Trigger Event:
release
-
Statement type: