Config
OpenCode の JSON 設定を使用します。
JSON 設定ファイルを使って OpenCode を設定できます。
Format
OpenCode は JSON と JSONC(コメント付き JSON)の両方の形式をサポートしています。
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-5",
"autoupdate": true,
"server": {
"port": 4096,
},
}Locations
設定はいくつかの異なる場所に配置でき、それぞれ異なる優先順位を持ちます。
注記: 設定ファイルは置き換えられるのではなく、マージされます。
設定ファイルは置き換えられるのではなく、マージされます。次の設定場所からの設定が結合されます。後の設定は、競合するキーについてのみ前の設定をオーバーライドします。すべての設定からの競合しない設定は保持されます。
例えば、グローバル設定で autoupdate: true を設定し、プロジェクト設定で model: "anthropic/claude-sonnet-4-5" を設定した場合、最終的な設定には両方の設定が含まれます。
Precedence order
設定ソースは次の順序で読み込まれます(後のソースが前のソースをオーバーライドします):
- リモート設定(
.well-known/opencodeから)- 組織のデフォルト - グローバル設定(
~/.config/opencode/opencode.json)- ユーザーの好み - カスタム設定(
OPENCODE_CONFIG環境変数)- カスタムオーバーライド - プロジェクト設定(プロジェクト内の
opencode.json)- プロジェクト固有の設定 .opencodeディレクトリ - エージェント、コマンド、プラグイン- インライン設定(
OPENCODE_CONFIG_CONTENT環境変数)- ランタイムのオーバーライド - 管理対象の設定ファイル(macOS では
/Library/Application Support/opencode/)- 管理者が制御 - macOS 管理対象環境設定(MDM 経由の
.mobileconfig)- 最高優先度、ユーザーによるオーバーライド不可
これは、プロジェクト設定がグローバルのデフォルトをオーバーライドでき、グローバル設定がリモートの組織のデフォルトをオーバーライドできることを意味します。管理対象設定はすべてをオーバーライドします。
注記:
.opencodeと~/.config/opencodeディレクトリは、サブディレクトリに複数形の名前を使用します:agents/、commands/、modes/、plugins/、skills/、tools/、themes/。後方互換性のため、単数形の名前(例:agent/)もサポートされています。
Remote
組織は、.well-known/opencode エンドポイントを通じてデフォルトの設定を提供できます。これは、それをサポートするプロバイダーで認証したときに自動的にフェッチされます。
リモート設定が最初に読み込まれ、ベースレイヤーとして機能します。他のすべての設定ソース(グローバル、プロジェクト)が、これらのデフォルトをオーバーライドできます。
例えば、組織がデフォルトで無効になっている MCP サーバーを提供している場合:
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": false
}
}
}ローカル設定で特定のサーバーを有効にできます:
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}Global
グローバルな OpenCode 設定を ~/.config/opencode/opencode.json に配置します。プロバイダー、モデル、権限など、ユーザー全体のサーバー/ランタイムの好みにはグローバル設定を使用します。
TUI 固有の設定には、~/.config/opencode/tui.json を使用します。
グローバル設定は、リモートの組織のデフォルトをオーバーライドします。
Per project
プロジェクトのルートに opencode.json を追加します。プロジェクト設定は、標準の設定ファイルの中で最も高い優先順位を持ち、グローバル設定とリモート設定の両方をオーバーライドします。
プロジェクト固有の TUI 設定には、その横に tui.json を追加します。
ヒント: プロジェクト固有の設定はプロジェクトのルートに配置してください。
OpenCode は起動時に、現在のディレクトリで設定ファイルを探すか、最も近い Git ディレクトリまで上にたどります。
これも安全に Git にコミットでき、グローバルなものと同じスキーマを使用します。
Custom path
OPENCODE_CONFIG 環境変数を使って、カスタムの設定ファイルパスを指定します。
export OPENCODE_CONFIG=/path/to/my/custom-config.json
opencode run "Hello world"カスタム設定は、優先順位においてグローバル設定とプロジェクト設定の間で読み込まれます。
Custom directory
OPENCODE_CONFIG_DIR 環境変数を使って、カスタムの設定ディレクトリを指定します。このディレクトリは、標準の .opencode ディレクトリと同様に、エージェント、コマンド、モード、プラグインが検索され、同じ構造に従う必要があります。
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
opencode run "Hello world"カスタムディレクトリはグローバル設定と .opencode ディレクトリの後に読み込まれるため、それらの設定をオーバーライドできます。
Managed settings
組織は、ユーザーがオーバーライドできない設定を強制できます。管理対象設定は、最高の優先度ティアで読み込まれます。
File-based
システムの管理対象設定ディレクトリに opencode.json または opencode.jsonc ファイルを置きます:
| Platform | Path |
|---|---|
| macOS | /Library/Application Support/opencode/ |
| Linux | /etc/opencode/ |
| Windows | %ProgramData%\opencode |
これらのディレクトリへの書き込みには管理者/root のアクセス権が必要なため、ユーザーは変更できません。
macOS managed preferences
macOS では、OpenCode は ai.opencode.managed 環境設定ドメインから管理対象環境設定を読み取ります。MDM(Jamf、Kandji、FleetDM)経由で .mobileconfig をデプロイすると、設定が自動的に強制されます。
OpenCode は次のパスを確認します:
/Library/Managed Preferences/<user>/ai.opencode.managed.plist/Library/Managed Preferences/ai.opencode.managed.plist
plist のキーは opencode.json のフィールドに直接マッピングされます。MDM のメタデータキー(PayloadUUID、PayloadType など)は自動的に除去されます。
.mobileconfig の作成
ai.opencode.managed PayloadType を使用します。OpenCode の設定キーはペイロード dict に直接入れます:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>ai.opencode.managed</string>
<key>PayloadIdentifier</key>
<string>com.example.opencode.config</string>
<key>PayloadUUID</key>
<string>GENERATE-YOUR-OWN-UUID</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>share</key>
<string>disabled</string>
<key>server</key>
<dict>
<key>hostname</key>
<string>127.0.0.1</string>
</dict>
<key>permission</key>
<dict>
<key>*</key>
<string>ask</string>
<key>bash</key>
<dict>
<key>*</key>
<string>ask</string>
<key>rm -rf *</key>
<string>deny</string>
</dict>
</dict>
</dict>
</array>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadIdentifier</key>
<string>com.example.opencode</string>
<key>PayloadUUID</key>
<string>GENERATE-YOUR-OWN-UUID</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>uuidgen で一意の UUID を生成します。組織の要件に合わせて設定をカスタマイズしてください。
MDM 経由のデプロイ
- Jamf Pro: Computers > Configuration Profiles > Upload > 対象のデバイスまたはスマートグループにスコープを設定
- FleetDM:
.mobileconfigを gitops リポジトリのmdm.macos_settings.custom_settingsの下に追加し、fleetctl applyを実行
デバイスでの検証
.mobileconfig をダブルクリックして、テスト用にローカルにインストールします(System Settings > Privacy & Security > Profiles に表示されます)。その後、次を実行します:
opencode debug configすべての管理対象環境設定キーが解決済みの設定に表示され、ユーザーやプロジェクトの設定でオーバーライドできません。
Schema
サーバー/ランタイムの設定スキーマは opencode.ai/config.json (opens in a new tab) で定義されています。
TUI 設定は opencode.ai/tui.json (opens in a new tab) を使用します。
エディタは、スキーマに基づいて検証とオートコンプリートを行えるはずです。
TUI
TUI 固有の設定には、専用の tui.json(または tui.jsonc)ファイルを使用します。
{
"$schema": "https://opencode.ai/tui.json",
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
},
"diff_style": "auto",
"mouse": true,
"attention": {
"enabled": true,
"notifications": true,
"sound": true,
"volume": 0.4
}
}カスタムの TUI 設定ファイルを指すには、OPENCODE_TUI_CONFIG を使用します。
attention.enabled を設定して、TUI のデスクトップ通知とサウンドをオンにします。TUI attention を参照してください。
opencode.json 内のレガシーな theme、keybinds、tui キーは非推奨であり、可能な場合は自動的に移行されます。
Server
server オプションを通じて、opencode serve と opencode web コマンドのサーバー設定を構成できます。
{
"$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。
Shell
shell オプションを使って、インタラクティブなターミナルに使うシェルを設定できます。互換性のあるシェルは、エージェントのツール呼び出しにも使われます。
{
"$schema": "https://opencode.ai/config.json",
"shell": "pwsh"
}指定されない場合、OpenCode はお使いの OS に基づいて、妥当なデフォルトを自動的に検出して使用します(例えば、Windows では pwsh または cmd.exe、macOS/Linux では /bin/zsh または /bin/bash)。絶対パスまたは短い名前を指定できます。
Tools
tools オプションを通じて、LLM が使用できるツールを管理できます。
{
"$schema": "https://opencode.ai/config.json",
"tools": {
"write": false,
"bash": false
}
}Models
provider、model、small_model オプションを通じて、OpenCode 設定で使いたいプロバイダーとモデルを構成できます。
{
"$schema": "https://opencode.ai/config.json",
"provider": {},
"model": "anthropic/claude-sonnet-4-5",
"small_model": "anthropic/claude-haiku-4-5"
}small_model オプションは、タイトル生成のような軽量なタスク用に別のモデルを構成します。デフォルトでは、OpenCode はプロバイダーから利用可能であればより安価なモデルを使おうとし、そうでなければメインモデルにフォールバックします。
プロバイダーオプションには timeout、chunkTimeout、setCacheKey を含められます:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"anthropic": {
"options": {
"timeout": 600000,
"chunkTimeout": 30000,
"setCacheKey": true
}
}
}
}timeout- リクエストのタイムアウト(ミリ秒、デフォルト: 300000)。無効にするにはfalseを設定します。chunkTimeout- ストリーミングレスポンスのチャンク間のタイムアウト(ミリ秒)。時間内にチャンクが到着しない場合、リクエストは中止されます。setCacheKey- 指定されたプロバイダーに対して、常にキャッシュキーが設定されるようにします。
Image attachments
OpenCode は、画像の添付をモデルに送信する前に正規化します。デフォルトでは、画像が 2000x2000 ピクセルまたは 5242880 base64 バイトを超える場合にリサイズされます。
attachment.image オプションで画像添付の制限を構成します:
{
"$schema": "https://opencode.ai/config.json",
"attachment": {
"image": {
"auto_resize": true,
"max_width": 2000,
"max_height": 2000,
"max_base64_bytes": 5242880
}
}
}auto_resize- プロバイダーへのリクエスト前に、構成された制限を超える画像をリサイズします。代わりにサイズ超過の画像を拒否するにはfalseを設定します。max_width- リサイズまたは拒否される前の最大画像幅(ピクセル)。max_height- リサイズまたは拒否される前の最大画像高さ(ピクセル)。max_base64_bytes- エンコードされた画像ペイロードの最大サイズ。これは元のファイルサイズではなく、base64 ペイロードのサイズです。
リサイズ後も画像が収まらない場合、OpenCode はサイズ超過のツール結果画像を省略するか、サイズ超過のユーザー提供画像を画像サイズエラーで失敗させます。
Provider-Specific Options
一部のプロバイダーは、汎用の timeout と apiKey 設定を超える追加の構成オプションをサポートしています。
Amazon Bedrock
Amazon Bedrock は AWS 固有の構成をサポートしています:
{
"$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。これは、AWS 固有の用語を使った汎用baseURLオプションのエイリアスです。両方が指定された場合、endpointが優先されます。
注記: ベアラートークン(
AWS_BEARER_TOKEN_BEDROCKまたは/connect)は、プロファイルベースの認証よりも優先されます。詳細については認証の優先順位を参照してください。
Amazon Bedrock の構成について詳しくはこちら。
Themes
tui.json で UI テーマを設定します。
{
"$schema": "https://opencode.ai/tui.json",
"theme": "tokyonight"
}Agents
agent オプションを通じて、特定のタスク用の専用エージェントを構成できます。
{
"$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 ファイルを使ってエージェントを定義することもできます。詳しくはこちら。
Default agent
default_agent オプションを使って、デフォルトのエージェントを設定できます。これは、どのエージェントも明示的に指定されていないときに使われるエージェントを決定します。
{
"$schema": "https://opencode.ai/config.json",
"default_agent": "plan"
}デフォルトのエージェントは、プライマリエージェント(サブエージェントではない)である必要があります。これは "build" や "plan" のような組み込みエージェント、または定義したカスタムエージェントにできます。指定されたエージェントが存在しないかサブエージェントである場合、OpenCode は警告とともに "build" にフォールバックします。
この設定は、すべてのインターフェースに適用されます: TUI、CLI(opencode run)、デスクトップアプリ、GitHub Action。
Sharing
share オプションを通じて、共有機能を構成できます。
{
"$schema": "https://opencode.ai/config.json",
"share": "manual"
}これは次の値を取ります:
"manual"- コマンドによる手動共有を許可します(デフォルト)"auto"- 新しい会話を自動的に共有します"disabled"- 共有を完全に無効にします
デフォルトでは、共有は手動モードに設定されており、/share コマンドを使って明示的に会話を共有する必要があります。
Commands
command オプションを通じて、繰り返し作業のためのカスタムコマンドを構成できます。
{
"$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 ファイルを使ってコマンドを定義することもできます。詳しくはこちら。
Keybinds
tui.json の keybinds で TUI のキーボードショートカットをカスタマイズします。
{
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
"command_list": "ctrl+p"
}
}keybinds は組み込みのデフォルトとマージされるため、変更したいショートカットだけを設定すれば済みます。
Snapshot
OpenCode はスナップショットを使って、エージェントの操作中のファイルの変更を追跡し、セッション内で変更を取り消したり元に戻したりできるようにします。スナップショットはデフォルトで有効です。
大きなリポジトリや多数のサブモジュールを持つプロジェクトでは、スナップショットシステムが内部 git リポジトリを使ってすべての変更を追跡するため、インデックス作成が遅くなり、ディスク使用量が大きくなることがあります。snapshot オプションを使ってスナップショットを無効にできます。
{
"$schema": "https://opencode.ai/config.json",
"snapshot": false
}スナップショットを無効にすると、エージェントが行った変更を UI を通じてロールバックできなくなることに注意してください。
Autoupdate
OpenCode は起動時に、新しい更新を自動的にダウンロードします。これを autoupdate オプションで無効にできます。
{
"$schema": "https://opencode.ai/config.json",
"autoupdate": false
}更新は望まないが、新しいバージョンが利用可能になったときに通知を受け取りたい場合は、autoupdate を "notify" に設定します。
これは、Homebrew のようなパッケージマネージャーを使ってインストールされていない場合にのみ機能することに注意してください。
Formatters
formatter オプションを通じて、コードフォーマッターを有効化・構成できます。フォーマッターを無効のままにするには、これを省略します。
{
"$schema": "https://opencode.ai/config.json",
"formatter": true
}組み込みフォーマッターを有効にしたまま、オーバーライドやカスタムフォーマッターを設定するには、オブジェクトを使用します。
{
"$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"]
}
}
}LSP Servers
lsp オプションを通じて、LSP サーバーを有効化・構成できます。LSP を無効のままにするには、これを省略します。
{
"$schema": "https://opencode.ai/config.json",
"lsp": true
}組み込みサーバーを有効にしたまま、オーバーライドやカスタム LSP サーバーを設定するには、オブジェクトを使用します。
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}Permissions
デフォルトでは、opencode は明示的な承認を必要とせずにすべての操作を許可します。これを permission オプションで変更できます。
例えば、edit と bash ツールがユーザーの承認を必要とするようにするには:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "ask",
"bash": "ask"
}
}Compaction
compaction オプションを通じて、コンテキストの圧縮動作を制御できます。
{
"$schema": "https://opencode.ai/config.json",
"compaction": {
"auto": true,
"prune": true,
"reserved": 10000
}
}auto- コンテキストがいっぱいになったときにセッションを自動的に圧縮します(デフォルト:true)。prune- トークンを節約するために古いツール出力を削除します(デフォルト:true)。reserved- 圧縮のためのトークンバッファ。圧縮中のオーバーフローを避けるために十分なウィンドウを残します。
Watcher
watcher オプションを通じて、ファイルウォッチャーの無視パターンを構成できます。
{
"$schema": "https://opencode.ai/config.json",
"watcher": {
"ignore": ["node_modules/**", "dist/**", ".git/**"]
}
}パターンは glob 構文に従います。これを使って、ファイル監視からノイズの多いディレクトリを除外します。
MCP servers
mcp オプションを通じて、使いたい MCP サーバーを構成できます。
{
"$schema": "https://opencode.ai/config.json",
"mcp": {}
}Plugins
プラグインは、カスタムツール、フック、連携で OpenCode を拡張します。
プラグインファイルを .opencode/plugins/ または ~/.config/opencode/plugins/ に配置します。plugin オプションを通じて npm からプラグインを読み込むこともできます。
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
}Instructions
instructions オプションを通じて、使用しているモデルへの指示を構成できます。
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
}これは、指示ファイルへのパスと glob パターンの配列を取ります。ルールについて詳しくはこちら。
Disabled providers
disabled_providers オプションを通じて、自動的に読み込まれるプロバイダーを無効にできます。これは、認証情報が利用可能であっても特定のプロバイダーが読み込まれないようにしたい場合に便利です。
{
"$schema": "https://opencode.ai/config.json",
"disabled_providers": ["openai", "gemini"]
}注記:
disabled_providersはenabled_providersよりも優先されます。
disabled_providers オプションは、プロバイダー ID の配列を受け付けます。プロバイダーが無効にされると:
- 環境変数が設定されていても読み込まれません。
/connectコマンドを通じて API キーが構成されていても読み込まれません。- そのプロバイダーのモデルはモデル選択リストに表示されません。
Enabled providers
enabled_providers オプションを通じて、プロバイダーの許可リストを指定できます。設定すると、指定されたプロバイダーのみが有効になり、他のすべては無視されます。
{
"$schema": "https://opencode.ai/config.json",
"enabled_providers": ["anthropic", "openai"]
}これは、プロバイダーを 1 つずつ無効にするのではなく、特定のプロバイダーのみを使うように OpenCode を制限したい場合に便利です。
注記:
disabled_providersはenabled_providersよりも優先されます。
プロバイダーが enabled_providers と disabled_providers の両方に表示される場合、後方互換性のために disabled_providers が優先されます。
Experimental
experimental キーには、活発に開発中のオプションが含まれます。
{
"$schema": "https://opencode.ai/config.json",
"experimental": {}
}注意: 実験的なオプションは安定していません。予告なく変更されたり削除されたりすることがあります。
Variables
設定ファイル内で変数置換を使って、環境変数やファイルの内容を参照できます。
Env vars
{env:VARIABLE_NAME} を使って環境変数を置換します:
{
"$schema": "https://opencode.ai/config.json",
"model": "{env:OPENCODE_MODEL}",
"provider": {
"anthropic": {
"models": {},
"options": {
"apiKey": "{env:ANTHROPIC_API_KEY}"
}
}
}
}環境変数が設定されていない場合、空の文字列に置き換えられます。
Files
{file:path/to/file} を使ってファイルの内容を置換します:
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["./custom-instructions.md"],
"provider": {
"openai": {
"options": {
"apiKey": "{file:~/.secrets/openai-key}"
}
}
}
}ファイルパスは次のいずれかにできます:
- 設定ファイルのディレクトリからの相対パス
- または
/や~で始まる絶対パス
これらは次の場合に便利です:
- API キーのような機密データを別のファイルに保管する。
- 設定を散らかさずに大きな指示ファイルをインクルードする。
- 複数の設定ファイル間で共通の設定スニペットを共有する。