{
  "$schema": "https://opencode.ai/config.json",
  "snapshot": false,
  "default_agent": "investigator",
  "permission": {
    "skill": {
      "*": "allow"
    }
  },
  "agent": {
    "investigator": {
      "description": "Investibook user-facing assistant. Handles conversation, workspace file lookups, ad-hoc data queries, and clear-cut diagnosis conclusions directly; dispatches evidence-agent for collection and diagnosis-analyst for hard or low-confidence analysis, answering from their file outputs.",
      "mode": "primary",
      "prompt": "{file:./investibook/agents/investigator.md}",
      "permission": {
        "task": {
          "*": "deny",
          "evidence-agent": "allow",
          "diagnosis-analyst": "allow",
          "code-investigator": "ask"
        }
      }
    },
    "evidence-agent": {
      "description": "Collects and normalizes TiDB diagnosis evidence from workspace sources, Clinic/O11Y/Jira/DevOps, logs, metrics, slow queries, TopSQL, events, and diagnostic files. Expensive multi-minute collection: invoke only when the workspace does not already contain valid evidence covering the requested cluster and time window, or for an explicitly requested supplemental/deep pass.",
      "mode": "subagent",
      "hidden": true,
      "prompt": "{file:./investibook/agents/evidence-agent.md}",
      "permission": {
        "read": "allow",
        "grep": "allow",
        "glob": "allow",
        "bash": "allow",
        "edit": "allow",
        "task": "deny",
        "skill": {
          "*": "deny",
          "time-conversion": "allow",
          "tidb-knowledge-base": "allow",
          "diagnosis-overview": "allow",
          "clinic-cli": "allow",
          "alertstore-cli": "allow",
          "jira": "allow",
          "devops": "allow",
          "o11y-data": "allow",
          "o11y-metrics-api": "allow",
          "github-issue-search": "allow"
        }
      }
    },
    "diagnosis-analyst": {
      "description": "Expensive, high-quality root-cause reasoning for hard diagnoses: ambiguous or conflicting signals, close fault-class candidates, novel symptom families, or component internals needing specialized subskills. Invoke only after cheaper moves (quick raw checks, targeted collection) failed to settle the question; covering evidence must already exist; does not collect data. Not needed for clear-cut matched-hint cases — the investigator concludes those directly.",
      "mode": "subagent",
      "hidden": true,
      "prompt": "{file:./investibook/agents/diagnosis-analyst.md}",
      "permission": {
        "read": "allow",
        "grep": "allow",
        "glob": "allow",
        "edit": "allow",
        "bash": {
          "*": "deny",
          "python3 .opencode/skills/builtin/tidb-clinic-diagnosis/scripts/read_raw_evidence.py*": "allow",
          "python3 .opencode/.all-skills/builtin/tidb-clinic-diagnosis/scripts/read_raw_evidence.py*": "allow",
          "python3 .opencode/skills/builtin/tidb-clinic-diagnosis/scripts/write_analyst_report.py*": "allow",
          "python3 .opencode/.all-skills/builtin/tidb-clinic-diagnosis/scripts/write_analyst_report.py*": "allow",
          "python3 -m json.tool*": "allow"
        },
        "task": "deny",
        "skill": {
          "*": "deny",
          "time-conversion": "allow",
          "tidb-knowledge-base": "allow",
          "diagnosis-overview": "allow",
          "tidb-clinic-diagnosis": "allow",
          "tidb-query-tuning-autox": "allow",
          "transaction-oncall-handbook": "allow",
          "ticdc-health-inspection": "allow",
          "tikv-cdc": "allow"
        }
      }
    },
    "code-investigator": {
      "description": "Fixed-SHA TiDB or TiKV source-mechanism analyst. Explains code behavior and its runtime predictions from an immutable local source context; it never asserts an incident root cause.",
      "mode": "subagent",
      "hidden": true,
      "prompt": "{file:./investibook/agents/code-investigator.md}",
      "permission": {
        "read": "deny",
        "grep": "deny",
        "glob": "deny",
        "edit": "deny",
        "task": "deny",
        "submit_code_artifact": "allow",
        "bash": {
          "*": "deny",
          "/app/.venv/bin/python .opencode/skills/builtin/tidb-code-context/scripts/code_context.py prepare *": "allow",
          "/app/.venv/bin/python .opencode/skills/builtin/tidb-code-context/scripts/code_context.py inspect *": "allow",
          "/app/.venv/bin/python .opencode/skills/builtin/tidb-code-context/scripts/code_context.py inspect-refine *": "allow",
          "/app/.venv/bin/python .opencode/skills/builtin/tidb-code-context/scripts/code_context.py history-log *": "allow",
          "/app/.venv/bin/python .opencode/skills/builtin/tidb-code-context/scripts/code_context.py history-blame *": "allow",
          "/app/.venv/bin/python .opencode/skills/builtin/tidb-code-context/scripts/code_context.py history-show *": "allow",
          "/app/.venv/bin/python .opencode/skills/builtin/tidb-code-context/scripts/code_context.py history-diff *": "allow",
          "/app/.venv/bin/python .opencode/.all-skills/builtin/tidb-code-context/scripts/code_context.py prepare *": "allow",
          "/app/.venv/bin/python .opencode/.all-skills/builtin/tidb-code-context/scripts/code_context.py inspect *": "allow",
          "/app/.venv/bin/python .opencode/.all-skills/builtin/tidb-code-context/scripts/code_context.py inspect-refine *": "allow",
          "/app/.venv/bin/python .opencode/.all-skills/builtin/tidb-code-context/scripts/code_context.py history-log *": "allow",
          "/app/.venv/bin/python .opencode/.all-skills/builtin/tidb-code-context/scripts/code_context.py history-blame *": "allow",
          "/app/.venv/bin/python .opencode/.all-skills/builtin/tidb-code-context/scripts/code_context.py history-show *": "allow",
          "/app/.venv/bin/python .opencode/.all-skills/builtin/tidb-code-context/scripts/code_context.py history-diff *": "allow"
        },
        "skill": {
          "*": "deny",
          "tidb-code-context": "allow"
        }
      }
    },
    "build": {
      "mode": "subagent",
      "hidden": true
    },
    "plan": {
      "mode": "subagent",
      "hidden": true
    }
  }
}
