Skip to main content

GitDirector

A terminal control plane for working across many git repositories. See every repo's state in one dashboard, and run AI coding agents and long-lived commands in parallel tmux sessions you can monitor from the same place.

pip install gitdirector
gitdirector console

Requires Python 3.10+, git, and tmux ≥ 3.2a for anything session-related.

If GitDirector is useful to you, please star the repo — it needs stars to qualify for Homebrew inclusion.

Commands

Command Description
console Interactive TUI dashboard
link PATH [--discover] Track a repo, or every repo under a path
unlink PATH|NAME [--discover] Stop tracking
list All tracked repos with live status
status Only repos with uncommitted changes
pull [--yes] Fast-forward pull every tracked repo, concurrently
cd NAME Open or switch to a tmux session for a repo
info PATH|NAME [--full] File, line, and token statistics
doctor Check tmux, clipboard, config, completion, agent CLIs
autoclean Drop links whose paths no longer exist
reset [--yes] Kill all sessions, wipe ~/.gitdirector, start fresh
gd-tmux PATH|NAME "cmd" [-d TEXT] Run a command in a new background session
gd-capture SESSION [--lines N|--full] Print a live session's scrollback
gd-send SESSION [TEXT] [--enter|--key C-c] Send input to a live session
completion SHELL Completion setup for bash, zsh, or fish

Repo arguments accept an absolute path or the directory basename. If two tracked repos share a basename, GitDirector refuses and lists both so you can disambiguate with the full path.

Console

The TUI has three tabs: [1] Repositories, [2] Sessions, [3] Panels.

Navigate with j/k or arrows, / to filter, s to sort, r to refresh, enter to act on the highlighted row.

Repositories shows sync state, branch, changes, last commit, size, and active sessions. Repos sharing a parent directory collapse into a group row (space to expand). Press i for repo info, or g for git operations — status, timeline, branches, remotes, pull, push, and Review Diff, a two-pane viewer for uncommitted changes with syntax-highlighted per-file diffs. enter opens an action menu: new session, attach existing, launch an AI agent (OpenCode, Claude Code, Copilot, Codex, Pi), or remove a session.

Sessions lists every gd/* session with status, purpose, repo, and a free-form description (d to edit).

Panels manages reusable tmux layouts (n to create). Drag with the mouse to select and copy text, or y to copy the visible pane. Uses pbcopy, wl-copy, xclip, xsel, or clip.exe, falling back to OSC 52.

Background sessions

gd-tmux runs a command in a detached gd/<repo>/shell/<N> session and prints the session name, so scripts can capture it:

SESSION=$(gitdirector gd-tmux /path/to/repo "npm run dev" -d "Vite: dev server")
gitdirector gd-capture "$SESSION" --lines 100
gitdirector gd-send "$SESSION" --key C-c

The session self-destructs when the command exits, taking its scrollback with it. To keep output, redirect inside the command: "make test 2>&1 | tee /tmp/run.log".

AI coding agents: the rules for driving GitDirector headlessly live in SKILL.md. Read it before running these commands.

Configuration

~/.gitdirector/config.yaml:

repositories:
    - /path/to/repo1
max_workers: 10   # optional, 1-32, default 10
theme: rose-pine  # optional

Themes: textual-dark, textual-light, ansi-dark, ansi-light, nord, gruvbox, dracula, tokyo-night, monokai, flexoki, solarized-light, solarized-dark, atom-one-dark, atom-one-light, rose-pine, rose-pine-moon, rose-pine-dawn, catppuccin-latte, catppuccin-frappe, catppuccin-macchiato, catppuccin-mocha.

GitHub PAT fallback

Credentials live separately in ~/.gitdirector/secrets.yaml:

github_username: your-username
github_PAT: github_pat_...

Git commands run with your normal credentials first. Only if one fails with an auth error, and both values are set, does GitDirector retry via a temporary credential helper for HTTPS GitHub remotes. SSH remotes are untouched. The PAT never appears on the command line or in TUI output, but it is stored in plaintext — scope it narrowly and protect the file.

Shell completion

Completion covers subcommands, options, and tracked repo names.

eval "$(gitdirector completion bash)"
eval "$(gitdirector completion zsh)"
gitdirector completion fish | source

For zsh, writing the script into your $fpath avoids a subprocess on every TAB:

gitdirector completion zsh > "${fpath[1]}/_gitdirector"

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gitdirector-1.8.5.tar.gz (143.6 kB view details)

Uploaded Source

Built Distribution

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

gitdirector-1.8.5-py3-none-any.whl (172.2 kB view details)

Uploaded Python 3

File details

Details for the file gitdirector-1.8.5.tar.gz.

File metadata

  • Download URL: gitdirector-1.8.5.tar.gz
  • Upload date:
  • Size: 143.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gitdirector-1.8.5.tar.gz
Algorithm Hash digest
SHA256 3a73343206bfef1be45921215da057b7b1dc27b6affb8a62187b0c104ca41406
MD5 447378ffe07283f18aea8d82140861ca
BLAKE2b-256 31644b7dde8132906284ffa41c51a9b2a9904a2a645e09bba2752d0a3159cfe2

See more details on using hashes here.

Provenance

The following attestation bundles were made for gitdirector-1.8.5.tar.gz:

Publisher: main.yml on anitoanto/gitdirector

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gitdirector-1.8.5-py3-none-any.whl.

File metadata

  • Download URL: gitdirector-1.8.5-py3-none-any.whl
  • Upload date:
  • Size: 172.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gitdirector-1.8.5-py3-none-any.whl
Algorithm Hash digest
SHA256 0236a5bbf91f3ad5948fb1c031c8753540a2641cab7b72d46a83a3194f4cbad0
MD5 176a99bdca68fa8cd507dc0c49d61ca4
BLAKE2b-256 203b6de6866decaea683eb83339f3dda12442795f0f854efb4927138ffcc0103

See more details on using hashes here.

Provenance

The following attestation bundles were made for gitdirector-1.8.5-py3-none-any.whl:

Publisher: main.yml on anitoanto/gitdirector

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page