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.sh3λ¨κ³) ν°λ―Έλμμ 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λ¨κ³) μμ£Ό λ§νλ λ¬Έμ
command not found: opencode
- ν΄κ²°: OpenCode μ€μΉ ν μ
Έ μ¬μμ,
which opencodeμ¬νμΈ
- κ²°κ³Ό νμΌμ΄ μ μκΉ
- ν΄κ²°:
~/openclaw-bridge/archiveκΆν/κ²½λ‘ νμΈ
- OpenClawκ° μ€νμ νλλ° μΆλ ₯μ΄ μ΄μν¨
- ν΄κ²°: μ½λ© μμ΄μ νΈ μ€νμ PTY λͺ¨λλ‘ κ°μ
- μμ²λ¬Έ μμ΄
μ½λμ€νλ§ μ λ ₯
- ν΄κ²°:
~/openclaw-bridge/task.txtλ₯Ό λ§λ€μ΄ κΈ°λ³Έ ν둬ννΈ μ μ₯
7λ¨κ³) μ΄μ 체ν¬λ¦¬μ€νΈ
- OpenClaw/OpenCodeκ° κ°μ λ¨Έμ μμ μ€νλ¨
-
trigger.shμ€ν κ°λ₯ -
μ½λμ€ν/κ²°κ³Όμμ½/λ¬Έμν3κ° λμ νμΈ - archiveμ κ²°κ³Ό νμΌ μμ± νμΈ
π λ€μ μ½κΈ°
- π¦ 13. Subagents μ€κ³μ ν둬ννΈ β μλΈ μμ΄μ νΈλ‘ νμ₯
- π¦ 34. μΈμ ν΄ λΈλ‘κ·Έ κ²μμλν β μΈμ κ΄λ¦¬ μ€μ
- π¦ 14. SkillOps μ΄μμ ν β μ€ν¬ μ΄μμΌλ‘ μ΄μ΄κ°κΈ°
- π· OpenCode μ€λ¦¬μν μ΄μ β OpenCode μ 체 κ°μ
- AI μ½λ© μμ΄μ νΈ 5μ’ λΉκ΅ β λ€λ₯Έ μ½λ© μμ΄μ νΈμ λΉκ΅
μμ±ν AI νμ© κ³ μ§
μ΄ λ¬Έμλ μμ±ν AIλ₯Ό νμ©ν΄ μ΄μ μμ± λ° κ΅¬μ‘°νλ₯Ό μννμΌλ©°, μ΅μ’ κ³΅κ° μ μ¬λμ΄ κ²ν ·보μ νλ€.