OpenCode como Ferramenta de Desenvolvimento
Avançado⏱60 min📖3 min de leituraLição 6 de 10

OpenCode como Ferramenta de Desenvolvimento

Aprenda a configurar, instalar e usar OpenCode para desenvolvimento de software assistido por IA com agentes, habilidades e pipelines.

O que e OpenCode?

OpenCode e um framework CLI de codigo aberto para engenharia de software assistida por IA. Ele fornece um ambiente estruturado onde agentes de IA interagem com seu codigo atraves de um sistema de ferramentas controlado por permissoes, habilidades reutilizaveis e o Model Context Protocol (MCP).

100%
ℹ️Nota

OpenCode pode ser instalado globalmente via npm ou pip e configurado por projeto usando opencode.json na raiz ou .opencode/config.json.


Instalacao e Configuracao

bash
npm install -g opencode-cli pip install opencode-cli opencode --version opencode init opencode
json
{ "opencode": "1.0", "agents": { "default": { "model": "gpt-4o", "description": "Assistente de codificacao geral", "prompt": "Voce e um engenheiro de software especialista." }, "revisor": { "model": "claude-sonnet-4-20250514", "description": "Especialista em revisao de codigo", "constraints": { "allowedTools": ["read", "grep", "glob"], "deniedTools": ["write", "edit", "bash"] } } }, "permissions": [ { "tool": "bash", "allow": ["npm *", "git *", "pip *", "python *", "pytest *"], "deny": ["rm -rf /", "sudo *", "chmod *"] }, { "tool": "write", "allow": ["src/**", "tests/**", "docs/**"], "deny": [".env", "secrets/**"] } ], "skills": { "revisor-codigo": { "manifest": "skills/revisor-codigo/skill.yaml", "autoLoad": true, "matchPattern": "revisar|auditar|inspecionar" } }, "mcpServers": { "github": { "command": "node", "args": ["mcp-github-server.js"], "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } } }, "agentRouting": { "mode": "auto", "defaultAgent": "default", "rules": [ { "pattern": "seguranca|vulnerabilidade|CVE", "agent": "revisor" } ] } }

Roteamento de Agentes

100%
💡Dica

Use --agent <nome> para forçar um agente especifico ou --skill <nome> para carregar uma habilidade especifica.


Padroes de Uso do CLI

bash
# Modo interativo opencode # Comando unico opencode "Refatorar modulo de pagamento para usar async/await" # Entrada por pipe cat requirements.txt | opencode "Gerar setup.py a partir disto" # Arquivo como contexto opencode --file src/main.py "Revisar este arquivo" # Multiplos arquivos opencode --files src/*.py "Encontrar imports nao utilizados" # Selecao de agente opencode --agent arquiteto "Projetar schema de banco" # Execucao de habilidade opencode --skill revisor-codigo "Revisar ultimo git diff" # Modo debug opencode --debug "Por que o build esta falhando?" # Formatos de saida opencode --format json "Listar todos os TODOs" > todos.json opencode --format markdown "Gerar documentacao API" > api-docs.md
💡Dica

Use --format json para saida estruturada que pode ser processada por outras ferramentas. Use --format markdown para documentacao legivel.


Integracao com Servidores MCP

Servidores MCP estendem as capacidades do OpenCode conectando-se a sistemas externos.

javascript
// mcp-github-server.js import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; const server = new Server({ name: "github-mcp-server", version: "1.0.0", }, { capabilities: { tools: {} } }); server.setRequestHandler("tools/list", async () => ({ tools: [ { name: "create_issue", description: "Criar uma issue no GitHub", inputSchema: { type: "object", properties: { title: { type: "string", description: "Titulo da issue" }, body: { type: "string", description: "Corpo da issue" } }, required: ["title"] } } ] })); const transport = new StdioServerTransport(); await server.connect(transport);
json
{ "mcpServers": { "github": { "command": "node", "args": ["mcp-github-server.js"], "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } }, "postgres": { "command": "python", "args": ["mcp-postgres-server.py"], "env": { "DATABASE_URL": "${DATABASE_URL}" } } } }

Melhores Praticas

yaml
melhores_praticas: configuracao: - Use diretorio .opencode/ para raiz do projeto mais limpa - Versionamento de config com variaveis de ambiente para secrets - Defina agentes especificos para tarefas especificas - Use matchPattern em habilidades para ativacao automatica - Comece com permissoes restritivas e expanda gradualmente design_agentes: - De descricoes claras e especificas para roteamento preciso - Use temperatura 0.2-0.4 para tarefas deterministicas - Use temperatura 0.7-0.9 para tarefas criativas - Defina restricoes adequadamente - Use subagentes para subtarefas especializadas seguranca: - Nunca armazene secrets no opencode.json - Use portoes de aprovacao para operacoes destrutivas - Negue acesso de escrita a arquivos de configuracao - Audite regras de permissao regularmente

Pratica

Questão de Prática
Como responder

Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.

Quais sao os dois locais equivalentes para configuracao do OpenCode?

Questão de Prática
Como responder

Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.

Qual flag CLI forca um agente especifico a lidar com uma requisicao?


✅Principais Conclusoes
  • OpenCode e configurado via opencode.json ou .opencode/config.json
  • Roteamento de agentes usa correspondencia de descricao e padroes
  • Habilidades carregam automaticamente quando requisicoes correspondem ao matchPattern
  • Permissoes permitem/negam operacoes especificas com padroes de caminho
  • Portoes de aprovacao adicionam humano-no-loop para operacoes de risco
  • Servidores MCP estendem capacidades via protocolo JSON-RPC

Fluxo de Trabalho Detalhado

100%
💡Dica

Este diagrama ilustra o fluxo de trabalho basico do agente. Adapte-o ao seu caso de uso especifico.

Exemplos Adicionais de Codigo

python
# Exemplo adicional de implementacao class ExemploAdicional: """Classe de exemplo para ilustrar conceitos adicionais.""" def __init__(self, nome): self.nome = nome self.dados = {} def processar(self, entrada): """Processa a entrada e armazena o resultado.""" resultado = self._transformar(entrada) self.dados[entrada] = resultado return resultado def _transformar(self, valor): return valor * 2 if isinstance(valor, (int, float)) else valor.upper() def obter_estatisticas(self): """Retorna estatisticas sobre os dados processados.""" if not self.dados: return {"status": "vazio", "total": 0} return { "status": "processado", "total": len(self.dados), "ultimo": list(self.dados.keys())[-1] } exemplo = ExemploAdicional('teste') print(exemplo.processar(21)) # 42 print(exemplo.obter_estatisticas())
json
{ "configuracao_exemplo": { "versao": "1.0", "parametros": { "timeout": 30, "max_tentativas": 3, "modo": "automatico" }, "seguranca": { "requer_aprovacao": true, "nivel_autonomia": 2 } } }
yaml
# configuracao-adicional.yaml ambiente: nome: producao variaveis: LOG_LEVEL: "debug" MAX_TOKENS: 128000 agentes: - nome: agente-principal modelo: gpt-4o temperatura: 0.3 - nome: agente-revisor modelo: claude-sonnet-4-20250514 ferramentas_permitidas: - read - grep - glob ferramentas_negadas: - write - edit - bash monitoramento: metrics: true tracing: true alertas: - tipo: erro_critico canal: slack - tipo: timeout canal: email

Notas Importantes

ℹ️Nota

Este conceito e fundamental para o entendimento do modulo. Certifique-se de compreende-lo antes de prosseguir.

⚠️Aviso

Preste atencao a este detalhe: configuracoes incorretas podem levar a comportamentos inesperados do agente.

💡Dica

Uma dica pratica: sempre valide suas configuracoes em ambiente de staging antes de promover para producao.

✅Sucesso

Ao dominar este conceito, voce estara apto a construir agentes mais robustos e confiaveis.

Tabela Comparativa

Caracteristica
Abordagem A
Abordagem B
Abordagem C
Complexidade
Baixa
Media
Alta
Flexibilidade
Limitada
Moderada
Total
Manutencao
Facil
Media
Dificil
Performance
Otima
Boa
Variavel
Seguranca
Basica
Avancada
Maxima
Caso de uso
Prototipos
Producao
Sistemas criticos
ℹ️Nota

Escolha a abordagem com base nos requisitos especificos do seu projeto. Nao existe solucao unica para todos os casos.

Questão de Prática
Como responder

Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.

Pergunta adicional 1 sobre o conteudo desta aula?

Questão de Prática
Como responder

Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.

Pergunta adicional 2 sobre o conteudo desta aula?

Questão de Prática
Como responder

Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.

Pergunta adicional 3 sobre o conteudo desta aula?


✅Principais Conclusoes Adicionais
  • Reforce seu entendimento praticando com exemplos reais
  • Consulte a documentacao oficial para casos avancados
  • Compartilhe seu conhecimento com a comunidade
  • Sempre teste suas implementacoes em ambientes controlados
  • Mantenha-se atualizado com as melhores praticas da industria
  • A pratica consistente e a chave para a maestria
  • Agentes de IA bem projetados combinam tecnologia com boas praticas de engenharia
Progresso60%