Sandbox Docker de OpenCode

Ejecuta OpenCode desde un sandbox Docker de Dagu.

El comando no interactivo de OpenCode es opencode run. Coloca el binario opencode y credenciales provider dentro de un runner container, y llama provider: opencode desde harness.run.

Paso OpenCode en 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 con el paquete npm opencode-ai.

Verifica opencode --version mediante Dagu antes de llamadas al modelo.

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

Tambien puede usar variables de entorno especificas del provider en container.env.

01

Imagen runner

Instala OpenCode en la imagen runner y verifica el binario en build. El entrypoint vacio deja que Dagu controle el 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

Prueba de humo

Antes de montar credenciales, ejecuta un shell provider que imprima la version de OpenCode y la ruta del binario dentro del contenedor.

DAG de verificacion de version
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

Credenciales

OpenCode guarda datos de login provider en ~/.local/share/opencode/auth.json y tambien lee claves provider desde el entorno o un .env del proyecto. Monta o pasa solo lo que necesita el provider seleccionado.

04

Nombre de modelo

Los nombres de modelo en OpenCode usan formato provider/model. El ejemplo usa anthropic/claude-sonnet-4-5; cambialo por un modelo disponible en tu configuracion de provider OpenCode.