{
  "models": {
    "mode": "merge",
    "providers": {
      "opencode-hw": {
        "baseUrl": "${OPENCODE_HW_BASE_URL}",
        "apiKey": "${OPENCODE_HW_API_KEY}",
        "api": "openai-completions",
        "models": [
          {
            "id": "${OPENCODE_HW_MODEL}",
            "name": "Huawei GLM",
            "maxTokens": 32768,
            "contextTokens": 96800
          },
          {
            "id": "${OPENCODE_HW_FALLBACK_MODEL}",
            "name": "Huawei fallback",
            "maxTokens": 32768,
            "contextTokens": 96800
          }
        ]
      },
      "opencode-bd": {
        "baseUrl": "${OPENCODE_BD_BASE_URL}",
        "apiKey": "${OPENCODE_BD_API_KEY}",
        "api": "openai-completions",
        "models": [
          {
            "id": "${OPENCODE_BD_MODEL}",
            "name": "BytePlus GLM"
          }
        ]
      }
    }
  },
  "agents": {
    "ownership": "explicit",
    "defaults": {
      "heartbeat": {
        "every": "0m"
      },
      "compaction": {
        "thinkingLevel": "off",
        "timeoutSeconds": 300
      }
    },
    "entries": {
      "miegyver": {
        "name": "Miegyver",
        "workspace": "/data/workspaces/miegyver",
        "model": {
          "primary": "${MIEGYVER_MODEL}",
          "fallbacks": [
            "${MIEGYVER_FALLBACK_MODEL}"
          ]
        }
      },
      "thinker": {
        "name": "Thinker",
        "workspace": "/data/workspaces/thinker",
        "model": {
          "primary": "${THINKER_MODEL}",
          "fallbacks": [
            "${THINKER_FALLBACK_MODEL}"
          ]
        }
      }
    }
  },
  "gateway": {
    "mode": "local",
    "port": 18789,
    "bind": "lan",
    "auth": {
      "mode": "token",
      "token": "${OPENCLAW_GATEWAY_TOKEN}"
    },
    "controlUi": {
      "enabled": false
    }
  },
  "memory": {
    "search": {
      "provider": "none"
    }
  },
  "session": {
    "dmScope": "per-channel-peer"
  },
  "tools": {
    "sessions": {
      "visibility": "agent"
    },
    "allow": [
      "read",
      "ls",
      "tool_search",
      "tool_describe",
      "tool_call",
      "platform-kb__list_kb_sections",
      "platform-kb__get_kb_entry",
      "platform-kb__search_kb",
      "grafana-mcp__list_datasources",
      "grafana-mcp__search_dashboards",
      "grafana-mcp__get_dashboard_summary",
      "grafana-mcp__get_dashboard_panel_queries",
      "grafana-mcp__list_prometheus_metric_names",
      "grafana-mcp__list_prometheus_metric_metadata",
      "grafana-mcp__list_prometheus_label_names",
      "grafana-mcp__query_prometheus",
      "github-mcp__get_repository",
      "github-mcp__list_branches",
      "github-mcp__get_file_contents",
      "github-mcp__list_commits",
      "github-mcp__list_issues",
      "github-mcp__get_issue",
      "github-mcp__list_pull_requests",
      "github-mcp__get_pull_request",
      "github-mcp__get_pull_request_files",
      "github-mcp__list_workflows",
      "github-mcp__list_workflow_runs",
      "github-mcp__get_workflow_run",
      "github-mcp__list_workflow_run_jobs",
      "github-mcp__search_code",
      "github-mcp__search_issues",
      "github-mcp__search_repositories",
      "platform-kb__create_kb_entry",
      "platform-kb__update_kb_entry"
    ],
    "deny": [
      "exec",
      "process",
      "secrets",
      "write",
      "edit",
      "apply_patch",
      "sessions_spawn",
      "sessions_send",
      "nodes",
      "gateway",
      "web_fetch",
      "browser",
      "message",
      "automations",
      "cron"
    ],
    "exec": {
      "mode": "deny"
    },
    "fs": {
      "workspaceOnly": true
    }
  },
  "mcp": {
    "servers": {
      "platform-kb": {
        "enabled": true,
        "transport": "streamable-http",
        "url": "${PLATFORM_KB_MCP_URL}",
        "headers": {
          "Authorization": "Bearer ${PLATFORM_KB_MCP_TOKEN}"
        },
        "toolFilter": {
          "include": [
            "list_kb_sections",
            "get_kb_entry",
            "search_kb",
            "create_kb_entry",
            "update_kb_entry"
          ]
        }
      },
      "grafana-mcp": {
        "enabled": true,
        "transport": "streamable-http",
        "url": "${GRAFANA_MCP_URL}",
        "headers": {
          "X-Grafana-URL": "${GRAFANA_ABC_URL}",
          "Authorization": "Bearer ${GRAFANA_MCP_TOKEN}"
        },
        "toolFilter": {
          "include": [
            "list_datasources",
            "search_dashboards",
            "get_dashboard_summary",
            "get_dashboard_panel_queries",
            "list_prometheus_metric_names",
            "list_prometheus_metric_metadata",
            "list_prometheus_label_names",
            "query_prometheus"
          ]
        }
      },
      "github-mcp": {
        "enabled": true,
        "transport": "sse",
        "url": "${GITHUB_MCP_URL}",
        "toolFilter": {
          "include": [
            "get_repository",
            "list_branches",
            "get_file_contents",
            "list_commits",
            "list_issues",
            "get_issue",
            "list_pull_requests",
            "get_pull_request",
            "get_pull_request_files",
            "list_workflows",
            "list_workflow_runs",
            "get_workflow_run",
            "list_workflow_run_jobs",
            "search_code",
            "search_issues",
            "search_repositories"
          ]
        }
      }
    }
  }
}
