OpenClawμ—μ„œ 받은 μ½”λ“œ μš”μ²­μ„ OpenCode둜 λ°”λ‘œ μ‹€ν–‰ν•˜κ³ , κ²°κ³Όλ₯Ό λ‹€μ‹œ OpenClaw λŒ€ν™”μ—μ„œ ν™•μΈν•˜λŠ” ν‘œμ€€ 연동 κ°€μ΄λ“œλ‹€. λ³΅μž‘ν•œ μ„ΈνŒ… λŒ€μ‹ , μ‹€μ œ μš΄μ˜μ—μ„œ λ°”λ‘œ μ“°λŠ” μ΅œμ†Œ λ‹¨κ³„λ‘œ μ •λ¦¬ν–ˆλ‹€.

이 λ¬Έμ„œλ‘œ λ˜λŠ” 것

  • OpenClaw μ±„νŒ…μ—μ„œ μ½”λ“œμ‹€ν–‰, κ²°κ³Όμš”μ•½, λ¬Έμ„œν™”λ‘œ λ™μž‘
  • OpenCode μ‹€ν–‰ κ²°κ³Όλ₯Ό 파일둜 μ €μž₯ν•˜κ³  μž¬μ‚¬μš©
  • νŒ€/개인 λͺ¨λ‘ 같은 λ°©μ‹μœΌλ‘œ μž¬ν˜„ κ°€λŠ₯

λͺ¨λΈ/λŸ°νƒ€μž„ μ „μ œ (μ€‘μš”)

이 κ°€μ΄λ“œλŠ” λͺ¨λΈ 쀑립(model-agnostic) 이닀.
즉, OpenClaw κΈ°λ³Έ λͺ¨λΈμ΄ Ollamaλ“  OpenAIλ“  Anthropic이든 상관없이 λ™μΌν•˜κ²Œ μ μš©λœλ‹€.

  • ν•„μˆ˜: openclaw, opencode μ‹€ν–‰ κ°€λŠ₯
  • 선택: Ollama / OpenAI / Anthropic / 기타 μ—°κ²° λͺ¨λΈ
  • 원칙: OpenCode 연동 λ‘œμ§μ€ λͺ¨λΈ μ’…λ₯˜μ™€ λΆ„λ¦¬ν•΄μ„œ μ΄ν•΄ν•œλ‹€

OllamaλŠ” β€œκ°€λŠ₯ν•œ μ˜ˆμ‹œβ€μΌ 뿐, ν•„μˆ˜ 쑰건이 μ•„λ‹ˆλ‹€.

전체 흐름 (ν‘œμ€€)

flowchart LR
  A[OpenClaw μ±„νŒ…\nμ½”λ“œμ‹€ν–‰] --> B[OpenClawκ°€ OpenCode μ‹€ν–‰\nPTY λͺ¨λ“œ]
  B --> C[κ²°κ³Ό 파일 μ €μž₯\narchive/opencode_result_*.md]
  C --> D[κ²°κ³Όμš”μ•½/λ¬Έμ„œν™”]
  D --> E[OpenClaw μ±„νŒ…μœΌλ‘œ 보고]

1단계) 같은 λ¨Έμ‹ μ—μ„œ μ‹€ν–‰λ˜λŠ”μ§€ 확인

OpenClaw와 OpenCodeλŠ” 같은 둜컬 머신에 μžˆμ–΄μ•Ό κ°€μž₯ μ•ˆμ •μ μ΄λ‹€.

hostname
which openclaw
which opencode
openclaw gateway status
opencode --version

정상 κΈ°μ€€:

  • which openclaw, which opencode λͺ¨λ‘ κ²½λ‘œκ°€ 좜λ ₯됨
  • openclaw gateway statusκ°€ 정상 μƒνƒœ

2단계) ν‘œμ€€ λΈŒλ¦¬μ§€ 슀크립트 μ„€μΉ˜

mkdir -p ~/openclaw-bridge/{archive,bin}
 
cat > ~/openclaw-bridge/bin/trigger.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
 
BASE="$HOME/openclaw-bridge"
ARCHIVE="$BASE/archive"
TASK_FILE="$BASE/task.txt"
 
mkdir -p "$ARCHIVE"
 
latest_file() {
  ls -t "$ARCHIVE"/*.md 2>/dev/null | head -n 1 || true
}
 
run_opencode() {
  local prompt="$1"
  local out="$ARCHIVE/opencode_result_$(date +%y%m%d_%H%M%S).md"
 
  {
    echo "# OpenCode Result"
    echo "- time: $(date '+%F %T')"
    echo
    opencode run "$prompt"
  } > "$out"
 
  echo "saved: $out"
}
 
do_run() {
  local inline="${*:-}"
  local prompt=""
 
  if [ -n "$inline" ]; then
    prompt="$inline"
  elif [ -f "$TASK_FILE" ]; then
    prompt="$(cat "$TASK_FILE")"
  else
    echo "였λ₯˜: ν”„λ‘¬ν”„νŠΈκ°€ μ—†μ–΄μš”."
    echo "- 방법1) μ½”λ“œμ‹€ν–‰ 뒀에 λ°”λ‘œ μš”μ²­ μž…λ ₯"
    echo "- 방법2) $TASK_FILE 파일 생성"
    exit 1
  fi
 
  run_opencode "$prompt"
}
 
do_summary() {
  local latest
  latest="$(latest_file)"
  [ -n "$latest" ] || { echo "μš”μ•½ν•  κ²°κ³Ό 파일 μ—†μŒ"; exit 1; }
 
  local out="$ARCHIVE/summary_$(date +%y%m%d_%H%M%S).md"
  {
    echo "# κ²°κ³Όμš”μ•½"
    echo "- source: $latest"
    echo "- time: $(date '+%F %T')"
    echo
    sed -n '1,160p' "$latest"
  } > "$out"
 
  echo "saved: $out"
}
 
do_docify() {
  local latest
  latest="$(latest_file)"
  [ -n "$latest" ] || { echo "λ¬Έμ„œν™”ν•  κ²°κ³Ό 파일 μ—†μŒ"; exit 1; }
 
  local out="$ARCHIVE/doc_$(date +%y%m%d_%H%M%S).md"
  {
    echo "---"
    echo "title: OpenCode μ‹€ν–‰ κ²°κ³Ό λ¬Έμ„œν™”"
    echo "tags: [domain-ai, topic-opencode, format-note, audience-practitioner, intent-apply, lang-ko]"
    echo "---"
    echo
    echo "## 원본"
    echo "- $latest"
    echo
    echo "## λ‚΄μš©"
    cat "$latest"
  } > "$out"
 
  echo "saved: $out"
}
 
cmd="${1:-}"
shift || true
 
case "$cmd" in
  μ½”λ“œμ‹€ν–‰) do_run "$@" ;;
  κ²°κ³Όμš”μ•½) do_summary ;;
  λ¬Έμ„œν™”) do_docify ;;
  *)
    echo "μ‚¬μš©λ²•: trigger.sh {μ½”λ“œμ‹€ν–‰|κ²°κ³Όμš”μ•½|λ¬Έμ„œν™”} [μš”μ²­λ¬Έ]"
    exit 1
    ;;
esac
EOF
 
chmod +x ~/openclaw-bridge/bin/trigger.sh

3단계) ν„°λ―Έλ„μ—μ„œ 1λΆ„ 슀λͺ¨ν¬ ν…ŒμŠ€νŠΈ

bash ~/openclaw-bridge/bin/trigger.sh μ½”λ“œμ‹€ν–‰ "파이썬 hello.py μž‘μ„±, μ‹€ν–‰ λͺ…λ Ή 1쀄 포함"
bash ~/openclaw-bridge/bin/trigger.sh κ²°κ³Όμš”μ•½
ls -lt ~/openclaw-bridge/archive | head -n 5

정상 κΈ°μ€€:

  • opencode_result_*.md 생성
  • summary_*.md 생성

4단계) OpenClaw용 ν‘œμ€€ κ·œμΉ™(볡뢙)

μ•„λž˜ 블둝을 OpenClaw μ›Œν¬μŠ€νŽ˜μ΄μŠ€μ˜ AGENTS.md에 뢙인닀.

## OpenCode ν‘œμ€€ 트리거 κ·œμΉ™
μ‚¬μš©μž λ©”μ‹œμ§€κ°€ λ‹€μŒ νŒ¨ν„΄μ΄λ©΄ OpenCode둜 μ²˜λ¦¬ν•œλ‹€.
 
- μ½”λ“œμ‹€ν–‰: <μš”μ²­>
  - `bash ~/openclaw-bridge/bin/trigger.sh μ½”λ“œμ‹€ν–‰ "<μš”μ²­>"` μ‹€ν–‰
  - μ‹€ν–‰ μ‹œ PTY λͺ¨λ“œ μ‚¬μš©(μ½”λ”© μ—μ΄μ „νŠΈ ν•„μˆ˜)
- κ²°κ³Όμš”μ•½
  - `bash ~/openclaw-bridge/bin/trigger.sh κ²°κ³Όμš”μ•½` μ‹€ν–‰
- λ¬Έμ„œν™”
  - `bash ~/openclaw-bridge/bin/trigger.sh λ¬Έμ„œν™”` μ‹€ν–‰
 
μžλ™ λΌμš°νŒ…:
- μ‚¬μš©μžκ°€ 트리거λ₯Ό 직접 μ“°μ§€ μ•Šμ•„λ„, μ½”λ”© 싀행이 ν•„μš”ν•˜λ©΄ λ‚΄λΆ€μ μœΌλ‘œ `μ½”λ“œμ‹€ν–‰` 경둜λ₯Ό μ„ νƒν•œλ‹€.
 
프리체크 λͺ¨λ“œ(κΈ°λ³Έ ON):
- μš”μ²­μ΄ μ• λ§€ν•˜λ©΄ μ‹€ν–‰ μ „ 1회 질문: `μ‹€ν–‰ν• κΉŒ, μ„€λͺ…λ§Œ ν• κΉŒ?`
- `μ½”λ“œμ‹€ν–‰` λͺ…μ‹œ μ‹œ μ¦‰μ‹œ μ‹€ν–‰
- `μ„€λͺ…λ§Œ`/`μ‹€ν–‰ν•˜μ§€ 마` λͺ…μ‹œ μ‹œ μ‹€ν–‰ν•˜μ§€ μ•ŠμŒ
 
응닡 ν˜•μ‹:
1) 생성 파일 경둜
2) 성곡/μ‹€νŒ¨
3) λ‹€μŒ μ•‘μ…˜ 1쀄

5단계) OpenClaw μ±„νŒ…μ—μ„œ λ°”λ‘œ μ‚¬μš©

μ½”λ“œμ‹€ν–‰: FastAPI둜 /health μ—”λ“œν¬μΈνŠΈ 1개만 μžˆλŠ” μ΅œμ†Œ μ„œλ²„ μ½”λ“œ μž‘μ„±
κ²°κ³Όμš”μ•½
λ¬Έμ„œν™”

5-1단계) 프리체크 λͺ¨λ“œ μ‚¬μš© μ˜ˆμ‹œ

μ• λ§€ν•œ μš”μ²­μ—μ„œλŠ” λ°”λ‘œ μ‹€ν–‰ν•˜μ§€ μ•Šκ³  1회 ν™•μΈν•œλ‹€.

μ˜ˆμ‹œ A: μžλ™ 프리체크

μ‚¬μš©μž: κ°„λ‹¨ν•œ 파이썬 슀크립트 ν•˜λ‚˜ λ§Œλ“€μ–΄λ³ΌκΉŒ?
μ—μ΄μ „νŠΈ: μ‹€ν–‰ν• κΉŒ, μ„€λͺ…λ§Œ ν• κΉŒ?
μ‚¬μš©μž: μ‹€ν–‰ν•΄μ€˜
β†’ λ‚΄λΆ€μ μœΌλ‘œ μ½”λ“œμ‹€ν–‰ 경둜둜 μ§„ν–‰

μ˜ˆμ‹œ B: μ¦‰μ‹œ μ‹€ν–‰

μ‚¬μš©μž: μ½”λ“œμ‹€ν–‰: CSV 병합 파이썬 슀크립트 μž‘μ„±
β†’ μ¦‰μ‹œ μ‹€ν–‰ (프리체크 μƒλž΅)

μ˜ˆμ‹œ C: μ‹€ν–‰ κΈˆμ§€

μ‚¬μš©μž: μ„€λͺ…λ§Œ ν•΄μ€˜, μ‹€ν–‰ν•˜μ§€ 마
β†’ μ„€λͺ…λ§Œ 제곡 (OpenCode μ‹€ν–‰ μ•ˆ 함)

6단계) 자주 λ§‰νžˆλŠ” 문제

  1. command not found: opencode
  • ν•΄κ²°: OpenCode μ„€μΉ˜ ν›„ μ…Έ μž¬μ‹œμž‘, which opencode μž¬ν™•μΈ
  1. κ²°κ³Ό 파일이 μ•ˆ 생김
  • ν•΄κ²°: ~/openclaw-bridge/archive κΆŒν•œ/경둜 확인
  1. OpenClawκ°€ 싀행은 ν–ˆλŠ”λ° 좜λ ₯이 이상함
  • ν•΄κ²°: μ½”λ”© μ—μ΄μ „νŠΈ 싀행은 PTY λͺ¨λ“œλ‘œ κ°•μ œ
  1. μš”μ²­λ¬Έ 없이 μ½”λ“œμ‹€ν–‰λ§Œ μž…λ ₯
  • ν•΄κ²°: ~/openclaw-bridge/task.txtλ₯Ό λ§Œλ“€μ–΄ κΈ°λ³Έ ν”„λ‘¬ν”„νŠΈ μ €μž₯

7단계) 운영 체크리슀트

  • OpenClaw/OpenCodeκ°€ 같은 λ¨Έμ‹ μ—μ„œ 싀행됨
  • trigger.sh μ‹€ν–‰ κ°€λŠ₯
  • μ½”λ“œμ‹€ν–‰/κ²°κ³Όμš”μ•½/λ¬Έμ„œν™” 3개 λ™μž‘ 확인
  • archive에 κ²°κ³Ό 파일 생성 확인

πŸ“š λ‹€μŒ 읽기

μƒμ„±ν˜• AI ν™œμš© κ³ μ§€

이 λ¬Έμ„œλŠ” μƒμ„±ν˜• AIλ₯Ό ν™œμš©ν•΄ μ΄ˆμ•ˆ μž‘μ„± 및 ꡬ쑰화λ₯Ό μˆ˜ν–‰ν–ˆμœΌλ©°, μ΅œμ’… 곡개 μ „ μ‚¬λžŒμ΄ κ²€ν† Β·λ³΄μ •ν•œλ‹€.