Skip to content

5.1b 配置进阶

掌握 OpenCode 的全部配置项,打造完全定制化的开发环境。

📝 课程笔记

本课核心知识点整理:

配置进阶学霸笔记

学完你能做什么

  • 配置界面(TUI、快捷键、服务器)
  • 配置行为(分享、压缩、监视器)
  • 配置功能(Provider、工具、权限、Agent、命令、MCP 等)
  • 使用实验性功能
  • 为模型配置自定义 API URL

你现在的困境

  • 想自定义快捷键
  • 想控制 AI 能用哪些工具
  • 想批量禁用某些 MCP 工具
  • 想为模型配置私有部署的 API
  • 想知道还有什么隐藏配置

什么时候用这一招

  • 当你需要:完全掌控 OpenCode 的行为
  • 而且不想:被默认配置限制

界面配置

TUI 配置

json
{
  "tui": {
    "scroll_speed": 3,
    "scroll_acceleration": {
      "enabled": true
    },
    "diff_style": "auto"
  }
}
字段说明默认值
scroll_speed滚动速度倍数(最小 0.001)3
scroll_acceleration.enabled启用 macOS 风格加速滚动false
diff_style差异显示样式"auto"

scroll_acceleration.enabled 优先于 scroll_speed。启用后会忽略 scroll_speed。

diff_style 选项:

  • "auto" - 根据终端宽度自适应
  • "stacked" - 始终单列显示

Keybinds 配置

自定义快捷键:

json
{
  "keybinds": {
    "leader": "ctrl+x",
    "session_new": "<leader>n",
    "session_compact": "<leader>c",
    "model_list": "<leader>m",
    "agent_list": "<leader>a",
    "session_interrupt": "escape"
  }
}

注意:配置键是 keybinds复数!),这与 permission/agent 用单数不同。

Leader 键

大多数快捷键使用 leader 键前缀,避免与终端冲突:

json
{
  "keybinds": {
    "leader": "ctrl+x"
  }
}

默认 ctrl+x。按下 leader 键后再按快捷键,如 ctrl+x 然后 n 创建新会话。

禁用快捷键

将值设为 "none" 禁用:

json
{
  "keybinds": {
    "session_compact": "none"
  }
}

常用快捷键

配置键默认值说明
app_exitctrl+c,ctrl+d,<leader>q退出应用
session_new<leader>n新建会话
session_list<leader>l会话列表
session_interruptescape中断当前操作
session_compact<leader>c压缩会话
model_list<leader>m模型列表
agent_list<leader>aAgent 列表
agent_cycletab切换 Agent
command_listctrl+p命令列表
messages_undo<leader>u撤销消息
messages_redo<leader>r重做消息

完整快捷键列表见 速查/快捷键

Server 配置

配置 opencode serveopencode web 命令的服务器:

json
{
  "server": {
    "port": 4096,
    "hostname": "0.0.0.0",
    "mdns": true,
    "mdnsDomain": "opencode.local",
    "cors": ["http://localhost:5173"]
  }
}
字段说明
port监听端口
hostname监听地址(启用 mdns 时默认 0.0.0.0
mdns启用 mDNS 服务发现(局域网设备可发现)
mdnsDomainmDNS 服务的自定义域名(默认 opencode.local
cors允许的 CORS 来源列表

行为配置

Share 配置

控制会话分享行为:

json
{
  "share": "manual"
}
说明
"manual"手动分享(默认),使用 /share 命令
"auto"自动分享新会话
"disabled"禁用分享功能

Compaction 配置

控制上下文压缩行为:

json
{
  "compaction": {
    "auto": true,
    "prune": true,
    "reserved": 10000
  }
}
字段说明默认值
auto上下文满时自动压缩true
prune删除旧工具输出节省 tokentrue
reserved压缩时的 Token 缓冲区,预留足够窗口避免溢出-

Watcher 配置

配置文件监视器忽略模式:

json
{
  "watcher": {
    "ignore": ["node_modules/**", "dist/**", ".git/**", "*.log"]
  }
}

使用 glob 语法排除噪声目录,减少文件监视开销。

Instructions 配置

指定额外的指令文件(与 AGENTS.md 合并):

json
{
  "instructions": [
    "CONTRIBUTING.md",
    "docs/guidelines.md",
    ".cursor/rules/*.md",
    "packages/*/AGENTS.md"
  ]
}

支持 glob 模式。适用于:

  • 复用现有规则文件(如 Cursor 的 rules)
  • 共享团队编码规范
  • monorepo 中引入子项目规则

功能配置

Provider 配置

配置 AI 提供商及其模型:

jsonc
{
  "provider": {
    "anthropic": {
      "options": {
        "apiKey": "{env:ANTHROPIC_API_KEY}",
        "baseURL": "https://custom-anthropic.example.com/v1",
        "timeout": 600000,
        "setCacheKey": true
      },
      "models": {
        "claude-sonnet-4-5": {
          "provider": {
            "api": "https://custom-api.example.com/v1"
          }
        }
      }
    }
  }
}

Provider 级别选项

字段说明
options.apiKeyAPI 密钥,支持 {env:VAR_NAME} 环境变量替换
options.baseURL自定义 API 基础 URL(适用于代理或私有部署)
options.timeout请求超时时间(毫秒),设为 false 禁用
options.setCacheKey启用 Prompt Caching(仅 Anthropic)
options.enterpriseUrlGitHub Enterprise URL(仅 Copilot)

模型级别自定义 API URL

v1.1.60+ 新增

为单个模型配置独立的 API URL:

jsonc
{
  "provider": {
    "openai": {
      "models": {
        "gpt-4o": {
          "provider": {
            "api": "https://api.custom-openai.com/v1"
          }
        }
      }
    }
  }
}

适用场景:

  • 使用同一 provider 的不同部署(如不同区域的 Azure OpenAI)
  • 测试私有部署的模型
  • 配置模型专用的代理服务器

黑白名单

控制可用模型:

json
{
  "provider": {
    "openai": {
      "whitelist": ["gpt-4o", "gpt-4o-mini"],
      "blacklist": ["gpt-3.5-turbo"]
    }
  }
}
字段说明
whitelist只允许这些模型
blacklist禁用这些模型

whitelistblacklist 互斥,同时存在时 whitelist 优先。

Tools 配置

控制 LLM 可用的工具:

json
{
  "tools": {
    "write": false,
    "bash": false,
    "webfetch": true
  }
}

默认所有工具启用。设为 false 禁用。

通配符

tools 的 key 最终会转换为 permission 规则,因此通配符能通过权限系统间接生效:

json
{
  "tools": {
    "mymcp_*": false
  }
}

禁用名为 mymcp 的 MCP 服务器的所有工具。

推荐直接使用 permission 配置来实现通配符控制,提供更细粒度的 allow/ask/deny 选项。

Tools vs Permission

tools 是遗留配置,会自动转换为 permission

tools 设置等效 permission
"write": false"edit": "deny"
"bash": false"bash": "deny"

推荐使用 permission 配置,提供更细粒度控制(allow/ask/deny)。详见 5.5 权限管控

Permission 配置

细粒度权限控制:

json
{
  "permission": {
    "edit": "ask",
    "bash": {
      "*": "ask",
      "git *": "allow",
      "npm *": "allow",
      "rm *": "deny"
    }
  }
}

注意:配置键是 permission(单数),不是 permissions

详细配置见 5.5 权限管控

Agent 配置

配置 Agent 行为:

jsonc
{
  "agent": {
    "code-reviewer": {
      "description": "代码审查专家",
      "mode": "subagent",
      "model": "anthropic/claude-opus-4-5-thinking",
      "prompt": "你是代码审查专家...",
      
      // 高级配置
      "temperature": 0.3,
      "top_p": 0.9,
      "steps": 50,
      "color": "#FF5733",
      "hidden": true,
      
      // 权限
      "permission": {
        "edit": "deny"
      }
    }
  }
}

注意:配置键是 agent(单数),不是 agents

高级配置字段

字段类型说明
temperaturenumber创造性参数(0-1),越低越确定
top_pnumber核采样参数(0-1)
variantstring默认模型变体(仅在使用该 Agent 配置的模型时生效)
stepsnumber最大迭代步数
colorstring十六进制颜色(如 #FF5733)或主题色名(如 primary
hiddenboolean从 @ 菜单隐藏(仅 subagent 生效)

maxSteps 已废弃,请使用 steps

详细配置见 5.2 自定义 Agent

Command 配置

在配置文件中定义命令:

jsonc
{
  "command": {
    "test": {
      "template": "运行测试并显示失败结果",
      "description": "运行测试",
      "agent": "build",
      "model": "anthropic/claude-opus-4-5-thinking"
    },
    "component": {
      "template": "创建名为 $ARGUMENTS 的 React 组件",
      "description": "创建新组件"
    }
  }
}

注意:配置键是 command(单数),不是 commands

字段说明
template命令模板,$ARGUMENTS 代表参数
description命令描述
agent使用的 Agent
model使用的模型
subtask是否作为子任务运行

详细配置见 5.4 快捷命令

Formatter 配置

配置代码格式化器:

json
{
  "formatter": {
    "prettier": {
      "disabled": true
    },
    "custom-prettier": {
      "command": ["npx", "prettier", "--write", "$FILE"],
      "environment": {
        "NODE_ENV": "development"
      },
      "extensions": [".js", ".ts", ".jsx", ".tsx"]
    }
  }
}

注意:配置键是 formatter(单数),不是 formatters

设为 false 完全禁用格式化:

json
{
  "formatter": false
}

详细配置见 5.18 格式化器

MCP 配置

配置 MCP 服务器:

json
{
  "mcp": {
    "context7": {
      "type": "local",
      "command": ["npx", "-y", "@upstash/context7-mcp"]
    },
    "sentry": {
      "type": "remote",
      "url": "https://mcp.sentry.dev/mcp",
      "headers": {
        "Authorization": "Bearer your-token"
      },
      "oauth": {
        "clientId": "xxx",
        "clientSecret": "xxx",
        "scope": "read write"
      }
    }
  }
}

远程 MCP 服务器支持 headers(自定义请求头)和 oauth(OAuth 认证)。oauth 设为 false 可禁用自动 OAuth 检测。

详细配置见 5.7 MCP 扩展

Plugin 配置

加载 npm 插件:

json
{
  "plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
}

也可以在 .opencode/plugin/ 目录放置本地插件(.ts.js 文件)。

详细配置见 5.12 插件系统

LSP 配置

配置 LSP 服务器:

json
{
  "lsp": {
    "typescript": {
      "disabled": true
    },
    "custom-lsp": {
      "command": ["my-lsp-server", "--stdio"],
      "extensions": [".custom", ".myext"],
      "env": {
        "DEBUG": "true"
      },
      "initialization": {
        "settings": {}
      }
    }
  }
}
字段说明
disabled禁用此 LSP
command启动命令
extensions文件扩展名(自定义 LSP 必填)
env环境变量
initializationLSP 初始化配置

设为 false 禁用所有 LSP:

json
{
  "lsp": false
}

详细配置见 5.19 LSP 服务器


实验性功能

json
{
  "experimental": {
    "batch_tool": true,
    "openTelemetry": true,
    "continue_loop_on_deny": false
  }
}
字段说明
batch_tool启用批量工具
openTelemetry启用 OpenTelemetry 追踪
disable_paste_summary禁用粘贴大段文本时的自动摘要
primary_tools仅限 Primary Agent 使用的工具列表
continue_loop_on_deny工具被拒绝时继续循环
mcp_timeoutMCP 请求的全局超时时间(毫秒)

⚠️ 实验性功能可能随时变更或移除。

关于 Hook(事件钩子)

Hook 功能通过插件系统实现,不是 experimental 配置。详见 5.12c Hooks 机制


完整配置示例

jsonc
{
  "$schema": "https://opencode.ai/config.json",
  
  // === 模型 ===
  "model": "anthropic/claude-opus-4-5-thinking",
  "small_model": "anthropic/claude-haiku-4-5",
  "default_agent": "build",
  
  // === Provider ===
  "provider": {
    "anthropic": {
      "options": {
        "apiKey": "{env:ANTHROPIC_API_KEY}",
        "timeout": 600000,
        "setCacheKey": true
      }
    },
    "openai": {
      "models": {
        "gpt-4o": {
          "provider": {
            "api": "https://custom-api.example.com/v1"
          }
        }
      }
    }
  },
  "disabled_providers": ["gemini"],
  
  // === 用户 ===
  "username": "开发者",
  
  // === 界面 ===
  "theme": "catppuccin",
  "tui": {
    "scroll_speed": 3,
    "diff_style": "auto"
  },
  "keybinds": {
    "leader": "ctrl+x",
    "session_new": "<leader>n"
  },
  
  // === 服务器 ===
  "server": {
    "port": 4096,
    "hostname": "localhost"
  },
  
  // === 行为 ===
  "share": "manual",
  "compaction": {
    "auto": true,
    "prune": true
  },
  "autoupdate": true,
  "watcher": {
    "ignore": ["node_modules/**", "dist/**"]
  },
  "instructions": ["CONTRIBUTING.md"],
  
  // === 权限 ===
  "permission": {
    "edit": "ask",
    "bash": {
      "*": "ask",
      "git *": "allow"
    }
  },
  
  // === Agent ===
  "agent": {
    "code-reviewer": {
      "description": "代码审查专家",
      "mode": "subagent",
      "temperature": 0.2,
      "permission": {
        "edit": "deny"
      }
    }
  },
  
  // === 命令 ===
  "command": {
    "test": {
      "template": "运行测试",
      "description": "运行测试套件"
    }
  },
  
  // === 格式化器 ===
  "formatter": {
    "prettier": {
      "disabled": false
    }
  },
  
  // === MCP ===
  "mcp": {
    "context7": {
      "type": "local",
      "command": ["npx", "-y", "@upstash/context7-mcp"]
    }
  }
}

踩坑提醒

现象原因解决
用了 keybind键名错误应为 keybinds复数
用了 permissions键名错误应为 permission(单数)
用了 agents键名错误应为 agent(单数)
用了 commands键名错误应为 command(单数)
用了 formatters键名错误应为 formatter(单数)
用了 tui.theme键名错误应直接用 theme
tools 配置不生效遗留配置推荐使用 permission
baseURL 不生效位置错误应在 provider.options.baseURL 而非顶层
模型 API URL 不生效字段错误模型级别用 provider.api,Provider 级别用 options.baseURL
快捷键冲突与终端冲突使用 leader 键前缀
LSP 自定义失败缺少 extensions自定义 LSP 必须指定 extensions

配置键名速查表

配置项正确键名常见错误
Providerproviderproviders
Permissionpermissionpermissions
Agentagentagents
Commandcommandcommands
Formatterformatterformatters
Keybindskeybindskeybind
Themethemetui.theme

本课小结

你学会了:

  1. 界面配置:TUI、快捷键、服务器
  2. 行为配置:分享、压缩、监视器、指令文件
  3. 功能配置:Provider、工具、权限、Agent、命令、格式化器、MCP、插件、LSP
  4. 实验性功能:批量工具、OpenTelemetry 等
  5. 自定义模型 API URL(v1.1.60+)

相关资源


下一课预告

下一课我们将学习如何创建自定义 Agent。