Gamr
Git-aware Agent Monitor & Review — a TUI for reviewing AI agent work with live watching, fuzzy search, and diff preview.
Features
- Live file watching — tree updates automatically when files change (watchdog + polling fallback)
- Git integration — pure Python via Dulwich, no git binary required
- File status indicators (Modified, Added, Deleted, Untracked, Staged)
- Deleted files shown with strikethrough styling
- Three diff modes: full file diff, gutter markers, unified diff (
d/Dto cycle) - Blame data (last author, last modified) loaded in background
- Bulk blame via single log walk with tree diffing (fast on large repos)
- Worktree support (linked worktrees and bare-repo layouts)
- Respects
.gitignorerules
- Three view modes — tree, flat filenames, flat relative paths (
vto cycle) - Column sorting — click any column header to sort asc/desc/none
- Fuzzy search — fzf-like filename filtering with RapidFuzz
- Git status filtering —
gto toggle showing only modified files - Syntax-highlighted preview — Monokai theme, scrollable, line numbers
- Copy file references — double-click or drag lines to copy
path:lineto clipboard - Full file diff — syntax highlighting with inline +/- markers and colored backgrounds
- Side-by-side diff — modal popup (
s) showing old/new files aligned with syntax highlighting, character-level change highlighting, and live refresh - Diff overview bar — 1-column change map with 4 density modes (
oto cycle: line, quadrant, sextant, braille) - Gradient colors — size, modification time, and git blame time columns colored by relative magnitude
- File icons — loads from
~/.config/lsd/icons.yamlif present - Resizable split pane — drag the divider between tree and preview
- Desktop-style navigation — ←/→ to collapse/expand folders, ← on file collapses parent
- State persistence — view mode, columns, collapsed dirs, selection, filters saved between sessions
- Preferences file —
~/.config/gamr/preferences.tomlfor user defaults (e.g., diff mode cycle) - Graceful degradation — works on non-git directories (hides git UI)
- Keyboard shortcuts help —
?shows all keybindings in a popup - Toolbar status indicators — clickable view mode, diff mode, overview, follow, blame, file count
Install
Requires Python 3.11+.
uv sync
uv run gamr [path]
Keybindings
| Key | Action |
|---|---|
↑/↓ |
Navigate files |
j/k |
Navigate files (tree) or scroll (preview) |
→ |
Expand directory |
← |
Collapse directory (or parent if on file) |
space |
Toggle expand/collapse (tree) or page down (preview) |
v |
Cycle view mode (tree → flat name → flat path) |
V |
Cycle view mode reverse |
d |
Cycle diff mode (full → gutter → unified) |
D |
Cycle diff mode reverse |
s |
Side-by-side diff popup |
J/n |
Jump to next diff hunk (preview) |
K/N |
Jump to previous diff hunk (preview) |
o |
Cycle diff overview style |
g |
Toggle git modified filter |
f |
Toggle follow mode (auto-select last changed file) |
ctrl+f |
Focus search input |
b |
Toggle blame columns (last author, git time) |
1–7 |
Toggle individual columns |
O |
Open file in default app |
tab |
Switch focus between tree and preview |
ctrl+p |
Command palette (spaced paths, gradient toggle) |
? |
Show keyboard shortcuts help |
q |
Quit (saves state) |
Column headers are clickable to sort (ascending → descending → none).
Architecture
src/gamr/
├── app.py # Textual app, keybindings, orchestration
├── commands.py # Command palette provider
├── models.py # FileEntry, GitStatus, DiffMode, etc.
├── state.py # Persistent state management
├── preferences.py # User preferences (~/.config/gamr/preferences.toml)
├── preview.py # PreviewController — preview orchestration and scroll state
├── gamr.tcss # Stylesheet
├── services/
│ ├── diff_parser.py # Unified diff parsing into DiffData
│ ├── file_scanner.py # Watchdog + polling fallback + git state watcher
│ ├── file_index.py # Merges scanner + git into FileEntry list
│ ├── git_provider.py # GitProvider ABC + Dulwich implementation
│ ├── filter.py # Fuzzy and status filtering
│ └── icons.py # lsd icons.yaml loader
└── widgets/
├── file_tree_table.py # DataTable with tree semantics
├── tree_data.py # Tree building and sorting logic
├── toolbar.py # Toolbar (logo + search input)
├── preview_pane.py # Syntax highlighting + diff view
├── side_by_side.py # Side-by-side diff modal
├── help.py # Keyboard shortcuts help modal
└── split.py # Resizable horizontal split
Dependencies
- Textual — TUI framework
- Dulwich — pure Python git (no compiled deps)
- watchdog — filesystem events
- RapidFuzz — fuzzy string matching
Tests
uv run pytest
Documentation
- UI Design Rules — all interaction behaviors and edge cases
- Architecture Decision Records — 29 ADRs covering all design choices
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
gamr-0.4.0.tar.gz
(7.6 MB
view details)
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
gamr-0.4.0-py3-none-any.whl
(76.5 kB
view details)
File details
Details for the file gamr-0.4.0.tar.gz.
File metadata
- Download URL: gamr-0.4.0.tar.gz
- Upload date:
- Size: 7.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
703dda11b1a251f891018a0270171b6ab4d64097897c0178375886c0e694d07c
|
|
| MD5 |
0a66190d148cc15d59717a448c32c3f9
|
|
| BLAKE2b-256 |
4cea6610421e7f4d5036f9dd851812bff096e7266ec54d1948ca1e64733bc7ea
|
File details
Details for the file gamr-0.4.0-py3-none-any.whl.
File metadata
- Download URL: gamr-0.4.0-py3-none-any.whl
- Upload date:
- Size: 76.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c963afb136cdd7fb22eecbf21533c61a3d8fdf4250756550fefe681ca39807f3
|
|
| MD5 |
3e26f8d5edccc550b19dc2c7e3ff1936
|
|
| BLAKE2b-256 |
742acb7b42872d75717478b3c6d054724d36f05d5bce2941c459b31d3ae33b54
|