{"id":45729376,"url":"https://github.com/rohansx/workz","last_synced_at":"2026-03-03T08:01:10.664Z","repository":{"id":340500898,"uuid":"1166306594","full_name":"rohansx/workz","owner":"rohansx","description":"zoxide for Git worktrees ✨","archived":false,"fork":false,"pushed_at":"2026-03-02T05:10:23.000Z","size":384,"stargazers_count":23,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-02T09:43:02.874Z","etag":null,"topics":["cli","command-line","developer-tools","devtools","fuzzy-finder","git-worktree","productivity","rust","terminal","worktree","zoxide"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rohansx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-25T04:49:04.000Z","updated_at":"2026-03-02T09:21:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rohansx/workz","commit_stats":null,"previous_names":["rohansx/workz"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/rohansx/workz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rohansx%2Fworkz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rohansx%2Fworkz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rohansx%2Fworkz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rohansx%2Fworkz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rohansx","download_url":"https://codeload.github.com/rohansx/workz/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rohansx%2Fworkz/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30036996,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T06:58:30.252Z","status":"ssl_error","status_checked_at":"2026-03-03T06:58:15.329Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","command-line","developer-tools","devtools","fuzzy-finder","git-worktree","productivity","rust","terminal","worktree","zoxide"],"created_at":"2026-02-25T09:02:14.225Z","updated_at":"2026-03-03T08:01:10.593Z","avatar_url":"https://github.com/rohansx.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# workz\n\n**Zoxide for Git worktrees** — zero-config dependency syncing, fuzzy switching, and AI-agent support.\n\n![workz demo](demo.gif)\n\nGit worktrees let you work on multiple branches simultaneously, but they leave behind your `.env` files and force you to re-install `node_modules` every time. **workz** fixes this automatically.\n\n## The Problem\n\n```bash\ngit worktree add ../my-feature feature/login\ncd ../my-feature\n# Where's my .env? Gone.\n# Where's node_modules? Gone. Time to wait for npm install again.\n# Another 2GB of disk space wasted on duplicate dependencies.\n```\n\n## The Fix\n\n```bash\nworkz start feature/login\n# .env files copied, node_modules symlinked, you're in the worktree. Done.\n```\n\n## Features\n\n- **Auto-symlink heavy directories** — `node_modules`, `target`, `.venv`, `vendor`, and 22+ more are symlinked, not duplicated\n- **Auto-copy env files** — `.env`, `.env.local`, `.envrc`, `.npmrc`, secrets, and more carried over automatically\n- **IDE config sync** — `.vscode`, `.idea`, `.cursor`, `.claude`, `.zed` symlinked automatically\n- **Smart project detection** — auto-detects Node/Rust/Python/Go/Java projects and only syncs relevant dirs\n- **Auto-install dependencies** — detects your package manager from lockfiles and installs if deps are missing\n- **Fuzzy TUI switching** — skim-powered fzf-style fuzzy finder to jump between worktrees\n- **Rich status dashboard** — `workz status` shows branch, dirty state, disk size, last commit age\n- **Docker support** — `--docker` flag to auto-start containers, auto-stop on `done`\n- **AI-agent ready** — launch Claude, Cursor, VS Code, Aider, Codex, Gemini, or Windsurf with `--ai`\n- **Sync existing worktrees** — `workz sync` applies full setup to worktrees not created by workz\n- **Shell integration** — `cd` into worktrees automatically, just like zoxide\n- **Global + project config** — `~/.config/workz/config.toml` for defaults, `.workz.toml` per project\n- **Zero config** — works out of the box for Node, Rust, Python, Go, and Java projects\n- **Safe defaults** — never overwrites existing files, never force-deletes dirty worktrees\n\n## Install\n\n```bash\n# Homebrew (macOS / Linux)\nbrew tap rohansx/tap\nbrew install workz\n\n# Cargo\ncargo install workz\n```\n\nOr build from source:\n\n```bash\ngit clone https://github.com/rohansx/workz.git\ncd workz\ncargo install --path .\n```\n\n## Shell Setup\n\nAdd to your `~/.zshrc` (or `~/.bashrc`):\n\n```bash\neval \"$(workz init zsh)\"\n```\n\nFor fish, add to `~/.config/fish/config.fish`:\n\n```fish\nworkz init fish | source\n```\n\nThis gives you a `workz` shell function that auto-`cd`s into worktrees.\n\n## Usage\n\n### Create a worktree\n\n```bash\nworkz start feature/login          # creates ../myrepo--feature-login\nworkz start bugfix/crash -b main   # branch from main instead of HEAD\nworkz start feature/auth --ai      # create + launch Claude Code\nworkz start feature/api --docker   # create + docker compose up\n```\n\nWhat happens:\n1. Creates `../myrepo--feature-login` as a git worktree\n2. Symlinks `node_modules`, `target`, `.venv` (if they exist in the main repo)\n3. Copies `.env*` files into the new worktree\n4. `cd`s you into the worktree (with shell integration)\n\n### List worktrees\n\n```bash\nworkz list\n```\n\n```\n  main            /home/you/myrepo (bare)\n  feature-login   /home/you/myrepo--feature-login  [modified] (142.3M)\n  bugfix-crash    /home/you/myrepo--bugfix-crash (89.1M)\n```\n\n### Switch between worktrees\n\n```bash\nworkz switch           # opens fzf-style fuzzy finder\nworkz switch login     # pre-fills query — fuzzy match to feature-login\n```\n\n### Remove a worktree\n\n```bash\nworkz done                       # remove current worktree\nworkz done feature/login         # remove by branch name\nworkz done feature/login --force # force-remove even with uncommitted changes\nworkz done feature/login -d      # also delete the branch\n```\n\n### Sync an existing worktree\n\nAlready have worktrees created with `git worktree add`? No problem:\n\n```bash\ncd ../my-existing-worktree\nworkz sync                  # applies symlinks, copies .env files, installs deps\n```\n\n### Rich status dashboard\n\n```bash\nworkz status\n```\n\n```\n  main           /home/you/myrepo [modified]  342K  2 hours ago\n  feature-login  /home/you/myrepo--feature-login  1.2M  5 minutes ago  [docker]\n  bugfix-crash   /home/you/myrepo--bugfix-crash  890K  3 days ago\n```\n\n### Clean up stale entries\n\n```bash\nworkz clean                        # prune stale worktree refs\nworkz clean --merged               # also remove worktrees with merged branches\nworkz clean --merged --base main   # specify base branch explicitly\n```\n\n## Configuration\n\nworkz supports two layers of configuration:\n\n1. **Global** — `~/.config/workz/config.toml` (shared defaults across all repos)\n2. **Project** — `.workz.toml` in your repo root (project-specific overrides)\n\nProject config takes priority over global config.\n\n```toml\n[sync]\n# Directories to symlink (shared, saves disk space)\nsymlink = [\"node_modules\", \"target\", \".venv\", \"vendor\", \"my-large-cache\"]\n\n# File patterns to copy into new worktrees\ncopy = [\".env*\", \".envrc\", \".tool-versions\", \"secrets.json\"]\n\n# Patterns to never sync\nignore = [\"logs\", \"tmp\"]\n\n[hooks]\n# Run after creating a worktree\npost_start = \"pnpm install --frozen-lockfile\"\n\n# Run before removing a worktree\npre_done = \"docker compose down\"\n```\n\nWithout a config file, workz uses sensible defaults that work for most projects.\n\n### Default sync rules\n\n**Symlinked directories** (27 dirs, project-type aware):\n- **Node**: `node_modules`, `.next`, `.nuxt`, `.svelte-kit`, `.turbo`, `.parcel-cache`, `.angular`\n- **Rust**: `target`\n- **Python**: `.venv`, `venv`, `__pycache__`, `.mypy_cache`, `.pytest_cache`, `.ruff_cache`\n- **Go**: `vendor`\n- **Java/Kotlin**: `.gradle`, `build`\n- **General**: `.direnv`, `.cache`\n- **IDE configs**: `.vscode`, `.idea`, `.cursor`, `.claude`, `.zed`\n\n**Copied files** (17 patterns):\n- `.env`, `.env.*`, `.envrc`, `.tool-versions`, `.node-version`, `.python-version`, `.ruby-version`, `.nvmrc`, `.npmrc`, `.yarnrc.yml`, `docker-compose.override.yml`, `.secrets`, `.secrets.*`\n\n### Auto-install\n\nworkz detects your package manager from lockfiles and installs dependencies if the deps directory is missing:\n\n| Lockfile | Command |\n|---|---|\n| `bun.lockb` / `bun.lock` | `bun install --frozen-lockfile` |\n| `pnpm-lock.yaml` | `pnpm install --frozen-lockfile` |\n| `yarn.lock` | `yarn install --frozen-lockfile` |\n| `package-lock.json` | `npm ci` |\n| `uv.lock` | `uv sync` |\n| `Pipfile.lock` | `pipenv install` |\n| `poetry.lock` | `poetry install` |\n| `requirements.txt` | `pip install -r requirements.txt` |\n\n## Docker Support\n\nIf your project has a `docker-compose.yml` (or `compose.yml`), workz can manage containers automatically:\n\n```bash\nworkz start feature/api --docker   # creates worktree + runs docker compose up -d\nworkz done feature/api             # stops containers + removes worktree\n```\n\nSupports both `docker compose` and `podman-compose` (prefers podman if available).\n\n## AI Agent Workflow\n\nRunning multiple AI agents in parallel? Each one needs its own worktree:\n\n```bash\nworkz start feature/auth --ai                       # launches Claude Code (default)\nworkz start feature/ui --ai --ai-tool cursor         # launches Cursor\nworkz start feature/api --ai --ai-tool aider         # launches Aider\nworkz start feature/test --ai --ai-tool codex        # launches OpenAI Codex CLI\nworkz start feature/x --ai --ai-tool gemini          # launches Gemini CLI\nworkz start feature/y --ai --ai-tool windsurf        # launches Windsurf\n```\n\n## MCP Server\n\nworkz ships a built-in MCP server so AI agents can manage worktrees themselves — no human needed.\n\n### Setup\n\n```bash\nclaude mcp add workz -- workz mcp\n```\n\nOr add to `~/.claude/settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"workz\": {\n      \"command\": \"workz\",\n      \"args\": [\"mcp\"]\n    }\n  }\n}\n```\n\n### Tools exposed to agents\n\n| Tool | Description |\n|------|-------------|\n| `workz_start` | Create a worktree with auto-synced deps and env |\n| `workz_list` | List all worktrees as structured JSON |\n| `workz_status` | Rich status: branch, dirty state, last commit |\n| `workz_sync` | Sync symlinks/env into an existing worktree |\n| `workz_done` | Remove a worktree (with optional force) |\n| `workz_conflicts` | Detect files modified in multiple worktrees |\n\nOnce configured, Claude Code and other MCP-compatible agents can create and manage worktrees autonomously without any manual setup.\n\n## How It Compares\n\n| Feature | workz | worktrunk | gwq | fracture | branchlet |\n|---|---|---|---|---|---|\n| Auto-symlink deps | yes | config required | no | no | no |\n| Auto-copy .env | yes | config required | config required | yes | no |\n| Smart project detection | yes | no | no | no | no |\n| Auto-install deps | yes | no | no | no | no |\n| Fuzzy TUI (skim/fzf) | yes | no | yes | no | no |\n| Docker integration | yes | no | no | no | no |\n| Shell cd integration | yes | no | no | no | no |\n| AI agent launch | yes | yes | no | no | no |\n| Global + project config | yes | no | no | no | no |\n| Zero config | yes | no | no | yes | no |\n| Single binary | yes | yes | yes | ? | no (npm) |\n\n## Requirements\n\n- Git 2.15+ (for worktree support)\n- A Unix-like system (Linux, macOS)\n\n## License\n\nMIT OR Apache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frohansx%2Fworkz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frohansx%2Fworkz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frohansx%2Fworkz/lists"}