OpenCode Docker-Sandbox

OpenCode aus einer Dagu Docker-Sandbox ausfuehren.

Der non-interactive OpenCode-Befehl ist opencode run. Lege opencode-Binary und Provider-Credentials in einen Runner Container und rufe provider: opencode aus Dagu harness.run auf.

OpenCode Schritt in 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.

Installiert OpenCode mit dem npm-Package opencode-ai.

Prueft opencode --version ueber Dagu vor Modellaufrufen.

Kann ~/.local/share/opencode/auth.json fuer konfigurierte Provider mounten.

Kann auch provider-spezifische Environment Variables in container.env nutzen.

01

Runner Image

Installiere OpenCode im Runner Image und pruefe das Binary im Build. Der leere Entrypoint laesst Dagu den Befehl steuern.

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

Vor dem Mounten von Credentials fuehre einen shell provider aus, der OpenCode-Version und Binary-Pfad im Container ausgibt.

Version Check DAG
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

Credentials

OpenCode speichert Provider-Logins in ~/.local/share/opencode/auth.json und liest Provider-Keys auch aus Environment oder Projekt-.env. Mounte oder uebergib nur, was der gewaehlte Provider braucht.

04

Model Name

OpenCode Model Names nutzen provider/model. Das Beispiel nutzt anthropic/claude-sonnet-4-5; aendere es auf ein Modell, das in deiner OpenCode Provider-Konfiguration verfuegbar ist.