# ๐Ÿฆ™ OpenCode (`anomalyco/opencode`) โ€” Ollama ์—ฐ๋™ ๋ฐ ๊ธฐ๋ณธ ๋ชจ๋ธ ์„ค์ • ๊ฐ€์ด๋“œ ๋ณธ ๋ฌธ์„œ๋Š” **OpenCode** CLI/TUI ํ™˜๊ฒฝ์—์„œ ๋กœ์ปฌ **Ollama** ํ”„๋กœ๋ฐ”์ด๋”์™€ ๋ชจ๋ธ์„ ๊ธฐ๋ณธ๊ฐ’(Default)์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•œ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค. --- ## 1. ์„ค์ • ํŒŒ์ผ ์œ„์น˜ (`opencode.jsonc` vs `opencode.json`) OpenCode๋Š” **JSONC (JSON with Comments)** ํ˜•์‹์„ ๊ณต์‹ ์ง€์›ํ•˜๋ฏ€๋กœ ์ฃผ์„(`//`, `/* */`) ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•œ `opencode.jsonc`๋ฅผ ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (`.json`๊ณผ `.jsonc` ๋‘˜ ๋‹ค ๋™์ผํ•˜๊ฒŒ ์ธ์‹๋ฉ๋‹ˆ๋‹ค.) * **์ „์—ญ ์„ค์ • ๊ฒฝ๋กœ (์ถ”์ฒœ)**: * `~/.config/opencode/opencode.jsonc` (๋˜๋Š” `~/.config/opencode/opencode.json`) * **ํ”„๋กœ์ ํŠธ๋ณ„ ๋กœ์ปฌ ์„ค์ • ๊ฒฝ๋กœ**: * `/opencode.json` (ํŠน์ • ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์œ„์น˜) --- ## 2. ๊ถŒ์žฅ ์„ค์ • ๋‚ด์šฉ (`opencode.jsonc`) `~/.config/opencode/opencode.jsonc` ํŒŒ์ผ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค: ```jsonc { "$schema": "https://opencode.ai/config.json", // 1. ๊ธฐ๋ณธ ์‹คํ–‰ ๋ชจ๋ธ (ํ˜•์‹: "provider_id/model_id") "model": "ollama/qwen2.5-coder:32b", // 2. Ollama ํ”„๋กœ๋ฐ”์ด๋” ์ƒ์„ธ ์—”๋“œํฌ์ธํŠธ ๋ฐ ๋ชจ๋ธ ์ •์˜ "provider": { "ollama": { "npm": "@ai-sdk/openai-compatible", "name": "Ollama", "options": { "baseURL": "http://127.0.0.1:11434/v1" }, "models": { "qwen2.5-coder:32b": { "name": "Qwen 2.5 Coder 32B" }, "glm-5.3:cloud": { "name": "GLM 5.3 Cloud" } } } } } ``` > [!TIP] > `qwen2.5-coder:32b` ๋Œ€์‹  ๋ณธ์ธ์˜ ๋จธ์‹ ์— ์„ค์น˜๋œ Ollama ๋ชจ๋ธ ํƒœ๊ทธ๋ช…(์˜ˆ: `qwen2.5-coder:14b`, `llama3.1:8b`, `deepseek-r1:14b` ๋“ฑ)์„ ๊ธฐ์žฌํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. --- ## 3. Ollama ์‚ฌ์šฉ ์‹œ ํ•„์ˆ˜ ์‚ฌ์ „ ์ค€๋น„ (Critical) ### 3.1 Ollama ์„œ๋น„์Šค ๊ตฌ๋™ ๋ฐ API ํ™•์ธ ```bash # Ollama ๋ชจ๋ธ ๋ชฉ๋ก ํ™•์ธ ollama list # OpenAI ํ˜ธํ™˜ v1 ์—”๋“œํฌ์ธํŠธ ์‘๋‹ต ํ™•์ธ curl http://127.0.0.1:11434/v1/models ``` ### 3.2 ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ(`num_ctx`) ํ™•์žฅ Ollama์˜ ๊ธฐ๋ณธ ์ปจํ…์ŠคํŠธ ํฌ๊ธฐ๋Š” **4,096 ํ† ํฐ**์œผ๋กœ ๋งค์šฐ ์ž‘์•„์„œ, ์—์ด์ „ํŠธ๊ฐ€ ํŒŒ์ผ ํŠธ๋ฆฌ๋‚˜ ๊ธด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ ์ปจํ…์ŠคํŠธ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. `Modelfile`์„ ์ž‘์„ฑํ•˜์—ฌ 32K(32,768) ์ด์ƒ์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ```bash # 1) Modelfile ์ƒ์„ฑ cat << 'EOF' > Modelfile FROM qwen2.5-coder:32b PARAMETER num_ctx 32768 EOF # 2) ํ™•์žฅ๋œ ์ปค์Šคํ…€ ๋ชจ๋ธ ๋นŒ๋“œ ollama create qwen2.5-coder-32k -f Modelfile ``` * ๋นŒ๋“œ ํ›„ `opencode.jsonc`์˜ `"model"`์„ `"ollama/qwen2.5-coder-32k"`๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ### 3.3 Tool Calling(ํ•จ์ˆ˜ ํ˜ธ์ถœ) ์ง€์› ๋ชจ๋ธ ์„ ํƒ OpenCode๋Š” ํŒŒ์ผ ์ฝ๊ธฐ/์ˆ˜์ •, ์…ธ ์‹คํ–‰ ๋“ฑ์„ ๋ชจ๋ธ์˜ **Tool Calling** ๊ธฐ๋Šฅ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. * **์ถ”์ฒœ ๋ชจ๋ธ**: `qwen2.5-coder` (7b/14b/32b), `llama3.1` (8b/70b), `mistral-nemo` --- ## 4. ์‹คํ–‰ ๋ฐ ๋Ÿฐํƒ€์ž„ ์ œ์–ด ### 4.1 ๊ธฐ๋ณธ ์‹คํ–‰ (์„ค์ • ํŒŒ์ผ ์ ์šฉ) ```bash # ๊ธฐ๋ณธ ์„ค์ •๋œ Ollama ๋ชจ๋ธ๋กœ TUI ์‹คํ–‰ opencode ``` ### 4.2 CLI ํ”Œ๋ž˜๊ทธ๋กœ ํŠน์ • ๋ชจ๋ธ ์ฆ‰์‹œ ์‹คํ–‰ (`-m`) ```bash # ๋Œ€ํ™”ํ˜• TUI ์‹คํ–‰ opencode -m "ollama/qwen2.5-coder:32b" # ๋น„๋Œ€ํ™”ํ˜•(Headless) ๋ฌด์ธ ๋‹จ๋ฐœ ํƒœ์Šคํฌ ์‹คํ–‰ opencode run -m "ollama/qwen2.5-coder:32b" "tests/ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๊ณ ์ณ์ค˜" ``` ### 4.3 TUI ์‹คํ–‰ ์ค‘ ๋Œ€ํ™”์‹ ๋ชจ๋ธ ์ „ํ™˜ * OpenCode ๋Œ€ํ™”์ฐฝ์—์„œ `Tab` ํ‚ค๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ํ”„๋กฌํ”„ํŠธ์— `/models`๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋“ฑ๋ก๋œ ๋ชจ๋ธ ๋ชฉ๋ก ์ค‘ ์›ํ•˜๋Š” ๋ชจ๋ธ์„ ์ฆ‰์‹œ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --- ## 5. Multi-Agent Mux (MAM) ์—ฐ๋™ ์˜ˆ์‹œ MAM ํ™˜๊ฒฝ์—์„œ OpenCode๋ฅผ reviewer/creator ์—์ด์ „ํŠธ๋กœ ๋„์šธ ๋•Œ์˜ ํ‘œ์ค€ ๋ช…๋ น์–ด: ```bash # 1. ์„ธ์…˜ ์ƒ์„ฑ ๋ฐ ์˜จ๋ณด๋”ฉ bash .agents/skills/multi-agent-mux-create/scripts/create_session.sh \ --workspace "$(pwd)" \ --agent "opencode" \ --role "reviewer" \ --session "reviewer-opencode-01" \ --herdr-session "multi-agent-mux" \ --herdr-workspace "mam-agent" \ --onboard # 2. ์„ธ์…˜ ๋Œ€ํ™” ๋ณต์› (Resume) bash .agents/skills/multi-agent-mux-resume/scripts/resume_session.sh \ --workspace "$(pwd)" \ --agent "opencode" \ --session "reviewer-opencode-01" \ --herdr-session "multi-agent-mux" ```