opencode / packages /web /src /content /docs /ko /config.mdx
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
0dbc9de verified
Raw
History Blame Contribute Delete
19.4 kB
---
title: Config
description: Using the OpenCode JSON config.
---
JSON config ํŒŒ์ผ๋กœ OpenCode๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
## ํ˜•์‹
OpenCode๋Š” **JSON**๊ณผ **JSONC**(์ฃผ์„์ด ํฌํ•จ๋œ JSON) ํ˜•์‹์„ ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-5",
"autoupdate": true,
"server": {
"port": 4096,
},
}
```
---
## ์œ„์น˜
config ํŒŒ์ผ์€ ์—ฌ๋Ÿฌ ์œ„์น˜์— ๋‘˜ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ์œ„์น˜์—๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
:::note
config ํŒŒ์ผ์€ **๊ต์ฒด๋˜์ง€ ์•Š๊ณ  ๋ณ‘ํ•ฉ**๋ฉ๋‹ˆ๋‹ค.
:::
config ํŒŒ์ผ์€ ์„œ๋กœ ๋Œ€์ฒด๋˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ config ์œ„์น˜์˜ ์„ค์ •์ด ๊ฒฐํ•ฉ๋˜๋ฉฐ, ์ถฉ๋Œํ•˜๋Š” key์— ๋Œ€ํ•ด์„œ๋งŒ ๋‚˜์ค‘์— ๋กœ๋“œ๋œ config๊ฐ€ ์•ž์„  ๊ฐ’์„ overrideํ•ฉ๋‹ˆ๋‹ค. ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š” ์„ค์ •์€ ๋ชจ๋‘ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์ „์—ญ config์— `autoupdate: true`๊ฐ€ ์žˆ๊ณ  ํ”„๋กœ์ ํŠธ config์— `model: "anthropic/claude-sonnet-4-5"`๊ฐ€ ์žˆ์œผ๋ฉด ์ตœ์ข… config์—๋Š” ์ด ์„ค์ •์ด ๋ชจ๋‘ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
---
### ์šฐ์„ ์ˆœ์œ„
config source๋Š” ๋‹ค์Œ ์ˆœ์„œ๋กœ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค(๋‚˜์ค‘ source๊ฐ€ ์•ž์„  source๋ฅผ override).
1. **Remote config**(`.well-known/opencode`) - ์กฐ์ง ๊ธฐ๋ณธ๊ฐ’
2. **Global config**(`~/.config/opencode/opencode.json`) - ์‚ฌ์šฉ์ž ๊ธฐ๋ณธ ์„ค์ •
3. **Custom config**(`OPENCODE_CONFIG` env var) - custom override
4. **Project config**(ํ”„๋กœ์ ํŠธ์˜ `opencode.json`) - ํ”„๋กœ์ ํŠธ๋ณ„ ์„ค์ •
5. **`.opencode` directories** - agents, commands, plugins
6. **Inline config**(`OPENCODE_CONFIG_CONTENT` env var) - ๋Ÿฐํƒ€์ž„ override
์ฆ‰, ํ”„๋กœ์ ํŠธ config๋Š” ์ „์—ญ ๊ธฐ๋ณธ๊ฐ’์„ overrideํ•  ์ˆ˜ ์žˆ๊ณ , ์ „์—ญ config๋Š” ์กฐ์ง์˜ Remote ๊ธฐ๋ณธ๊ฐ’์„ overrideํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
:::note
`.opencode` ๋ฐ `~/.config/opencode` ๋””๋ ‰ํ† ๋ฆฌ๋Š” ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— **๋ณต์ˆ˜ํ˜• ์ด๋ฆ„**์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/`, `themes/`. ๋‹จ์ˆ˜ํ˜• ์ด๋ฆ„(์˜ˆ: `agent/`)๋„ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
:::
---
### Remote
์กฐ์ง์€ `.well-known/opencode` endpoint๋กœ ๊ธฐ๋ณธ config๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ง€์›ํ•˜๋Š” provider๋กœ ์ธ์ฆํ•˜๋ฉด ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
Remote config๋Š” ๊ฐ€์žฅ ๋จผ์ € ๋กœ๋“œ๋˜์–ด ๊ธฐ๋ณธ ๋ ˆ์ด์–ด ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„์˜ ๋ชจ๋“  config source(์ „์—ญ, ํ”„๋กœ์ ํŠธ)๋Š” ์ด ๊ธฐ๋ณธ๊ฐ’์„ overrideํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์กฐ์ง์—์„œ ๊ธฐ๋ณธ ๋น„ํ™œ์„ฑํ™”๋œ MCP ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ:
```json title="Remote config from .well-known/opencode"
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": false
}
}
}
```
๋กœ์ปฌ config์—์„œ ํŠน์ • ์„œ๋ฒ„๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}
```
---
### Global
์ „์—ญ OpenCode config๋Š” `~/.config/opencode/opencode.json`์— ๋‘์„ธ์š”. provider, model, permissions ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ „์ฒด ๊ธฐ๋ณธ ์„ค์ •์€ ์ „์—ญ config๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”.
TUI ๊ด€๋ จ ์„ค์ •์€ `~/.config/opencode/tui.json`์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
์ „์—ญ config๋Š” ์กฐ์ง์˜ Remote ๊ธฐ๋ณธ๊ฐ’์„ overrideํ•ฉ๋‹ˆ๋‹ค.
---
### Per project
ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— `opencode.json`์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ํ”„๋กœ์ ํŠธ config๋Š” ํ‘œ์ค€ config ํŒŒ์ผ ์ค‘ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์•„ ์ „์—ญ ๋ฐ Remote config๋ฅผ ๋ชจ๋‘ overrideํ•ฉ๋‹ˆ๋‹ค.
ํ”„๋กœ์ ํŠธ๋ณ„ TUI ์„ค์ •์€ `tui.json`์„ ํ•จ๊ป˜ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
:::tip
ํ”„๋กœ์ ํŠธ๋ณ„ config๋Š” ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ๋‘์„ธ์š”.
:::
OpenCode ์‹œ์ž‘ ์‹œ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ config ํŒŒ์ผ์„ ์ฐพ๊ณ , ์—†์œผ๋ฉด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด Git ๋””๋ ‰ํ† ๋ฆฌ๊นŒ์ง€ ์ƒ์œ„๋กœ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
์ด ํŒŒ์ผ์€ Git์— ์ปค๋ฐ‹ํ•ด๋„ ์•ˆ์ „ํ•˜๋ฉฐ ์ „์—ญ config์™€ ๋™์ผํ•œ schema๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
---
### Custom path
`OPENCODE_CONFIG` ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ custom config ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์„ธ์š”.
```bash
export OPENCODE_CONFIG=/path/to/my/custom-config.json
opencode run "Hello world"
```
Custom config๋Š” ์šฐ์„ ์ˆœ์œ„์ƒ ์ „์—ญ config์™€ ํ”„๋กœ์ ํŠธ config ์‚ฌ์ด์—์„œ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.
---
### Custom directory
`OPENCODE_CONFIG_DIR` ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ custom config ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋””๋ ‰ํ† ๋ฆฌ๋Š” ํ‘œ์ค€ `.opencode` ๋””๋ ‰ํ† ๋ฆฌ์™€ ๋™์ผํ•˜๊ฒŒ agents, commands, modes, plugins๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉฐ, ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
```bash
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
opencode run "Hello world"
```
custom ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์ „์—ญ config์™€ `.opencode` ๋””๋ ‰ํ† ๋ฆฌ ๋’ค์— ๋กœ๋“œ๋˜๋ฏ€๋กœ ํ•ด๋‹น ์„ค์ •์„ **overrideํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค**.
---
## Schema
server/runtime config schema๋Š” [**`opencode.ai/config.json`**](https://opencode.ai/config.json)์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
TUI config๋Š” [**`opencode.ai/tui.json`**](https://opencode.ai/tui.json)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ํŽธ์ง‘๊ธฐ์—์„œ ์ด schema๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ validation๊ณผ autocomplete๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
### TUI
TUI ๊ด€๋ จ ์„ค์ •์—๋Š” ์ „์šฉ `tui.json` (๋˜๋Š” `tui.jsonc`) ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
```json title="tui.json"
{
"$schema": "https://opencode.ai/tui.json",
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
},
"diff_style": "auto"
}
```
`OPENCODE_TUI_CONFIG`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ง€์ • TUI ์„ค์ • ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
`opencode.json`์˜ ๊ธฐ์กด `theme`, `keybinds`, `tui` ํ‚ค๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ(deprecated) ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋ฉ๋‹ˆ๋‹ค.
[TUI ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ธฐ](/docs/tui#configure).
---
### Server
`server` ์˜ต์…˜์œผ๋กœ `opencode serve`์™€ `opencode web` ๋ช…๋ น์˜ server ์„ค์ •์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"server": {
"port": 4096,
"hostname": "0.0.0.0",
"mdns": true,
"mdnsDomain": "myproject.local",
"cors": ["http://localhost:5173"]
}
}
```
์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜:
- `port` - ์ˆ˜์‹ ํ•  ํฌํŠธ์ž…๋‹ˆ๋‹ค.
- `hostname` - ์ˆ˜์‹ ํ•  ํ˜ธ์ŠคํŠธ๋ช…์ž…๋‹ˆ๋‹ค. `mdns`๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ณ  hostname์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ `0.0.0.0`์ž…๋‹ˆ๋‹ค.
- `mdns` - mDNS service discovery๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๋‚ด ๋‹ค๋ฅธ ๊ธฐ๊ธฐ์—์„œ OpenCode server๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- `mdnsDomain` - mDNS service์˜ custom ๋„๋ฉ”์ธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ `opencode.local`์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ๋„คํŠธ์›Œํฌ์—์„œ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
- `cors` - ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ client์—์„œ HTTP server๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ—ˆ์šฉํ•  ์ถ”๊ฐ€ CORS origin์ž…๋‹ˆ๋‹ค. ๊ฐ’์€ ์ „์ฒด origin(scheme + host + optional port) ํ˜•์‹์ด์–ด์•ผ ํ•˜๋ฉฐ, ์˜ˆ: `https://app.example.com`.
[server์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ธฐ](/docs/server).
---
### Tools
`tools` ์˜ต์…˜์œผ๋กœ LLM์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” tool์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tools": {
"write": false,
"bash": false
}
}
```
[tool์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ธฐ](/docs/tools).
---
### Models
OpenCode config์˜ `provider`, `model`, `small_model` ์˜ต์…˜์œผ๋กœ ์‚ฌ์šฉํ•  provider์™€ model์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"provider": {},
"model": "anthropic/claude-sonnet-4-5",
"small_model": "anthropic/claude-haiku-4-5"
}
```
`small_model`์€ ์ œ๋ชฉ ์ƒ์„ฑ ๊ฐ™์€ ๊ฒฝ๋Ÿ‰ ์ž‘์—…์— ์‚ฌ์šฉํ•  ๋ณ„๋„ model์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ OpenCode๋Š” provider์—์„œ ๋” ์ €๋ ดํ•œ model์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์šฐ์„  ์‚ฌ์šฉํ•˜๊ณ , ์—†์œผ๋ฉด ๋ฉ”์ธ model๋กœ fallbackํ•ฉ๋‹ˆ๋‹ค.
provider ์˜ต์…˜์—๋Š” `timeout`, `setCacheKey`๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"anthropic": {
"options": {
"timeout": 600000,
"setCacheKey": true
}
}
}
}
```
- `timeout` - ์š”์ฒญ timeout(๋ฐ€๋ฆฌ์ดˆ, ๊ธฐ๋ณธ๊ฐ’: 300000). `false`๋กœ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- `setCacheKey` - ์ง€์ •๋œ provider์— ๋Œ€ํ•ด cache key๊ฐ€ ํ•ญ์ƒ ์„ค์ •๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
[local model](/docs/models#local)๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [๋” ์•Œ์•„๋ณด๊ธฐ](/docs/models).
---
#### Provider-Specific Options
์ผ๋ถ€ provider๋Š” ๊ณตํ†ต ์˜ต์…˜์ธ `timeout`, `apiKey` ์™ธ์— ์ถ”๊ฐ€ config ์˜ต์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
##### Amazon Bedrock
Amazon Bedrock์€ AWS ์ „์šฉ config๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"amazon-bedrock": {
"options": {
"region": "us-east-1",
"profile": "my-aws-profile",
"endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com"
}
}
}
}
```
- `region` - Bedrock์šฉ AWS ๋ฆฌ์ „(`AWS_REGION` env var ๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’ `us-east-1`)
- `profile` - `~/.aws/credentials`์˜ AWS named profile(๊ธฐ๋ณธ๊ฐ’: `AWS_PROFILE` env var)
- `endpoint` - VPC endpoint์šฉ custom endpoint URL์ž…๋‹ˆ๋‹ค. AWS ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•œ ์ผ๋ฐ˜ `baseURL` ์˜ต์…˜์˜ ๋ณ„์นญ(alias)์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์ง€์ •ํ•˜๋ฉด `endpoint`๊ฐ€ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
:::note
Bearer token(`AWS_BEARER_TOKEN_BEDROCK` ๋˜๋Š” `/connect`)์€ profile ๊ธฐ๋ฐ˜ ์ธ์ฆ๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [authentication precedence](/docs/providers#authentication-precedence)๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
:::
[Amazon Bedrock config ๋” ์•Œ์•„๋ณด๊ธฐ](/docs/providers#amazon-bedrock).
---
### Themes
`tui.json`์—์„œ UI ํ…Œ๋งˆ๋ฅผ ์„ค์ •ํ•˜์„ธ์š”.
```json title="tui.json"
{
"$schema": "https://opencode.ai/tui.json",
"theme": "tokyonight"
}
```
[๋” ์•Œ์•„๋ณด๊ธฐ](/docs/themes).
---
### Agents
`agent` ์˜ต์…˜์œผ๋กœ ํŠน์ • ์ž‘์—…์šฉ ์ „๋ฌธ agent๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"code-reviewer": {
"description": "Reviews code for best practices and potential issues",
"model": "anthropic/claude-sonnet-4-5",
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
"tools": {
// Disable file modification tools for review-only agent
"write": false,
"edit": false,
},
},
},
}
```
`~/.config/opencode/agents/` ๋˜๋Š” `.opencode/agents/`์˜ Markdown ํŒŒ์ผ๋กœ agent๋ฅผ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. [๋” ์•Œ์•„๋ณด๊ธฐ](/docs/agents).
---
### Default agent
`default_agent` ์˜ต์…˜์œผ๋กœ ๊ธฐ๋ณธ agent๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„ ์ง€์ •์ด ์—†์„ ๋•Œ ์–ด๋–ค agent๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"default_agent": "plan"
}
```
๊ธฐ๋ณธ agent๋Š” primary agent์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค(subagent ๋ถˆ๊ฐ€). `"build"`, `"plan"` ๊ฐ™์€ ๋‚ด์žฅ agent๋‚˜ ์ง์ ‘ ์ •์˜ํ•œ [custom agent](/docs/agents)๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ •ํ•œ agent๊ฐ€ ์—†๊ฑฐ๋‚˜ subagent์ด๋ฉด OpenCode๋Š” ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ `"build"`๋กœ fallbackํ•ฉ๋‹ˆ๋‹ค.
์ด ์„ค์ •์€ TUI, CLI(`opencode run`), ๋ฐ์Šคํฌํ†ฑ ์•ฑ, GitHub Action ๋“ฑ ๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
---
### Sharing
`share` ์˜ต์…˜์œผ๋กœ [share](/docs/share) ๊ธฐ๋Šฅ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"share": "manual"
}
```
ํ—ˆ์šฉ ๊ฐ’:
- `"manual"` - ๋ช…๋ น์œผ๋กœ ์ˆ˜๋™ ๊ณต์œ  ํ—ˆ์šฉ(๊ธฐ๋ณธ๊ฐ’)
- `"auto"` - ์ƒˆ ๋Œ€ํ™”๋ฅผ ์ž๋™ ๊ณต์œ 
- `"disabled"` - ๊ณต์œ  ๊ธฐ๋Šฅ ์™„์ „ ๋น„ํ™œ์„ฑํ™”
๊ธฐ๋ณธ๊ฐ’์€ manual ๋ชจ๋“œ์ด๋ฉฐ, `/share` ๋ช…๋ น์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๊ณต์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
---
### Commands
`command` ์˜ต์…˜์œผ๋กœ ๋ฐ˜๋ณต ์ž‘์—…์šฉ custom command๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
"command": {
"test": {
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
"description": "Run tests with coverage",
"agent": "build",
"model": "anthropic/claude-haiku-4-5",
},
"component": {
"template": "Create a new React component named $ARGUMENTS with TypeScript support.\nInclude proper typing and basic structure.",
"description": "Create a new component",
},
},
}
```
`~/.config/opencode/commands/` ๋˜๋Š” `.opencode/commands/`์˜ Markdown ํŒŒ์ผ๋กœ command๋ฅผ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. [๋” ์•Œ์•„๋ณด๊ธฐ](/docs/commands).
---
### Keybinds
`tui.json`์—์„œ ๋‹จ์ถ•ํ‚ค๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜์„ธ์š”.
```json title="tui.json"
{
"$schema": "https://opencode.ai/tui.json",
"keybinds": {}
}
```
[๋” ์•Œ์•„๋ณด๊ธฐ](/docs/keybinds).
---
### Autoupdate
OpenCode๋Š” ์‹œ์ž‘ ์‹œ ์ƒˆ ์—…๋ฐ์ดํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. `autoupdate` ์˜ต์…˜์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"autoupdate": false
}
```
์—…๋ฐ์ดํŠธ๋ฅผ ์ž๋™ ์ ์šฉํ•˜์ง€ ์•Š๊ณ  ์ƒˆ ๋ฒ„์ „ ์•Œ๋ฆผ๋งŒ ๋ฐ›๊ณ  ์‹ถ๋‹ค๋ฉด `autoupdate`๋ฅผ `"notify"`๋กœ ์„ค์ •ํ•˜์„ธ์š”.
์ด ์˜ต์…˜์€ Homebrew ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
---
### Formatters
`formatter` ์˜ต์…˜์œผ๋กœ ์ฝ”๋“œ formatter๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
},
"custom-prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
"environment": {
"NODE_ENV": "development"
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
}
}
}
```
[formatter์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ธฐ](/docs/formatters).
---
### Permissions
๊ธฐ๋ณธ์ ์œผ๋กœ OpenCode๋Š” **๋ช…์‹œ์  ์Šน์ธ ์—†์ด ๋ชจ๋“  ์ž‘์—…์„ ํ—ˆ์šฉ**ํ•ฉ๋‹ˆ๋‹ค. `permission` ์˜ต์…˜์œผ๋กœ ์ด ๋™์ž‘์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด `edit`, `bash` tool์ด ์‚ฌ์šฉ์ž ์Šน์ธ์„ ์š”๊ตฌํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "ask",
"bash": "ask"
}
}
```
[permission์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ธฐ](/docs/permissions).
---
### Compaction
`compaction` ์˜ต์…˜์œผ๋กœ context compaction ๋™์ž‘์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"compaction": {
"auto": true,
"prune": false,
"reserved": 10000
}
}
```
- `auto` - context๊ฐ€ ๊ฐ€๋“ ์ฐผ์„ ๋•Œ ์„ธ์…˜์„ ์ž๋™ compactํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ๊ฐ’: `true`).
- `prune` - token ์ ˆ์•ฝ์„ ์œ„ํ•ด ์˜ค๋ž˜๋œ tool ์ถœ๋ ฅ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ๊ฐ’: `false`).
- `reserved` - compaction์šฉ token buffer์ž…๋‹ˆ๋‹ค. compaction ์ค‘ overflow๊ฐ€ ๋‚˜์ง€ ์•Š๋„๋ก ์ถฉ๋ถ„ํ•œ window๋ฅผ ๋‚จ๊น๋‹ˆ๋‹ค.
---
### Watcher
`watcher` ์˜ต์…˜์œผ๋กœ ํŒŒ์ผ watcher ignore ํŒจํ„ด์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"watcher": {
"ignore": ["node_modules/**", "dist/**", ".git/**"]
}
}
```
ํŒจํ„ด์€ glob ๋ฌธ๋ฒ•์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ํŒŒ์ผ ๊ฐ์‹œ์—์„œ ๋…ธ์ด์ฆˆ๊ฐ€ ๋งŽ์€ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ œ์™ธํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
---
### MCP servers
`mcp` ์˜ต์…˜์œผ๋กœ ์‚ฌ์šฉํ•  MCP server๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {}
}
```
[๋” ์•Œ์•„๋ณด๊ธฐ](/docs/mcp-servers).
---
### Plugins
[Plugins](/docs/plugins)๋Š” custom tool, hook, integration์œผ๋กœ OpenCode๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.
plugin ํŒŒ์ผ์€ `.opencode/plugins/` ๋˜๋Š” `~/.config/opencode/plugins/`์— ๋‘์„ธ์š”. `plugin` ์˜ต์…˜์œผ๋กœ npm plugin์„ ๋กœ๋“œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
}
```
[๋” ์•Œ์•„๋ณด๊ธฐ](/docs/plugins).
---
### Instructions
`instructions` ์˜ต์…˜์œผ๋กœ ์‚ฌ์šฉ ์ค‘์ธ model์— ์ œ๊ณตํ•  ์ง€์นจ ํŒŒ์ผ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
}
```
์ด ์˜ต์…˜์€ ์ง€์นจ ํŒŒ์ผ ๊ฒฝ๋กœ ๋ฐ glob ํŒจํ„ด ๋ฐฐ์—ด์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. [rules์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ธฐ](/docs/rules).
---
### Disabled providers
`disabled_providers` ์˜ต์…˜์œผ๋กœ ์ž๋™ ๋กœ๋“œ๋˜๋Š” provider๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. credential์ด ์žˆ์–ด๋„ ํŠน์ • provider๋ฅผ ๋กœ๋“œํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"disabled_providers": ["openai", "gemini"]
}
```
:::note
`disabled_providers`๋Š” `enabled_providers`๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
:::
`disabled_providers`๋Š” provider ID ๋ฐฐ์—ด์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. provider๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜๋ฉด:
- ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์–ด๋„ ๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
- `/connect` ๋ช…๋ น์œผ๋กœ API key๋ฅผ ์„ค์ •ํ•ด๋„ ๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
- ํ•ด๋‹น provider์˜ model์€ model ์„ ํƒ ๋ชฉ๋ก์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
---
### Enabled providers
`enabled_providers` ์˜ต์…˜์œผ๋กœ provider allowlist๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด ์ง€์ •ํ•œ provider๋งŒ ํ™œ์„ฑํ™”๋˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"enabled_providers": ["anthropic", "openai"]
}
```
provider๋ฅผ ํ•˜๋‚˜์”ฉ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋Œ€์‹ , OpenCode๊ฐ€ ํŠน์ • provider๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์ œํ•œํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
:::note
`disabled_providers`๋Š” `enabled_providers`๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
:::
๋™์ผ provider๊ฐ€ `enabled_providers`์™€ `disabled_providers`์— ๋ชจ๋‘ ์žˆ์œผ๋ฉด ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด `disabled_providers`๊ฐ€ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
---
### Experimental
`experimental` key์—๋Š” ํ˜„์žฌ ํ™œ๋ฐœํžˆ ๊ฐœ๋ฐœ ์ค‘์ธ ์˜ต์…˜์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"experimental": {}
}
```
:::caution
experimental ์˜ต์…˜์€ ์•ˆ์ •์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๊ณ  ์—†์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
:::
---
## Variables
config ํŒŒ์ผ์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์™€ ํŒŒ์ผ ๋‚ด์šฉ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€์ˆ˜ ์น˜ํ™˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
### Env vars
`{env:VARIABLE_NAME}` ํ˜•์‹์œผ๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์น˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"model": "{env:OPENCODE_MODEL}",
"provider": {
"anthropic": {
"models": {},
"options": {
"apiKey": "{env:ANTHROPIC_API_KEY}"
}
}
}
}
```
ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜์œผ๋ฉด ๋นˆ ๋ฌธ์ž์—ด๋กœ ์น˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
---
### Files
`{file:path/to/file}` ํ˜•์‹์œผ๋กœ ํŒŒ์ผ ๋‚ด์šฉ์„ ์น˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["./custom-instructions.md"],
"provider": {
"openai": {
"options": {
"apiKey": "{file:~/.secrets/openai-key}"
}
}
}
}
```
ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” ๋‹ค์Œ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
- config ํŒŒ์ผ ๋””๋ ‰ํ† ๋ฆฌ ๊ธฐ์ค€ ์ƒ๋Œ€ ๊ฒฝ๋กœ
- `/` ๋˜๋Š” `~`๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ
์ด ๊ธฐ๋Šฅ์€ ๋‹ค์Œ ์ƒํ™ฉ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
- API key ๊ฐ™์€ ๋ฏผ๊ฐ ์ •๋ณด๋ฅผ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ
- ํฐ ์ง€์นจ ํŒŒ์ผ์„ config๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ํฌํ•จ
- ์—ฌ๋Ÿฌ config ํŒŒ์ผ์—์„œ ๊ณตํ†ต ์„ค์ • ์Šค๋‹ˆํŽซ ์žฌ์‚ฌ์šฉ