# πŸ¦™ 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`) opencode 2.x 의 λŒ€ν™”ν˜• TUI(`opencode`)λŠ” `-m`/`--model`Β·`--agent` λ₯Ό λ°›μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(`Unrecognized flag`). TUI 의 λͺ¨λΈμ€ μ„€μ • 파일의 `"model"` 둜 μ •ν•˜κ³ , `-m` 은 λΉ„λŒ€ν™”ν˜• `run` μ—μ„œλ§Œ μ”λ‹ˆλ‹€. ```bash # λΉ„λŒ€ν™”ν˜•(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 μ—μ΄μ „νŠΈλ‘œ λ„μšΈ λ•Œμ˜ ν‘œμ€€ λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€. MAM 은 **opencode 2.x 만** μ§€μ›ν•˜λ©°(Issue #60), pane μ—μ„œ `opencode --auto --standalone`(μž¬κ°œλŠ” `--session ` μΆ”κ°€)으둜 λ„μ›λ‹ˆλ‹€. `--standalone` 이라 μ„œλ²„κ°€ TUI 의 μžμ‹μœΌλ‘œ λ– μ„œ μ„Έμ…˜μ„ λ‹«μœΌλ©΄ ν•¨κ»˜ λλ‚˜κ³ , μ‚¬μš©μžλ³„ λ°±κ·ΈλΌμš΄λ“œ μ„œλΉ„μŠ€λŠ” 쓰지도 λ„μš°μ§€λ„ μ•ŠμŠ΅λ‹ˆλ‹€. ```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" ```