Wagner
Multi-repo task manager for AI agent sessions. Orchestrates agent instances across git worktrees with tmux.
Features
- Lightweight mode - Start sessions on existing repos without worktrees
- Workspace support - Define repo groups, create tasks with
-w <workspace> - Multi-pane sessions - Tmux pane per repo with agent launched automatically
- Git worktree isolation - Each task gets isolated worktrees
- Base branch tracking - Configure diff base per workspace
- TUI dashboard - Monitor all active sessions
Installation
# Quick install (recommended)
|
# From crates.io
# With Nix
# From source
&&
Updating
Quick Start
Lightweight mode (no worktrees)
Start a session on your current repo without creating worktrees or branches:
# Uses current directory and branch as-is
# Launches tmux session with agent
# Task name derived from repo-branch (e.g., "myrepo-main")
For multiple existing repos:
# Auto-detect repos in current directory
# Detects all git repos, creates pane per repo
# Or specify paths explicitly
To stop tracking (leaves repos untouched):
Full mode with worktrees
Create isolated worktrees with new branches:
# Creates worktree with branch feature/my-feature
# Launches tmux session with agent
Multi-repo with workspace
# Configure workspace (one-time)
# Create task from workspace
# Creates worktrees in all repos
# Opens tmux with pane per repo + central pane
Remote repos
Wagner can clone remote repos automatically. Remote repos are cloned once (as bare repos) to repos_root and reused across tasks:
# Add remote repo to task
# Or in workspace config
Other common commands
Commands
| Command | Alias | Description |
|---|---|---|
wagner |
Launch TUI | |
wagner start [paths] |
s |
Start session on existing repos (no worktrees) |
wagner new <name> |
Create task with worktrees | |
wagner new <name> -w <ws> |
Create from workspace | |
wagner list |
ls |
List tasks ([A] = attached) |
wagner attach [task] |
a |
Attach to session |
wagner detach [task] |
Stop tracking attached task | |
wagner add [task] [repo] |
Add agent pane | |
wagner add-repo <task> <spec> |
Add repo to task | |
wagner rm-repo <task> <repo> |
Remove repo from task | |
wagner delete <task> |
rm |
Delete task (managed only) |
wagner cd <task> [repo] |
Open shell in task worktree | |
wagner workspace |
ws |
Manage workspaces |
wagner repair |
Clean up orphaned worktrees | |
wagner update |
Update to latest version |
Task modes
Wagner has two modes for managing tasks:
Attached (start) |
Managed (new) |
|
|---|---|---|
| Use case | Quick work on existing branch | Isolated feature work |
| Worktrees | No - uses repo directly | Yes - creates git worktree |
| Branches | Uses current branch | Creates new branch |
| Cleanup | detach - just stops tracking |
delete - removes worktrees |
| List indicator | [A] prefix |
(none) |
Workspace commands
Configuration
~/.config/wagner/config.json:
| Setting | Default | Description |
|---|---|---|
tasks_root |
~/tasks |
Where task directories are created |
repos_root |
~/repos |
Where remote repos are cloned (bare) |
default_agent |
claude |
Agent to launch in panes |
diff_base |
main |
Default branch for diffs |
Repair & Cleanup
Wagner automatically cleans up on task creation failure. For manual cleanup of orphaned resources:
This finds and removes:
- Task directories without valid
task.json - Worktrees pointing to deleted tasks
Shell Completions
| # Fish
TUI Keybindings
| Key | Action |
|---|---|
j/k |
Navigate |
a |
Attach |
n |
New task |
d |
Delete |
c |
View diff |
v |
Visual select (j/k to extend, y to yank) |
? |
Help |
S |
Settings |
q |
Quit |
License
MIT