Sandbox Docker do OpenCode

Execute OpenCode a partir de um sandbox Docker do Dagu.

O comando nao interativo do OpenCode e opencode run. Coloque o binario opencode e as credenciais do provider em um container runner e chame provider: opencode a partir de harness.run.

Passo OpenCode no Docker
steps:
  - id: opencode_review
    action: harness.run
    container:
      image: dagu-opencode-runner:local
      pull_policy: never
      working_dir: /workspace
      volumes:
        - .:/workspace:ro
        - ${HOME}/.local/share/opencode:/root/.local/share/opencode:ro
    with:
      provider: opencode
      model: anthropic/claude-sonnet-4-5
      prompt: |
        Review this repository and summarize the highest-risk issues.

Instala OpenCode com o pacote npm opencode-ai.

Verifica opencode --version via Dagu antes de chamadas ao modelo.

Pode montar ~/.local/share/opencode/auth.json para providers configurados.

Tambem pode usar variaveis de ambiente especificas do provider em container.env.

01

Imagem runner

Instale OpenCode na imagem runner e verifique o binario no build. O entrypoint vazio deixa o Dagu controlar o comando.

Dockerfile
FROM node:22-bookworm-slim

RUN apt-get update \
  && apt-get install -y --no-install-recommends ca-certificates git bash \
  && rm -rf /var/lib/apt/lists/*

RUN npm install -g opencode-ai
RUN opencode --version

WORKDIR /workspace
ENTRYPOINT []
CMD ["bash"]
02

Smoke test

Antes de montar credenciais, execute um shell provider que imprime a versao do OpenCode e o caminho do binario dentro do container.

DAG de verificacao de versao
type: graph

harnesses:
  shell:
    binary: sh
    prefix_args:
      - -c
    prompt_mode: arg

steps:
  - id: opencode_version
    action: harness.run
    container:
      image: dagu-opencode-runner:local
      pull_policy: never
    with:
      provider: shell
      prompt: |
        set -eu
        opencode --version
        command -v opencode
03

Credenciais

OpenCode guarda login de provider em ~/.local/share/opencode/auth.json e tambem le chaves do provider pelo ambiente ou por .env do projeto. Monte ou passe apenas o que o provider escolhido precisa.

04

Nome do modelo

Nomes de modelo no OpenCode usam provider/model. O exemplo usa anthropic/claude-sonnet-4-5; troque por um modelo disponivel na sua configuracao de provider OpenCode.