Skip to content

Configuração Personalizada em Profundidade: Gerenciamento de Agentes e Permissões

O Que Você Vai Aprender

  • Personalizar o modelo e parâmetros usados por cada agente
  • Controlar precisamente as permissões dos agentes (edição de arquivos, execução Bash, requisições Web, etc.)
  • Adicionar instruções extras aos agentes via prompt_append
  • Criar Categories personalizadas para composição dinâmica de agentes
  • Ativar/desativar agentes, Skills, Hooks e MCPs específicos

Sua Situação Atual

A configuração padrão funciona bem, mas não se ajusta perfeitamente às suas necessidades:

  • O Oracle usa GPT 5.2, que é caro demais; você quer um modelo mais barato
  • O agente Explore não deveria ter permissão de escrita, apenas pesquisa
  • Você quer que o Librarian pesquise documentação oficial em vez do GitHub
  • Um determinado Hook está gerando falsos positivos e você quer desativá-lo temporariamente

O que você precisa é "customização profunda" — não apenas "funciona", mas "exatamente o que você precisa".


🎒 Antes de Começar

Pré-requisitos

Este tutorial assume que você já concluiu a Instalação e a Configuração do Provider.

Você precisa saber:

  • Localização do arquivo de configuração: ~/.config/opencode/oh-my-opencode.json (nível de usuário) ou .opencode/oh-my-opencode.json (nível de projeto)
  • Configuração de nível de usuário tem prioridade sobre a de nível de projeto

Conceito Principal

Prioridade de Configuração: Configuração de nível de usuário > Configuração de nível de projeto > Configuração padrão

~/.config/opencode/oh-my-opencode.json (maior prioridade)
    ↓ sobrescreve
.opencode/oh-my-opencode.json (nível de projeto)
    ↓ sobrescreve
oh-my-opencode padrões internos (menor prioridade)

Arquivo de configuração suporta JSONC:

  • Pode usar // para adicionar comentários
  • Pode usar /* */ para adicionar comentários em bloco
  • Pode ter vírgulas finais

Siga Comigo

Etapa 1: Encontre o arquivo de configuração e habilite o autocompletar do Schema

Por quê Habilitar o JSON Schema permite que seu editor sugira automaticamente todos os campos e tipos disponíveis, evitando erros de configuração.

Operação:

jsonc
{
  // Adicione esta linha para habilitar o autocompletar
  "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json",
  
  // Sua configuração...
}

Você deve ver:

  • No VS Code / JetBrains, ao digitar {, todos os campos disponíveis serão sugeridos automaticamente
  • Ao passar o mouse sobre um campo, a descrição e o tipo serão exibidos

Etapa 2: Personalize o modelo do agente

Por quê Diferentes tarefas requerem modelos diferentes:

  • Design de arquitetura: Use o modelo mais forte (Claude Opus 4.5)
  • Exploração rápida: Use o modelo mais rápido (Grok Code)
  • Design de UI: Use modelo visual (Gemini 3 Pro)
  • Controle de custo: Use modelos baratos para tarefas simples

Operação:

jsonc
{
  "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json",

  "agents": {
    // Oracle: Consultor estratégico, usa GPT 5.2
    "oracle": {
      "model": "openai/gpt-5.2",
      "temperature": 0.1  // Temperatura baixa, mais determinístico
    },

    // Explore: Exploração rápida, usa modelo gratuito
    "explore": {
      "model": "opencode/gpt-5-nano",  // Gratuito
      "temperature": 0.3
    },

    // Librarian: Pesquisa de documentação, usa modelo com grande contexto
    "librarian": {
      "model": "anthropic/claude-sonnet-4-5"
    },

    // Multimodal Looker: Análise de mídia, usa Gemini
    "multimodal-looker": {
      "model": "google/gemini-3-flash"
    }
  }
}

Você deve ver:

  • Cada agente usando modelos diferentes, otimizados para as características da tarefa
  • Após salvar a configuração, a próxima chamada ao agente correspondente usará o novo modelo

Etapa 3: Configure as permissões do agente

Por quê Certos agentes não deveriam ter todas as permissões:

  • Oracle (Consultor estratégico): Somente leitura, não precisa escrever arquivos
  • Librarian (Especialista em pesquisa): Somente leitura, não precisa executar Bash
  • Explore (Exploração): Somente leitura, não precisa fazer requisições Web

Operação:

jsonc
{
  "agents": {
    "explore": {
      // Proíbe escrita de arquivos e execução Bash, permite apenas pesquisa Web
      "permission": {
        "edit": "deny",
        "bash": "deny",
        "webfetch": "allow"
      }
    },

    "librarian": {
      // Permissão somente leitura
      "permission": {
        "edit": "deny",
        "bash": "deny",
        "webfetch": "allow"  // Precisa pesquisar documentação
      }
    },

    "oracle": {
      // Permissão somente leitura
      "permission": {
        "edit": "deny",
        "bash": "deny",
        "webfetch": "allow"  // Precisa consultar recursos
      }
    },

    // Sisyphus: Orquestrador principal, pode executar todas as operações
    "sisyphus": {
      "permission": {
        "edit": "allow",
        "bash": "allow",
        "webfetch": "allow"
      }
    }
  }
}

Explicação das permissões:

PermissãoValorDescrição
editask/allow/denyPermissão de edição de arquivos
bashask/allow/deny ou objetoPermissão de execução Bash (pode ser refinada para comandos específicos)
webfetchask/allow/denyPermissão de requisição Web
doom_loopask/allow/denyPermitir que o agente substitua a detecção de loop infinito
external_directoryask/allow/denyPermissão de acesso a diretórios fora do projeto

Refinamento de permissão Bash:

jsonc
{
  "agents": {
    "explore": {
      "permission": {
        "bash": {
          "git": "allow",      // Permite executar comandos git
          "grep": "allow",     // Permite executar grep
          "rm": "deny",       // Proíbe deletar arquivos
          "mv": "deny"        // Proíbe mover arquivos
        }
      }
    }
  }
}

Você deve ver:

  • Após configurar as permissões, quando um agente tentar executar uma operação proibida, ela será automaticamente negada
  • No OpenCode, você verá uma notificação de permissão negada

Etapa 4: Use prompt_append para adicionar instruções extras

Por quê O prompt do sistema padrão já é muito bom, mas você pode ter necessidades especiais:

  • Fazer o Librarian pesquisar documentação específica primeiro
  • Fazer o Oracle seguir padrões arquiteturais específicos
  • Fazer o Explore usar palavras-chave de pesquisa específicas

Operação:

jsonc
{
  "agents": {
    "librarian": {
      // Anexado ao final do prompt padrão do sistema, não substitui
      "prompt_append": "Sempre use elisp-dev-mcp para pesquisas de documentação de Emacs Lisp. " +
                      "Ao pesquisar documentação, priorize documentação oficial sobre posts de blog."
    },

    "oracle": {
      "prompt_append": "Siga os princípios SOLID e padrões de Arquitetura Limpa. " +
                    "Sempre sugira tipos TypeScript para todas as assinaturas de função."
    },

    "explore": {
      "prompt_append": "Ao pesquisar código, priorize commits recentes e arquivos ativamente mantidos. " +
                    "Ignore arquivos de teste a menos que explicitamente solicitado."
    }
  }
}

Você deve ver:

  • O comportamento do agente muda, mas mantém suas capacidades originais
  • Por exemplo, pedindo ao Oracle para sempre sugerir tipos TypeScript

Etapa 5: Configuração personalizada de Category

Por quê Category é uma nova funcionalidade da v3.0 que permite composição dinâmica de agentes:

  • Definir modelos e parâmetros para tipos de tarefas específicas
  • Invocação rápida via delegate_task(category="...")
  • Mais eficiente que "manualmente selecionar modelo + escrever prompt"

Operação:

jsonc
{
  "categories": {
    // Personalizado: tarefas de ciência de dados
    "data-science": {
      "model": "anthropic/claude-sonnet-4-5",
      "temperature": 0.2,
      "prompt_append": "Foque em análise de dados, pipelines de ML e métodos estatísticos. " +
                     "Use pandas/numpy para Python e dplyr/tidyr para R."
    },

    // Sobrescreve o padrão: tarefas de UI usando prompt personalizado
    "visual-engineering": {
      "model": "google/gemini-3-pro",
      "prompt_append": "Use componentes shadcn/ui e Tailwind CSS. " +
                     "Garanta design responsivo e acessibilidade."
    },

    // Sobrescreve o padrão: tarefas rápidas
    "quick": {
      "model": "anthropic/claude-haiku-4-5",
      "temperature": 0.1,
      "prompt_append": "Seja conciso. Foque em correções simples e pesquisas rápidas."
    }
  }
}

Campos de configuração de Category:

CampoDescriçãoExemplo
modelModelo usado"anthropic/claude-sonnet-4-5"
temperatureTemperatura (0-2)0.2 (determinístico) / 0.8 (criativo)
top_pNucleus sampling (0-1)0.9
maxTokensNúmero máximo de Tokens4000
thinkingConfiguração de Thinking{"type": "enabled", "budgetTokens": 16000}
prompt_appendPrompt anexado"Use X for Y"
toolsPermissões de ferramentas{"bash": false}
is_unstable_agentMarcar como instável (força modo background)true

Usando Category:

// No OpenCode
delegate_task(category="data-science", prompt="Analise este dataset e gere visualizações")
delegate_task(category="visual-engineering", prompt="Crie componentes de dashboard responsivos")
delegate_task(category="quick", prompt="Procure a definição desta função")

Você deve ver:

  • Diferentes tipos de tarefas automaticamente usando os modelos e configurações mais adequados
  • Não precisa especificar manualmente modelo e parâmetros toda vez

Etapa 6: Desabilite funcionalidades específicas

Por quê Certas funcionalidades podem não ser adequadas para seu fluxo de trabalho:

  • comment-checker: seu projeto permite comentários detalhados
  • agent-usage-reminder: você sabe quando usar qual agente
  • Algum MCP: você não precisa

Operação:

jsonc
{
  // Desabilitar Hooks específicos
  "disabled_hooks": [
    "comment-checker",           // Não verificar comentários
    "agent-usage-reminder",       // Não sugerir uso de agentes
    "startup-toast"               // Não mostrar notificação de inicialização
  ],

  // Desabilitar Skills específicas
  "disabled_skills": [
    "playwright",                // Não usar Playwright
    "frontend-ui-ux"            // Não usar Skill frontend embutida
  ],

  // Desabilitar MCPs específicos
  "disabled_mcps": [
    "websearch",                // Não usar pesquisa Exa
    "context7",                // Não usar Context7
    "grep_app"                 // Não usar grep.app
  ],

  // Desabilitar agentes específicos
  "disabled_agents": [
    "multimodal-looker",        // Não usar Multimodal Looker
    "metis"                   // Não usar Metis para análise prévia
  ]
}

Lista de Hooks disponíveis (parcial):

Nome do HookFunção
todo-continuation-enforcerForçar conclusão da lista de TODO
comment-checkerDetectar comentários redundantes
tool-output-truncatorTruncar saída de ferramentas para economizar contexto
keyword-detectorDetectar palavras-chave como ultrawork
agent-usage-reminderSugerir qual agente usar
session-notificationNotificação de fim de sessão
background-notificationNotificação de tarefa em background concluída

Você deve ver:

  • Funcionalidades desabilitadas não serão mais executadas
  • Ao reativar, a funcionalidade será restaurada

Etapa 7: Configurar controle de concorrência de tarefas em background

Por quê Tarefas em background paralelas precisam de controle de concorrência:

  • Evitar limitação de taxa da API
  • Controlar custos (modelos caros não podem ter muita concorrência)
  • Respeitar cotas do Provider

Operação:

jsonc
{
  "background_task": {
    // Concorrência máxima padrão
    "defaultConcurrency": 5,

    // Limites de concorrência por Provider
    "providerConcurrency": {
      "anthropic": 3,      // API Anthropic máximo 3 concorrentes
      "openai": 5,         // API OpenAI máximo 5 concorrentes
      "google": 10          // API Gemini máximo 10 concorrentes
    },

    // Limites de concorrência por modelo (maior prioridade)
    "modelConcurrency": {
      "anthropic/claude-opus-4-5": 2,     // Opus é caro, limitado a 2 concorrentes
      "google/gemini-3-flash": 10,          // Flash é barato, permite 10 concorrentes
      "anthropic/claude-haiku-4-5": 15      // Haiku é mais barato, permite 15 concorrentes
    }
  }
}

Ordem de prioridade:

modelConcurrency > providerConcurrency > defaultConcurrency

Você deve ver:

  • Tarefas em background que excedem o limite de concorrência serão enfileiradas
  • Concorrência de modelos caros é limitada, economizando custos

Etapa 8: Habilitar funcionalidades experimentais

Por quê Funcionalidades experimentais fornecem capacidades extras, mas podem ser instáveis:

  • aggressive_truncation: Truncagem de contexto mais agressiva
  • auto_resume: Recuperação automática de falhas
  • truncate_all_tool_outputs: Truncar todas as saídas de ferramentas

Aviso

Funcionalidades experimentais podem ser removidas ou ter seu comportamento alterado em versões futuras. Teste bem antes de habilitar.

Operação:

jsonc
{
  "experimental": {
    // Habilitar truncagem agressiva de saídas de ferramentas
    "aggressive_truncation": true,

    // Recuperação automática de erros de thinking block
    "auto_resume": true,

    // Truncar todas as saídas de ferramentas (não apenas Grep/Glob/LSP/AST-Grep)
    "truncate_all_tool_outputs": false
  }
}

Você deve ver:

  • Em modo agressivo, as saídas de ferramentas são truncadas mais estritamente para economizar contexto
  • Com auto_resume habilitado, o agente continuará trabalhando automaticamente após encontrar erros

Ponto de Verificação ✅

Verifique se a configuração está funcionando:

bash
# Execute o comando de diagnóstico
bunx oh-my-opencode doctor --verbose

Você deve ver:

  • Resultado de resolução de modelo para cada agente
  • Suas substituições de configuração estão ativas
  • Funcionalidades desabilitadas estão sendo reconhecidas corretamente

Armadilhas Comuns

1. Erro de formato do arquivo de configuração

Problema:

  • Erro de sintaxe JSON (vírgula faltando, vírgula extra)
  • Nome de campo digitado incorretamente (temperature escrito como temparature)

Solução:

bash
# Verifique o formato JSON
cat ~/.config/opencode/oh-my-opencode.json | jq .

2. Configuração de permissão muito restritiva

Problema:

  • Certos agentes foram completamente desabilitados (edit: "deny", bash: "deny")
  • Isso impede que o agente execute seu trabalho normal

Solução:

  • Agentes somente leitura (Oracle, Librarian) podem desabilitar edit e bash
  • O orquestrador principal (Sisyphus) precisa de permissões completas

3. Configuração de Category não está funcionando

Problema:

  • Nome de Category digitado incorretamente (visual-engineering escrito como visual-engineering)
  • delegate_task não especificou o parâmetro category

Solução:

  • Verifique se o nome em delegate_task(category="...") corresponde à configuração
  • Use doctor --verbose para verificar o resultado de resolução de Category

4. Limite de concorrência muito baixo

Problema:

  • modelConcurrency definido muito baixo (como 1)
  • Tarefas em background executam quase sequencialmente, perdendo a vantagem do paralelismo

Solução:

  • Defina de forma razoável de acordo com orçamento e cota de API
  • Modelos caros (Opus) limite a 2-3, modelos baratos (Haiku) podem ter 10+

Resumo da Lição

Configuração personalizada em profundidade = Controle preciso:

Item de configuraçãoPropósitoCenários comuns
agents.modelSubstituir modelo do agenteOtimização de custo, adaptação de tarefas
agents.permissionControlar permissões do agenteIsolamento de segurança, modo somente leitura
agents.prompt_appendAnexar instruções extrasSeguir especificações de arquitetura, otimizar estratégia de pesquisa
categoriesComposição dinâmica de agentesInvocar rapidamente tipos específicos de tarefas
background_taskControle de concorrênciaControle de custo, cota de API
disabled_*Desabilitar funcionalidades específicasRemover funcionalidades raramente usadas

Lembre-se:

  • Configuração de nível de usuário (~/.config/opencode/oh-my-opencode.json) tem prioridade sobre a de nível de projeto
  • Use JSONC para tornar a configuração mais legível
  • Execute oh-my-opencode doctor --verbose para verificar a configuração

Próxima Lição

Na próxima lição, aprenderemos Diagnóstico e Resolução de Problemas.

Você vai aprender:

  • Usar o comando doctor para verificação de saúde
  • Diagnosticar problemas de versão do OpenCode, registro de plugins, configuração de Provider
  • Entender mecanismo de resolução de modelos e configuração de Categories
  • Usar saída JSON para diagnóstico automatizado

Apêndice: Referência de Código Fonte

Clique para expandir e ver localização do código fonte

Última atualização: 2026-01-26

FuncionalidadeCaminho do arquivoLinhas
Definição do Schema de configuraçãosrc/config/schema.ts1-378
AgentOverrideConfigsrc/config/schema.ts98-119
CategoryConfigsrc/config/schema.ts154-172
AgentPermissionSchemasrc/config/schema.ts11-17
OhMyOpenCodeConfigSchemasrc/config/schema.ts329-350
Documentação de configuraçãodocs/configurations.md1-595

Constantes importantes:

  • PermissionValue = z.enum(["ask", "allow", "deny"]): Enumeração de valores de permissão

Tipos importantes:

  • AgentOverrideConfig: Configuração de substituição de agente (modelo, temperatura, prompt, etc.)
  • CategoryConfig: Configuração de Category (modelo, temperatura, prompt, etc.)
  • AgentPermissionSchema: Configuração de permissão de agente (edit, bash, webfetch, etc.)
  • BackgroundTaskConfig: Configuração de concorrência de tarefas em background

Enumeração de agentes embutidos (BuiltinAgentNameSchema):

  • sisyphus, prometheus, oracle, librarian, explore, multimodal-looker, metis, momus, atlas

Enumeração de Skills embutidas (BuiltinSkillNameSchema):

  • playwright, agent-browser, frontend-ui-ux, git-master

Enumeração de Categories embutidas (BuiltinCategoryNameSchema):

  • visual-engineering, ultrabrain, artistry, quick, unspecified-low, unspecified-high, writing