OpenCode Docker sandbox

شغل OpenCode من Docker sandbox في Dagu.

الأمر غير التفاعلي في OpenCode هو opencode run. ضع binary باسم opencode و provider credentials داخل runner container، ثم استدع provider: opencode من خطوة Dagu harness.run.

خطوة OpenCode داخل 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.

يثبت OpenCode باستخدام حزمة npm باسم opencode-ai.

يتحقق من opencode --version عبر Dagu قبل استدعاءات النموذج.

يمكنه ربط ~/.local/share/opencode/auth.json للـ providers المجهزة.

يمكنه أيضا استخدام متغيرات بيئة خاصة بالـ provider داخل container.env.

01

صورة runner

ثبت OpenCode في runner image وتحقق من binary أثناء build. entrypoint الفارغ يترك التحكم في الأمر لـ Dagu.

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

قبل ربط credentials، شغل shell provider يطبع إصدار OpenCode ومسار binary من داخل الحاوية.

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 يخزن بيانات provider login في ~/.local/share/opencode/auth.json ويقرأ أيضا provider keys من البيئة أو ملف .env في المشروع. اربط أو مرر فقط ما يحتاجه provider المختار.

04

اسم النموذج

أسماء النماذج في OpenCode تستخدم صيغة provider/model. المثال يستخدم anthropic/claude-sonnet-4-5؛ غيره إلى نموذج متاح في إعدادات OpenCode provider لديك.