17 unstable releases (3 breaking)
Uses new Rust 2024
| new 0.4.1 | Mar 5, 2026 |
|---|---|
| 0.4.0 | Mar 4, 2026 |
| 0.3.1 | Feb 5, 2026 |
| 0.2.3 | Feb 1, 2026 |
| 0.1.9 | Jan 8, 2026 |
#348 in Development tools
755KB
20K
SLoC
Wagner
Wagner is a tmux-based orchestrator for running AI agents across one or many repos.
It supports three primary workflows:
- quick launch in the current repo (
wagner claude,wagner codex) - attached multi-repo sessions without worktrees (
wagner start) - managed tasks with isolated git worktrees (
wagner new)
Install
# Recommended
curl -fsSL https://raw.githubusercontent.com/DeevsDeevs/wagner/main/install.sh | sh
# Cargo
cargo install wagner
# Nix
nix profile install github:DeevsDeevs/wagner
Requirements
tmuxgit- at least one agent CLI (
claudeand/orcodex)
Quick Start (Simplest)
From inside any git repo:
wagner claude # start/attach a Claude task for current directory
wagner codex # start/attach a Codex task for current directory
wagner terminal # start/attach a plain terminal task
Optional custom task name:
wagner claude -n my-task
Useful follow-ups:
wagner ls
wagner a my-task
wagner detach my-task
Multi-Repo Without Worktrees
# auto-detect repo(s) from current directory
wagner start
# explicit paths
wagner start ~/repos/frontend ~/repos/backend -n fullstack
# stop tracking (repos stay untouched)
wagner detach fullstack
Managed Worktree Tasks
# single repo (auto-detected from cwd)
wagner new my-feature
# workspace-based multi-repo task
wagner workspace add app frontend:~/repos/frontend backend:~/repos/backend
wagner new my-feature -w app
Cleanup:
wagner rm my-feature # remove task/worktrees
wagner rm my-feature -f # also remove task branches
Sync Workspace Repos
Fetch latest changes for all repos in a workspace before creating tasks:
wagner sync # fetch all workspace repos
wagner sync app # fetch repos in specific workspace
Daemon + Remote Control
Start daemon:
wagner daemon start
wagner daemon status
wagner daemon restart
wagner daemon stop
Once daemon is running, these commands use IPC:
wagner status [task]
wagner send <task> "message"
wagner approve [task] [pane]
wagner reject <task> [pane]
wagner output <task> [pane] -l 120
wagner resume <task> [pane]
wagner add [task] [repo] [--name pane-name] [--agent claude|codex|terminal]
Telegram Adapter (Optional)
Configure ~/.config/wagner/config.json:
{
"daemon": {
"telegram": {
"bot_token": "<telegram_bot_token>",
"chat_id": 123456789,
"allowed_users": [123456789],
"notify_waiting": true,
"rate_limit_ms": 50
}
}
}
Then run wagner daemon start.
Minimal Config
Default config path: ~/.config/wagner/config.json
{
"tasks_root": "~/tasks",
"repos_root": "~/repos",
"default_agent": "claude",
"diff_base": "main"
}
More Docs
- Architecture:
docs/architecture.md - Contributor map:
CLAUDE.md
License
MIT
Dependencies
~22–44MB
~599K SLoC