Skip to main content

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/D to cycle)
    • Blame data (last author, last modified) loaded in background
    • Bulk blame via single log walk with tree diffing (fast on large repos)
    • Respects .gitignore rules
  • Three view modes — tree, flat filenames, flat relative paths (v to cycle)
  • Column sorting — click any column header to sort asc/desc/none
  • Fuzzy search — fzf-like filename filtering with RapidFuzz
  • Git status filteringg to toggle showing only modified files
  • Syntax-highlighted preview — Monokai theme, scrollable, line numbers
  • Copy file references — double-click or drag lines to copy path:line to 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 (o to 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.yaml if 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.toml for 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

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)
17 Toggle individual columns
O Open file in default app (macOS)
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)
├── 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

Tests

uv run pytest

Documentation

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.2.3.tar.gz (208.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gamr-0.2.3-py3-none-any.whl (58.1 kB view details)

Uploaded Python 3

File details

Details for the file gamr-0.2.3.tar.gz.

File metadata

  • Download URL: gamr-0.2.3.tar.gz
  • Upload date:
  • Size: 208.1 kB
  • 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

Hashes for gamr-0.2.3.tar.gz
Algorithm Hash digest
SHA256 baf56bd83987fe52ea65dc5463a75dcb58c7f82d58ab1823fa8566bcee17e930
MD5 36f3f826d91fab8b12ce3d24e409269c
BLAKE2b-256 d03caa68bc281835b22ff279886a403005c565e9cb5107d1ad1d8b26810a47fc

See more details on using hashes here.

File details

Details for the file gamr-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: gamr-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 58.1 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

Hashes for gamr-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 37f51a5b7569c071855c72e06586457e6dc4ae0574a8c44ecc16ff6bcb6ffed6
MD5 7e141641d098363a3ff08ac06af6483b
BLAKE2b-256 77ee7305e2ed84d1c9afd3663c372cd89cc43c0a0bd596906946d2e7016be6ec

See more details on using hashes here.

Release history Release notifications | RSS feed

0.4.0

2 files

0.3.0

2 files

0.2.5

2 files

0.2.4

2 files

This release

0.2.3 This release

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page