| Crates.io | wagner |
| lib.rs | wagner |
| version | 0.2.1 |
| created_at | 2026-01-05 01:54:15.74853+00 |
| updated_at | 2026-01-16 01:00:45.163932+00 |
| description | AI agent monitoring CLI tool with TUI |
| homepage | https://github.com/DeevsDeevs/wagner |
| repository | https://github.com/DeevsDeevs/wagner |
| max_upload_size | |
| id | 2022953 |
| size | 475,717 |
Multi-repo task manager for AI agent sessions. Orchestrates agent instances across git worktrees with tmux.
-w <workspace># Quick install (recommended)
curl -fsSL https://raw.githubusercontent.com/DeevsDeevs/wagner/main/install.sh | sh
# From crates.io
cargo install wagner
# With Nix
nix profile install github:DeevsDeevs/wagner
# From source
git clone https://github.com/DeevsDeevs/wagner.git
cd wagner && cargo build --release
wagner update # Update to latest version
wagner update --check # Check for updates without installing
Start a session on your current repo without creating worktrees or branches:
cd ~/projects/myrepo
wagner start
# Uses current directory and branch as-is
# Launches tmux session with agent
# Task name derived from repo-branch (e.g., "myrepo-main")
wagner start --name my-session # Custom name
For multiple existing repos:
# Auto-detect repos in current directory
cd ~/my-project # Contains frontend/, backend/ subdirs
wagner start
# Detects all git repos, creates pane per repo
# Or specify paths explicitly
wagner start ~/frontend ~/backend --name fullstack
To stop tracking (leaves repos untouched):
wagner detach my-session
Create isolated worktrees with new branches:
cd ~/projects/myrepo
wagner new my-feature
# Creates worktree with branch feature/my-feature
# Launches tmux session with agent
# Configure workspace (one-time)
wagner ws add myproject \
frontend:~/repos/frontend \
backend:~/repos/backend \
--base-branch main
# Create task from workspace
wagner new my-feature -w myproject
# Creates worktrees in all repos
# Opens tmux with pane per repo + central pane
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
wagner add-repo my-task api:git@github.com:org/api.git:feature/my-task
# Or in workspace config
wagner ws add myproject \
frontend:~/local/frontend \
backend:git@github.com:org/backend.git
wagner ls # List tasks
wagner a my-feature # Attach to task
wagner cd my-feature # Open shell in task worktree
wagner rm my-feature # Delete task
wagner rm my-feature -f # Delete task + branches
| 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 |
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) |
wagner ws add <name> <repos...> [-b <base>] # Create workspace
wagner ws add-repo <ws> <name:path> # Add repo
wagner ws rm-repo <ws> <name> # Remove repo
wagner ws ls # List workspaces
wagner ws rm <name> # Delete workspace
~/.config/wagner/config.json:
{
"tasks_root": "/home/user/tasks",
"repos_root": "~/repos",
"default_agent": "claude",
"diff_base": "main",
"workspaces": {
"myproject": {
"base_branch": "main",
"frontend": "~/repos/frontend",
"backend": "~/repos/backend"
}
}
}
| 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 |
Wagner automatically cleans up on task creation failure. For manual cleanup of orphaned resources:
wagner repair # Scan for orphans (dry run)
wagner repair --execute # Actually clean up
This finds and removes:
task.jsoneval "$(wagner completions zsh)" # Zsh
eval "$(wagner completions bash)" # Bash
wagner completions fish | source # Fish
| 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 |
MIT