Kaique Mitsuo Silva Yamamoto
IaDesenvolvimento com ia

OpenCode: Extraindo 100% — Guia Definitivo para Full Stack Developers

Guia completo do OpenCode: TUI, agents, permissões granulares, MCP, LSP integrado (30+ linguagens), skills, commands customizados, SDK TypeScript, 75+ providers e como integrar no workflow full stack. Open source, gratuito, BYOK.

OpenCode é a alternativa open source (MIT) ao Claude Code. Escrito em Go, suporta 75+ providers de IA, tem 30+ LSP servers integrados, sistema de permissões granulares, SDK TypeScript e custa zero (você traz suas próprias chaves de API). Para um full stack developer que quer flexibilidade total sem travar em um vendor, é a melhor opção.


1. Instalação

# macOS / Linux (recomendado)
curl -fsSL https://opencode.ai/install | bash

# npm
npm install -g opencode-ai

# Homebrew
brew install anomalyco/tap/opencode

# Arch
sudo pacman -S opencode

# Windows (Chocolatey)
choco install opencode

# Windows (Scoop)
scoop install opencode

# Docker
docker run -it --rm ghcr.io/anomalyco/opencode

# mise
mise use -g github:anomalyco/opencode

# Verificar
opencode --version

2. Comandos CLI

Principais

# TUI interativo
opencode

# Non-interactive (print mode)
opencode run "corrija os erros de lint"
opencode run "implemente POST /api/users" --output-format json

# Servidor headless (API HTTP)
opencode serve --port 8080

# Interface web
opencode web --port 3000

# Anexar a servidor rodando
opencode attach http://localhost:8080

Sessões

opencode session list                    # Listar sessões
opencode session delete <id>             # Deletar sessão
opencode --continue                      # Continuar última sessão
opencode --session <id> "continue"       # Resumir sessão específica
opencode --fork                          # Fork ao continuar

Autenticação

opencode auth login                      # Login interativo
opencode auth logout                     # Logout
opencode auth list                       # Listar credenciais

Agents

opencode agent create                    # Criar agent customizado
opencode agent list                      # Listar agents

MCP

opencode mcp add <name> <command>        # Adicionar MCP server
opencode mcp list                        # Listar MCP servers
opencode mcp auth <name>                 # Autenticar MCP (OAuth)
opencode mcp debug <name>                # Debug MCP connection

Utilitários

opencode models                          # Listar models disponíveis
opencode models anthropic                # Listar models de um provider
opencode stats                           # Estatísticas de uso (tokens, custo)
opencode export                          # Exportar sessões
opencode import <file>                   # Importar sessões
opencode github install                  # Instalar GitHub agent
opencode github run                      # Rodar GitHub agent
opencode pr 123                          # Fetch + checkout PR, depois rodar
opencode acp                             # Iniciar servidor ACP
opencode plugin <module>                 # Instalar plugin
opencode db "SELECT * FROM sessions"     # Query do banco interno
opencode debug                           # Ferramentas de debug
opencode uninstall                       # Remover completamente
opencode upgrade                         # Atualizar

3. Flags que importam

# Modo e modelo
opencode --model anthropic/claude-sonnet-4-20250514 "tarefa"
opencode --agent build "tarefa"             # Usar agent específico
opencode --variant high "tarefa"            # Reasoning effort
opencode --thinking                         # Mostrar thinking blocks

# Permissões
opencode --dangerously-skip-permissions     # Auto-aprovar tudo

# Output
opencode run "liste endpoints" --output-format json
opencode run "gere docs" --format json      # Raw JSON events

# Configuração
opencode --cwd /path/to/project             # Diretório de trabalho
opencode --pure                             # Sem plugins externos
opencode --session <id> --fork              # Fork sessão

# Servidor
opencode serve --port 8080 --hostname 0.0.0.0
opencode web --port 3000 --mdns             # Descoberta na rede local

# Debug
opencode --debug                            # Modo debug
opencode --print-logs                        # Logs no stderr
opencode --log-level DEBUG                   # Nível de log

4. Configuração (opencode.json)

Localização (precedência)

1. Remote config     → .well-known/opencode (org defaults)
2. Managed           → /Library/Application Support/opencode/ (MDM)
3. macOS prefs       → .mobileconfig (highest for enterprise)
4. Global            → ~/.config/opencode/opencode.json
5. Custom env        → OPENCODE_CONFIG=/path/to/config.json
6. Project           → ./opencode.json (project root)
7. .opencode/        → agents, commands, plugins
8. Inline env        → OPENCODE_CONFIG_CONTENT='{"model":"..."}'

Config completo

{
  "model": "anthropic/claude-sonnet-4-20250514",
  "small_model": "anthropic/claude-haiku-3-5",
  "default_agent": "build",

  "provider": {
    "anthropic": {
      "timeout": 120000,
      "chunkTimeout": 30000
    }
  },

  "permission": {
    "read": "allow",
    "edit": "allow",
    "bash": {
      "*": "ask",
      "pnpm *": "allow",
      "git *": "allow",
      "rm *": "deny"
    },
    "glob": "allow",
    "grep": "allow",
    "webfetch": "allow",
    "todowrite": "allow",
    "doom_loop": "ask",
    "external_directory": "ask"
  },

  "tools": {
    "bash": true,
    "edit": true,
    "read": true,
    "write": true,
    "glob": true,
    "grep": true,
    "webfetch": true,
    "websearch": true,
    "todowrite": true,
    "question": true
  },

  "mcp": {
    "filesystem": {
      "type": "local",
      "command": ["npx", "@modelcontextprotocol/server-filesystem", "."]
    },
    "github": {
      "type": "remote",
      "url": "https://mcp.github.com",
      "headers": { "Authorization": "Bearer ghp_..." }
    }
  },

  "lsp": true,

  "instructions": [
    "CLAUDE.md",
    ".opencode/instructions/*.md",
    "https://raw.githubusercontent.com/org/repo/main/AGENTS.md"
  ],

  "share": "manual",
  "snapshot": true,
  "autoupdate": true,
  "compaction": "auto",

  "watcher": {
    "ignore": ["node_modules/**", ".next/**", "dist/**"]
  },

  "plugin": ["@opencode/plugin-prettier"],

  "shell": {
    "path": "/bin/zsh",
    "args": ["-l"]
  },

  "formatter": {
    "command": "prettier",
    "args": ["--write", "$FILE"]
  },

  "experimental": {
    "lsp_tool": true,
    "plan_mode": true
  }
}

Substituição de variáveis

{
  "provider": {
    "anthropic": {
      "apiKey": "{env:ANTHROPIC_API_KEY}"
    }
  },
  "instructions": [
    "{file:docs/conventions.md}",
    "{file:specs/current-sprint.md}"
  ]
}

5. Agents — sistema completo

Agents built-in

AgentModoDescrição
buildprimaryDefault, todas as tools habilitadas
planprimaryRestrito, edit/bash em "ask"
generalsubagentGeneral-purpose, full access
exploresubagentRead-only, busca rápida
scoutsubagentRead-only, pesquisa externa
compactionhiddenGerencia compactação de contexto
titlehiddenGera títulos de sessão
summaryhiddenGera resumos

Agent customizado

{
  "agent": {
    "reviewer": {
      "description": "Reviews code for security and quality",
      "prompt": "You are a senior code reviewer. Focus on security, performance, and type safety.",
      "model": "anthropic/claude-opus-4-7-20250514",
      "temperature": 0.1,
      "mode": "subagent",
      "permission": {
        "read": "allow",
        "edit": "deny",
        "bash": {
          "*": "deny",
          "pnpm lint *": "allow",
          "pnpm vitest *": "allow"
        },
        "glob": "allow",
        "grep": "allow"
      },
      "hidden": false,
      "color": "red"
    }
  }
}

6. Permissões granulares

3 ações

AçãoEfeito
allowExecuta sem perguntar
askPergunta ao usuário
denyBloqueia completamente

Sintaxe granular

{
  "permission": {
    "bash": {
      "*": "ask",           // default: perguntar
      "pnpm *": "allow",    // pnpm: auto
      "git *": "allow",     // git: auto
      "npm install *": "ask", // install: perguntar
      "rm *": "deny",       // rm: bloquear
      "curl *": "deny"      // curl: bloquear
    }
  }
}

Defaults de segurança

{
  "permission": {
    "read": "allow",
    "edit": "allow",
    "bash": "allow",
    "doom_loop": "ask",        // prevenção de loop infinito
    "external_directory": "ask" // acesso a diretório externo
  }
}
// .env* files: deny por default

7. LSP integrado — 30+ linguagens

OpenCode tem 30+ LSP servers integrados que rodam automaticamente:

LinguagemLSP Server
Gogopls
TypeScripttypescript-language-server
Pythonpyright
Rustrust-analyzer
C/C++clangd
Javajdtls
Rubysolargraph
PHPintelephense
Zigzls
Lualua-language-server
Elixirlexical
Haskellhaskell-language-server
OCamlocamllsp
Kotlinkotlin-language-server
Swiftsourcekit-lsp
Dartdart-language-server
Rr-languageserver
SQLsql-language-server
HTML/CSSvscode-html-language-server
JSONvscode-json-language-server
YAMLyaml-language-server
Dockerfiledockerfile-language-server
Terraformterraform-ls
Nixnil
TOMLtaplo
Markdownmarksman
Protobufbufls
Gleamgleam

Ativar LSP tool (experimental)

OPENCODE_EXPERIMENTAL_LSP_TOOL=1 opencode
{
  "experimental": {
    "lsp_tool": true
  }
}

8. Skills

Localização

.opencode/skills/<name>/SKILL.md
~/.config/opencode/skills/<name>/SKILL.md
.claude/skills/<name>/SKILL.md        # Compatível
.agents/skills/<name>/SKILL.md        # Compatível

SKILL.md com frontmatter

---
name: commit
description: "Conventional commit with pre-checks"
license: MIT
metadata:
  author: "Kaique"
  version: "1.0.0"
---

## Trigger
When the user says "commit", "/commit", or stages changes.

## Steps
1. git status && git diff --cached
2. Analyze changes and draft Conventional Commit message
3. Run: pnpm lint:fix && pnpm vitest run
4. If green, commit. If red, fix and retry.

9. Commands customizados

Localização

.opencode/commands/review.md
~/.config/opencode/commands/deploy.md

Command com argumentos

<!-- .opencode/commands/review.md -->
# Review PR

Review PR #$ARGUMENTS for security, correctness, and code quality.

Steps:
1. opencode pr $ARGUMENTS
2. Read the diff
3. Check against .cursor/rules/global.md
4. Output issues as: FILE:LINE — description — severity

Command com output de shell

<!-- .opencode/commands/status.md -->
# Project Status

Current branch: !`git branch --show-current`
Last commit: !`git log -1 --oneline`
Test status: !`pnpm vitest run --reporter=json 2>/dev/null | jq '.numPassedTests'`

10. SDK TypeScript

Instalação

npm install @opencode-ai/sdk

Uso

import { OpenCode } from '@opencode-ai/sdk';

const client = new OpenCode({
  baseUrl: 'http://localhost:8080'
});

// Criar sessão
const session = await client.sessions.create({
  model: 'anthropic/claude-sonnet-4-20250514'
});

// Enviar mensagem e receber resposta em streaming
const stream = client.sessions.prompt(session.id, {
  message: 'Read src/api/users.ts and generate tests'
});

for await (const event of stream) {
  if (event.type === 'content') {
    process.stdout.write(event.text);
  }
}

11. Variáveis de ambiente

# Configuração
OPENCODE_CONFIG=/path/to/config.json
OPENCODE_CONFIG_DIR=/path/to/config/dir
OPENCODE_CONFIG_CONTENT='{"model":"anthropic/claude-sonnet-4"}'

# Auto-update
OPENCODE_DISABLE_AUTOUPDATE=1

# Claude Code compat
OPENCODE_DISABLE_CLAUDE_CODE=1

# Web search (Exa AI)
OPENCODE_ENABLE_EXA=1

# Servidor
OPENCODE_SERVER_PASSWORD=minha-senha

# Experimental
OPENCODE_EXPERIMENTAL=1
OPENCODE_EXPERIMENTAL_LSP_TOOL=1
OPENCODE_EXPERIMENTAL_PLAN_MODE=1

# Debug
OPENCODE_DEBUG=1

12. Comparação final

FeatureOpenCodeClaude CodeCursor
Open SourceMIT ✅
PreçoGrátis (BYOK)Subscription/APIFree/Pro/Business
Providers75+Claude onlyMúltiplos
LSP integrado30+ ✅Via VS Code
PermissõesGranular (allow/ask/deny)GranularTrust-based
SDKTypeScript ✅Python + TS
SharingBuilt-in links
Remote ControlWeb + TUIPhone/browser
Agents5 built-in + customCustomBackground
HooksVia plugins29+ eventsLimitado
SkillsSKILL.md ✅SKILL.md ✅

13. Checklist: setup completo

# 1. Instalar
curl -fsSL https://opencode.ai/install | bash

# 2. Login
opencode auth login

# 3. Criar config
cat > opencode.json << 'EOF'
{
  "model": "anthropic/claude-sonnet-4-20250514",
  "permission": {
    "bash": { "*": "ask", "pnpm *": "allow", "git *": "allow" }
  },
  "lsp": true,
  "instructions": ["CLAUDE.md"]
}
EOF

# 4. Criar AGENTS.md (equivalente ao CLAUDE.md)
opencode  # e digite /init

# 5. Criar rules
mkdir -p .opencode/skills/commit
cat > .opencode/skills/commit/SKILL.md << 'EOF'
---
name: commit
description: "Conventional commit"
---
## Steps: git status → draft → lint+test → commit
EOF

# 6. MCP (opcional)
opencode mcp add filesystem npx @modelcontextprotocol/server-filesystem .

# 7. Testar
opencode run "Read AGENTS.md and summarize the project"

On this page