Skip to main content
Glama

worktree-manager

CLI para gerenciar git worktrees por produto: várias tasks em paralelo, com config YAML reutilizável, cópia de arquivos/dependências e workspace Cursor/VS Code gerado automaticamente.

Binário: wt · MCP: wt-mcp · Python 3.11+


Índice


Related MCP server: batuta-mcp

Para quem é

Útil quando você:

  • Mantém mais de um repositório por produto (ex.: API + web, backend + mobile)

  • Cria uma pasta por task/ticket com worktrees git isoladas

  • Quer reaproveitar arquivos locais (.env, launch.json, node_modules, etc.)

  • Abre tudo num .code-workspace com pastas extras (docs, utilitários, specs)

Não é um wrapper genérico de git worktree para um único repo solto — o foco é o workspace de produto com N projetos.


Como funciona

Pasta do produto/
├── api/                           ← repositório git
├── web/                           ← repositório git
├── docs/                          ← pasta extra no workspace
└── .worktree-manager/              ← pasta do manager
    ├── config.yml                 ← config (versionável)
    ├── state.yml                  ← estado local (não versionar)
    └── worktrees/
        └── TASK-123/
            ├── api/               ← worktree
            ├── web/               ← worktree
            └── TASK-123.code-workspace

Dois caminhos para criar tasks:

  1. Em etapascreate (pasta + workspace + estado) e depois add projeto a projeto

  2. Presetcreate --preset … encadeia create + vários adds

A branch de trabalho default é o nome da task (--branch sobrescreve; no preset, --branch proj=b por projeto).
A base de origem é por projeto (default_base no YAML, com override via --base).

Execute os comandos na pasta base do produto (pai de .worktree-manager/) ou dentro de .worktree-manager/.
Outro produto = outra pasta = outro init.


Instalação

Desenvolvimento (recomendado hoje)

git clone <url-deste-repo> worktree-manager
cd worktree-manager

uv venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
uv pip install -e ".[dev]"

wt --version

Alternativa com pip:

python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

Deixe o venv ativo (ou exponha wt no PATH) para usar em qualquer pasta de produto.


Início rápido

1. Entre na pasta do produto

cd ~/projetos/meu-produto

Estrutura mínima esperada: repositórios git lado a lado (ex.: api/, web/).

2. Inicialize a config

wt init

O assistente pergunta:

  1. Nome do produto

  2. Loop de projetos: path → nome (default: basename) → default base

Cria .worktree-manager/config.yml (worktrees em .worktree-manager/worktrees/).
Depois edite copy, workspace_folders e presets, ou use wt projects add.

3. Complete o YAML (exemplo)

name: meu-produto
root: .
worktrees_dir: worktrees
workspace_file: "{task}.code-workspace"

workspace_folders:
  - path: docs

projects:
  api:
    path: api
    default_base: main
    copy:
      - from: .env.local
        to: .env.local
  web:
    path: web
    default_base: main
    copy:
      - from: node_modules
        to: node_modules
        strategy: rsync

presets:
  backend: [api]
  frontend: [web]
  fullstack: [api, web]

Veja o schema completo em docs/configuracao.md e exemplos em docs/exemplos/.

4. Crie uma task

Rápido (preset):

wt create TASK-123 --preset fullstack --open
# ou com branches explícitas:
wt create TASK-123 --preset fullstack --branch feature/TASK-123 --open

Em etapas:

wt create TASK-123
wt add TASK-123 api
wt add TASK-123 web --base develop
wt open TASK-123

5. Gerencie

wt list
wt status TASK-123
wt sync TASK-123
wt doctor
wt doctor --fix
wt prune
wt remove TASK-123 --force

Fluxos de trabalho

Só um projeto da stack

wt create TASK-10 --preset backend

Começar parcial e evoluir

wt create TASK-11
wt add TASK-11 api --branch feature/TASK-11
# ... trabalhar só na API ...
wt add TASK-11 web --branch feature/TASK-11

Branches e bases diferentes por projeto no mesmo preset

wt create TASK-12 \
  --preset fullstack \
  --branch api=feature/TASK-12-api \
  --branch web=feature/TASK-12-ui \
  --base api=main \
  --base web=develop

Simular antes de executar

wt create TASK-13 --preset fullstack --dry-run
wt add TASK-13 api --dry-run
wt remove TASK-13 --force --dry-run
wt sync TASK-13 --dry-run

Remover um projeto sem apagar a task

wt remove TASK-12 web --force

Remover tudo (e opcionalmente a branch local)

wt remove TASK-12 --force --delete-branch

Comandos

Comando

Descrição

wt init

Cria .worktree-manager/config.yml

wt create <task>

Cria task vazia (pasta + workspace + estado)

wt create <task> --preset <nome>

Create + adds do preset

wt add <task> <project> [--branch <b>] [--base <b>]

Adiciona projeto à task (branch default = task)

wt remove <task> [project] --force

Remove projeto da task ou a task inteira

wt list

Lista tasks do estado

wt projects list

Lista projetos do config.yml

wt projects add <path> [--name] [--base]

Adiciona projeto à config (nome default = basename)

wt projects remove <nome> --force

Remove projeto da config

wt status <task>

git status dos projetos da task

wt sync <task> [project]

Fetch + rebase/merge na base registrada

wt open <task>

Abre o .code-workspace (Cursor/VS Code)

wt doctor [--fix]

Diagnóstico; --fix tenta corrigir

wt prune

Limpa órfãos e ghosts

wt help [comando]

Ajuda detalhada

wt --help / wt --version

Ajuda curta e versão

Opções úteis:

Opção

Onde

Efeito

--branch

add, create --preset

Branch de trabalho (default: nome da task)

--branch proj=b

create --preset

Branch por projeto (repetível)

--base

add

Base de origem (senão usa default_base)

--base proj=branch

create --preset

Override de base por projeto

--strategy

sync

rebase (default) ou merge

--open

create

Abre o workspace ao terminar

--delete-branch

remove

Apaga a branch local criada

--dry-run

create, add, remove, sync, doctor --fix, prune

Mostra o plano sem alterar nada

--force

remove, sync

Confirma remoção / permite dirty no sync

Referência detalhada: docs/comandos.md.


Configuração

Arquivo: .worktree-manager/config.yml.

Campo

Obrigatório

Default

Descrição

name

sim

Nome do produto

root

não

.

Raiz relativa ao produto (pai de .worktree-manager/)

worktrees_dir

não

worktrees

Pasta das tasks (relativa a .worktree-manager/)

workspace_file

não

{task}.code-workspace

Nome do workspace gerado

workspace_folders

não

[]

Pastas extras no workspace

projects.<id>.path

sim

Path do repositório (relativo à raiz do produto)

projects.<id>.default_base

sim

Branch de origem padrão

projects.<id>.copy

não

[]

Arquivos/pastas a copiar no add

projects.<id>.copy[].strategy

não

rsync

rsync | copy | skip

presets

não

{}

Nome → lista de ids de projeto

Não existem allowed_bases nem pattern automático de branch.

Guia completo do schema, init e estado: docs/configuracao.md.


Estado

Arquivo local: .worktree-manager/state.yml.

Config

Estado

Responde

O que pode ser feito

O que já existe

Versionar?

Sim (config.yml é útil no time)

Não

Quem escreve

init + edição humana

Só o CLI

Sugestão de .gitignore no produto:

.worktree-manager/state.yml

O wt doctor compara estado, pastas em disco e git worktree list (órfãos, drift de branch, worktrees fantasma, etc.).
wt doctor --fix e wt prune corrigem o que for seguro; wt sync atualiza as branches da task com a base.


MCP para agentes

O servidor wt-mcp expõe as mesmas operações da CLI via Model Context Protocol (stdio), para agentes Cursor (e outros clientes MCP) criarem/listarem/sincronizarem tasks sem parsear stdout.

Pré-requisito: pacote instalado (uv tool install --editable . ou uv pip install -e .) e wt-mcp no PATH (which wt-mcp).

Adicionar no Cursor

  1. Abra Cursor Settings → MCP (ou edite o JSON de MCP).

  2. Inclua o servidor abaixo.

  3. Salve e confirme que worktree-manager aparece como conectado (tools disponíveis no chat/agente).

Global (~/.cursor/mcp.json):

{
  "mcpServers": {
    "worktree-manager": {
      "command": "wt-mcp",
      "args": []
    }
  }
}

Só neste repo (.cursor/mcp.json na raiz do projeto):

{
  "mcpServers": {
    "worktree-manager": {
      "command": "wt-mcp",
      "args": []
    }
  }
}

Se wt-mcp não estiver no PATH, use o caminho absoluto do venv:

{
  "mcpServers": {
    "worktree-manager": {
      "command": "/caminho/para/worktree-manager/.venv/bin/wt-mcp",
      "args": []
    }
  }
}

Uso pelo agente

  • Passe product_root (path absoluto da pasta do produto) quando o cwd do agente não for o produto.

  • Respostas: { "ok": true, "data": … } ou { "ok": false, "error": { "kind", "message" } }.

  • Ações destrutivas (remove, prune, doctor com fix) exigem confirm=true (ou dry_run=true para simular).

Tool

Equivale a

resolve_product / list_tasks / list_projects

inventário

create_task / create_with_preset / add_project

wt create / --preset / wt add

remove

wt remove … --force

status / sync

wt status / wt sync

doctor / prune

wt doctor [--fix] / wt prune

workspace_path / open_workspace

path do workspace / wt open

Skill opcional (orquestra MCP ou CLI): .cursor/skills/worktree-manager/.
Detalhes e contrato de erro: docs/mcp.md.


Vários produtos

Cada produto tem sua própria pasta .worktree-manager/:

ProdutoA/
├── api/
└── .worktree-manager/
    ├── config.yml
    └── worktrees/

ProdutoB/
├── backend/
├── mobile/
└── .worktree-manager/
    ├── config.yml
    └── worktrees/
cd ~/projetos/ProdutoA && wt init
cd ~/projetos/ProdutoB && wt init

Documentação

Documento

Conteúdo

README.md

Porta de entrada (este arquivo)

docs/configuracao.md

Schema YAML, init, estado

docs/comandos.md

Referência detalhada dos comandos

docs/mcp.md

Servidor MCP (wt-mcp) para agentes

docs/exemplos/

YAMLs de exemplo (genérico + casos)

docs/migracao-clinic.md

Caso: migrar script legado Clinic → wt

docs/plano-desenvolvimento.md

Histórico de fases / backlog interno

Exemplos prontos para copiar:

# stack API + web (genérico)
mkdir -p /caminho/do/produto/worktree-manager
cp docs/exemplos/api-web.yml /caminho/do/produto/.worktree-manager/config.yml

# caso Clinic (referência)
mkdir -p /caminho/do/Clinic/worktree-manager
cp docs/exemplos/clinic.yml /caminho/do/Clinic/.worktree-manager/config.yml

Skill opcional do Cursor (orquestra MCP/wt, sem reimplementar lógica):
.cursor/skills/worktree-manager/


Desenvolvimento

source .venv/bin/activate
uv pip install -e ".[dev]"
pytest
wt --help
wt-mcp   # sobe o servidor MCP em stdio (usado pelo Cursor)

Layout do pacote:

src/worktree_manager/
├── cli/           # comandos Typer
├── config/        # load/validate/write YAML
├── state/         # estado local
├── git/           # operações git
├── workspace/     # geração .code-workspace
├── mcp/           # servidor MCP (wt-mcp)
├── copyops.py     # cópias declarativas
└── services.py    # create/add/remove/sync/doctor/prune

Plano e backlog: docs/plano-desenvolvimento.md.


Licença

MIT (ver pyproject.toml).

Install Server
A
license - permissive license
B
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    -
    quality
    B
    maintenance
    MCP server that decomposes tasks into plans with disjoint file boundaries, validates overlaps, and creates git worktrees with a ready prompt per plan.
    3
    32
    MIT
  • A
    license
    -
    quality
    D
    maintenance
    A filesystem-based MCP server for AI coding agents to coordinate work across git worktrees by claiming files, checking for conflicts, and logging progress without affecting the repository's git history.
    MIT

View all related MCP servers

Related MCP Connectors

  • A MCP server built for developers enabling Git based project management with project and personal…

  • User-owned memory for AI agents, Copilot, Claude, IDEs, CLIs, and chat apps over remote MCP.

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/felipemdf/wt-manager'

If you have feedback or need assistance with the MCP directory API, please join our Discord server