Monorepos e workspaces com vários pacotes exigem cuidado extra em blueprints, porque diferentes subdiretórios podem usar linguagens, gerenciadores de pacotes ou conjuntos de dependências distintos. Devin oferece suporte a duas abordagens:Documentation Index
Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
Use this file to discover all available pages before exploring further.
Workspaces nativos (recomendado)
Crie um blueprint separado para cada subdiretório. Cada workspace recebe suas próprias seções initialize, maintenance e knowledge, com o diretório de trabalho definido automaticamente para o subdiretório.
Subshells
Execute comandos em subdiretórios dentro de um único blueprint usando
(cd dir && command). Mais simples para monorepos pequenos com apenas alguns pacotes.Workspaces nativos
Recomendado para a maioria dos monorepos. Workspaces nativos dão a cada subdiretório seu próprio blueprint, com configuração, Knowledge e diretório de trabalho isolados. Isso é mais organizado e mais fácil de manter do que usar subshells à medida que o número de pacotes cresce.
cd nem subshells.
O blueprint raiz
Como criar um workspace
- Vá para Configurações > Ambiente > Blueprints
- Clique no repositório
- Clique em Add workspace
- Insira o caminho do subdiretório (por exemplo,
packages/frontend) - Defina o blueprint para esse workspace
Exemplo
- Raiz
- packages/frontend
- packages/backend
knowledge de cada workspace são limitadas a esse subdiretório. Quando Devin trabalha em packages/frontend, ele vê os comandos de lint/test/dev do frontend — não os do backend.
Quando usar workspaces nativos
- Os subdiretórios têm linguagens ou gerenciadores de pacotes diferentes
- Cada pacote precisa de suas próprias entradas do Knowledge (comandos de lint, teste e build)
- Você quer uma configuração isolada — um blueprint com problema em um workspace não bloqueia os demais
- O número de pacotes está crescendo, e um único blueprint está ficando difícil de manter
Subshells
(cd ... && ...) criam uma subshell. Quando a subshell é encerrada, o diretório de trabalho volta para a raiz do repositório na próxima etapa.
Por que os subshells são importantes
- Correto (subshells)
- Incorreto (sem subshells)
packages/ correto.Quando usar subshells
- O monorepo tem alguns pacotes com configuração simples
- Todos os pacotes usam a mesma linguagem e o mesmo gerenciador de pacotes
- Você não precisa de entradas de Knowledge para cada pacote
Entradas de Knowledge para monorepos
Exemplos
Turborepo / Nx workspace
Múltiplas versões do JDK
Boas práticas
Prefira workspaces nativos para monorepos complexos
Prefira workspaces nativos para monorepos complexos
Quando cada subdiretório tem sua própria linguagem, gerenciador de pacotes ou processo de build, workspaces nativos mantêm cada blueprint focado e independente. Reserve subshells para casos simples com poucos pacotes.
Sempre use subshells para trocar de diretório
Sempre use subshells para trocar de diretório
Ao usar a abordagem com subshell, coloque os comandos
cd entre parênteses: (cd dir && command). Isso evita que a troca de diretório de uma etapa afete a próxima.Coloque as ferramentas compartilhadas no blueprint da organização
Coloque as ferramentas compartilhadas no blueprint da organização
Runtimes de linguagem e gerenciadores de pacotes usados em vários repositórios devem ficar no blueprint de nível da organização. Isso evita duplicação e mantém os blueprints do repositório focados na configuração específica do projeto.
Ordene as etapas de maintenance por dependência
Ordene as etapas de maintenance por dependência
Se o pacote A depende de que o pacote B tenha o build concluído primeiro, liste a etapa de build de B antes da etapa de instalação de A em
maintenance. As etapas do blueprint são executadas sequencialmente na ordem em que aparecem.Adicione uma entrada de Knowledge sobre a estrutura
Adicione uma entrada de Knowledge sobre a estrutura
Uma entrada de Knowledge chamada
structure, que mapeia diretórios para suas linguagens e ferramentas, ajuda Devin a navegar pela base de código. Inclua qual gerenciador de pacotes cada subdiretório usa e quaisquer dependências entre pacotes.Use entradas de Knowledge por pacote
Use entradas de Knowledge por pacote
Em vez de criar uma única entrada de Knowledge grande, crie entradas separadas para cada pacote (por exemplo,
frontend, backend, ml-pipeline). Com workspaces nativos, cada workspace já inclui sua própria seção de conhecimento.Mantenha o maintenance incremental
Mantenha o maintenance incremental
Use
pnpm install (não pnpm install --force) e uv sync (não rm -rf .venv && uv sync). Comandos incrementais são mais rápidos durante rebuilds periódicos.- Configuração declarativa de ambiente
- Referência de blueprints
- Biblioteca de templates — inclui templates de monorepo prontos para usar
