opencode / packages /web /src /content /docs /ko /agents.mdx
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
0dbc9de verified
Raw
History Blame Contribute Delete
19.7 kB
---
title: Agents
description: Configure and use specialized agents.
---
agent๋Š” ํŠน์ • ์ž‘์—…๊ณผ ์›Œํฌํ”Œ๋กœ์— ๋งž๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ „๋ฌธ AI assistant์ž…๋‹ˆ๋‹ค. custom prompt, model, tool ์ ‘๊ทผ ๊ถŒํ•œ์„ ์กฐํ•ฉํ•ด ๋ชฉ์ ์— ๋งž๋Š” agent๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
:::tip
์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๋ถ„์„๊ณผ ์ œ์•ˆ ๊ฒ€ํ† ๋งŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด plan agent๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
:::
์„ธ์…˜ ์ค‘์— agent๋ฅผ ์ „ํ™˜ํ•˜๊ฑฐ๋‚˜ `@` mention์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
## ์œ ํ˜•
OpenCode์˜ agent๋Š” primary agent์™€ subagent, ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.
---
### Primary agents
primary agent๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฉ”์ธ assistant์ž…๋‹ˆ๋‹ค. **Tab** ํ‚ค ๋˜๋Š” ์„ค์ •ํ•œ `switch_agent` keybind๋กœ ์ˆœํ™˜ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. primary agent๋Š” ๋ฉ”์ธ ๋Œ€ํ™”๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, tool ์ ‘๊ทผ์€ permission์œผ๋กœ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Build๋Š” ๋ชจ๋“  tool์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ณ  Plan์€ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
:::tip
์„ธ์…˜ ์ค‘ **Tab** ํ‚ค๋กœ primary agent๋ฅผ ๋น ๋ฅด๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
:::
OpenCode์—๋Š” ๊ธฐ๋ณธ ์ œ๊ณต primary agent์ธ **Build**์™€ **Plan**์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์—์„œ ๊ฐ๊ฐ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
---
### Subagents
subagent๋Š” primary agent๊ฐ€ ํŠน์ • ์ž‘์—…์„ ์œ„ํ•ด ํ˜ธ์ถœํ•˜๋Š” ์ „๋ฌธ assistant์ž…๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€์—์„œ **@ mention**์œผ๋กœ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
OpenCode์—๋Š” ๊ธฐ๋ณธ ์ œ๊ณต subagent์ธ **General**, **Explore**, **Scout**๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์—์„œ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
---
## ๊ธฐ๋ณธ ์ œ๊ณต
OpenCode๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ primary agent 2๊ฐœ์™€ subagent 3๊ฐœ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
---
### Use build
_Mode_: `primary`
Build๋Š” ๋ชจ๋“  tool์ด ํ™œ์„ฑํ™”๋œ **default** primary agent์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ ์ž‘์—…๊ณผ ์‹œ์Šคํ…œ ๋ช…๋ น์— ๋Œ€ํ•œ ์ „์ฒด ์ ‘๊ทผ์ด ํ•„์š”ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ ์ž‘์—…์— ์‚ฌ์šฉํ•˜๋Š” ํ‘œ์ค€ agent์ž…๋‹ˆ๋‹ค.
---
### Use plan
_Mode_: `primary`
Plan์€ ๊ณ„ํš๊ณผ ๋ถ„์„์— ํŠนํ™”๋œ ์ œํ•œํ˜• agent์ž…๋‹ˆ๋‹ค. ๋” ๋†’์€ ์ œ์–ด๋ ฅ๊ณผ ์˜๋„์น˜ ์•Š์€ ๋ณ€๊ฒฝ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด permission ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์•„๋ž˜ ํ•ญ๋ชฉ์€ ๋ชจ๋‘ `ask`๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
- `file edits`: ๋ชจ๋“  write, patch, edit
- `bash`: ๋ชจ๋“  bash ๋ช…๋ น
์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์‹ค์ œ๋กœ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  LLM ๋ถ„์„, ๋ณ€๊ฒฝ ์ œ์•ˆ, ๊ณ„ํš ์ˆ˜๋ฆฝ๋งŒ ์ง„ํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
---
### Use general
_Mode_: `subagent`
๋ณต์žกํ•œ ์งˆ๋ฌธ์„ ์กฐ์‚ฌํ•˜๊ณ  ๋‹ค๋‹จ๊ณ„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฒ”์šฉ agent์ž…๋‹ˆ๋‹ค. todo๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  tool ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํ•„์š”ํ•˜๋ฉด ํŒŒ์ผ ์ˆ˜์ •๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ž‘์—… ๋‹จ์œ„๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”.
---
### Use explore
_Mode_: `subagent`
์ฝ”๋“œ๋ฒ ์ด์Šค ํƒ์ƒ‰์— ์ตœ์ ํ™”๋œ ๋น ๋ฅธ ์ฝ๊ธฐ ์ „์šฉ agent์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํŒจํ„ด ๊ธฐ๋ฐ˜ ํŒŒ์ผ ํƒ์ƒ‰, ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰, ์ฝ”๋“œ๋ฒ ์ด์Šค ๊ด€๋ จ ์งˆ์˜ ์‘๋‹ต์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”.
---
### Use Scout
_Mode_: `subagent`
์™ธ๋ถ€ docs์™€ dependency ๋ฆฌ์„œ์น˜๋ฅผ ์œ„ํ•œ ์ฝ๊ธฐ ์ „์šฉ agent์ž…๋‹ˆ๋‹ค. dependency repository๋ฅผ OpenCode์˜ ๊ด€๋ฆฌํ˜• cache์— cloneํ•˜๊ฑฐ๋‚˜, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ์Šค๋ฅผ ์‚ดํŽด๋ณด๊ฑฐ๋‚˜, workspace๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ ์ฝ”๋“œ๋ฅผ upstream ๊ตฌํ˜„๊ณผ ๊ต์ฐจ ํ™•์ธํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”.
---
### Use compaction
_Mode_: `primary`
๊ธด context๋ฅผ ๋” ์งง์€ ์š”์•ฝ์œผ๋กœ ์••์ถ•ํ•˜๋Š” ์ˆจ๊ฒจ์ง„ ์‹œ์Šคํ…œ agent์ž…๋‹ˆ๋‹ค. ํ•„์š”ํ•  ๋•Œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ UI์—์„œ ์ง์ ‘ ์„ ํƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
---
### Use title
_Mode_: `primary`
์งง์€ ์„ธ์…˜ ์ œ๋ชฉ์„ ์ƒ์„ฑํ•˜๋Š” ์ˆจ๊ฒจ์ง„ ์‹œ์Šคํ…œ agent์ž…๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ UI์—์„œ ์ง์ ‘ ์„ ํƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
---
### Use summary
_Mode_: `primary`
์„ธ์…˜ ์š”์•ฝ์„ ์ƒ์„ฑํ•˜๋Š” ์ˆจ๊ฒจ์ง„ ์‹œ์Šคํ…œ agent์ž…๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ UI์—์„œ ์ง์ ‘ ์„ ํƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
---
## ์‚ฌ์šฉ๋ฒ•
1. primary agent๋Š” ์„ธ์…˜ ์ค‘ **Tab** ํ‚ค๋กœ ์ˆœํ™˜ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •ํ•œ `switch_agent` keybind๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
2. subagent ํ˜ธ์ถœ ๋ฐฉ๋ฒ•:
- **Automatically**: primary agent๊ฐ€ ์„ค๋ช…(description)์„ ๋ฐ”ํƒ•์œผ๋กœ ํŠนํ™” ์ž‘์—…์— ์ž๋™ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
- ์ˆ˜๋™ ํ˜ธ์ถœ: ๋ฉ”์‹œ์ง€์—์„œ subagent๋ฅผ **@ mention**ํ•˜์—ฌ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:
```txt frame="none"
@general help me search for this function
```
3. **์„ธ์…˜ ๊ฐ„ ์ด๋™**: subagent๊ฐ€ child session์„ ๋งŒ๋“ค๋ฉด ์•„๋ž˜ ํ‚ค๋กœ parent session๊ณผ child session ์‚ฌ์ด๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- **\<Leader>+Right** (๋˜๋Š” ์„ค์ •ํ•œ `session_child_cycle` keybind): parent โ†’ child1 โ†’ child2 โ†’ ... โ†’ parent ์ˆœ๋ฐฉํ–ฅ ์ˆœํ™˜
- **\<Leader>+Left** (๋˜๋Š” ์„ค์ •ํ•œ `session_child_cycle_reverse` keybind): parent โ† child1 โ† child2 โ† ... โ† parent ์—ญ๋ฐฉํ–ฅ ์ˆœํ™˜
์ด๋ฅผ ํ†ตํ•ด ๋ฉ”์ธ ๋Œ€ํ™”์™€ ํŠนํ™” subagent ์ž‘์—… ์‚ฌ์ด๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์˜ค๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
## ๊ตฌ์„ฑ
๊ธฐ๋ณธ ์ œ๊ณต agent๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆํ•˜๊ฑฐ๋‚˜ config๋ฅผ ํ†ตํ•ด ์ง์ ‘ agent๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. agent๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
---
### JSON
`opencode.json` config ํŒŒ์ผ์—์„œ agent๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"mode": "primary",
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "{file:./prompts/build.txt}",
"tools": {
"write": true,
"edit": true,
"bash": true
}
},
"plan": {
"mode": "primary",
"model": "anthropic/claude-haiku-4-20250514",
"tools": {
"write": false,
"edit": false,
"bash": false
}
},
"code-reviewer": {
"description": "Reviews code for best practices and potential issues",
"mode": "subagent",
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
"tools": {
"write": false,
"edit": false
}
}
}
}
```
---
### Markdown
Markdown ํŒŒ์ผ๋กœ๋„ agent๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์œ„์น˜์— ๋‘์„ธ์š”.
- Global: `~/.config/opencode/agents/`
- Per-project: `.opencode/agents/`
```markdown title="~/.config/opencode/agents/review.md"
---
description: Reviews code for quality and best practices
mode: subagent
model: anthropic/claude-sonnet-4-20250514
temperature: 0.1
tools:
write: false
edit: false
bash: false
---
You are in code review mode. Focus on:
- Code quality and best practices
- Potential bugs and edge cases
- Performance implications
- Security considerations
Provide constructive feedback without making direct changes.
```
Markdown ํŒŒ์ผ๋ช…์€ agent ์ด๋ฆ„์ด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด `review.md`๋Š” `review` agent๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
---
## ์˜ต์…˜
๊ฐ config ์˜ต์…˜์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
---
### Description
`description` ์˜ต์…˜์œผ๋กœ agent์˜ ์—ญํ• ๊ณผ ์‚ฌ์šฉ ์‹œ์ ์„ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์„ธ์š”.
```json title="opencode.json"
{
"agent": {
"review": {
"description": "Reviews code for best practices and potential issues"
}
}
}
```
์ด ์˜ต์…˜์€ **ํ•„์ˆ˜** config ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.
---
### Temperature
`temperature` config๋กœ LLM ์‘๋‹ต์˜ ๋ฌด์ž‘์œ„์„ฑ๊ณผ ์ฐฝ์˜์„ฑ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
๊ฐ’์ด ๋‚ฎ์„์ˆ˜๋ก ์‘๋‹ต์ด ๋” ์ง‘์ค‘๋˜๊ณ  ๊ฒฐ์ •์ ์ด๋ฉฐ, ๊ฐ’์ด ๋†’์„์ˆ˜๋ก ์ฐฝ์˜์„ฑ๊ณผ ๋‹ค์–‘์„ฑ์ด ์ปค์ง‘๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"agent": {
"plan": {
"temperature": 0.1
},
"creative": {
"temperature": 0.8
}
}
}
```
Temperature ๊ฐ’์€ ์ผ๋ฐ˜์ ์œผ๋กœ 0.0~1.0 ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- **0.0-0.2**: ๋งค์šฐ ์ง‘์ค‘๋˜๊ณ  ๊ฒฐ์ •์ ์ธ ์‘๋‹ต, ์ฝ”๋“œ ๋ถ„์„/๊ณ„ํš์— ์ ํ•ฉ
- **0.3-0.5**: ์ ๋‹นํ•œ ์ฐฝ์˜์„ฑ์ด ์„ž์ธ ๊ท ํ˜•ํ˜• ์‘๋‹ต, ์ผ๋ฐ˜ ๊ฐœ๋ฐœ ์ž‘์—…์— ์ ํ•ฉ
- **0.6-1.0**: ๋” ์ฐฝ์˜์ ์ด๊ณ  ๋‹ค์–‘ํ•œ ์‘๋‹ต, ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ/ํƒ์ƒ‰์— ์œ ์šฉ
```json title="opencode.json"
{
"agent": {
"analyze": {
"temperature": 0.1,
"prompt": "{file:./prompts/analysis.txt}"
},
"build": {
"temperature": 0.3
},
"brainstorm": {
"temperature": 0.7,
"prompt": "{file:./prompts/creative.txt}"
}
}
}
```
temperature๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด OpenCode๋Š” model๋ณ„ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ model์€ 0, Qwen model์€ 0.55๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
---
### Max steps
agent๊ฐ€ ํ…์ŠคํŠธ ์‘๋‹ต๋งŒ ํ•˜๋„๋ก ๊ฐ•์ œ๋˜๊ธฐ ์ „๊นŒ์ง€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” agentic iteration์˜ ์ตœ๋Œ€ ํšŸ์ˆ˜๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๋น„์šฉ์„ ๊ด€๋ฆฌํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ agentic action ์ œํ•œ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
์ด ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด model์ด ์ค‘๋‹จ์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์„ธ์…˜์„ ์ค‘๋‹จํ•  ๋•Œ๊นŒ์ง€ agent๋Š” ๊ณ„์† ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"agent": {
"quick-thinker": {
"description": "Fast reasoning with limited iterations",
"prompt": "You are a quick thinker. Solve problems with minimal steps.",
"steps": 5
}
}
}
```
์ œํ•œ์— ๋„๋‹ฌํ•˜๋ฉด agent๋Š” ์ž‘์—… ์š”์•ฝ๊ณผ ๋‚จ์€ ๊ถŒ์žฅ ์ž‘์—…์„ ์‘๋‹ตํ•˜๋„๋ก ์ง€์‹œํ•˜๋Š” ํŠน์ˆ˜ ์‹œ์Šคํ…œ prompt๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
:::caution
๋ ˆ๊ฑฐ์‹œ `maxSteps` ํ•„๋“œ๋Š” deprecated์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  `steps`๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
:::
---
### Disable
`true`๋กœ ์„ค์ •ํ•˜๋ฉด agent๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"agent": {
"review": {
"disable": true
}
}
}
```
---
### Prompt
`prompt` config๋กœ ํ•ด๋‹น agent์˜ custom ์‹œ์Šคํ…œ prompt ํŒŒ์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. prompt ํŒŒ์ผ์—๋Š” agent ๋ชฉ์ ์— ๋งž๋Š” ์ง€์‹œ์‚ฌํ•ญ์„ ์ž‘์„ฑํ•˜์„ธ์š”.
```json title="opencode.json"
{
"agent": {
"review": {
"prompt": "{file:./prompts/code-review.txt}"
}
}
}
```
์ด ๊ฒฝ๋กœ๋Š” config ํŒŒ์ผ ์œ„์น˜ ๊ธฐ์ค€์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ „์—ญ OpenCode config์™€ ํ”„๋กœ์ ํŠธ๋ณ„ config ๋ชจ๋‘์—์„œ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
---
### Model
`model` config๋กœ ํ•ด๋‹น agent์˜ model์„ overrideํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—… ํŠน์„ฑ์— ๋งž์ถฐ model์„ ๋‹ฌ๋ฆฌ ์“ธ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ณ„ํš์—๋Š” ๋” ๋น ๋ฅธ model, ๊ตฌํ˜„์—๋Š” ๋” ๊ฐ•๋ ฅํ•œ model์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
:::tip
model์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด primary agent๋Š” [์ „์—ญ์œผ๋กœ ์„ค์ •ํ•œ model](/docs/config#models)์„ ์‚ฌ์šฉํ•˜๊ณ , subagent๋Š” ํ•ด๋‹น subagent๋ฅผ ํ˜ธ์ถœํ•œ primary agent์˜ model์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
:::
```json title="opencode.json"
{
"agent": {
"plan": {
"model": "anthropic/claude-haiku-4-20250514"
}
}
}
```
OpenCode config์˜ model ID๋Š” `provider/model-id` ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด [OpenCode Zen](/docs/zen)์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด GPT 5.1 Codex์— `opencode/gpt-5.1-codex`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
---
### Tools
`tools` config๋กœ agent์—์„œ ์‚ฌ์šฉํ•  tool์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ tool์„ `true` ๋˜๋Š” `false`๋กœ ์„ค์ •ํ•ด ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json" {3-6,9-12}
{
"$schema": "https://opencode.ai/config.json",
"tools": {
"write": true,
"bash": true
},
"agent": {
"plan": {
"tools": {
"write": false,
"bash": false
}
}
}
}
```
:::note
agent๋ณ„ config๋Š” ์ „์—ญ config๋ฅผ overrideํ•ฉ๋‹ˆ๋‹ค.
:::
์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ tool์„ ํ•œ ๋ฒˆ์— ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด MCP ์„œ๋ฒ„์˜ ๋ชจ๋“  tool์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"readonly": {
"tools": {
"mymcp_*": false,
"write": false,
"edit": false
}
}
}
}
```
[tool์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ธฐ](/docs/tools).
---
### Permissions
permission์„ ์„ค์ •ํ•ด agent๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” action์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ `edit`, `bash`, `webfetch` tool์˜ permission์€ ๋‹ค์Œ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- `"ask"` โ€” tool ์‹คํ–‰ ์ „์— ์Šน์ธ ์š”์ฒญ
- `"allow"` โ€” ์Šน์ธ ์—†์ด ๋ชจ๋“  ์ž‘์—… ํ—ˆ์šฉ
- `"deny"` โ€” tool ๋น„ํ™œ์„ฑํ™”
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny"
}
}
```
์ด permission์€ agent๋ณ„๋กœ overrideํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json" {3-5,8-10}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny"
},
"agent": {
"build": {
"permission": {
"edit": "ask"
}
}
}
}
```
Markdown agent์—์„œ๋„ permission์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```markdown title="~/.config/opencode/agents/review.md"
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash:
"*": ask
"git diff": allow
"git log*": allow
"grep *": allow
webfetch: deny
---
Only analyze code and suggest changes.
```
ํŠน์ • bash ๋ช…๋ น์— ๋Œ€ํ•ด์„œ๋„ permission์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"git push": "ask",
"grep *": "allow"
}
}
}
}
}
```
์—ฌ๊ธฐ์—๋Š” glob ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"git *": "ask"
}
}
}
}
}
```
๋˜ํ•œ `*` ์™€์ผ๋“œ์นด๋“œ๋กœ ๋ชจ๋“  ๋ช…๋ น์˜ permission์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ ์ผ์น˜ํ•œ ๊ทœ์น™์ด ์šฐ์„ ํ•˜๋ฏ€๋กœ `*` ์™€์ผ๋“œ์นด๋“œ๋ฅผ ๋จผ์ € ๋‘๊ณ , ๊ตฌ์ฒด์ ์ธ ๊ทœ์น™์„ ๋’ค์— ๋‘์„ธ์š”.
```json title="opencode.json" {8}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git status *": "allow"
}
}
}
}
}
```
[permission์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ธฐ](/docs/permissions).
---
### Mode
`mode` config๋กœ agent ๋ชจ๋“œ๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. `mode` ์˜ต์…˜์€ agent๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"agent": {
"review": {
"mode": "subagent"
}
}
}
```
`mode`๋Š” `primary`, `subagent`, `all` ์ค‘ ํ•˜๋‚˜๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ `all`์ž…๋‹ˆ๋‹ค.
---
### Hidden
`hidden: true`๋ฅผ ์„ค์ •ํ•˜๋ฉด `@` ์ž๋™์™„์„ฑ ๋ฉ”๋‰ด์—์„œ subagent๋ฅผ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ agent๊ฐ€ Task tool์„ ํ†ตํ•ด programmatic์œผ๋กœ๋งŒ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ๋‚ด๋ถ€ subagent์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"agent": {
"internal-helper": {
"mode": "subagent",
"hidden": true
}
}
}
```
์ด ์„ค์ •์€ ์ž๋™์™„์„ฑ ๋ฉ”๋‰ด์—์„œ์˜ ์‚ฌ์šฉ์ž ๊ฐ€์‹œ์„ฑ์—๋งŒ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. permission์ด ํ—ˆ์šฉ๋˜๋ฉด hidden agent๋„ ๋ชจ๋ธ์ด Task tool์„ ํ†ตํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
:::note
`mode: subagent` agent์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
:::
---
### Task permissions
`permission.task`๋กœ Task tool์„ ํ†ตํ•ด ํ•ด๋‹น agent๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” subagent ๋ฒ”์œ„๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์œ ์—ฐํ•œ ๋งค์นญ์„ ์œ„ํ•ด glob ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"agent": {
"orchestrator": {
"mode": "primary",
"permission": {
"task": {
"*": "deny",
"orchestrator-*": "allow",
"code-reviewer": "ask"
}
}
}
}
}
```
`deny`๋กœ ์„ค์ •๋˜๋ฉด ํ•ด๋‹น subagent๋Š” Task tool ์„ค๋ช…์—์„œ ์™„์ „ํžˆ ์ œ๊ฑฐ๋˜๋ฏ€๋กœ ๋ชจ๋ธ์ด ํ˜ธ์ถœ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
:::tip
๊ทœ์น™์€ ์„ ์–ธ ์ˆœ์„œ๋Œ€๋กœ ํ‰๊ฐ€๋˜๋ฉฐ, **๋งˆ์ง€๋ง‰์œผ๋กœ ์ผ์น˜ํ•œ ๊ทœ์น™์ด ์Šน๋ฆฌํ•ฉ๋‹ˆ๋‹ค**. ์œ„ ์˜ˆ์‹œ์—์„œ `orchestrator-planner`๋Š” `*`(deny)์™€ `orchestrator-*`(allow) ๋ชจ๋‘์— ์ผ์น˜ํ•˜์ง€๋งŒ, `orchestrator-*`๊ฐ€ ๋’ค์— ์žˆ์œผ๋ฏ€๋กœ ๊ฒฐ๊ณผ๋Š” `allow`์ž…๋‹ˆ๋‹ค.
:::
:::tip
์‚ฌ์šฉ์ž๋Š” agent์˜ task permission์ด deny์—ฌ๋„ `@` ์ž๋™์™„์„ฑ ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•ด ์–ด๋–ค subagent๋“  ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
:::
---
### Color
`color` ์˜ต์…˜์œผ๋กœ UI์—์„œ agent์˜ ์‹œ๊ฐ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์—์„œ agent๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ์‹์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.
์œ ํšจํ•œ hex ์ƒ‰์ƒ(์˜ˆ: `#FF5733`) ๋˜๋Š” theme ์ƒ‰์ƒ(`primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`)์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
```json title="opencode.json"
{
"agent": {
"creative": {
"color": "#ff6b6b"
},
"code-reviewer": {
"color": "accent"
}
}
}
```
---
### Top P
`top_p` ์˜ต์…˜์œผ๋กœ ์‘๋‹ต ๋‹ค์–‘์„ฑ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์ž‘์œ„์„ฑ์„ ์ œ์–ดํ•˜๋Š” Temperature์˜ ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"agent": {
"brainstorm": {
"top_p": 0.9
}
}
}
```
๊ฐ’ ๋ฒ”์œ„๋Š” 0.0~1.0์ž…๋‹ˆ๋‹ค. ๊ฐ’์ด ๋‚ฎ์„์ˆ˜๋ก ์ง‘์ค‘๋˜๊ณ , ๋†’์„์ˆ˜๋ก ๋‹ค์–‘ํ•ด์ง‘๋‹ˆ๋‹ค.
---
### Additional
agent config์— ์ง€์ •ํ•œ ๋‚˜๋จธ์ง€ ์˜ต์…˜์€ ๋ชจ๋ธ ์˜ต์…˜์œผ๋กœ provider์— **๊ทธ๋Œ€๋กœ ์ „๋‹ฌ(pass through)** ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด provider๋ณ„ ๊ธฐ๋Šฅ๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด OpenAI reasoning model์—์„œ๋Š” reasoning effort๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json" {6,7}
{
"agent": {
"deep-thinker": {
"description": "Agent that uses high reasoning effort for complex problems",
"model": "openai/gpt-5",
"reasoningEffort": "high",
"textVerbosity": "low"
}
}
}
```
์ด ์ถ”๊ฐ€ ์˜ต์…˜์€ model ๋ฐ provider๋งˆ๋‹ค ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” provider ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
:::tip
์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ model ๋ชฉ๋ก์€ `opencode models` ๋ช…๋ น์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
:::
---
## ์—์ด์ „ํŠธ ์ƒ์„ฑ
์•„๋ž˜ ๋ช…๋ น์œผ๋กœ ์ƒˆ agent๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```bash
opencode agent create
```
์ด ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ช…๋ น์€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
1. agent ์ €์žฅ ์œ„์น˜๋ฅผ ๋ฌป์Šต๋‹ˆ๋‹ค(์ „์—ญ/ํ”„๋กœ์ ํŠธ).
2. agent๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์˜ ์„ค๋ช…์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
3. ์ ์ ˆํ•œ ์‹œ์Šคํ…œ prompt์™€ ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
4. agent๊ฐ€ ์ ‘๊ทผํ•  tool์„ ์„ ํƒํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
5. ๋งˆ์ง€๋ง‰์œผ๋กœ agent config๊ฐ€ ๋‹ด๊ธด Markdown ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
---
## ์‚ฌ์šฉ ์‚ฌ๋ก€
์„œ๋กœ ๋‹ค๋ฅธ agent์˜ ๋Œ€ํ‘œ์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
- **Build agent**: ๋ชจ๋“  tool์„ ํ™œ์„ฑํ™”ํ•œ ์ „์ฒด ๊ฐœ๋ฐœ ์ž‘์—…
- **Plan agent**: ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด ๋ถ„์„๊ณผ ๊ณ„ํš ์ˆ˜ํ–‰
- **Review agent**: ์ฝ๊ธฐ ์ „์šฉ ์ ‘๊ทผ + ๋ฌธ์„œํ™” tool ๊ธฐ๋ฐ˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ
- **Debug agent**: bash/read tool ์ค‘์‹ฌ์˜ ์กฐ์‚ฌ ์ž‘์—…
- **Docs agent**: ํŒŒ์ผ ์ž‘์—…์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ ๋ช…๋ น์€ ์—†๋Š” ๋ฌธ์„œ ์ž‘์„ฑ ์ž‘์—…
---
## ์˜ˆ์‹œ
์‹ค์ œ๋กœ ์œ ์šฉํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋Š” ์˜ˆ์‹œ agent๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
:::tip
๊ณต์œ ํ•˜๊ณ  ์‹ถ์€ agent๊ฐ€ ์žˆ๋‚˜์š”? [PR ์ œ์ถœํ•˜๊ธฐ](https://github.com/anomalyco/opencode).
:::
---
### Documentation agent
```markdown title="~/.config/opencode/agents/docs-writer.md"
---
description: Writes and maintains project documentation
mode: subagent
tools:
bash: false
---
You are a technical writer. Create clear, comprehensive documentation.
Focus on:
- Clear explanations
- Proper structure
- Code examples
- User-friendly language
```
---
### Security auditor
```markdown title="~/.config/opencode/agents/security-auditor.md"
---
description: Performs security audits and identifies vulnerabilities
mode: subagent
tools:
write: false
edit: false
---
You are a security expert. Focus on identifying potential security issues.
Look for:
- Input validation vulnerabilities
- Authentication and authorization flaws
- Data exposure risks
- Dependency vulnerabilities
- Configuration security issues
```