File size: 17,683 Bytes
89a2873 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 | ---
title: 配置
description: 使用 OpenCode JSON 配置。
---
您可以使用 JSON 配置文件来配置 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,
},
}
```
---
## 位置
您可以将配置放置在不同的位置,它们具有不同的优先级顺序。
:::note
配置文件是**合并在一起**的,而不是替换。
:::
配置文件是合并在一起的,而不是被替换。来自以下配置位置的设置会被合并。后面的配置仅在键冲突时覆盖前面的配置。所有配置中的非冲突设置都会被保留。
例如,如果您的全局配置设置了 `autoupdate: true`,而您的项目配置设置了 `model: "anthropic/claude-sonnet-4-5"`,则最终配置将包含这两个设置。
---
### 优先级顺序
配置源按以下顺序加载(后面的源覆盖前面的源):
1. **远程配置**(来自 `.well-known/opencode`)- 组织默认值
2. **全局配置**(`~/.config/opencode/opencode.json`)- 用户偏好
3. **自定义配置**(`OPENCODE_CONFIG` 环境变量)- 自定义覆盖
4. **项目配置**(项目中的 `opencode.json`)- 项目特定设置
5. **`.opencode` 目录** - 代理、命令、插件
6. **内联配置**(`OPENCODE_CONFIG_CONTENT` 环境变量)- 运行时覆盖
这意味着项目配置可以覆盖全局默认值,全局配置可以覆盖远程组织默认值。
:::note
`.opencode` 和 `~/.config/opencode` 目录的子目录使用**复数名称**:`agents/`、`commands/`、`modes/`、`plugins/`、`skills/`、`tools/` 和 `themes/`。为了向后兼容,也支持单数名称(例如 `agent/`)。
:::
---
### 远程
组织可以通过 `.well-known/opencode` 端点提供默认配置。当您使用支持该功能的提供商进行身份验证时,会自动获取此配置。
远程配置最先加载,作为基础层。所有其他配置源(全局、项目)都可以覆盖这些默认值。
例如,如果您的组织提供了默认禁用的 MCP 服务器:
```json title="Remote config from .well-known/opencode"
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": false
}
}
}
```
您可以在本地配置中启用特定服务器:
```json title="opencode.json"
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}
```
---
### 全局
将全局 OpenCode 配置放在 `~/.config/opencode/opencode.json` 中。使用全局配置来设置用户级别的偏好,例如主题、提供商或快捷键。
全局配置覆盖远程组织默认值。
---
### 项目级
在项目根目录中添加 `opencode.json`。项目配置在标准配置文件中具有最高优先级——它会覆盖全局配置和远程配置。
:::tip
将项目特定配置放在项目的根目录中。
:::
当 OpenCode 启动时,它会在当前目录中查找配置文件,或向上遍历到最近的 Git 目录。
该配置文件也可以安全地提交到 Git 中,并使用与全局配置相同的 Schema。
---
### 自定义路径
使用 `OPENCODE_CONFIG` 环境变量指定自定义配置文件路径。
```bash
export OPENCODE_CONFIG=/path/to/my/custom-config.json
opencode run "Hello world"
```
自定义配置在优先级顺序中位于全局配置和项目配置之间加载。
---
### 自定义目录
使用 `OPENCODE_CONFIG_DIR` 环境变量指定自定义配置目录。该目录会像标准 `.opencode` 目录一样被搜索代理、命令、模式和插件,并且应遵循相同的结构。
```bash
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
opencode run "Hello world"
```
自定义目录在全局配置和 `.opencode` 目录之后加载,因此**可以覆盖**它们的设置。
---
## Schema
配置文件具有在 [**`opencode.ai/config.json`**](https://opencode.ai/config.json) 中定义的 Schema。
您的编辑器应该能够基于该 Schema 进行验证和自动补全。
---
### TUI
您可以通过 `tui` 选项配置 TUI 相关设置。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tui": {
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
},
"diff_style": "auto"
}
}
```
可用选项:
- `scroll_acceleration.enabled` - 启用 macOS 风格的滚动加速。**优先于 `scroll_speed`。**
- `scroll_speed` - 自定义滚动速度倍率(默认值:`3`,最小值:`1`)。如果 `scroll_acceleration.enabled` 为 `true`,则忽略此选项。
- `diff_style` - 控制差异渲染方式。`"auto"` 根据终端宽度自适应,`"stacked"` 始终显示单列。
[在此了解更多关于 TUI 的信息](/docs/tui)。
---
### 服务器
您可以通过 `server` 选项为 `opencode serve` 和 `opencode web` 命令配置服务器设置。
```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` 启用且未设置主机名时,默认为 `0.0.0.0`。
- `mdns` - 启用 mDNS 服务发现。这允许网络上的其他设备发现您的 OpenCode 服务器。
- `mdnsDomain` - mDNS 服务的自定义域名。默认为 `opencode.local`。适用于在同一网络上运行多个实例的场景。
- `cors` - 从基于浏览器的客户端使用 HTTP 服务器时允许 CORS 的额外来源。值必须是完整的来源(协议 + 主机 + 可选端口),例如 `https://app.example.com`。
[在此了解更多关于服务器的信息](/docs/server)。
---
### 工具
您可以通过 `tools` 选项管理 LLM 可以使用的工具。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tools": {
"write": false,
"bash": false
}
}
```
[在此了解更多关于工具的信息](/docs/tools)。
---
### 模型
您可以通过 `provider`、`model` 和 `small_model` 选项在 OpenCode 配置中设置要使用的提供商和模型。
```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` 选项为标题生成等轻量级任务配置单独的模型。默认情况下,如果您的提供商有更便宜的模型可用,OpenCode 会尝试使用该模型,否则会回退到您的主模型。
提供商选项可以包括 `timeout` 和 `setCacheKey`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"anthropic": {
"options": {
"timeout": 600000,
"setCacheKey": true
}
}
}
}
```
- `timeout` - 请求超时时间,单位为毫秒(默认值:300000)。设置为 `false` 可禁用超时。
- `setCacheKey` - 确保始终为指定提供商设置缓存键。
您还可以配置[本地模型](/docs/models#local)。[了解更多](/docs/models)。
---
#### 提供商特定选项
一些提供商支持除通用 `timeout` 和 `apiKey` 设置之外的额外配置选项。
##### Amazon Bedrock
Amazon Bedrock 支持 AWS 特定配置:
```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` 环境变量或 `us-east-1`)
- `profile` - 来自 `~/.aws/credentials` 的 AWS 命名配置文件(默认为 `AWS_PROFILE` 环境变量)
- `endpoint` - VPC 端点的自定义端点 URL。这是通用 `baseURL` 选项使用 AWS 特定术语的别名。如果两者都指定,`endpoint` 优先。
:::note
Bearer Token(`AWS_BEARER_TOKEN_BEDROCK` 或 `/connect`)优先于基于配置文件的身份验证。详情请参见[身份验证优先级](/docs/providers#authentication-precedence)。
:::
[了解更多关于 Amazon Bedrock 配置的信息](/docs/providers#amazon-bedrock)。
---
### 主题
您可以通过 OpenCode 配置中的 `theme` 选项设置要使用的主题。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"theme": ""
}
```
[在此了解更多](/docs/themes)。
---
### 代理
您可以通过 `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 文件定义代理。[在此了解更多](/docs/agents)。
---
### 默认代理
您可以使用 `default_agent` 选项设置默认代理。当未明确指定代理时,将使用该默认代理。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"default_agent": "plan"
}
```
默认代理必须是主代理(不能是子代理)。可以是内置代理(如 `"build"` 或 `"plan"`),也可以是您定义的[自定义代理](/docs/agents)。如果指定的代理不存在或是子代理,OpenCode 将回退到 `"build"` 并发出警告。
此设置适用于所有界面:TUI、CLI(`opencode run`)、桌面应用和 GitHub Action。
---
### 分享
您可以通过 `share` 选项配置[分享](/docs/share)功能。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"share": "manual"
}
```
该选项接受:
- `"manual"` - 允许通过命令手动分享(默认)
- `"auto"` - 自动分享新会话
- `"disabled"` - 完全禁用分享
默认情况下,分享设置为手动模式,您需要使用 `/share` 命令显式分享会话。
---
### 命令
您可以通过 `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 文件定义命令。[在此了解更多](/docs/commands)。
---
### 快捷键
您可以通过 `keybinds` 选项自定义快捷键。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"keybinds": {}
}
```
[在此了解更多](/docs/keybinds)。
---
### 自动更新
OpenCode 启动时会自动下载新版本。您可以使用 `autoupdate` 选项禁用此功能。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"autoupdate": false
}
```
如果您不想自动更新但希望在新版本可用时收到通知,可将 `autoupdate` 设置为 `"notify"`。
请注意,此功能仅在未通过 Homebrew 等包管理器安装时有效。
---
### 格式化程序
您可以通过 `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"]
}
}
}
```
[在此了解更多关于格式化程序的信息](/docs/formatters)。
---
### 权限
默认情况下,OpenCode **允许所有操作**,无需明确批准。您可以使用 `permission` 选项更改此行为。
例如,要让 `edit` 和 `bash` 工具需要用户确认:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "ask",
"bash": "ask"
}
}
```
[在此了解更多关于权限的信息](/docs/permissions)。
---
### 压缩
您可以通过 `compaction` 选项控制上下文压缩行为。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"compaction": {
"auto": true,
"prune": false,
"reserved": 10000
}
}
```
- `auto` - 当上下文已满时自动压缩会话(默认值:`true`)。
- `prune` - 删除旧的工具输出以节省 Token(默认值:`false`)。
- `reserved` - 压缩时的 Token 缓冲区。保留足够的窗口以避免压缩过程中溢出。
---
### 文件监视器
您可以通过 `watcher` 选项配置文件监视器的忽略模式。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"watcher": {
"ignore": ["node_modules/**", "dist/**", ".git/**"]
}
}
```
模式遵循 glob 语法。使用此选项可以从文件监视中排除频繁变动的目录。
---
### MCP 服务器
您可以通过 `mcp` 选项配置要使用的 MCP 服务器。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {}
}
```
[在此了解更多](/docs/mcp-servers)。
---
### 插件
[插件](/docs/plugins)通过自定义工具、钩子和集成来扩展 OpenCode。
将插件文件放置在 `.opencode/plugins/` 或 `~/.config/opencode/plugins/` 中。您还可以通过 `plugin` 选项从 npm 加载插件。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
}
```
[在此了解更多](/docs/plugins)。
---
### 指令
您可以通过 `instructions` 选项为所使用的模型配置指令。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
}
```
该选项接受指令文件路径和 glob 模式的数组。[在此了解更多关于规则的信息](/docs/rules)。
---
### 禁用提供商
您可以通过 `disabled_providers` 选项禁用自动加载的提供商。当您希望阻止某些提供商被加载(即使其凭据可用)时,此选项非常有用。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"disabled_providers": ["openai", "gemini"]
}
```
:::note
`disabled_providers` 优先于 `enabled_providers`。
:::
`disabled_providers` 选项接受提供商 ID 的数组。当某个提供商被禁用时:
- 即使设置了环境变量,也不会被加载。
- 即使通过 `/connect` 命令配置了 API 密钥,也不会被加载。
- 该提供商的模型不会出现在模型选择列表中。
---
### 启用提供商
您可以通过 `enabled_providers` 选项指定允许使用的提供商白名单。设置后,仅启用指定的提供商,所有其他提供商将被忽略。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"enabled_providers": ["anthropic", "openai"]
}
```
当您希望限制 OpenCode 仅使用特定提供商,而不是逐一禁用其他提供商时,此选项非常有用。
:::note
`disabled_providers` 优先于 `enabled_providers`。
:::
如果某个提供商同时出现在 `enabled_providers` 和 `disabled_providers` 中,为了向后兼容,`disabled_providers` 优先。
---
### 实验性功能
`experimental` 键包含正在积极开发中的选项。
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"experimental": {}
}
```
:::caution
实验性选项不稳定。它们可能会在不另行通知的情况下被更改或移除。
:::
---
## 变量
您可以在配置文件中使用变量替换来引用环境变量和文件内容。
---
### 环境变量
使用 `{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}"
}
}
}
}
```
如果环境变量未设置,它将被替换为空字符串。
---
### 文件
使用 `{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}"
}
}
}
}
```
文件路径可以是:
- 相对于配置文件所在目录的路径
- 以 `/` 或 `~` 开头的绝对路径
这些功能适用于:
- 将 API 密钥等敏感数据保存在单独的文件中。
- 引入大型指令文件而不会使配置变得杂乱。
- 在多个配置文件之间共享通用配置片段。
|