Worktrees
Cada tarefa num workspace isolado, para vários agentes trabalharem no mesmo projeto ao mesmo tempo.
No Dusky, cada tarefa vive num workspace. Num projeto git, o workspace é uma worktree: uma pasta própria, com a própria branch, criada a partir do mesmo repositório. Dois agentes no mesmo projeto não disputam arquivos nem branch, e você não precisa de stash para trocar de tarefa.
Projetos
Um projeto é um repositório ou uma pasta adicionada ao Dusky. O botão Add Project da barra lateral oferece:
- Browse folder: um repositório local, uma pasta com vários repositórios ou uma pasta comum;
- Clone from URL: clona um repositório;
- Create new project: começa de uma pasta vazia;
- Project on SSH host: um projeto numa máquina remota (veja SSH).
A pasta original do clone é a worktree principal. Ela não pode ser apagada; para tirá-la do Dusky, remova o projeto com Remove Project from Dusky.
Ao importar uma pasta com vários repositórios, o Dusky pode reuni-los num grupo de projetos.
Pastas sem git
Uma pasta que não é repositório git abre o diálogo Open as Folder: você tem editor, terminal e busca, mas não os recursos que dependem do git. Dentro de um grupo de projetos, Create Folder Workspace cria um workspace de pasta. Ele não faz checkout de branch e, na barra lateral direita, mostra Attached worktrees e PR Checks no lugar de Source Control e Checks.
Criar um workspace
| Ação | macOS | Linux e Windows |
|---|---|---|
| Criar workspace | ⌘N ou ⇧⌘N | Ctrl+N ou Ctrl+Shift+N |
Também dá para usar o botão New workspace da barra lateral ou a ação Create Worktree na paleta de workspaces.
O diálogo Create workspace pede o projeto, o nome do workspace, uma nota opcional, o agente que vai abrir (ou Blank Terminal), onde rodar e a base (Create From). Em Advanced ficam:
- Branch name: o nome da branch nova;
- Reuse branch: faz checkout de uma branch que já existe em vez de criar outra;
- Sparse checkout;
- o workspace pai, para aninhar workspaces;
- Create more, que cria vários workspaces de uma vez (só em projetos git locais).
A criação continua em segundo plano depois que o diálogo fecha.
Branch base
- Settings → Repository → Default Worktree Base define a branch ou ref de onde as worktrees partem. Sem fixar, segue a branch principal.
- Settings → Git → Keep Local Main Up to Date atualiza a base remota e avança a main ou master local, mas pula quando há mudanças não commitadas ou commits só locais.
- Settings → Git → Branch Prefix define um prefixo para as branches novas.
- Auto-rename branch & worktree renomeia um nome gerado pelo Dusky assim que o agente começa a trabalhar. Só nomes gerados pelo Dusky são renomeados, e nunca depois de um push.
Onde as worktrees ficam
Settings → General → Workspace Directory define a pasta das worktrees. Um caminho relativo cria a pasta dentro de cada projeto. Nest Workspaces separa as worktrees numa subpasta com o nome do repositório, e cada repositório pode ter a própria Worktree Location.
Scripts de setup
Um script de setup roda em cada worktree nova, por exemplo para instalar dependências. Ele pode vir de dois lugares:
- local: em Settings → Repository → Worktree Hooks → Setup Script, só na sua máquina;
- compartilhado: num arquivo YAML na raiz do repositório, versionado com o código. Um script compartilhado só roda depois de você aprová-lo no diálogo de confiança (Run hooks, Don't run ou Always trust).
Opções em Worktree Hooks:
| Opção | O que faz |
|---|---|
| When to Run Setup | Ask every time, Run by default (padrão) ou Skip by default. |
| Command Source | Só o arquivo compartilhado, só o local, ou os dois (Run both, o compartilhado primeiro). |
| Wait for setup to complete before starting agent | Espera o setup terminar antes de abrir o agente. Desligado por padrão. |
O setup roda num terminal chamado Setup. No macOS e no Linux ele roda como script bash; no Windows, como arquivo .cmd, a menos que comece com uma linha #! e o Git Bash esteja instalado. Em projetos no WSL, roda dentro do WSL. Settings → Terminal → Setup Script Location escolhe se o terminal abre numa divisão ou numa aba nova. O script recebe em variáveis de ambiente o caminho da raiz do repositório, o caminho da worktree e o nome do workspace.
Há também o Archive Script, que roda antes de uma worktree ser removida. Cada script tem limite de dois minutos.
Arquivos ignorados pelo git, como .env, não vão para a worktree nova sozinhos. Para levá-los, use Worktree Shared Paths nas configurações do repositório (no macOS o arquivo é clonado quando o sistema de arquivos permite; nos outros casos vira um link simbólico) ou liste os arquivos num .worktreeinclude na raiz do repositório.
Barra lateral
| Ação | macOS | Linux e Windows |
|---|---|---|
| Mostrar ou esconder a barra lateral | ⌘B | Ctrl+B |
| Focar a lista de workspaces | ⇧⌘0 | Ctrl+Shift+0 |
| Workspace anterior ou seguinte | ⇧⌘↑ / ⇧⌘↓ | Ctrl+Shift+↑ / Ctrl+Shift+↓ |
| Ir para o workspace 1 a 9 | ⌘1 … ⌘9 | Ctrl+1 … Ctrl+9 |
| Voltar ou avançar no histórico | ⌥⌘← / ⌥⌘→ | Ctrl+Alt+← / Ctrl+Alt+→ |
| Renomear o workspace | ⌥⌘R | sem atalho padrão |
Para renomear, também dá para clicar duas vezes no título.
O menu Workspace options ordena por uso recente, ordem manual, nome ou atividade dos agentes, agrupa por projeto ou status e alterna entre cartões completos e compactos. Os filtros escondem workspaces dormindo, a branch padrão, workspaces criados por automações ou pela CLI e HEAD destacado.
O menu de contexto do workspace tem fixar, marcar como lido, mover de status, copiar o caminho, definir o workspace pai, mover para um grupo e apagar. O Workspace board mostra os workspaces num quadro Kanban.
Worktrees criadas fora do Dusky, com git worktree add, ficam escondidas por padrão. Settings → General → External worktrees controla isso.
Dormir e apagar
Sleep fecha os painéis do workspace para liberar memória e CPU, sem apagar nada.
| Ação | macOS | Linux e Windows |
|---|---|---|
| Apagar o workspace | ⇧⌘⌫ | Ctrl+Shift+Backspace |
Delete Worktree remove a pasta e depois tenta apagar a branch com git branch -d. Uma branch que ainda não foi integrada fica: um aviso Review N Branches permite apagá-la à força depois. Com Reuse branch, a branch nunca é apagada.
O diálogo de confirmação avisa quando há mudanças que serão perdidas. Settings → General → Ask Before Deleting Workspaces liga ou desliga essa confirmação. Para limpar vários workspaces de uma vez, use Clean up workspaces no gerenciador de recursos.