
A continuous diff with vim keybindings. Typed comments at line, range, file and review scope. Sessions that survive restarts. Submit the finished review to GitHub, GitLab, Azure DevOps or Forgejo — SaaS or on-premise.
git clone https://github.com/infrashift/mrman && cd mrman && make installNeeds Go 1.25+ and git.Why not go install yet?mrman git:master ╭ Files · 0/1 ─────╮╭ src/cache.go ────────────────────────────────────────────────────────────────────╮ ▼ src/ ═══ Review Comments ════════════════════════════════════════════════════════════ ▢ M cache.go ═══ src/cache.go [M] ═══════════════════════════════════════════════════════════ ... 45 lines hidden ... ... ↑ expand (20 lines) ... @@ -46,12 +46,16 @@ func (c *Cache) Keys() []string { 46 47 // Get returns the value for key. 48 func (c *Cache) Get(key string) (string, bool) { 49 ▌ c.mu.RLock() 50 ▌ defer c.mu.RUnlock() 49 ▌ c.mu.Lock() ▶ 50 ▌ defer c.mu.Unlock() 51 entry, ok := c.entries[key] 52 if !ok { 53 return "", false 54 } 55 ▌ if time.Now().After(entry.ExpiresAt) { ╭── [@user] L55 ──────────────────────────────────────────────────────────── │ Deleting inside Get means the read path mutates the map. ╰─────────────────────────────────────────────────────────────────────────── 56 ▌ delete(c.entries, key) ╭ Comments · 1 ────╮ 57 ▌ return "", false ● cache.go:55 @... 58 ▌ } 59 return entry.Value, true NORMAL Comment saved
An actual frame from a running mrman, not a mockup — hidden context collapsed above, a comment anchored inline at L55, the file tree and comment navigator on the left.
One continuous diff across every file. Count prefixes, hunk and file jumps, visual-range selection, search, `zz`/`zt`/`zb`. Context gaps expand on demand.
GitHub, GitLab, Azure DevOps and Forgejo through their APIs — not by shelling out to gh or glab. Enterprise hosts, custom API bases and private CAs are first-class.
Comment on a line, a range, a file, or the review itself. Define your own comment types — they drive the badge, the exported markdown, and the tag on submitted comments.
Reviewed marks and draft comments persist automatically. Close the terminal, come back tomorrow, pick up exactly where you stopped.
An AI agent can follow your review as you write it, or add findings of its own, over a JSON CLI. Submitting to a forge needs a grant only a human at a terminal can issue.
TOML validated by embedded CUE schemas: a mistake drops one key and warns precisely. 24 bundled themes, and both markdown outputs are templates you can replace.
Same keys, same review model. Capabilities are checked before mrman offers an action, so a submit never fails halfway through.
mrman makes the review session a shared object: you read and comment in the TUI while an agent watches the stream, answers, and — only when you have said so — submits.
Agent CollaborationKeybindings