A collection of lightweight CLI tools to enhance your development workflow. DevEx Manager includes git wt for managing Git worktrees, dx nb for Jupyter Notebook utilities, dx ctx for branch-specific developer scratchpads, and Python auto-venv tools for seamless virtual environment management.
git wt(Worktree Manager): Simplify working with bare repositories and multiple worktrees.dx nb(Notebook Utilities): Essential tools for AI/ML developers to manage Jupyter Notebooks and kernels.dx ctx(Context Manager): Local, untracked todo checklists and scratchpad notes per branch.dx skills(Prompt Skill Sync Manager): Bidirectionally synchronize prompt skill folders across multiple AI tools (Claude Code, Kiro, Antigravity, etc.) using a central Master folder.- Python Auto-Venv: Transparent activation/deactivation of
.venv, proactive initialization usinguv, and stale worktree detection. - Git Aliases: High-productivity shortcuts for common Git operations.
The quickest way to install DevEx Manager is via the remote installer. This will download the necessary scripts and configure your shell automatically.
bash -c "$(curl -fsSL https://raw.githubusercontent.com/mukeshmk/devex-manager/main/install.sh)"If you prefer to audit the code first or have already cloned the repository:
git clone https://github.com/mukeshmk/devex-manager.git
cd devex-manager
bash install.sh- Downloads/Copies
git-wt,dxand their subcommand scripts to~/.local/bin/and target tool folders. - Makes all scripts executable
- Optional: Prompts to install a set of handy Git aliases
- Optional: Prompts to install Python auto-venv tools
- Sets up shell auto-completion for
git wtanddxcommands - Adds
~/.local/binto yourPATHand configures completions in a managed# >>> DevEx Manager >>>block in your~/.zshrcor~/.bashrc
After installing, open a new terminal or run source ~/.zshrc (or your respective shell config).
A lightweight CLI tool that wraps git worktree to simplify working with bare repositories and multiple worktrees. Instead of juggling branches in a single checkout, git wt lets you clone repos as bare, spin up worktrees as folders, and tear them down cleanly.
git wt clone <url>: Clones a repository as a bare repo and sets up an initialmainworktree.git wt add <branch-name> [custom-folder-name]: Creates a new worktree (or checks out an existing branch) using a short folder name derived from the branch.git wt clean: Interactively find and remove stale worktrees that have already been merged. Note: This command checks if configuration copies are synchronized across all worktrees before allowing any deletions, and aborts if they are out of sync.git wt status: Show a rich status overview of all active worktrees, including sync status and uncommitted changes.git wt rm <folder-name-or-branch-name>: Safely removes a worktree folder and deletes its associated local branch. Note: This command checks if configuration copies are synchronized across all worktrees before allowing deletion, and aborts if they are out of sync.git wt sync: Synchronizes configuredcopies.pathsacross all active worktrees using the main worktree as the central hub. Uses file-level modification times to automatically propagate additions, deletions, and modifications. Prompts for conflict resolution in interactive mode or creates conflict marker files when updates are incompatible. Supports checking sync status without applying changes via the--check(or-c) flag.
You can customize git wt behavior by placing a .devex.conf file at the root of your repository:
[repo]
base_branch = main
main_worktree_name = main
[symlinks]
# Files or folders to symlink into every new worktree
paths =
[copies]
# Files or folders to copy into every new worktree (synchronized via git wt sync)
paths = .claude,.kiro,.vscode,.env
[worktree]
# Strategies: ticket-prefix (default), full-branch, or custom
naming_strategy = ticket-prefixUnlike symlinks, which share the exact same underlying file, configuration copies are independent files copied into each worktree (e.g. separate .vscode/settings.json or .env files). Over time, these copies can drift.
Running git wt sync aligns these files across all active worktrees using a file-level bidirectional synchronization system.
- Manifest-Based Tracking: The tool maintains a state manifest at
$(git rev-parse --git-common-dir)/info/devex/sync-manifest. Each entry tracks the file path, modification time (mtime), and size at the time of the last sync. - Lock Detection: To prevent synchronization loops and preserve un-merged changes,
git wt syncautomatically blocks execution if any unresolved conflict files (*.devex-conflict-*) are present in the main worktree. - Change Detection: It scans all active worktrees and compares current states against the manifest to group files into additions, modifications, or deletions since the last sync.
- Bidirectional Propagation:
- Silently propagated: Modifications/additions in the main worktree are sent to feature worktrees. Modifications/additions in a single feature worktree are pulled into the main worktree and fanned out.
- Interactive Conflict Resolution: If a file is modified in both the main worktree and a feature worktree (or modified differently in multiple feature worktrees), the tool prompts the user:
- Keep Main version: Overwrites the feature worktree's version with the main version.
- Keep Feature version: Overwrites the main version and fans it out to all other worktrees.
- Resolve Later (Default): Leaves the main file untouched and creates a named conflict marker file (e.g.,
[filename].devex-conflict-[worktree]) in the main worktree.
- Sync Checking (Dry-Run): Running
git wt sync --check(or-c) performs a check of all configuration files against the manifest and other worktrees. It identifies and lists any out-of-sync files, exiting with status1(or0if all files are in sync) without performing any writes.
To prevent accidental loss of configuration modifications made inside worktrees, all commands that delete or clean worktrees (git wt clean and git wt rm) automatically check if configuration copies are synchronized across all worktrees. If they are not in sync, the command will print details about the out-of-sync files, suggest running git wt sync, and abort the deletion.
dx nb provides a set of tools specifically designed for AI/ML developers to make working with Jupyter Notebooks in Git repositories less painful.
dx nb strip [notebooks...]: Clears cell outputs and metadata from.ipynbfiles. This is essential for keeping Git history clean and avoiding massive diffs caused by binary data or volatile metadata.- Requires:
nbstripoutornbconvert
- Requires:
dx nb kernel: Automatically registers the current.venvas a Jupyter kernel. It intelligently names the kernel after the current worktree or directory name, making it easy to identify the correct environment in JupyterLab/Notebook.- Requires:
ipykernel
- Requires:
dx nb list: Recursively discovers all notebooks in the project and reports their file sizes, cell counts, and "stripped" status (whether they contain output data).- Recommended:
jqfor full metadata reporting
- Recommended:
dx nb diff <notebook> [git-diff-args]: Provides a human-readable diff of notebook cells. Ifnbdimeis installed, it usesnbdifffor a rich experience; otherwise, it falls back to a standard JSON diff with a helpful warning.- Recommended:
nbdime
- Recommended:
dx ctx provides local, untracked todo checklists and scratchpad notes specific to your active branch. This data is stored in the repository's .git/info/devex/contexts/ directory so it stays private to your computer and never gets committed or pushed.
dx ctx [show]: Display the notes and checklist for the current branch.dx ctx edit: Open the current branch's notes in your default terminal editor ($EDITOR).dx ctx add <task>: Quick shortcut to append a new todo item to the checklist.dx ctx done <index>: Mark a checklist item as completed.dx ctx undo <index>: Mark a completed checklist item as pending.dx ctx rm <index>: Delete a checklist item.dx ctx clean: Interactively detect and remove context files for local branches that have already been deleted.dx ctx todo [list|add|done|undo|rm|clear]: Detailed subcommand interface for managing checklist items.
dx skills bidirectionally synchronizes custom agent skill folders (containing skill.md or SKILL.md prompt files) between different AI tool paths on your local machine, using a central Master directory as the source of truth.
It supports dynamic tool registration, backup files prior to overwrites/deletions, global and tool-specific filters (allowlists and denylists), and interactive confirmations.
You can configure dx skills globally by adding a [skills] section to your global ~/.devex.conf configuration file:
[skills]
# Central directory where all your master skills and backups live
master_dir = <path_to_master_skills_dir>
# Active tools list, comma-separated
tools = <tool_1>, <tool_2>
# Custom skill directories for configured tools (optional, delete or customize)
<tool_1>_dir = ~/<tool_1>/skills
<tool_2>_dir = ~/<tool_2>/skills
# Global Filters (Optional)
# sync_only = scrum-update, code-review # If set, ONLY sync these skills globally
# ignore = experimental-skill # Globally ignore this skill folder
# Tool-specific Filters (Optional)
# <tool_1>_sync_only = scrum-update # Only sync scrum-update to <tool_1>If the file ~/.devex.conf is missing or contains template placeholders (such as <path_to_master_skills_dir> or <tool_1>), dx skills will print a colorized warning message to stderr prompting you to check and customize your paths.
dx skills [list]: Displays a table of all skills, their descriptions (extracted from prompt frontmatter), update states, and last modification times.dx skills sync: Compares skill folders across all registered tools. Displays a preview of pending bidirectional syncs and executes them with automatic safety backups upon confirmation.dx skills diff <skill>: Shows a recursive folder diff between target versions.dx skills edit <skill>: Opens the master version of the skill in your$EDITORand triggers a sync automatically after saving.dx skills rm <skill>: Backs up and removes the skill directory from the master repo and all active tool paths.
Before executing an overwrite (on sync) or delete (on rm), dx skills copies the target folder's current state to a timestamped backup directory in the master directory under .backups/YYYY-MM-DD-HHMMSS/.
The installer optionally includes Python virtual environment automation that:
- Automatically activates
.venvwhen youcdinto a project directory - Automatically deactivates when you leave the project
- Provides a quick
venvcommand to create new virtual environments usinguv - Proactive Initialization: When entering a directory containing
pyproject.tomlorrequirements.txtbut no.venv, the tool will proactively prompt you to initialize one usinguv. - Stale Worktree Warning: Automatically warns you if you are working in a worktree whose branch has already been merged into the base branch, suggesting
git wt rm ..
Handy shortcuts installed via the git-aliases/install-git-aliases.sh module.
| Alias | Expands To | Description |
|---|---|---|
git a |
git add |
Stage files |
git s |
git status |
Show status |
git d |
git diff |
Show diff |
git bn |
git rev-parse --abbrev-ref HEAD |
Current branch name |
git fet |
git fetch origin <branch> |
Fetch current branch |
git pul |
git pull origin <branch> |
Pull current branch |
git pus |
git push origin <branch> |
Push current branch |
git stas |
git stash push -p |
Interactive stash |
- Git 2.15+
- Bash 4+
- macOS or Linux
- (Optional)
uv,jq,nbstripout,nbconvert,ipykernel,nbdime
MIT