7 KiB
Worktree go abre o opencode com pré-seleções (DeepSeek V4 Flash, auto-approve, skill inicial)
Status: rascunho Atualizado em: 2026-08-10 Issue: #571 Priority: P2 Model: composer-2.5 model-local: deepseek-v4-flash-high Impeccable: A — N/A (CLI de dev; sem UI de produto) Canvas UI: N/A — sem UI Appetite: ~0,5–1 dia eng; um outcome verificável (do terminal ao TUI do opencode sem tocar em nada)
Intenção
Depois de criar um worktree, o fluxo natural é trabalhar nele com o opencode — e hoje isso são três gestos manuais: cd (com --go), opencode no diretório e /skills → buscar work-issue → enviar. O opencode já oferece as pré-seleções via CLI: opencode <dir> --model <provider/model> --auto --prompt "<msg>" abre o TUI no diretório com modelo escolhido, permissões em auto-approve e a mensagem já enviada — e verificamos na fonte que uma mensagem inicial que começa com / expande para o comando (submit() → session.command). Então opencode <worktree> --model deepseek/deepseek-v4-flash --auto --prompt "/work-issue" abre exatamente a sessão desejada. Queremos que worktree next (go, default desde OPS24) termine nessa sessão.
Persona e fluxo
- Persona / contexto: Francisco no terminal (função
worktree()do.agents/shell/worktree.sh), fluxo diário de abrir worktree para executar ou planejar. - Job principal: ir da linha de comando para uma sessão de opencode pronta (modelo certo + permissões + skill certa) com um único comando.
- Fluxo desejado:
worktree next→ cria/provisiona →cd→ abre o TUI do opencode no worktree comdeepseek/deepseek-v4-flash, auto-approve ativo e primeira mensagem/work-issueenviada (que expande o comando da OPS25).worktree plan→ mesma abertura, com/plan-issuepré-preenchido no input, sem enviar (hoje: sem prompt, autocomplete completa — ver aceite).--stay(OPS24) suprime o launch. - Anti-goals de produto: não abrir TUI aninhado quando o comando roda de dentro do opencode (
/worktree); não alterar o provisionamento; não hardcodar presets por worktree (arquivos de config commitados).
Objetivo e aceite
- No terminal,
worktree nexttermina com o TUI do opencode aberto no worktree: modelodeepseek/deepseek-v4-flashselecionado, permissões em auto-approve (--auto) e a mensagem/work-issuejá enviada — não apenas pré-preenchida (o comando da OPS25 executa o ciclo). worktree planabre o opencode com os mesmos presets e o input pré-preenchido com/plan-issuemas sem enviar — o humano decide quando disparar. Restrição descoberta na verificação: a CLI atual do opencode só sabe preencher o input com--prompt, e esse caminho sempre auto-envia (o TUI chamasubmit(); não há flag de pre-fill sem submit —route.promptexiste no tipo da rota mas não é populável via CLI). Fallback acordado:planabre sem prompt — o usuário digita/plan-e o autocomplete do TUI completa. Se a CLI ganhar pre-fill sem submit,planpassa a usá-lo.- Quando o script roda sem o marcador de terminal (comando
/worktreedo opencode, automação), o launch não acontece — só ocd(comportamento atual preservado; sem TUI dentro de TUI). --stay(OPS24) suprime cd e launch.- Ao sair do opencode, o shell retorna ao terminal no worktree (launch sem
exec) — e não há execução automática deworktree killao sair (o worktree continua vivo para a próxima sessão). - Presets (modelo/auto) são constantes declaradas no script — trocar de modelo é editar uma constante, não caçar flags espalhadas.
Dados (intenção)
- Vou apresentar dados? Não.
Direção no codebase (hipótese)
- Áreas prováveis:
scripts/worktree.mjs(novo bloco de "launch directive": quando chamado com env/flag que só a função shell passa — ex.WORKTREE_TERMINAL=1— imprime a linhaopencode <dir> --model deepseek/deepseek-v4-flash --auto --prompt /work-issueapós ocd);.agents/shell/worktree.sh(chama o script com o marcador e executa as duas linhas);.opencode/commands/worktree.md(roda sem marcador — nada muda além do texto). - Precedente a olhar: o contrato
cd <dir>na última linha já existe; o opencode command não precisa saber do launch. - Risco de acoplamento: o marcador de terminal é o que separa o comportamento em duas superfícies — sem ele, o
/worktreedo opencode abriria um TUI aninhado. A skill/AGENTS.md devem documentar quenext/planno terminal abrem o opencode.
Dependências
- OPS24 (semântica
--godefault /--stay— o launch vive no mesmo caminho de "go"). - OPS25 (comandos
/work-issuee/plan-issue— a primeira mensagem do launch os invoca).
Fora de escopo
- O subcomando
worktree new— item próprio (OPS27; herda o launch sem skill inicial). - Config global de opencode (
~/.config/opencode/opencode.json) — presets são por-invocação via flags, não config persistente. - Escolher o modelo de forma dinâmica (ex.: perguntar ao usuário) — constante fixa no script, configurável por edição.
Rabbit holes de produto
- "Configurar o worktree com um
opencode.jsonpróprio": arquivos commitados no repo virariam config de todo mundo. Corte: flags na linha de comando, efêmeras. - "
--autoé perigoso": sim — é exatamente o que o usuário pediu ("Enable auto-approve permissions"); o--autosó vale para a sessão lançada, não muda a config global. Deixar a escolha documentada no plano de implementação.
Questões em aberto (produto)
plansem pre-fill (fallback) é aceitável? Opções: A) sim —planabre sem prompt;/plan-+ autocomplete completa (recomendado; única forma hoje) | B)planenvia/plan-issueigual aonext(contradiz a preferência de não enviar) | C)plannão abre opencode (só cd). Recomendação: A — o autocomplete do TUI completa/plan-issuecom pouquíssimos toques, e não dispara nada sem o Enter do humano. (confirmado no gate — restrição de plataforma descoberta na verificação; registro do gap para o repo do opencode:~/Code/propositions/opencode/prefill-prompt-sem-submit.md— se o repo ganhar a flag,planpassa a usar pre-fill)- Ao sair do opencode, o terminal volta ou morre? Opções: A) retorna ao shell no worktree (sem
exec) | B)exec opencode(substitui o shell). Recomendação: A — volta para um terminal utilizável no worktree;execé o escape para quem quiser. (confirmado no gate — e sem auto-kill ao sair)
Referências
- GitHub Issue #571
scripts/worktree.mjs:329/400—if (go) console.log(\cd ${dir}`)`.agents/shell/worktree.sh:42-53— aplicação do cd pelo shell.opencode/commands/worktree.md— superfície que NÃO deve lançar o TUI- Verificação:
opencode --help(flags--model/--auto/--prompt); fonte do TUI (packages/tui/src/home.tsxauto-submete--prompt;packages/tui/src/component/prompt/index.tsxexpande mensagem com/viasession.command)